update mic button support detail
This commit is contained in:
@@ -126,6 +126,10 @@ timer tm;
|
||||
|
||||
// 改动原因:DAC 音量单独持久化路径,与 mode 的 c1_mode 文件分离,避免互相覆盖且便于维护。
|
||||
#define C1_DAC_VOL_INFO_PATH "c1_dac_vol"
|
||||
// 改动原因:麦克风按键三种状态(静音/变声/DNR)均需断电保存,上电恢复并同步LED显示。
|
||||
#define C1_MIC_MUTE_INFO_PATH "c1_mic_mute"
|
||||
#define C1_VOICE_FX_INFO_PATH "c1_voice_fx"
|
||||
#define C1_DNR_EN_INFO_PATH "c1_dnr_en"
|
||||
// 改动原因:与 FORMAT_DELAY(30000000) 相同时间基准(get_reference_time 滴答),用户停止调节 300ms 后再写 Flash,减少磨损并满足需求。
|
||||
#define C1_DAC_VOL_SAVE_DELAY (30000000)
|
||||
|
||||
@@ -615,14 +619,35 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
|
||||
dac_vol_persist_deadline = 0;
|
||||
}
|
||||
|
||||
// 改动原因:tile1 上电已硬件全灭;先下发当前 g_mute_switch 再下发 Flash 中的 c1_mode,使首帧 apply 时 mic 已正确,避免仅 set_mode 时用占位 mic 闪错 mute 灯。
|
||||
|
||||
// 改动原因:三种 mic 状态(静音/变声/DNR)均需断电保存,上电从 Flash 读取并恢复;无效値(非 0/1)时使用默认値。
|
||||
{
|
||||
unsigned char loaded_mute = load_value(C1_MIC_MUTE_INFO_PATH);
|
||||
unsigned init_mute = (loaded_mute == 0 || loaded_mute == 1) ? (unsigned)loaded_mute : 1u;
|
||||
SET_SHARED_GLOBAL(g_mute_switch, init_mute);
|
||||
}
|
||||
{
|
||||
unsigned char loaded_vfx = load_value(C1_VOICE_FX_INFO_PATH);
|
||||
c1_mic_voice_fx = (loaded_vfx == 1) ? 1u : 0u;
|
||||
}
|
||||
{
|
||||
unsigned char loaded_dnr = load_value(C1_DNR_EN_INFO_PATH);
|
||||
unsigned init_dnr = (loaded_dnr == 0 || loaded_dnr == 1) ? (unsigned)loaded_dnr : 1u;
|
||||
SET_SHARED_GLOBAL(g_dnr_enable, init_dnr);
|
||||
}
|
||||
|
||||
// 改动原因:tile1 上电已硬件全灯;先下发三种mic状态再下发 mode,使首帧 apply 时 mic 已正确。
|
||||
{
|
||||
unsigned init_mute_for_led;
|
||||
unsigned init_dnr_for_led;
|
||||
GET_SHARED_GLOBAL(init_mute_for_led, g_mute_switch);
|
||||
GET_SHARED_GLOBAL(init_dnr_for_led, g_dnr_enable);
|
||||
i_c1_led_ctrl.set_mic_mute_state(init_mute_for_led);
|
||||
i_c1_led_ctrl.set_mode_led_color(c1_mode_to_tile_mode_led_code(c1_mode));
|
||||
// 改动原因:上电默认关闭变声灯效覆盖,避免未初始化随机亮橙。
|
||||
i_c1_led_ctrl.set_mic_voice_fx(0);
|
||||
i_c1_led_ctrl.set_mic_voice_fx(c1_mic_voice_fx);
|
||||
i_c1_led_ctrl.set_mic_dnr_state(init_dnr_for_led);
|
||||
last_mute_switch_for_led = init_mute_for_led;
|
||||
}
|
||||
|
||||
while(1)
|
||||
{
|
||||
@@ -886,6 +911,8 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
|
||||
mic_volume(effective_adc_vol, i2c);
|
||||
}
|
||||
SET_SHARED_GLOBAL(g_mute_switch, current_mute_switch);
|
||||
// 改动原因:静音状态变化后立即保存到Flash,保证断电后恢复正确的静音灯状态。
|
||||
save_value(C1_MIC_MUTE_INFO_PATH, (unsigned char)current_mute_switch);
|
||||
i_c1_led_ctrl.set_mic_mute_state(current_mute_switch);
|
||||
last_mute_switch_for_led = current_mute_switch;
|
||||
debug_printf("C1 key mic mute toggle (deferred single): %d\n", current_mute_switch);
|
||||
@@ -934,6 +961,9 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
|
||||
GET_SHARED_GLOBAL(dnr_enable, g_dnr_enable);
|
||||
dnr_enable = (dnr_enable != 0) ? 0 : 1;
|
||||
SET_SHARED_GLOBAL(g_dnr_enable, dnr_enable);
|
||||
// 改动原因:DNR状态变化后立即下发LED(开亮蓝灯/关灯),并保存到Flash供断电恢复。
|
||||
i_c1_led_ctrl.set_mic_dnr_state(dnr_enable);
|
||||
save_value(C1_DNR_EN_INFO_PATH, (unsigned char)dnr_enable);
|
||||
mic_dnr_long_fired = 1;
|
||||
debug_printf("C1 mic DNR toggle (hold 1.5s): %d\n", dnr_enable);
|
||||
}
|
||||
@@ -1005,6 +1035,8 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
|
||||
{
|
||||
c1_mic_voice_fx = (c1_mic_voice_fx ? 0 : 1);
|
||||
i_c1_led_ctrl.set_mic_voice_fx(c1_mic_voice_fx);
|
||||
// 改动原因:变声状态变化后立即保存到Flash,保证断电后恢复正确的变声灯状态。
|
||||
save_value(C1_VOICE_FX_INFO_PATH, (unsigned char)c1_mic_voice_fx);
|
||||
mic_dbl_stage = 0;
|
||||
mic_defer_left = 0;
|
||||
debug_printf("C1 mic voice/beautifier toggle: %d\n", c1_mic_voice_fx);
|
||||
@@ -1948,23 +1980,29 @@ static inline void c1_panel_leds_force_all_off_hw(void)
|
||||
p_mic_mute_led_blue <: 1;
|
||||
}
|
||||
|
||||
// 改动原因:c1_mode 与灯索引一致:1=灭 2=蓝 3=绿 4=橙(R+G) 5=紫(R+B);仅驱动 mode 区(p_mode_led_red + p_leds bit0/1),不受 mic 变声影响。
|
||||
// mic_voice_fx_on:规格变声/美声橙灯在 mic 区——p_leds bit2 红 + bit3 绿同时点亮;关变声时 mic 区仅由静音决定 bit2,bit3 熄灭。
|
||||
static inline void apply_c1_panel_leds(unsigned mode_led_color_idx, unsigned mic_mute_switch, unsigned mic_voice_fx_on, unsigned &led_shadow)
|
||||
// 改动原因:c1_mode 与灯索引一致:1=灯 2=蓝 3=绿 4=橙(R+G) 5=紫(R+B);仅驱动 mode 区(p_mode_led_red + p_leds bit0/1),不受 mic 变声影响。
|
||||
// 改动原因:mic 区灯优先级:静音=只亮红灯(覆盖变声/DNR);非静音时变声=橙(R+G),DNR=蓝(p_mic_mute_led_blue),
|
||||
// 两者同开=橙+蓝混合,两者均关=全灯。
|
||||
static inline void apply_c1_panel_leds(unsigned mode_led_color_idx, unsigned mic_mute_switch, unsigned mic_voice_fx_on, unsigned mic_dnr_on, unsigned &led_shadow)
|
||||
{
|
||||
unsigned mode_red = 0;
|
||||
unsigned mode_green = 0;
|
||||
unsigned mode_blue = 0;
|
||||
// 改动原因:与 user_main.h 约定一致——mic_mute_switch 存的是“非静音=1、静音=0”,静音时 mic 红灯(bit2)亮。
|
||||
unsigned mic_red = 0;
|
||||
unsigned mic_green = 0;
|
||||
if (mic_voice_fx_on) {
|
||||
// 改动原因:变声开为橙=R+G,映射到 XS1_PORT_4D 的 mic 专用 bit2/bit3,不占用 mode 的 bit0/bit1。
|
||||
unsigned mic_blue = 0;
|
||||
|
||||
// 改动原因:静音优先——静音(mic_mute_switch==0)时只亮红灯,屏蔽变声橙灯和DNR蓝灯;
|
||||
// 关闭静音后恢复为变声/DNR/混合/全灯的组合状态,满足“关闭静音时回到其他模式的灯颜色”需求。
|
||||
if (mic_mute_switch == 0) {
|
||||
mic_red = 1;
|
||||
mic_green = 1;
|
||||
} else {
|
||||
mic_red = (mic_mute_switch == 0) ? 1 : 0;
|
||||
mic_green = 0;
|
||||
mic_blue = 0;
|
||||
} else {
|
||||
// 改动原因:变声=橙(R+G),DNR=蓝,两者同时开=橙+蓝混合,两者均关=全灯。
|
||||
mic_red = mic_voice_fx_on ? 1 : 0;
|
||||
mic_green = mic_voice_fx_on ? 1 : 0;
|
||||
mic_blue = mic_dnr_on ? 1 : 0;
|
||||
}
|
||||
|
||||
if (mode_led_color_idx == 1) {
|
||||
@@ -1987,7 +2025,8 @@ static inline void apply_c1_panel_leds(unsigned mode_led_color_idx, unsigned mic
|
||||
mode_blue = 0;
|
||||
}
|
||||
|
||||
// 改动原因:硬件LED为低电平点亮(1灭/0亮);低四位 bit0~3 分别为 mode绿、mode蓝、mic红、mic绿,统一刷新避免旧代码固定 |=0x8 导致 bit3 永灭。
|
||||
// 改动原因:硬件LED为低电平点亮(1灯/0亮);低四位 bit0~3 分别为 mode绿、mode蓝、mic红、mic绿,统一刷新。
|
||||
// 改动原因:p_mic_mute_led_blue 由 mic_blue 驱动,DNR开且非静音时亮蓝灯(输出0=亮)。
|
||||
p_mode_led_red <: (mode_red ? 0 : 1);
|
||||
led_shadow &= ~0xF;
|
||||
led_shadow |= (mode_green ? 0x0 : 0x1);
|
||||
@@ -1995,18 +2034,19 @@ static inline void apply_c1_panel_leds(unsigned mode_led_color_idx, unsigned mic
|
||||
led_shadow |= (mic_red ? 0x0 : 0x4);
|
||||
led_shadow |= (mic_green ? 0x0 : 0x8);
|
||||
p_leds <: led_shadow;
|
||||
// 改动原因:该蓝灯当前不参与功能,保持熄灭(低电平有效下输出1表示灭)。
|
||||
p_mic_mute_led_blue <: 1;
|
||||
p_mic_mute_led_blue <: (mic_blue ? 0 : 1);
|
||||
}
|
||||
|
||||
void app_control_slave(server interface c1_led_ctrl_if i_c1_led_ctrl)
|
||||
{
|
||||
// 改动原因:tile1 先于 tile0 运行,上电先把硬件灯全灭且不调用 apply,避免用占位 mic/mode 组合误亮;shadow 置为全灭电平便于首包 set_* 时 apply 与端口一致。
|
||||
// 改动原因:tile1 先于 tile0 运行,上电先把硬件灯全灯且不调用 apply,避免用占位 mic/mode 组合误亮;shadow 置为全灯灯电平便于首包 set_* 时 apply 与端口一致。
|
||||
unsigned led_shadow = 0xF;
|
||||
unsigned mode_led_color_idx = 1;
|
||||
unsigned mic_mute_switch = 1;
|
||||
// 改动原因:变声/美声开时仅 p_leds bit2/bit3 显橙,与 set_mode_led_color 下发的 mode 灯独立;此处状态与 tile0 set_mic_voice_fx 同步。
|
||||
unsigned mic_voice_fx_on = 0;
|
||||
// 改动原因:AI通话降噪DNR开时点亮p_mic_mute_led_blue蓝灯;与变声同时开时橙+蓝混合;静音优先在 apply 内部处理。
|
||||
unsigned mic_dnr_on = 0;
|
||||
c1_panel_leds_force_all_off_hw();
|
||||
|
||||
unsigned eq_mode_time = 0;
|
||||
@@ -2025,19 +2065,24 @@ 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;越界时钳位为默认灯码,避免未定义索引。
|
||||
// 改动原因: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;
|
||||
apply_c1_panel_leds(mode_led_color_idx, mic_mute_switch, mic_voice_fx_on, led_shadow);
|
||||
apply_c1_panel_leds(mode_led_color_idx, mic_mute_switch, mic_voice_fx_on, mic_dnr_on, led_shadow);
|
||||
break;
|
||||
case i_c1_led_ctrl.set_mic_mute_state(unsigned mute_state):
|
||||
mic_mute_switch = (mute_state != 0) ? 1 : 0;
|
||||
apply_c1_panel_leds(mode_led_color_idx, mic_mute_switch, mic_voice_fx_on, led_shadow);
|
||||
apply_c1_panel_leds(mode_led_color_idx, mic_mute_switch, mic_voice_fx_on, mic_dnr_on, led_shadow);
|
||||
break;
|
||||
case i_c1_led_ctrl.set_mic_voice_fx(unsigned voice_fx_enabled):
|
||||
mic_voice_fx_on = (voice_fx_enabled != 0) ? 1 : 0;
|
||||
apply_c1_panel_leds(mode_led_color_idx, mic_mute_switch, mic_voice_fx_on, led_shadow);
|
||||
apply_c1_panel_leds(mode_led_color_idx, mic_mute_switch, mic_voice_fx_on, mic_dnr_on, led_shadow);
|
||||
break;
|
||||
case i_c1_led_ctrl.set_mic_dnr_state(unsigned dnr_enabled):
|
||||
// 改动原因:接收 tile0 按键逻辑下发的 DNR 状态,刷新 mic 区蓝灯;静音优先在 apply 内部处理。
|
||||
mic_dnr_on = (dnr_enabled != 0) ? 1 : 0;
|
||||
apply_c1_panel_leds(mode_led_color_idx, mic_mute_switch, mic_voice_fx_on, mic_dnr_on, led_shadow);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,9 @@ interface c1_led_ctrl_if {
|
||||
// 改动原因:麦克风键双击“变声/美声”仅改灯效时,在 tile1 点亮 p_leds 的 mic 区:非0=bit2 红 + bit3 绿(橙),0=仅按静音规则驱动 bit2、bit3 熄灭。
|
||||
// 改动原因:参数名不能用 xC 保留字 on(on tile[:]: 语法),否则编译器在解析 interface 时报 parse error before "on"。
|
||||
void set_mic_voice_fx(unsigned voice_fx_enabled);
|
||||
// 改动原因:麦克风键长按1.5s切换AI通话降噪(DNR),开时点亮p_mic_mute_led_blue蓝灯;
|
||||
// 与变声同时开时橙+蓝混合;静音优先(静音时所有mic灯被红灯取代)。断电需保存。
|
||||
void set_mic_dnr_state(unsigned dnr_enabled);
|
||||
};
|
||||
void switch_handler(void);
|
||||
void flag_handler();
|
||||
|
||||
@@ -126,6 +126,10 @@ timer tm;
|
||||
|
||||
// 改动原因:DAC 音量单独持久化路径,与 mode 的 c1_mode 文件分离,避免互相覆盖且便于维护。
|
||||
#define C1_DAC_VOL_INFO_PATH "c1_dac_vol"
|
||||
// 改动原因:麦克风按键三种状态(静音/变声/DNR)均需断电保存,上电恢复并同步LED显示。
|
||||
#define C1_MIC_MUTE_INFO_PATH "c1_mic_mute"
|
||||
#define C1_VOICE_FX_INFO_PATH "c1_voice_fx"
|
||||
#define C1_DNR_EN_INFO_PATH "c1_dnr_en"
|
||||
// 改动原因:与 FORMAT_DELAY(30000000) 相同时间基准(get_reference_time 滴答),用户停止调节 300ms 后再写 Flash,减少磨损并满足需求。
|
||||
#define C1_DAC_VOL_SAVE_DELAY (30000000)
|
||||
|
||||
@@ -618,14 +622,35 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
|
||||
dac_vol_persist_deadline = 0;
|
||||
}
|
||||
|
||||
// 改动原因:tile1 上电已硬件全灭;先下发当前 g_mute_switch 再下发 Flash 中的 c1_mode,使首帧 apply 时 mic 已正确,避免仅 set_mode 时用占位 mic 闪错 mute 灯。
|
||||
|
||||
// 改动原因:三种 mic 状态(静音/变声/DNR)均需断电保存,上电从 Flash 读取并恢复;无效値(非 0/1)时使用默认値。
|
||||
{
|
||||
unsigned char loaded_mute = load_value(C1_MIC_MUTE_INFO_PATH);
|
||||
unsigned init_mute = (loaded_mute == 0 || loaded_mute == 1) ? (unsigned)loaded_mute : 1u;
|
||||
SET_SHARED_GLOBAL(g_mute_switch, init_mute);
|
||||
}
|
||||
{
|
||||
unsigned char loaded_vfx = load_value(C1_VOICE_FX_INFO_PATH);
|
||||
c1_mic_voice_fx = (loaded_vfx == 1) ? 1u : 0u;
|
||||
}
|
||||
{
|
||||
unsigned char loaded_dnr = load_value(C1_DNR_EN_INFO_PATH);
|
||||
unsigned init_dnr = (loaded_dnr == 0 || loaded_dnr == 1) ? (unsigned)loaded_dnr : 1u;
|
||||
SET_SHARED_GLOBAL(g_dnr_enable, init_dnr);
|
||||
}
|
||||
|
||||
// 改动原因:tile1 上电已硬件全灯;先下发三种mic状态再下发 mode,使首帧 apply 时 mic 已正确。
|
||||
{
|
||||
unsigned init_mute_for_led;
|
||||
unsigned init_dnr_for_led;
|
||||
GET_SHARED_GLOBAL(init_mute_for_led, g_mute_switch);
|
||||
GET_SHARED_GLOBAL(init_dnr_for_led, g_dnr_enable);
|
||||
i_c1_led_ctrl.set_mic_mute_state(init_mute_for_led);
|
||||
i_c1_led_ctrl.set_mode_led_color(c1_mode_to_tile_mode_led_code(c1_mode));
|
||||
// 改动原因:上电默认关闭变声灯效覆盖,避免未初始化随机亮橙。
|
||||
i_c1_led_ctrl.set_mic_voice_fx(0);
|
||||
i_c1_led_ctrl.set_mic_voice_fx(c1_mic_voice_fx);
|
||||
i_c1_led_ctrl.set_mic_dnr_state(init_dnr_for_led);
|
||||
last_mute_switch_for_led = init_mute_for_led;
|
||||
}
|
||||
|
||||
while(1)
|
||||
{
|
||||
@@ -889,6 +914,8 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
|
||||
mic_volume(effective_adc_vol, i2c);
|
||||
}
|
||||
SET_SHARED_GLOBAL(g_mute_switch, current_mute_switch);
|
||||
// 改动原因:静音状态变化后立即保存到Flash,保证断电后恢复正确的静音灯状态。
|
||||
save_value(C1_MIC_MUTE_INFO_PATH, (unsigned char)current_mute_switch);
|
||||
i_c1_led_ctrl.set_mic_mute_state(current_mute_switch);
|
||||
last_mute_switch_for_led = current_mute_switch;
|
||||
debug_printf("C1 key mic mute toggle (deferred single): %d\n", current_mute_switch);
|
||||
@@ -937,6 +964,9 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
|
||||
GET_SHARED_GLOBAL(dnr_enable, g_dnr_enable);
|
||||
dnr_enable = (dnr_enable != 0) ? 0 : 1;
|
||||
SET_SHARED_GLOBAL(g_dnr_enable, dnr_enable);
|
||||
// 改动原因:DNR状态变化后立即下发LED(开亮蓝灯/关灯),并保存到Flash供断电恢复。
|
||||
i_c1_led_ctrl.set_mic_dnr_state(dnr_enable);
|
||||
save_value(C1_DNR_EN_INFO_PATH, (unsigned char)dnr_enable);
|
||||
mic_dnr_long_fired = 1;
|
||||
debug_printf("C1 mic DNR toggle (hold 1.5s): %d\n", dnr_enable);
|
||||
}
|
||||
@@ -1008,6 +1038,8 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
|
||||
{
|
||||
c1_mic_voice_fx = (c1_mic_voice_fx ? 0 : 1);
|
||||
i_c1_led_ctrl.set_mic_voice_fx(c1_mic_voice_fx);
|
||||
// 改动原因:变声状态变化后立即保存到Flash,保证断电后恢复正确的变声灯状态。
|
||||
save_value(C1_VOICE_FX_INFO_PATH, (unsigned char)c1_mic_voice_fx);
|
||||
mic_dbl_stage = 0;
|
||||
mic_defer_left = 0;
|
||||
debug_printf("C1 mic voice/beautifier toggle: %d\n", c1_mic_voice_fx);
|
||||
@@ -1951,23 +1983,29 @@ static inline void c1_panel_leds_force_all_off_hw(void)
|
||||
p_mic_mute_led_blue <: 1;
|
||||
}
|
||||
|
||||
// 改动原因:c1_mode 与灯索引一致:1=灭 2=蓝 3=绿 4=橙(R+G) 5=紫(R+B);仅驱动 mode 区(p_mode_led_red + p_leds bit0/1),不受 mic 变声影响。
|
||||
// mic_voice_fx_on:规格变声/美声橙灯在 mic 区——p_leds bit2 红 + bit3 绿同时点亮;关变声时 mic 区仅由静音决定 bit2,bit3 熄灭。
|
||||
static inline void apply_c1_panel_leds(unsigned mode_led_color_idx, unsigned mic_mute_switch, unsigned mic_voice_fx_on, unsigned &led_shadow)
|
||||
// 改动原因:c1_mode 与灯索引一致:1=灯 2=蓝 3=绿 4=橙(R+G) 5=紫(R+B);仅驱动 mode 区(p_mode_led_red + p_leds bit0/1),不受 mic 变声影响。
|
||||
// 改动原因:mic 区灯优先级:静音=只亮红灯(覆盖变声/DNR);非静音时变声=橙(R+G),DNR=蓝(p_mic_mute_led_blue),
|
||||
// 两者同开=橙+蓝混合,两者均关=全灯。
|
||||
static inline void apply_c1_panel_leds(unsigned mode_led_color_idx, unsigned mic_mute_switch, unsigned mic_voice_fx_on, unsigned mic_dnr_on, unsigned &led_shadow)
|
||||
{
|
||||
unsigned mode_red = 0;
|
||||
unsigned mode_green = 0;
|
||||
unsigned mode_blue = 0;
|
||||
// 改动原因:与 user_main.h 约定一致——mic_mute_switch 存的是“非静音=1、静音=0”,静音时 mic 红灯(bit2)亮。
|
||||
unsigned mic_red = 0;
|
||||
unsigned mic_green = 0;
|
||||
if (mic_voice_fx_on) {
|
||||
// 改动原因:变声开为橙=R+G,映射到 XS1_PORT_4D 的 mic 专用 bit2/bit3,不占用 mode 的 bit0/bit1。
|
||||
unsigned mic_blue = 0;
|
||||
|
||||
// 改动原因:静音优先——静音(mic_mute_switch==0)时只亮红灯,屏蔽变声橙灯和DNR蓝灯;
|
||||
// 关闭静音后恢复为变声/DNR/混合/全灯的组合状态,满足“关闭静音时回到其他模式的灯颜色”需求。
|
||||
if (mic_mute_switch == 0) {
|
||||
mic_red = 1;
|
||||
mic_green = 1;
|
||||
} else {
|
||||
mic_red = (mic_mute_switch == 0) ? 1 : 0;
|
||||
mic_green = 0;
|
||||
mic_blue = 0;
|
||||
} else {
|
||||
// 改动原因:变声=橙(R+G),DNR=蓝,两者同时开=橙+蓝混合,两者均关=全灯。
|
||||
mic_red = mic_voice_fx_on ? 1 : 0;
|
||||
mic_green = mic_voice_fx_on ? 1 : 0;
|
||||
mic_blue = mic_dnr_on ? 1 : 0;
|
||||
}
|
||||
|
||||
if (mode_led_color_idx == 1) {
|
||||
@@ -1990,7 +2028,8 @@ static inline void apply_c1_panel_leds(unsigned mode_led_color_idx, unsigned mic
|
||||
mode_blue = 0;
|
||||
}
|
||||
|
||||
// 改动原因:硬件LED为低电平点亮(1灭/0亮);低四位 bit0~3 分别为 mode绿、mode蓝、mic红、mic绿,统一刷新避免旧代码固定 |=0x8 导致 bit3 永灭。
|
||||
// 改动原因:硬件LED为低电平点亮(1灯/0亮);低四位 bit0~3 分别为 mode绿、mode蓝、mic红、mic绿,统一刷新。
|
||||
// 改动原因:p_mic_mute_led_blue 由 mic_blue 驱动,DNR开且非静音时亮蓝灯(输出0=亮)。
|
||||
p_mode_led_red <: (mode_red ? 0 : 1);
|
||||
led_shadow &= ~0xF;
|
||||
led_shadow |= (mode_green ? 0x0 : 0x1);
|
||||
@@ -1998,18 +2037,19 @@ static inline void apply_c1_panel_leds(unsigned mode_led_color_idx, unsigned mic
|
||||
led_shadow |= (mic_red ? 0x0 : 0x4);
|
||||
led_shadow |= (mic_green ? 0x0 : 0x8);
|
||||
p_leds <: led_shadow;
|
||||
// 改动原因:该蓝灯当前不参与功能,保持熄灭(低电平有效下输出1表示灭)。
|
||||
p_mic_mute_led_blue <: 1;
|
||||
p_mic_mute_led_blue <: (mic_blue ? 0 : 1);
|
||||
}
|
||||
|
||||
void app_control_slave(server interface c1_led_ctrl_if i_c1_led_ctrl, chanend c_eq_data)
|
||||
{
|
||||
// 改动原因:tile1 先于 tile0 运行,上电先把硬件灯全灭且不调用 apply,避免用占位 mic/mode 组合误亮;shadow 置为全灭电平便于首包 set_* 时 apply 与端口一致。
|
||||
// 改动原因:tile1 先于 tile0 运行,上电先把硬件灯全灯且不调用 apply,避免用占位 mic/mode 组合误亮;shadow 置为全灯灯电平便于首包 set_* 时 apply 与端口一致。
|
||||
unsigned led_shadow = 0xF;
|
||||
unsigned mode_led_color_idx = 1;
|
||||
unsigned mic_mute_switch = 1;
|
||||
// 改动原因:变声/美声开时仅 p_leds bit2/bit3 显橙,与 set_mode_led_color 下发的 mode 灯独立;此处状态与 tile0 set_mic_voice_fx 同步。
|
||||
unsigned mic_voice_fx_on = 0;
|
||||
// 改动原因:AI通话降噪DNR开时点亮p_mic_mute_led_blue蓝灯;与变声同时开时橙+蓝混合;静音优先在 apply 内部处理。
|
||||
unsigned mic_dnr_on = 0;
|
||||
c1_panel_leds_force_all_off_hw();
|
||||
|
||||
unsigned eq_mode_time = 0;
|
||||
@@ -2028,19 +2068,24 @@ 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;越界时钳位为默认灯码,避免未定义索引。
|
||||
// 改动原因: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;
|
||||
apply_c1_panel_leds(mode_led_color_idx, mic_mute_switch, mic_voice_fx_on, led_shadow);
|
||||
apply_c1_panel_leds(mode_led_color_idx, mic_mute_switch, mic_voice_fx_on, mic_dnr_on, led_shadow);
|
||||
break;
|
||||
case i_c1_led_ctrl.set_mic_mute_state(unsigned mute_state):
|
||||
mic_mute_switch = (mute_state != 0) ? 1 : 0;
|
||||
apply_c1_panel_leds(mode_led_color_idx, mic_mute_switch, mic_voice_fx_on, led_shadow);
|
||||
apply_c1_panel_leds(mode_led_color_idx, mic_mute_switch, mic_voice_fx_on, mic_dnr_on, led_shadow);
|
||||
break;
|
||||
case i_c1_led_ctrl.set_mic_voice_fx(unsigned voice_fx_enabled):
|
||||
mic_voice_fx_on = (voice_fx_enabled != 0) ? 1 : 0;
|
||||
apply_c1_panel_leds(mode_led_color_idx, mic_mute_switch, mic_voice_fx_on, led_shadow);
|
||||
apply_c1_panel_leds(mode_led_color_idx, mic_mute_switch, mic_voice_fx_on, mic_dnr_on, led_shadow);
|
||||
break;
|
||||
case i_c1_led_ctrl.set_mic_dnr_state(unsigned dnr_enabled):
|
||||
// 改动原因:接收 tile0 按键逻辑下发的 DNR 状态,刷新 mic 区蓝灯;静音优先在 apply 内部处理。
|
||||
mic_dnr_on = (dnr_enabled != 0) ? 1 : 0;
|
||||
apply_c1_panel_leds(mode_led_color_idx, mic_mute_switch, mic_voice_fx_on, mic_dnr_on, led_shadow);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,6 +13,9 @@ interface c1_led_ctrl_if {
|
||||
// 改动原因:麦克风键双击“变声/美声”仅改灯效时,在 tile1 点亮 p_leds 的 mic 区:非0=bit2 红 + bit3 绿(橙),0=仅按静音规则驱动 bit2、bit3 熄灭。
|
||||
// 改动原因:参数名不能用 xC 保留字 on(on tile[:]: 语法),否则编译器在解析 interface 时报 parse error before "on"。
|
||||
void set_mic_voice_fx(unsigned voice_fx_enabled);
|
||||
// 改动原因:麦克风键长按1.5s切换AI通话降噪(DNR),开时点亮p_mic_mute_led_blue蓝灯;
|
||||
// 与变声同时开时橙+蓝混合;静音优先(静音时所有mic灯被红灯取代)。断电需保存。
|
||||
void set_mic_dnr_state(unsigned dnr_enabled);
|
||||
};
|
||||
void switch_handler(void);
|
||||
void flag_handler();
|
||||
|
||||
Reference in New Issue
Block a user