reduce mode to fps and bypass

This commit is contained in:
Steven Dan
2026-06-12 10:17:13 +08:00
parent 59a1b56d59
commit 1617ac612d
4 changed files with 38 additions and 64 deletions

View File

@@ -121,10 +121,10 @@ timer tm;
// 改动原因新增C1模式持久化文件路径使用LittleFS保存mode按键状态保证断电重启后可恢复。
#define C1_MODE_VALUE_PATH "c1_mode_value"
// 改动原因:c1_mode 与 tile1 mode 灯索引一致1=灭 2=蓝 3=绿 4=橙 5=紫;合法范围 1~5interface 原样传 c1_mode
// 改动原因:产品仅保留两档——1=BYPASS_UAC1(灯灭)、4=FPS_UAC1(橙灯常亮);灯索引与 c1_mode 同值下发 tile1
#define C1_MODE_VALUE_DEFAULT 1
#define C1_MODE_VALUE_MIN 1
#define C1_MODE_VALUE_MAX 5
#define C1_MODE_VALUE_MAX 4
// 改动原因DAC 音量单独持久化路径,与 mode 的 c1_mode 文件分离,避免互相覆盖且便于维护。
#define C1_DAC_VOL_INFO_PATH "c1_dac_vol"
@@ -156,24 +156,25 @@ static unsigned c1_saved_dac_vol_is_valid(unsigned char v)
return 0;
}
// 改动原因:产品停用 mode 2(BR)/3(V71);越界或 Flash 残留 2/3 归一到可用档2/3→4,供上电与灯色共用。
// 改动原因:仅合法档 1(BYPASS)/4(FPS)Flash 残留 2/3(V71) 归 45(旧紫灯 BYPASS) 归 1,供上电与灯色共用。
static inline unsigned c1_mode_sanitize(unsigned mode_value)
{
if (mode_value > C1_MODE_VALUE_MAX || mode_value < C1_MODE_VALUE_MIN)
return C1_MODE_VALUE_DEFAULT;
if (mode_value == 1 || mode_value == 4)
return mode_value;
if (mode_value == 2 || mode_value == 3)
return 4;
return mode_value;
if (mode_value == 5)
return 1;
return C1_MODE_VALUE_DEFAULT;
}
// 改动原因mode 短按循环跳过 2、3仅 1→4→5→1与 switch_mode_by_c1_mode 可用档一致
// 改动原因mode 短按仅在 BYPASS(1) 与 FPS(4) 两档间切换,与 switch_mode_by_c1_mode 一致。
static inline unsigned c1_mode_advance(unsigned mode_value)
{
switch (c1_mode_sanitize(mode_value))
{
case 1: return 4;
case 4: return 5;
case 5: return 1;
case 4: return 1;
default: return C1_MODE_VALUE_DEFAULT;
}
}
@@ -222,21 +223,14 @@ void switch_mode_by_c1_mode(unsigned c1_mode, unsigned force_reboot)
break;
}
#else
// 改动原因UAC1 仅保留 BYPASS(1,灯灭) 与 FPS(4,橙灯);移除 V71(2/3) 及旧紫灯 BYPASS(5)。
switch (c1_mode)
{
case 1:
#if !BYPASS_UAC1
SetRoleSwitchFlag(MODE_BYPASS_UAC1);
reboot_need = 0;
#endif
break;
case 2:
SetRoleSwitchFlag(MODE_V71_UAC1);
reboot_need = 1;
break;
case 3:
SetRoleSwitchFlag(MODE_V71_UAC1);
reboot_need = 0;
#endif
break;
case 4:
#if !FPS_UAC1
@@ -244,12 +238,7 @@ void switch_mode_by_c1_mode(unsigned c1_mode, unsigned force_reboot)
reboot_need = 1;
#endif
break;
case 5:
#if !BYPASS_UAC1
SetRoleSwitchFlag(MODE_BYPASS_UAC1);
reboot_need = 1;
#endif
default:
break;
}
#endif // UAC1_MODE == 1
@@ -595,7 +584,7 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
firmware_upgrade_init();
#endif
// 改动原因:上电归一 c1_mode(含停用档 2/3→4与按键循环 1/4/5 一致并写回 Flash。
// 改动原因:上电归一 c1_mode 为 1 或 4与按键 BYPASS/FPS 两档循环一致并写回 Flash。
{
unsigned c1_mode_corrected = c1_mode_sanitize(c1_mode);
if (c1_mode_corrected != c1_mode)
@@ -957,7 +946,7 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
{
if (pressed_count == 0)
{
// 改动原因mode 短按在 c1_mode 1/4/5 间循环(跳过停用档 2/3;持久化后切角色并 set_mode_led_color 下发 tile1。
// 改动原因mode 短按在 BYPASS(1,灭)/FPS(4,橙) 两档间切换;持久化后切角色并 set_mode_led_color 下发 tile1。
if ((mode_press_ticks >= C1_KEY_SHORT_TICKS) && (mode_press_ticks < C1_KEY_LONG_TICKS))
{
c1_mode = c1_mode_advance(c1_mode);
@@ -1927,7 +1916,7 @@ static inline void c1_panel_leds_force_all_off_hw(void)
p_mode_led_blue <: 1;
}
// 改动原因c1_mode 与灯索引一致1=灯 2=蓝 3=绿 4=橙(R+G) 5=紫(R+B);仅驱动 mode 区p_leds bit2/3 + p_mode_led_blue不受 mic 变声影响。
// 改动原因c1_mode 与灯索引一致1=灭(BYPASS) 4=橙(R+G,FPS);仅驱动 mode 区p_leds bit2/3 + p_mode_led_blue不受 mic 变声影响。
// 改动原因:规格 mic 区灯仅反映静音——静音红灯常亮非静音含DNR开/关全灭DNR状态由APP显示。
static inline void apply_c1_panel_leds(unsigned mode_led_color_idx, unsigned mic_mute_switch, unsigned &led_shadow)
{
@@ -2001,10 +1990,8 @@ void app_control_slave(server interface c1_led_ctrl_if i_c1_led_ctrl)
unsafe {
select{
case i_c1_led_ctrl.set_mode_led_color(unsigned color_idx):
// 改动原因color_idx 与 c1_mode 同値 1~5越界时酆位为默认灯码避免未定义索引
mode_led_color_idx = color_idx;
if (mode_led_color_idx > 5 || mode_led_color_idx < 1)
mode_led_color_idx = C1_MODE_VALUE_DEFAULT;
// 改动原因color_idx 与 c1_mode 同值,仅 1(灭)/4(橙);越界时 sanitize 为合法档
mode_led_color_idx = c1_mode_sanitize(color_idx);
apply_c1_panel_leds(mode_led_color_idx, mic_mute_switch, led_shadow);
break;
case i_c1_led_ctrl.set_mic_mute_state(unsigned mute_state):

View File

@@ -8,7 +8,7 @@
#include "app_dsp.h"
// 改动原因mode/mic mute LED物理端口在tile1定义跨tile的LED控制interface供tile0按键逻辑调用tile1统一驱动硬件LED。
interface c1_led_ctrl_if {
// 改动原因:与 c1_mode 同值下发 tile11=灭 2=蓝 3=绿 4=橙 5=紫(灯索引即 mode
// 改动原因:与 c1_mode 同值下发 tile11=BYPASS(灭) 4=FPS(橙灯常亮)(灯索引即 mode
void set_mode_led_color(unsigned color_idx);
// 改动原因:规格 mic 指示灯仅反映静音——0=静音红灯常亮1=非静音全灭DNR 无灯由 APP 显示。
void set_mic_mute_state(unsigned mute_switch);

View File

@@ -121,10 +121,10 @@ timer tm;
// 改动原因新增C1模式持久化文件路径使用LittleFS保存mode按键状态保证断电重启后可恢复。
#define C1_MODE_VALUE_PATH "c1_mode_value"
// 改动原因:c1_mode 与 tile1 mode 灯索引一致1=灭 2=蓝 3=绿 4=橙 5=紫;合法范围 1~5interface 原样传 c1_mode
// 改动原因:产品仅保留两档——1=BYPASS_UAC1(灯灭)、4=FPS_UAC1(橙灯常亮);灯索引与 c1_mode 同值下发 tile1
#define C1_MODE_VALUE_DEFAULT 1
#define C1_MODE_VALUE_MIN 1
#define C1_MODE_VALUE_MAX 5
#define C1_MODE_VALUE_MAX 4
// 改动原因DAC 音量单独持久化路径,与 mode 的 c1_mode 文件分离,避免互相覆盖且便于维护。
#define C1_DAC_VOL_INFO_PATH "c1_dac_vol"
@@ -156,24 +156,25 @@ static unsigned c1_saved_dac_vol_is_valid(unsigned char v)
return 0;
}
// 改动原因:产品停用 mode 2(BR)/3(V71);越界或 Flash 残留 2/3 归一到可用档2/3→4,供上电与灯色共用。
// 改动原因:仅合法档 1(BYPASS)/4(FPS)Flash 残留 2/3(V71) 归 45(旧紫灯 BYPASS) 归 1,供上电与灯色共用。
static inline unsigned c1_mode_sanitize(unsigned mode_value)
{
if (mode_value > C1_MODE_VALUE_MAX || mode_value < C1_MODE_VALUE_MIN)
return C1_MODE_VALUE_DEFAULT;
if (mode_value == 1 || mode_value == 4)
return mode_value;
if (mode_value == 2 || mode_value == 3)
return 4;
return mode_value;
if (mode_value == 5)
return 1;
return C1_MODE_VALUE_DEFAULT;
}
// 改动原因mode 短按循环跳过 2、3仅 1→4→5→1与 switch_mode_by_c1_mode 可用档一致
// 改动原因mode 短按仅在 BYPASS(1) 与 FPS(4) 两档间切换,与 switch_mode_by_c1_mode 一致。
static inline unsigned c1_mode_advance(unsigned mode_value)
{
switch (c1_mode_sanitize(mode_value))
{
case 1: return 4;
case 4: return 5;
case 5: return 1;
case 4: return 1;
default: return C1_MODE_VALUE_DEFAULT;
}
}
@@ -222,21 +223,14 @@ void switch_mode_by_c1_mode(unsigned c1_mode, unsigned force_reboot)
break;
}
#else
// 改动原因UAC1 仅保留 BYPASS(1,灯灭) 与 FPS(4,橙灯);移除 V71(2/3) 及旧紫灯 BYPASS(5)。
switch (c1_mode)
{
case 1:
#if !BYPASS_UAC1
SetRoleSwitchFlag(MODE_BYPASS_UAC1);
reboot_need = 0;
#endif
break;
case 2:
SetRoleSwitchFlag(MODE_V71_UAC1);
reboot_need = 1;
break;
case 3:
SetRoleSwitchFlag(MODE_V71_UAC1);
reboot_need = 0;
#endif
break;
case 4:
#if !FPS_UAC1
@@ -244,12 +238,7 @@ void switch_mode_by_c1_mode(unsigned c1_mode, unsigned force_reboot)
reboot_need = 1;
#endif
break;
case 5:
#if !BYPASS_UAC1
SetRoleSwitchFlag(MODE_BYPASS_UAC1);
reboot_need = 1;
#endif
default:
break;
}
#endif // UAC1_MODE == 1
@@ -598,7 +587,7 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
debug_printf("AudioHwRemote2: c1_mode = %d\n", c1_mode);
// 改动原因:上电归一 c1_mode(含停用档 2/3→4与按键循环 1/4/5 一致并写回 Flash。
// 改动原因:上电归一 c1_mode 为 1 或 4与按键 BYPASS/FPS 两档循环一致并写回 Flash。
{
unsigned c1_mode_corrected = c1_mode_sanitize(c1_mode);
if (c1_mode_corrected != c1_mode)
@@ -960,7 +949,7 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
{
if (pressed_count == 0)
{
// 改动原因mode 短按在 c1_mode 1/4/5 间循环(跳过停用档 2/3;持久化后切角色并 set_mode_led_color 下发 tile1。
// 改动原因mode 短按在 BYPASS(1,灭)/FPS(4,橙) 两档间切换;持久化后切角色并 set_mode_led_color 下发 tile1。
if ((mode_press_ticks >= C1_KEY_SHORT_TICKS) && (mode_press_ticks < C1_KEY_LONG_TICKS))
{
c1_mode = c1_mode_advance(c1_mode);
@@ -1930,7 +1919,7 @@ static inline void c1_panel_leds_force_all_off_hw(void)
p_mode_led_blue <: 1;
}
// 改动原因c1_mode 与灯索引一致1=灯 2=蓝 3=绿 4=橙(R+G) 5=紫(R+B);仅驱动 mode 区p_leds bit2/3 + p_mode_led_blue不受 mic 变声影响。
// 改动原因c1_mode 与灯索引一致1=灭(BYPASS) 4=橙(R+G,FPS);仅驱动 mode 区p_leds bit2/3 + p_mode_led_blue不受 mic 变声影响。
// 改动原因:规格 mic 区灯仅反映静音——静音红灯常亮非静音含DNR开/关全灭DNR状态由APP显示。
static inline void apply_c1_panel_leds(unsigned mode_led_color_idx, unsigned mic_mute_switch, unsigned &led_shadow)
{
@@ -2004,10 +1993,8 @@ void app_control_slave(server interface c1_led_ctrl_if i_c1_led_ctrl, chanend c_
unsafe {
select{
case i_c1_led_ctrl.set_mode_led_color(unsigned color_idx):
// 改动原因color_idx 与 c1_mode 同値 1~5越界时酆位为默认灯码避免未定义索引
mode_led_color_idx = color_idx;
if (mode_led_color_idx > 5 || mode_led_color_idx < 1)
mode_led_color_idx = C1_MODE_VALUE_DEFAULT;
// 改动原因color_idx 与 c1_mode 同值,仅 1(灭)/4(橙);越界时 sanitize 为合法档
mode_led_color_idx = c1_mode_sanitize(color_idx);
apply_c1_panel_leds(mode_led_color_idx, mic_mute_switch, led_shadow);
break;
case i_c1_led_ctrl.set_mic_mute_state(unsigned mute_state):

View File

@@ -7,7 +7,7 @@
#include "app_dsp.h"
// 改动原因mode/mic mute LED物理端口在tile1定义跨tile的LED控制interface供tile0按键逻辑调用tile1统一驱动硬件LED。
interface c1_led_ctrl_if {
// 改动原因:与 c1_mode 同值下发 tile11=灭 2=蓝 3=绿 4=橙 5=紫(灯索引即 mode
// 改动原因:与 c1_mode 同值下发 tile11=BYPASS(灭) 4=FPS(橙灯常亮)(灯索引即 mode
void set_mode_led_color(unsigned color_idx);
// 改动原因:规格 mic 指示灯仅反映静音——0=静音红灯常亮1=非静音全灭DNR 无灯由 APP 显示。
void set_mic_mute_state(unsigned mute_switch);