mute led act as blinking

This commit is contained in:
Steven Dan
2026-03-31 11:39:21 +08:00
parent eae7e2178b
commit 9073ed3b3a

View File

@@ -274,6 +274,7 @@ in port p_button_ai71_onoff = PORT_BUTTON_AI71_ONOFF; // 1M
#define TIMER_PERIOD (100000)
#define FACTORY_RESET_HOLD_TICKS 3000 // 3000 × 1ms = 3秒
#define FACTORY_RESET_BLINK_TICKS 400 // 每相400ms
#define MUTE_BLINK_HALF_PERIOD 500 // mute LED blink half period 250ms
#define BTN_COMBO_DELAY_TICKS 40 // 单键去抖/组合检测窗口50ms
unsigned g_windows_detect_done = 0;
@@ -403,6 +404,8 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
unsigned factory_reset_hold_count = 0; // 两键同时按住计数×1ms
unsigned factory_reset_blink_state = 0; // 0=空闲1-6=闪烁相位
unsigned factory_reset_blink_tick = 0; // 当前相位内计数
unsigned mic_mute_blink_tick = 0;
unsigned hp_mute_blink_tick = 0;
// 组合键去抖:单键动作延迟 BTN_COMBO_DELAY_TICKS 后触发,期间若另一键也按下则切换为组合模式
unsigned btn_music_hold_ticks = 0; // music键连续按住计数
unsigned btn_game_hold_ticks = 0; // game键连续按住计数
@@ -607,7 +610,7 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
// 若mic_mute已从flash恢复为1则此处先以正常gain调用再用mute覆盖
mic_volume(codec_adc_pga_gain_reg_value);
{
int mic_led_count = flag_mic_mute ? 0 : mic_gain_to_led[codec_adc_pga_gain_reg_value];
int mic_led_count = flag_mic_mute ? 15 : mic_gain_to_led[codec_adc_pga_gain_reg_value];
for(int i = 0; i < 15; i++)
{
if (i < mic_led_count)
@@ -620,6 +623,7 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
if(flag_mic_mute) {
mic_volume(0);
g_mic_volume_level = 0;
mic_mute_blink_tick = 1;
}
if ((g_monitor_switch == 1) && !flag_mic_mute && codec_adc_pga_gain_reg_value >= 2) {
@@ -634,7 +638,7 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
else
dac_volume(dac_level - DAC_LEVEL_MAX);
{
int dac_led_count = flag_hp_mute ? 0 : dac_gain_to_led[dac_level];
int dac_led_count = flag_hp_mute ? 15 : dac_gain_to_led[dac_level];
for(int i = 0; i < 15; i++)
{
if (i < dac_led_count)
@@ -647,6 +651,7 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
if(flag_hp_mute) {
unsafe { NAU88C22_REGWRITE(0x0034, 0x0000, (client interface i2c_master_if)i_i2c_client); }
g_volume_level = 0;
hp_mute_blink_tick = 1;
}
// Initialize mode button LEDs: at most one may be lit at a time
led_off(&led_ctx, LED_MUSIC);
@@ -1377,17 +1382,17 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
{
mic_volume(0);
g_mic_volume_level = 0;
current_mic_led_pos = mic_gain_to_led[codec_adc_pga_gain_reg_value] - 1;
for(int i = 0; i <= current_mic_led_pos; i++)
{
if ((i < 15) && (i >= 0))
led_off(&led_ctx, led_l_physical_map[i]);
}
for(int i = 0; i < 15; i++)
led_on(&led_ctx, led_l_physical_map[i]);
mic_mute_blink_tick = 1;
}
else
{
mic_volume(codec_adc_pga_gain_reg_value);
g_mic_volume_level = (codec_adc_pga_gain_reg_value <= 37) ? codec_adc_pga_gain_reg_value : 37;
mic_mute_blink_tick = 0;
for(int i = 0; i < 15; i++)
led_off(&led_ctx, led_l_physical_map[i]);
current_mic_led_pos = mic_gain_to_led[codec_adc_pga_gain_reg_value] - 1;
for(int i = 0; i <= current_mic_led_pos; i++)
{
@@ -1615,12 +1620,9 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
{
unsafe { NAU88C22_REGWRITE(0x0034, 0x0000, (client interface i2c_master_if)i_i2c_client); }
g_volume_level = 0;
current_mic_led_pos = dac_gain_to_led[dac_level] - 1;
for(int i = 0; i <= current_mic_led_pos; i++)
{
if ((i < 15) && (i >= 0))
led_off(&led_ctx, led_d_physical_map[i]);
}
for(int i = 0; i < 15; i++)
led_on(&led_ctx, led_d_physical_map[i]);
hp_mute_blink_tick = 1;
}
else
{
@@ -1629,6 +1631,9 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
else
dac_volume(dac_level - DAC_LEVEL_MAX);
g_volume_level = dac_level;
hp_mute_blink_tick = 0;
for(int i = 0; i < 15; i++)
led_off(&led_ctx, led_d_physical_map[i]);
current_mic_led_pos = dac_gain_to_led[dac_level] - 1;
for(int i = 0; i <= current_mic_led_pos; i++)
{
@@ -1637,6 +1642,27 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
}
}
// mute blink: 250ms on / 250ms off
if(mic_mute_blink_tick > 0)
{
mic_mute_blink_tick++;
if(mic_mute_blink_tick >= MUTE_BLINK_HALF_PERIOD * 2)
mic_mute_blink_tick = 1;
if(mic_mute_blink_tick == 1)
for(int i = 0; i < 15; i++) led_on(&led_ctx, led_l_physical_map[i]);
else if(mic_mute_blink_tick == MUTE_BLINK_HALF_PERIOD + 1)
for(int i = 0; i < 15; i++) led_off(&led_ctx, led_l_physical_map[i]);
}
if(hp_mute_blink_tick > 0)
{
hp_mute_blink_tick++;
if(hp_mute_blink_tick >= MUTE_BLINK_HALF_PERIOD * 2)
hp_mute_blink_tick = 1;
if(hp_mute_blink_tick == 1)
for(int i = 0; i < 15; i++) led_on(&led_ctx, led_d_physical_map[i]);
else if(hp_mute_blink_tick == MUTE_BLINK_HALF_PERIOD + 1)
for(int i = 0; i < 15; i++) led_off(&led_ctx, led_d_physical_map[i]);
}
led_update_all(&led_ctx);
#endif
@@ -1951,4 +1977,4 @@ void mute_handler()
p_ctl_mute <: 0;
delay_milliseconds(1000);
p_ctl_mute <: 1;
}
}