integrate general improvements from Ossc Pro

* OSD timing optimizations and cursor color selection
* flash robustness fixes
This commit is contained in:
marqs committed 2025-08-21 18:51:46 +03:00
1 parent e09f3c88b0
commit 05a9e351d4
16 files changed
+107 -15687

No files matched your search

+27 -1
View File
@@ -1,5 +1,5 @@
//
// Copyright (C) 2015-2016 Markus Hiienkari <mhiienka@niksula.hut.fi>
// Copyright (C) 2015-2025 Markus Hiienkari <mhiienka@niksula.hut.fi>
//
// This file is part of Open Source Scan Converter project.
//
@@ -20,7 +20,16 @@
#include <unistd.h>
#include "flash.h"
#define DEMUX_FINISH_DELAY 10000
void __attribute__((noinline, flatten, __section__(".text_bram"))) flash_write_protect(flash_ctrl_dev *dev, int enable) {
int i;
// add short delay to avoid mem/csr demux conflict (freeze) in intel_generic_serial_flash_interface
for(i = 0; i < DEMUX_FINISH_DELAY; i++){
asm volatile ("nop");
}
// Write enable
dev->regs->flash_cmd_cfg = 0x00000006;
dev->regs->flash_cmd_ctrl = 1;
@@ -41,9 +50,21 @@ void __attribute__((noinline, flatten, __section__(".text_bram"))) flash_write_p
// Write disable
dev->regs->flash_cmd_cfg = 0x00000004;
dev->regs->flash_cmd_ctrl = 1;
// add short delay to avoid mem/csr demux conflict (freeze) in intel_generic_serial_flash_interface
for(i = 0; i < DEMUX_FINISH_DELAY; i++){
asm volatile ("nop");
}
}
void __attribute__((noinline, flatten, __section__(".text_bram"))) flash_sector_erase(flash_ctrl_dev *dev, uint32_t addr) {
int i;
// add short delay to avoid mem/csr demux conflict (freeze) in intel_generic_serial_flash_interface
for(i = 0; i < DEMUX_FINISH_DELAY; i++){
asm volatile ("nop");
}
// Write enable
dev->regs->flash_cmd_cfg = 0x00000006;
dev->regs->flash_cmd_ctrl = 1;
@@ -60,4 +81,9 @@ void __attribute__((noinline, flatten, __section__(".text_bram"))) flash_sector_
if (!(dev->regs->flash_cmd_rddata[0] & (1<<0)))
break;
}
// add short delay to avoid mem/csr demux conflict (freeze) in intel_generic_serial_flash_interface
for(i = 0; i < DEMUX_FINISH_DELAY; i++){
asm volatile ("nop");
}
}
+3 -1
View File
@@ -39,7 +39,7 @@ extern alt_u16 rc_keymap[REMOTE_MAX_KEYS];
extern alt_u8 vm_sel, profile_sel_menu, lt_sel, def_input, profile_link, lcd_bl_timeout;
extern alt_u8 auto_input, auto_av1_ypbpr, auto_av2_ypbpr, auto_av3_ypbpr;
extern alt_u8 update_cur_vm;
extern alt_u8 osd_enable, osd_status_timeout, phase_hotkey_enable;
extern alt_u8 osd_enable, osd_status_timeout, osd_highlight_color, phase_hotkey_enable;
extern uint8_t sl_def_iv_x, sl_def_iv_y;
extern char target_profile_name[PROFILE_NAME_LEN+1];
extern volatile osd_regs *osd;
@@ -77,6 +77,7 @@ static const char* const lt_desc[] = { "Top-left", "Center", "Bottom-right" };
static const char* const lcd_bl_timeout_desc[] = { "Off", "3s", "10s", "30s" };
static const char* const osd_enable_desc[] = { "Off", "Full", "Simple" };
static const char* const osd_status_desc[] = { "2s", "5s", "10s", "Off" };
static const char* const osd_color_desc[] = { "Green", "Cyan", "Red", "Magenta", "Yellow" };
static const char* const rgsb_ypbpr_desc[] = { "RGsB", "YPbPr" };
static const char* const auto_input_desc[] = { "Off", "Current input", "All inputs" };
static const char* const mask_color_desc[] = { "Black", "Blue", "Green", "Cyan", "Red", "Magenta", "Yellow", "White" };
@@ -250,6 +251,7 @@ MENU(menu_settings, P99_PROTECT({ \
{ "LCD BL timeout", OPT_AVCONFIG_SELECTION, { .sel = { &lcd_bl_timeout, OPT_WRAP, SETTING_ITEM(lcd_bl_timeout_desc) } } },
{ "OSD", OPT_AVCONFIG_SELECTION, { .sel = { &osd_enable, OPT_WRAP, SETTING_ITEM(osd_enable_desc) } } },
{ "OSD status disp.", OPT_AVCONFIG_SELECTION, { .sel = { &osd_status_timeout, OPT_WRAP, SETTING_ITEM(osd_status_desc) } } },
{ "OSD cursor color", OPT_AVCONFIG_SELECTION, { .sel = { &osd_highlight_color, OPT_WRAP, SETTING_ITEM(osd_color_desc) } } },
{ "Phase hotkey", OPT_AVCONFIG_SELECTION, { .sel = { &phase_hotkey_enable, OPT_WRAP, SETTING_ITEM(off_on_desc) } } },
{ LNG("<Load profile >","<プロファイルロード >"), OPT_FUNC_CALL, { .fun = { load_profile, &profile_arg_info } } },
{ LNG("<Save profile >","<プロファイルセーブ >"), OPT_FUNC_CALL, { .fun = { save_profile, &profile_arg_info } } },
+3 -1
View File
@@ -50,7 +50,7 @@ extern alt_u8 profile_sel;
extern alt_u8 def_input, profile_link;
extern alt_u8 lcd_bl_timeout;
extern alt_u8 auto_input, auto_av1_ypbpr, auto_av2_ypbpr, auto_av3_ypbpr;
extern alt_u8 osd_enable, osd_status_timeout, phase_hotkey_enable;
extern alt_u8 osd_enable, osd_status_timeout, osd_highlight_color, phase_hotkey_enable;
extern SD_DEV sdcard_dev;
extern char menu_row1[LCD_ROW_LEN+1], menu_row2[LCD_ROW_LEN+1];
@@ -89,6 +89,7 @@ int write_userdata(alt_u8 entry)
((ude_initcfg*)databuf)->auto_av3_ypbpr = auto_av3_ypbpr;
((ude_initcfg*)databuf)->osd_enable = osd_enable;
((ude_initcfg*)databuf)->osd_status_timeout = osd_status_timeout;
((ude_initcfg*)databuf)->osd_highlight_color = osd_highlight_color;
((ude_initcfg*)databuf)->phase_hotkey_enable = phase_hotkey_enable;
memcpy(((ude_initcfg*)databuf)->keys, rc_keymap, sizeof(rc_keymap));
for (i=0; i<sizeof(ude_initcfg); i++)
@@ -201,6 +202,7 @@ int read_userdata(alt_u8 entry, int dry_run)
auto_av3_ypbpr = ((ude_initcfg*)databuf)->auto_av3_ypbpr;
osd_enable = ((ude_initcfg*)databuf)->osd_enable;
osd_status_timeout = ((ude_initcfg*)databuf)->osd_status_timeout;
osd_highlight_color = ((ude_initcfg*)databuf)->osd_highlight_color;
profile_link = ((ude_initcfg*)databuf)->profile_link;
profile_sel = input_profiles[AV_TESTPAT]; // Global profile
lcd_bl_timeout = ((ude_initcfg*)databuf)->lcd_bl_timeout;