diff --git a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/audiohw.xc b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/audiohw.xc index 737c624..7ad5f45 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/audiohw.xc +++ b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/audiohw.xc @@ -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; -} \ No newline at end of file +}