From 5423add350e417840ca2f480f6fbbe513981933d Mon Sep 17 00:00:00 2001 From: IanSB Date: Wed, 12 Feb 2020 00:10:08 +0000 Subject: [PATCH] Save separate frontend setting for each CPLD --- src/filesystem.c | 18 +++++++++++++----- src/filesystem.h | 2 +- src/osd.c | 34 +++++++++++++++++++--------------- src/osd.h | 1 + src/scripts/config.txt | 2 -- 5 files changed, 34 insertions(+), 23 deletions(-) diff --git a/src/filesystem.c b/src/filesystem.c index 4fc5b42d..58af35a7 100644 --- a/src/filesystem.c +++ b/src/filesystem.c @@ -774,7 +774,7 @@ int file_restore(char *dirpath, char *name) { return 1; } -int file_save_config(char *resolution_name, int scaling, int frontend) { +int file_save_config(char *resolution_name, int scaling, int current_frontend) { FRESULT result; char path[256]; char buffer [16384]; @@ -844,13 +844,21 @@ int file_save_config(char *resolution_name, int scaling, int frontend) { sprintf((char*)(buffer + bytes_read), "\r\n#scaling=%d\r\n", scaling); bytes_read += strlen((char*) (buffer + bytes_read)); - sprintf((char*) (buffer + bytes_read), "scaling_kernel=%d\r\n", val); + sprintf((char*) (buffer + bytes_read), "scaling_kernel=%d\r\n\r\n", val); bytes_read += strlen((char*) (buffer + bytes_read)); log_info("Save scaling kernel = %d", val); - sprintf((char*)(buffer + bytes_read), "\r\n#frontend=%d\r\n", frontend); - bytes_read += strlen((char*) (buffer + bytes_read)); - log_info("Save frontend = %d", frontend); + for (int i = 0; i < 16; i++) { + int frontend = get_existing_frontend(i); + if (i == ((cpld->get_version() >> VERSION_DESIGN_BIT) & 0x0F)) { + frontend = current_frontend; + } + if (frontend != 0) { + sprintf((char*)(buffer + bytes_read), "#frontend_%X=%d\r\n", i, frontend); + bytes_read += strlen((char*) (buffer + bytes_read)); + log_info("Save frontend_%X = %d", i, frontend); + } + } buffer[bytes_read]=0; result = f_open(&file, "/config.txt", FA_WRITE | FA_CREATE_ALWAYS); diff --git a/src/filesystem.h b/src/filesystem.h index 924d9624..0c40b776 100644 --- a/src/filesystem.h +++ b/src/filesystem.h @@ -15,7 +15,7 @@ void scan_sub_profiles(char sub_profile_names[MAX_SUB_PROFILES][MAX_PROFILE_WIDT unsigned int file_read_profile(char *profile_name, char *sub_profile_name, int updatecmd, char *command_string, unsigned int buffer_size); void scan_names(char names[MAX_NAMES][MAX_NAMES_WIDTH], char *path, char *type, size_t *count); -int file_save_config(char *resolution_name, int scaling, int frontend); +int file_save_config(char *resolution_name, int scaling, int current_frontend); int file_load(char *path, char *buffer, unsigned int buffer_size); int file_save(char *dirpath, char *name, char *buffer, unsigned int buffer_size); int file_restore(char *dirpath, char *name); diff --git a/src/osd.c b/src/osd.c index ba263ed1..173a18a2 100644 --- a/src/osd.c +++ b/src/osd.c @@ -182,8 +182,8 @@ static const char *frontend_names[] = { "Atom", "6 BIT RGB", "6 BIT RGB Analog", - "6 BIT RGB Analog DAC:UA1", - "6 BIT RGB Analog DAC:UB1", + "6 BIT RGB Analog ALT:UA1", + "6 BIT RGB Analog ALT:UB1", "6 BIT YUV Analog" }; @@ -685,6 +685,8 @@ static int palette = PALETTE_RGB; //osd high water mark (highest line number used) static int osd_hwm = 0; +static int all_frontends[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + // Default action map, maps from physical key press to action static osd_state_t action_map[] = { A0_LAUNCH, // 0 - SW1 short press @@ -3267,6 +3269,10 @@ int osd_key(int key) { return ret; } +int get_existing_frontend(int frontend) { + return all_frontends[frontend]; +} + void osd_init() { const char *prop = NULL; // Precalculate character->screen mapping table @@ -3468,27 +3474,25 @@ void osd_init() { prop = get_prop_no_space(config_buffer, "#scaling"); log_info("Read scaling: %s", prop); } - if (!prop || !cbytes) { prop = "0"; } - int val = atoi(prop); set_scaling(val, 0); if (cbytes) { - prop = get_prop_no_space(config_buffer, "#frontend"); - log_info("Read frontend: %s", prop); + char frontname[256]; + for (int i=0; i< 16; i++) { + sprintf(frontname, "#frontend_%X", i); + prop = get_prop_no_space(config_buffer, frontname); + if (!prop) { + prop = "0"; + } + log_info("Read frontend_%X = %s", i, prop); + all_frontends[i] = atoi(prop); + } } - - if (!prop || !cbytes) { - prop = "0"; - } - - val = atoi(prop); - log_info("Read frontendx: %d", val); - set_frontend(val, 0); - + set_frontend(all_frontends[(cpld->get_version() >> VERSION_DESIGN_BIT) & 0x0F], 0); // default profile entry of not found features[F_PROFILE].max = 0; diff --git a/src/osd.h b/src/osd.h index d1cb6cbb..90eb2745 100644 --- a/src/osd.h +++ b/src/osd.h @@ -166,5 +166,6 @@ uint32_t osd_get_palette(int index); int autoswitch_detect(int one_line_time_ns, int lines_per_frame, int sync_type); int sub_profiles_available(); uint32_t osd_get_equivalence(uint32_t value); +int get_existing_frontend(int frontend); #endif diff --git a/src/scripts/config.txt b/src/scripts/config.txt index ecd7f65f..9950b13b 100644 --- a/src/scripts/config.txt +++ b/src/scripts/config.txt @@ -129,5 +129,3 @@ kernel=kernelrpi4.img #scaling=0 scaling_kernel=8 - -#frontend=0