From f90a49d763daeefe3d299393b46e4804aff8fa13 Mon Sep 17 00:00:00 2001 From: Steven Dan Date: Sat, 11 Apr 2026 18:36:12 +0800 Subject: [PATCH] adc monitor for F1 --- .../src/extensions/audiohw.xc | 22 +++++++------- .../src/extensions/dsp.c | 30 ++++++++++++++----- 2 files changed, 33 insertions(+), 19 deletions(-) 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 8ad11ef..db71938 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 @@ -662,11 +662,8 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, mic_mute_blink_tick = 1; } - if ((g_monitor_switch == 1) && !flag_mic_mute && codec_adc_pga_gain_reg_value >= 2) { - unsafe { NAU88C22_REGWRITE(0x0030, 0xff00, (client interface i2c_master_if)i_i2c_client); } - } else { - unsafe { NAU88C22_REGWRITE(0x0030, 0x0000, (client interface i2c_master_if)i_i2c_client); } - } + // 硬件耳返通路已禁用,改为数字监听(在tile1 UserBufferManagement中实现) + // 初始化同步在上方已通过 cc_mic_level <: 0xFE 完成 // DAC 默认音量(mute 时写 0x0000) if(dac_level == DAC_LEVEL_MIN) @@ -735,6 +732,11 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, } #endif + // 初始化数字监听开关同步到tile1 + cc_mic_level <: 0xFE; + cc_mic_level <: (unsigned)g_monitor_switch; + debug_printf("Init monitor sync: sw=%d\n", g_monitor_switch); + // 出厂默认:AI降噪开启,初始化LED和算法 #if DNR_ENABLE == 1 if (flag_aidenoise_onoff) { @@ -1870,12 +1872,10 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, if (g_request_monitor_switch_set) { g_request_monitor_switch_set = 0; unsigned new_mon = g_monitor_switch; - // 根据当前mic状态和新的耳返开关值更新reg 0x30 - if (new_mon && !flag_mic_mute && codec_adc_pga_gain_reg_value >= 2) { - unsafe { NAU88C22_REGWRITE(0x0030, 0xff00, (client interface i2c_master_if)i_i2c_client); } - } else { - unsafe { NAU88C22_REGWRITE(0x0030, 0x0000, (client interface i2c_master_if)i_i2c_client); } - } + // 同步数字监听开关到tile1 + cc_mic_level <: 0xFE; + cc_mic_level <: (unsigned)new_mon; + debug_printf("HID monitor sync: sw=%d\n", new_mon); save_value(monitor_sw_path, (unsigned char)new_mon); debug_printf("HID SET_MONITOR_SWITCH: %d\n", new_mon); } diff --git a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/dsp.c b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/dsp.c index 59ffbc6..687a401 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/dsp.c +++ b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/dsp.c @@ -67,6 +67,9 @@ unsigned g_dnr_on_off_t1 = DNR_OFF; // Default DNR off #define MUTE_OFF 0 unsigned g_mute_on_off_t1 = MUTE_ON; +// 数字监听 tile1 共享变量(由 tile0 通过 cc_mic_level 通道同步) +unsigned g_monitor_switch_t1 = 0; // 耳返开关 tile1 副本(0=关闭,1=开启) + unsigned g_mute_on_off_t0 = MUTE_OFF; unsigned g_game_mode = 0; @@ -144,11 +147,11 @@ enum {UBM_A3D_OFF=0, UBM_A3D_VON=1, UBM_A3D_ON=2}; extern void buffer_exchange(chanend_t c_data, unsigned sampsFromUsbToAudio[], unsigned sampsFromAudioToUsb[], unsigned sample_freq); extern unsigned int is_eq_disabled(void); extern unsigned int g_eq_enable; + void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudioToUsb[]) { uint32_t is_3d; - uint32_t is_dnr; - uint32_t is_mute; + unsigned is_monitor; #if UAC1_MODE return; #endif @@ -160,8 +163,6 @@ void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudi #endif GET_SHARED_GLOBAL(is_3d, g_3d_on_off_t1); - GET_SHARED_GLOBAL(is_dnr, g_dnr_on_off_t1); - GET_SHARED_GLOBAL(is_mute, g_mute_on_off_t1); #if (HID_CONTROLS > 0) AUDIO_T absVal, maxVal; #endif @@ -252,6 +253,11 @@ void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudi #elif DNR_ENABLE == 1 buffer_exchange(uc_eq_data, sampsFromUsbToAudio, sampsFromAudioToUsb, ubm_sample_freq); #endif + GET_SHARED_GLOBAL(is_monitor, g_monitor_switch_t1); + if (is_monitor) { + sampsFromUsbToAudio[0] += (sampsFromAudioToUsb[0] >> 1); + sampsFromUsbToAudio[1] += (sampsFromAudioToUsb[1] >> 1); + } } @@ -877,13 +883,13 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c tmp = chan_in_word(cc_mic_level); debug_printf("event_mic_vol received: 0x%02X\n", tmp); -#if USE_EX3D == 1 if (tmp == 0xFC) { // 音频模式命令:来自 audiohw.xc button_task 的模式切换 + // 必须先读取payload,无论是否启用EX3D current_mode_local = chan_in_word(cc_mic_level); if (current_mode_local > 3) current_mode_local = 0; debug_printf("hid_button_task received audio_mode: %d\n", current_mode_local); - +#if USE_EX3D == 1 if (current_mode_local == 0) { // 无音效模式:关闭EX3D和EQ算法 audio_ex3d_set_onoff(0); @@ -945,16 +951,25 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c #endif } SET_SHARED_GLOBAL(g_3d_on_off_t1, is_3d_on); +#endif } else if (tmp == 0xFD) { // 脚步增强按键发来的 expand gain 命令 + // 必须先读取payload,无论是否启用EX3D int32_t gain = (int32_t)chan_in_word(cc_mic_level); +#if USE_EX3D == 1 if ((0 <= gain) && (gain <= 20)) { Ex3dExpandGain = gain; EX3DAudio_SetExpandGain(Ex3dExpandGain); debug_printf("Button set CMD_EXPAND_GAIN: %d\n", gain); } +#endif + } else if (tmp == 0xFE) { + // 数字监听开关同步命令:来自 tile0(所有模式都需要处理) + unsigned mon_sw = chan_in_word(cc_mic_level); + SET_SHARED_GLOBAL(g_monitor_switch_t1, mon_sw); + debug_printf("Monitor sync: sw=%d\n", mon_sw); } else { - // Mic 静音状态命令 + // Mic 静音状态命令(所有模式都需要处理) switch (tmp) { case MUTED_MIC: SET_SHARED_GLOBAL(g_mute_on_off_t1, MUTE_ON); @@ -971,7 +986,6 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c break; } } -#endif } continue;