Skip to content

Commit ddf0657

Browse files
author
marqs
committed
UI improvements
* allow changing OSD highlight color * enable typing in profile number in respective menu * add menu for fw file selection
1 parent fd50c9b commit ddf0657

File tree

11 files changed

+160
-68
lines changed

11 files changed

+160
-68
lines changed

ip/osd_generator/inc/osd_generator_regs.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,9 @@ typedef union {
3636
uint8_t y_offset:3;
3737
uint8_t x_size:2;
3838
uint8_t y_size:2;
39-
uint8_t border_color:2;
40-
uint32_t osd_rsv:15;
39+
uint8_t border_color:3;
40+
uint8_t highlight_color:3;
41+
uint32_t osd_rsv:11;
4142
} __attribute__((packed, __may_alias__));
4243
uint32_t data;
4344
} osd_config_reg;

ip/osd_generator/osd_generator_hw.tcl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,4 +156,4 @@ add_interface_port osd_if vclk vclk Input 1
156156
add_interface_port osd_if xpos xpos Input 12
157157
add_interface_port osd_if ypos ypos Input 11
158158
add_interface_port osd_if osd_enable osd_enable Output 1
159-
add_interface_port osd_if osd_color osd_color Output 2
159+
add_interface_port osd_if osd_color osd_color Output 3

ip/osd_generator/osd_generator_top.sv

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,18 @@ module osd_generator_top (
3535
input [11:0] xpos,
3636
input [10:0] ypos,
3737
output reg osd_enable,
38-
output reg [1:0] osd_color
38+
output reg [2:0] osd_color
3939
);
4040

4141
localparam CHAR_ROWS = 25;
4242
localparam CHAR_COLS = 20;
4343
localparam CHAR_SECTIONS = 2;
4444
localparam CHAR_SEC_SEPARATOR = 2;
4545

46-
localparam BG_BLACK = 2'h0;
47-
localparam BG_BLUE = 2'h1;
48-
localparam BG_YELLOW = 2'h2;
49-
localparam BG_WHITE = 2'h3;
46+
localparam BG_BLACK = 3'h0;
47+
localparam BG_BLUE = 3'h1;
48+
localparam BG_YELLOW = 3'h6;
49+
localparam BG_WHITE = 3'h7;
5050

5151
localparam OSD_CONFIG_REGNUM = 8'hfa;
5252
localparam OSD_ROW_LSEC_ENABLE_REGNUM = 8'hfb;
@@ -71,7 +71,8 @@ wire [2:0] x_offset = osd_config[7:5];
7171
wire [2:0] y_offset = osd_config[10:8];
7272
wire [1:0] x_size = osd_config[12:11];
7373
wire [1:0] y_size = osd_config[14:13];
74-
wire [1:0] border_color = osd_config[16:15];
74+
wire [2:0] border_color = osd_config[17:15];
75+
wire [2:0] highlight_color = osd_config[20:18];
7576

