don't mute dac when mic insertion
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user