diff --git a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/core/synido.xn b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/core/synido.xn index aa57bfc..2a8b88d 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/core/synido.xn +++ b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/core/synido.xn @@ -53,7 +53,7 @@ - + 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 76e4de8..d89f366 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 @@ -107,10 +107,6 @@ unsigned g_dac_mode = 10; unsigned g_new_dac_mode = 0; unsigned g_samfreq = 48000; unsigned g_dsd_mode = 0; -// mic detect events: mute_handler (tile[1]) → button_task (tile[0]) -#define MIC_DET_MUTE 1 // mic插入或全拔出,立即mute -#define MIC_DET_UNMUTE 2 // 插入1s后恢复音量 - unsafe chanend uc_audiohw; // tile[1] end: AudioHwConfig → button_task (tile[0]) #if HID_DFU_EN unsafe streaming chanend uc_dfu; // tile[1] send end: hid_button_task → button_task (tile[0]) @@ -154,7 +150,7 @@ port p_sda = PORT_I2C_SDA; //out port p_htr3235_sdb = PORT_HTR3236_SDB; /* 连接到HTR3236的SDB引脚,用于控制其电源状态 */ out port p_ctl_mute = PORT_CTL_MUTE; -in port p_ctl_det = PORT_CTL_DET; +out port p_ctl_mute2 = PORT_CTL_MUTE2; /* Board setup for XU316 MC Audio (1v1) */ @@ -332,7 +328,6 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, #if HID_DFU_EN , streaming chanend c_dfu_rx #endif - , chanend c_mic_det ) { //hwtimer_t timer = hwtimer_alloc(); @@ -402,7 +397,6 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, unsigned flag_mic_mute = 0; unsigned flag_hp_mute = 0; - unsigned mic_det_muted = 0; // mic检测导致的mute(不影响LED和g_mic_volume_level) unsigned push_button_mic_mute_state_old = 1; // Active low unsigned push_button_hp_mute_state_old = 1; // Active low @@ -949,24 +943,6 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, } #endif - case c_mic_det :> unsigned mic_det_cmd: - { - if (mic_det_cmd == MIC_DET_MUTE) { - mic_det_muted = 1; - // 仅mute硬件,不改变g_mic_volume_level和LED - mic_volume(0); - debug_printf("mic_det: mute (det)\n"); - } else if (mic_det_cmd == MIC_DET_UNMUTE) { - mic_det_muted = 0; - // 恢复音量,但如果用户手动mute了则不恢复 - if (!flag_mic_mute) { - mic_volume(codec_adc_pga_gain_reg_value); - debug_printf("mic_det: unmute -> pga=%d\n", codec_adc_pga_gain_reg_value); - } - } - break; - } - case tmr when timerafter(time) :> void : { //hwtimer_change_trigger_time(timer, hwtimer_get_time(timer) + KEY_POLLING_INTERVAL); @@ -1413,8 +1389,7 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, } else { - if (!mic_det_muted) - mic_volume(codec_adc_pga_gain_reg_value); + 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++) @@ -1457,9 +1432,7 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, uint8_t old_led_count = mic_gain_to_led[codec_adc_pga_gain_reg_value]; // 增加音量 - ++codec_adc_pga_gain_reg_value; - if (!mic_det_muted) - mic_volume(codec_adc_pga_gain_reg_value); + 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; debug_printf("volume up %d\n", codec_adc_pga_gain_reg_value); save_value(mic_vol_path, codec_adc_pga_gain_reg_value); @@ -1477,9 +1450,7 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, uint8_t old_led_count = mic_gain_to_led[codec_adc_pga_gain_reg_value]; // 减小音量 - --codec_adc_pga_gain_reg_value; - if (!mic_det_muted) - mic_volume(codec_adc_pga_gain_reg_value); + 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; debug_printf("volume down %d\n", codec_adc_pga_gain_reg_value); save_value(mic_vol_path, codec_adc_pga_gain_reg_value); @@ -1743,8 +1714,7 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, new_led_count = 0; } else { codec_adc_pga_gain_reg_value = new_mic_level; - if (!mic_det_muted) - mic_volume(codec_adc_pga_gain_reg_value); + mic_volume(codec_adc_pga_gain_reg_value); new_led_count = mic_gain_to_led[codec_adc_pga_gain_reg_value]; } save_value(mic_vol_path, (unsigned char)codec_adc_pga_gain_reg_value); @@ -1940,7 +1910,6 @@ void AudioHwRemote(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vo #if HID_DFU_EN , streaming chanend c_dfu_rx #endif - , chanend c_mic_det ) { i2c_master_if i2c[1]; @@ -1953,7 +1922,6 @@ void AudioHwRemote(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vo #if HID_DFU_EN , c_dfu_rx #endif - , c_mic_det ); } } @@ -2005,72 +1973,11 @@ void AudioHwConfig(unsigned samFreq, unsigned mClk, unsigned dsdMode, unsigned s } -void mute_handler(chanend c_mic_det) +void mute_handler() { - // 开机mute sequence p_ctl_mute <: 0; + p_ctl_mute2 <: 0; delay_milliseconds(1000); p_ctl_mute <: 0xf; - - // mic detect: bit1=mic1 (插入=高, 拔出=低), bit2=mic2 (插入=低, 拔出=高) - unsigned det_val; - p_ctl_det :> det_val; - unsigned mic1_in = (det_val >> 1) & 1; // bit1: 1=inserted - unsigned mic2_in = ((det_val >> 2) & 1) ^ 1; // bit2: 0=inserted, invert - unsigned any_mic_in = mic1_in || mic2_in; - unsigned prev_any_mic_in = any_mic_in; - - // 如果开机时全拔出,发送mute - if (!any_mic_in) { - c_mic_det <: (unsigned)MIC_DET_MUTE; - } - - timer tmr; - unsigned time; - tmr :> time; - #define MIC_DET_POLL_MS 10 - time += MIC_DET_POLL_MS * 100000; // 10ms in 100MHz ticks - - while (1) { - select { - case tmr when timerafter(time) :> void: - { - time += MIC_DET_POLL_MS * 100000; - - p_ctl_det :> det_val; - mic1_in = (det_val >> 1) & 1; - mic2_in = ((det_val >> 2) & 1) ^ 1; - any_mic_in = mic1_in || mic2_in; - - if (any_mic_in != prev_any_mic_in) { - // 状态变化:立即mute防止pop音 - c_mic_det <: (unsigned)MIC_DET_MUTE; - debug_printf("mic det change: mic1=%d mic2=%d -> mute\n", mic1_in, mic2_in); - - // 等1s让插拔稳定 - delay_milliseconds(1000); - - // 重新读取稳定状态 - p_ctl_det :> det_val; - mic1_in = (det_val >> 1) & 1; - mic2_in = ((det_val >> 2) & 1) ^ 1; - any_mic_in = mic1_in || mic2_in; - - if (any_mic_in) { - // 有mic插入,恢复音量 - c_mic_det <: (unsigned)MIC_DET_UNMUTE; - debug_printf("mic stable inserted -> unmute\n"); - } - // 全拔出则保持mute,不发UNMUTE - - prev_any_mic_in = any_mic_in; - - // 重新同步timer - tmr :> time; - time += MIC_DET_POLL_MS * 100000; - } - break; - } - } - } + p_ctl_mute2 <: 0xf; } diff --git a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/main.xc b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/main.xc index f6716aa..e84c073 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/main.xc +++ b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/main.xc @@ -432,9 +432,9 @@ extern int dsp_worker_tile(chanend c_dsp_to_ex3d, int worker_id); extern void ex3d_task(); extern void hid_button_task(chanend cc_mic_level, chanend c_hid, chanend c_hidSendData, chanend c_uac_vol, chanend c_ex3d_hid_cmd); #if HID_DFU_EN -extern void AudioHwRemote(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, chanend c_audiohw_rx, streaming chanend c_dfu_rx, chanend c_mic_det); +extern void AudioHwRemote(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, chanend c_audiohw_rx, streaming chanend c_dfu_rx); #else -extern void AudioHwRemote(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, chanend c_audiohw_rx, chanend c_mic_det); +extern void AudioHwRemote(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, chanend c_audiohw_rx); #endif extern void dnr_dsp_proc_task(void); @@ -447,7 +447,7 @@ extern unsafe streaming chanend uc_dfu; #endif extern void key_sender(chanend c_key); extern void key_receiver(chanend c_key); -extern void mute_handler(chanend c_mic_det); +extern void mute_handler(); /* Main for USB Audio Applications */ @@ -551,7 +551,6 @@ int main() chan c_eq_data; chan c_uac_vol; chan c_ex3d_hid_cmd; - chan c_mic_det; par { @@ -580,7 +579,7 @@ int main() } } - on tile[1]: mute_handler(c_mic_det); + on tile[1]: mute_handler(); on tile[0] : { par { @@ -592,7 +591,6 @@ int main() #if HID_DFU_EN , c_dfu #endif - , c_mic_det ); } }