7677
wire [11:0] xpos_scaled_w = (xpos >> x_size)-({3'h0, x_offset} << 3);
7778
wire [10:0] ypos_scaled_w = (ypos >> y_size)-({3'h0, y_offset} << 3);
@@ -147,7 +148,7 @@ always @(posedge vclk) begin
147148

148149
if (osd_text_act_pp[6]) begin
149150
if (char_px) begin
150-
osd_color <= config_reg[OSD_ROW_COLOR_REGNUM][char_row] ? BG_YELLOW : BG_WHITE;
151+
osd_color <= config_reg[OSD_ROW_COLOR_REGNUM][char_row] ? highlight_color : BG_WHITE;
151152
end else begin
152153
osd_color <= BG_BLUE;
153154
end

rtl/ossc_pro.v

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ assign FAN_PWM_o = ~(sys_poweron & fan_pwm);
214214
wire [11:0] xpos_sc;
215215
wire [11:0] ypos_sc;
216216
wire osd_enable;
217-
wire [1:0] osd_color;
217+
wire [2:0] osd_color;
218218
wire [3:0] x_ctr_shmask, y_ctr_shmask;
219219
wire [10:0] shmask_data;
220220

@@ -584,15 +584,7 @@ wire HSYNC_sc, VSYNC_sc, DE_sc;
584584

585585
always @(posedge pclk_out) begin
586586
if (osd_enable) begin
587-
if (osd_color == 2'h0) begin
588-
{R_out, G_out, B_out} <= 24'h000000;
589-
end else if (osd_color == 2'h1) begin
590-
{R_out, G_out, B_out} <= 24'h0000ff;
591-
end else if (osd_color == 2'h2) begin
592-
{R_out, G_out, B_out} <= 24'hffff00;
593-
end else begin
594-
{R_out, G_out, B_out} <= 24'hffffff;
595-
end
587+
{R_out, G_out, B_out} <= {{8{osd_color[2]}}, {8{osd_color[1]}}, {8{osd_color[0]}}};
596588
end else begin
597589
{R_out, G_out, B_out} <= {R_sc, G_sc, B_sc};
598590
end

software/sys_controller/av_controller.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ const settings_t ts_default = {
9494
.default_avinput = 0,
9595
.osd_enable = 1,
9696
.osd_status_timeout = 1,
97+
.osd_highlight_color = 4,
9798
.fan_pwm = 0,
9899
.led_pwm = 5,
99100
};
@@ -1184,6 +1185,9 @@ int load_scl_coeffs(char *dirname, char *filename) {
11841185
char dirname_root[10];
11851186
int i, p, n, pp_bits, lines=0;
11861187

1188+
if (!sd_det)
1189+
return -1;
1190+
11871191
sniprintf(dirname_root, sizeof(dirname_root), "/%s", dirname);
11881192
f_chdir(dirname_root);
11891193

@@ -1255,6 +1259,9 @@ int load_shmask(char *dirname, char *filename) {
12551259
int v0=0,v1=0;
12561260
int p;
12571261

1262+
if (!sd_det)
1263+
return -1;
1264+
12581265
sniprintf(dirname_root, sizeof(dirname_root), "/%s", dirname);
12591266
f_chdir(dirname_root);
12601267

@@ -1337,9 +1344,10 @@ void set_custom_edid_reload() {
13371344
}
13381345

13391346
void update_settings(int init_setup) {
1340-
if (init_setup || (ts.osd_enable != cs.osd_enable) || (ts.osd_status_timeout != cs.osd_status_timeout)) {
1347+
if (init_setup || (ts.osd_enable != cs.osd_enable) || (ts.osd_status_timeout != cs.osd_status_timeout) || (ts.osd_highlight_color != cs.osd_highlight_color)) {
13411348
osd->osd_config.enable = !!ts.osd_enable;
13421349
osd->osd_config.status_timeout = ts.osd_status_timeout;
1350+
osd->osd_config.highlight_color = 2+ts.osd_highlight_color;
13431351
refresh_osd();
13441352
}
13451353
if (init_setup || (ts.fan_pwm != cs.fan_pwm) || (ts.led_pwm != cs.led_pwm)) {

software/sys_controller/inc/av_controller.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ typedef struct {
107107
avinput_t default_avinput;
108108
uint8_t osd_enable;
109109
uint8_t osd_status_timeout;
110+
uint8_t osd_highlight_color;
110111
#ifndef DExx_FW
111112
uint8_t power_up_state;
112113
uint8_t fan_pwm;

software/sys_controller/inc/firmware.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ typedef struct {
5656
volatile rem_update_regs *regs;
5757
} rem_update_dev;
5858

59-
int fw_update();
59+
int fw_update(char *dirname, char *filename);
6060

6161
void fw_update_commit(fw_header *hdr);
6262

software/sys_controller/inc/menu.h

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,17 @@ typedef enum {
3232
PREV_PAGE,
3333
NEXT_PAGE,
3434
VAL_MINUS,
35-
VAL_PLUS
35+
VAL_PLUS,
36+
MENU_BTN1,
37+
MENU_BTN2,
38+
MENU_BTN3,
39+
MENU_BTN4,
40+
MENU_BTN5,
41+
MENU_BTN6,
42+
MENU_BTN7,
43+
MENU_BTN8,
44+
MENU_BTN9,
45+
MENU_BTN0,
3646
} menucode_id;
3747

3848
typedef enum {
@@ -138,6 +148,7 @@ void cstm_rf_tune(menucode_id code, int setup_disp);
138148
void cstm_scl_alg_load(menucode_id code, int setup_disp);
139149
void cstm_shmask_load(menucode_id code, int setup_disp);
140150
void cstm_edid_load(menucode_id code, int setup_disp);
151+
void cstm_fw_update(menucode_id code, int setup_disp);
141152
void cstm_vm_stats(menucode_id code, int setup_disp);
142153
void cstm_listview(menucode_id code, int setup_disp);
143154
void enter_cstm(const menuitem_t *item, int detached_mode);

software/sys_controller/src/firmware.c

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,23 +36,28 @@ extern flash_ctrl_dev flashctrl_dev;
3636
extern uint8_t sd_det;
3737
extern char menu_row1[US2066_ROW_LEN+1], menu_row2[US2066_ROW_LEN+1];
3838

39-
int fw_update() {
39+
int fw_update(char *dirname, char *filename) {
4040
FIL fw_file;
41+
char dirname_root[10];
4142
fw_header hdr;
4243
int i, retval = 0;
4344
unsigned bytes_read, bytes_to_copy=0;
4445
uint32_t crcval;
4546
unsigned char *dram_tmp = (unsigned char*)DRAM_TMP_ADDR;
4647

47-
strlcpy(menu_row2, "Please wait...", US2066_ROW_LEN+1);
48-
ui_disp_menu(1);
49-
5048
if (!sd_det) {
5149
printf("SD card not detected\n");
5250
return -1;
5351
}
5452

55-
if (!file_open(&fw_file, "ossc_pro.bin")) {
53+
sniprintf(dirname_root, sizeof(dirname_root), "/%s", dirname);
54+
f_chdir(dirname_root);
55+
56+
if (!file_open(&fw_file, filename)) {
57+
strlcpy(menu_row1, "Checking FW", US2066_ROW_LEN+1);
58+
strlcpy(menu_row2, "Please wait...", US2066_ROW_LEN+1);
59+
ui_disp_menu(1);
60+
5661
if (f_read(&fw_file, &hdr, sizeof(hdr), &bytes_read) != F_OK) {
5762
printf("FW hdr read error\n");
5863
retval = -3;
@@ -130,11 +135,13 @@ int fw_update() {
130135
fw_update_commit(&hdr);
131136
} else {
132137
printf("FW file not found\n");
138+
f_chdir("/");
133139
return -2;
134140
}
135141

136142
close_file:
137143
file_close(&fw_file);
144+
f_chdir("/");
138145
set_dram_refresh(0);
139146
return retval;
140147
}

0 commit comments

Comments
 (0)