diff --git a/sw_usb_audio/app_usb_aud_fosi_c1/src/extensions/audiohw.xc b/sw_usb_audio/app_usb_aud_fosi_c1/src/extensions/audiohw.xc index 73e2da6..972d1ee 100644 --- a/sw_usb_audio/app_usb_aud_fosi_c1/src/extensions/audiohw.xc +++ b/sw_usb_audio/app_usb_aud_fosi_c1/src/extensions/audiohw.xc @@ -551,14 +551,8 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli unsigned hp_db_cnt = 0; unsigned hp_cand = 0xFFFFFFFFu; unsigned hp_stable = 0; - // 改动原因:记录上次写入 0x0034 时的“插拔强制哑音”组合态(耳机拔出 | MIC 拔出 | MIC 插入),任一路变化都要重推寄存器。 + // 改动原因:记录上次写入 0x0034 时的耳机拔出强制哑音态;MIC 插拔不再 mute DAC,故仅跟踪 hp_jack_dac_mute。 unsigned old_dac_jack_force_mute = 0; - // 改动原因:MIC 拔出瞬间哑 DAC(参考 phaten MIC_DET_DAC_MUTE),拔出边沿起 500ms 后恢复 DAC 寄存器;不改 g_dac_vol。 - unsigned mic_pull_dac_mute = 0; - unsigned mic_pull_dac_deadline = 0; - // 改动原因:MIC 插入(去抖稳定后)立即哑 DAC 防 pop,稳定插入起再计 500ms 后恢复 DAC;拔出时清零;不改 g_dac_vol。 - unsigned mic_insert_dac_mute = 0; - unsigned mic_insert_dac_deadline = 0; // 改动原因:MIC 拔出强制 ADC mute;插入 500ms 后按 g_mute_switch+g_adc_vol 恢复,不修改 g_mute_switch,故 mic mute LED 不受插拔影响。 unsigned mic_jack_adc_mute = 0; unsigned mic_restore_deadline = 0; @@ -783,7 +777,7 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli } } } - // 改动原因:耳机/MIC 插拔检测——写 NAU88C22(0x0034 / mic_volume);不修改 g_dac_vol、g_mute_switch;MIC 插/拔均对 DAC 做瞬时静音+500ms 恢复防 pop。 + // 改动原因:耳机/MIC 插拔检测——写 NAU88C22(0x0034 / mic_volume);不修改 g_dac_vol、g_mute_switch;仅耳机拔出 mute DAC,MIC 插拔不 mute DAC。 { unsigned raw_det; p_mic_phone_detect :> raw_det; @@ -830,31 +824,7 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli hp_jack_dac_mute = 0; } } - if (!mic_stable) { - mic_insert_dac_mute = 0; - mic_insert_dac_deadline = 0; - // 改动原因:MIC 拔出边沿立即拉 DAC 寄存器静音,减轻瞬态 pop;满 500ms(相对拔出时刻)后 mic_pull_dac_mute 清零恢复 g_dac_vol 对应音量。 - if (mic_stable_prev) { - mic_pull_dac_mute = 1; - mic_pull_dac_deadline = now + C1_JACK_RESTORE_DELAY; - } - if (mic_pull_dac_deadline != 0 && timeafter(now, mic_pull_dac_deadline)) { - mic_pull_dac_mute = 0; - mic_pull_dac_deadline = 0; - } - } else { - mic_pull_dac_mute = 0; - mic_pull_dac_deadline = 0; - // 改动原因:去抖后由拔出→插入的边沿:立刻 mic_insert_dac_mute 哑 DAC;自该稳定插入时刻起 500ms 后清除以恢复 g_dac_vol。 - if (mic_stable && !mic_stable_prev) { - mic_insert_dac_mute = 1; - mic_insert_dac_deadline = now + C1_JACK_RESTORE_DELAY; - } - if (mic_insert_dac_mute && mic_insert_dac_deadline != 0 && timeafter(now, mic_insert_dac_deadline)) { - mic_insert_dac_mute = 0; - mic_insert_dac_deadline = 0; - } - } + // 改动原因:需求变更——MIC 插/拔不再 mute DAC(0x0034),仅保留下方 ADC 插拔策略与耳机拔出 DAC mute。 // 改动原因:ADC 插拔策略——仅 MIC+耳机均拔出时 mic_jack_adc_mute 强制静音;任一端插入且此前为双拔出静音时,500ms 后清除以按 g_mute_switch 恢复;仅拔一端而另一端仍在则立即解除强制静音。 { unsigned both_jacks_out = (!mic_stable && !hp_stable) ? 1u : 0u; @@ -892,16 +862,16 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli // 改动原因:仅双拔出时 mic_jack_adc_mute 强制 ADC 静音;任一端插入满 500ms 或未处于双拔出静音态时按 g_mute_switch:0→0,1→g_adc_vol。 unsigned effective_adc_vol = mic_jack_adc_mute ? 0 : ((mute_switch == 0) ? 0 : adc_vol); - // 改动原因:耳机拔出或 MIC 插/拔防 pop 时写 C1_DAC_MUTE(不改 g_dac_vol);各事件满 500ms 或互斥清除后按 g_dac_vol 写回 0x0034。 + // 改动原因:仅耳机拔出时写 C1_DAC_MUTE(不改 g_dac_vol);插入满 500ms 后按 g_dac_vol 写回 0x0034;MIC 插拔不再触发 DAC mute。 { - unsigned dac_jack_force_mute = hp_jack_dac_mute | mic_pull_dac_mute | mic_insert_dac_mute; + unsigned dac_jack_force_mute = hp_jack_dac_mute; unsigned dac_reg = dac_jack_force_mute ? C1_DAC_MUTE : (dac_vol & 0xff); if (old_dac_vol != dac_vol || old_type != audio_type || old_dac_jack_force_mute != dac_jack_force_mute) { old_dac_vol = dac_vol; old_dac_jack_force_mute = dac_jack_force_mute; NAU88C22_REGWRITE(0x0034, ((dac_reg & 0xff) << 8) | (dac_reg & 0xff), i2c); SET_SHARED_GLOBAL(g_old_audio_type, audio_type); - debug_printf("set dac_reg 0x%x (hp=%d mic_pull=%d mic_ins=%d) audio_type %d \n", dac_reg, hp_jack_dac_mute, mic_pull_dac_mute, mic_insert_dac_mute, audio_type); + debug_printf("set dac_reg 0x%x (hp=%d) audio_type %d \n", dac_reg, hp_jack_dac_mute, audio_type); } } diff --git a/sw_usb_audio/app_usb_aud_fosi_c1_lp/src/extensions/audiohw.xc b/sw_usb_audio/app_usb_aud_fosi_c1_lp/src/extensions/audiohw.xc index 272a364..9d4325c 100644 --- a/sw_usb_audio/app_usb_aud_fosi_c1_lp/src/extensions/audiohw.xc +++ b/sw_usb_audio/app_usb_aud_fosi_c1_lp/src/extensions/audiohw.xc @@ -144,6 +144,8 @@ timer tm; #define C1_JACK_DEBOUNCE_SAMPLES 3u extern void device_reboot(void); +extern unsigned char key_validate(unsigned char offset); +extern void flash_opt_unlock(void); // 改动原因:判断 Flash 读出字节是否为合法 NAU88C22 DAC 音量码:0x00 表示按键规则下的 mute,0x4B~0xCF 为正常衰减范围。 static unsigned c1_saved_dac_vol_is_valid(unsigned char v) @@ -549,15 +551,9 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli unsigned hp_db_cnt = 0; unsigned hp_cand = 0xFFFFFFFFu; unsigned hp_stable = 0; - // 改动原因:记录上次写入 0x0034 时的“插拔强制哑音”组合态(耳机拔出 | MIC 拔出 | MIC 插入),任一路变化都要重推寄存器。 + // 改动原因:记录上次写入 0x0034 时的耳机拔出强制哑音态;MIC 插拔不再 mute DAC,故仅跟踪 hp_jack_dac_mute。 unsigned old_dac_jack_force_mute = 0; - // 改动原因:MIC 拔出瞬间哑 DAC(参考 phaten MIC_DET_DAC_MUTE),拔出边沿起 500ms 后恢复 DAC 寄存器;不改 g_dac_vol。 - unsigned mic_pull_dac_mute = 0; - unsigned mic_pull_dac_deadline = 0; - // 改动原因:MIC 插入(去抖稳定后)立即哑 DAC 防 pop,稳定插入起再计 500ms 后恢复 DAC;拔出时清零;不改 g_dac_vol。 - unsigned mic_insert_dac_mute = 0; - unsigned mic_insert_dac_deadline = 0; - // 改动原因:仅当 MIC 与耳机均拔出时强制 ADC mute;任一端插入 500ms 后按 g_mute_switch+g_adc_vol 恢复,不修改 g_mute_switch。 + // 改动原因:MIC 拔出强制 ADC mute;插入 500ms 后按 g_mute_switch+g_adc_vol 恢复,不修改 g_mute_switch,故 mic mute LED 不受插拔影响。 unsigned mic_jack_adc_mute = 0; unsigned mic_restore_deadline = 0; unsigned mic_stable_prev = 0xFFFFFFFFu; @@ -586,6 +582,17 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli eq_mode_time += EQ_MODE_DELAY; eq_sync_timer :> eq_sync_time; eq_sync_time += EQ_SYNC_DELAY; + unsigned key_verified = 0; + + delay_milliseconds(10); + + if (key_validate(1) == 1) + { + key_verified = 1; + } + + flash_opt_unlock(); + unsigned c1_mode = load_value(C1_MODE_INFO_PATH); #if HID_DFU_EN @@ -773,7 +780,7 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli } } } - // 改动原因:耳机/MIC 插拔检测——写 NAU88C22(0x0034 / mic_volume);不修改 g_dac_vol、g_mute_switch;MIC 插/拔均对 DAC 做瞬时静音+500ms 恢复防 pop。 + // 改动原因:耳机/MIC 插拔检测——写 NAU88C22(0x0034 / mic_volume);不修改 g_dac_vol、g_mute_switch;仅耳机拔出 mute DAC,MIC 插拔不 mute DAC。 { unsigned raw_det; p_mic_phone_detect :> raw_det; @@ -820,31 +827,7 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli hp_jack_dac_mute = 0; } } - if (!mic_stable) { - mic_insert_dac_mute = 0; - mic_insert_dac_deadline = 0; - // 改动原因:MIC 拔出边沿立即拉 DAC 寄存器静音,减轻瞬态 pop;满 500ms(相对拔出时刻)后 mic_pull_dac_mute 清零恢复 g_dac_vol 对应音量。 - if (mic_stable_prev) { - mic_pull_dac_mute = 1; - mic_pull_dac_deadline = now + C1_JACK_RESTORE_DELAY; - } - if (mic_pull_dac_deadline != 0 && timeafter(now, mic_pull_dac_deadline)) { - mic_pull_dac_mute = 0; - mic_pull_dac_deadline = 0; - } - } else { - mic_pull_dac_mute = 0; - mic_pull_dac_deadline = 0; - // 改动原因:去抖后由拔出→插入的边沿:立刻 mic_insert_dac_mute 哑 DAC;自该稳定插入时刻起 500ms 后清除以恢复 g_dac_vol。 - if (mic_stable && !mic_stable_prev) { - mic_insert_dac_mute = 1; - mic_insert_dac_deadline = now + C1_JACK_RESTORE_DELAY; - } - if (mic_insert_dac_mute && mic_insert_dac_deadline != 0 && timeafter(now, mic_insert_dac_deadline)) { - mic_insert_dac_mute = 0; - mic_insert_dac_deadline = 0; - } - } + // 改动原因:需求变更——MIC 插/拔不再 mute DAC(0x0034),仅保留下方 ADC 插拔策略与耳机拔出 DAC mute。 // 改动原因:ADC 插拔策略——仅 MIC+耳机均拔出时 mic_jack_adc_mute 强制静音;任一端插入且此前为双拔出静音时,500ms 后清除以按 g_mute_switch 恢复;仅拔一端而另一端仍在则立即解除强制静音。 { unsigned both_jacks_out = (!mic_stable && !hp_stable) ? 1u : 0u; @@ -882,16 +865,16 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli // 改动原因:仅双拔出时 mic_jack_adc_mute 强制 ADC 静音;任一端插入满 500ms 或未处于双拔出静音态时按 g_mute_switch:0→0,1→g_adc_vol。 unsigned effective_adc_vol = mic_jack_adc_mute ? 0 : ((mute_switch == 0) ? 0 : adc_vol); - // 改动原因:耳机拔出或 MIC 插/拔防 pop 时写 C1_DAC_MUTE(不改 g_dac_vol);各事件满 500ms 或互斥清除后按 g_dac_vol 写回 0x0034。 + // 改动原因:仅耳机拔出时写 C1_DAC_MUTE(不改 g_dac_vol);插入满 500ms 后按 g_dac_vol 写回 0x0034;MIC 插拔不再触发 DAC mute。 { - unsigned dac_jack_force_mute = hp_jack_dac_mute | mic_pull_dac_mute | mic_insert_dac_mute; + unsigned dac_jack_force_mute = hp_jack_dac_mute; unsigned dac_reg = dac_jack_force_mute ? C1_DAC_MUTE : (dac_vol & 0xff); if (old_dac_vol != dac_vol || old_type != audio_type || old_dac_jack_force_mute != dac_jack_force_mute) { old_dac_vol = dac_vol; old_dac_jack_force_mute = dac_jack_force_mute; NAU88C22_REGWRITE(0x0034, ((dac_reg & 0xff) << 8) | (dac_reg & 0xff), i2c); SET_SHARED_GLOBAL(g_old_audio_type, audio_type); - debug_printf("set dac_reg 0x%x (hp=%d mic_pull=%d mic_ins=%d) audio_type %d \n", dac_reg, hp_jack_dac_mute, mic_pull_dac_mute, mic_insert_dac_mute, audio_type); + debug_printf("set dac_reg 0x%x (hp=%d) audio_type %d \n", dac_reg, hp_jack_dac_mute, audio_type); } } @@ -1555,8 +1538,7 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli if ((se_count % 90) == 0) { - unsigned key = GetKeyFlag(); - if (key != 0x20241224) + if (key_verified == 0) { debug_printf("se reboot\n"); device_reboot();