From 9f2edd1e14042d9724166cc41f0a27b678e05759 Mon Sep 17 00:00:00 2001 From: Steven Dan Date: Thu, 21 May 2026 15:09:59 +0800 Subject: [PATCH] update modes --- lib_xua/lib_xua/src/hid/hid.xc | 12 +- .../app_usb_aud_fosi_c1/CMakeLists.txt | 158 +++++++++--------- .../app_usb_aud_fosi_c1/gen_factory.bat | 2 +- .../app_usb_aud_fosi_c1/gen_update.bat | 2 +- .../src/extensions/audiohw.xc | 17 +- .../app_usb_aud_fosi_c1/src/extensions/eq.c | 20 +-- .../app_usb_aud_fosi_c1_lp/CMakeLists.txt | 71 ++++++-- .../app_usb_aud_fosi_c1_lp/gen_factory.bat | 1 - .../app_usb_aud_fosi_c1_lp/gen_update.bat | 1 - .../src/extensions/audiohw.xc | 30 ++-- .../src/extensions/dnr/dnr_dsp_buf.c | 6 + .../src/extensions/eq.c | 22 +-- .../src/extensions/extra_i2s.xc | 31 ---- .../src/extensions/user_main.h | 13 +- 14 files changed, 196 insertions(+), 190 deletions(-) delete mode 100644 sw_usb_audio/app_usb_aud_fosi_c1_lp/gen_factory.bat delete mode 100644 sw_usb_audio/app_usb_aud_fosi_c1_lp/gen_update.bat diff --git a/lib_xua/lib_xua/src/hid/hid.xc b/lib_xua/lib_xua/src/hid/hid.xc index d7dc4b8..98f9ff3 100644 --- a/lib_xua/lib_xua/src/hid/hid.xc +++ b/lib_xua/lib_xua/src/hid/hid.xc @@ -50,6 +50,7 @@ XUD_Result_t HidInterfaceClassRequests( #endif #if DEBUG_MEMORY_LOG_ENABLED unsigned log_switch; + buffer[0] = 0x1; GET_SHARED_GLOBAL(log_switch, g_log_switch); if (log_switch) { @@ -57,16 +58,7 @@ XUD_Result_t HidInterfaceClassRequests( UserReadHIDLog(&buffer[1]); } #endif -#if 0 - debug_printf("%d:\n", ret_len); - for(int i=0; i < ret_len; i++) - { - printhex((buffer, unsigned char[])[i]); - printstr("-"); - } - printstrln("\n"); -#endif - return XUD_DoGetRequest(c_ep0_out, c_ep0_in, (buffer, unsigned char []), ret_len, sp.wLength); + return XUD_DoGetRequest(c_ep0_out, c_ep0_in, (buffer, unsigned char []), ret_len, sp.wLength); break; case HID_GET_IDLE: /* Do nothing - i.e. STALL */ diff --git a/sw_usb_audio/app_usb_aud_fosi_c1/CMakeLists.txt b/sw_usb_audio/app_usb_aud_fosi_c1/CMakeLists.txt index 91a4fce..04f3b06 100644 --- a/sw_usb_audio/app_usb_aud_fosi_c1/CMakeLists.txt +++ b/sw_usb_audio/app_usb_aud_fosi_c1/CMakeLists.txt @@ -97,8 +97,8 @@ set(APP_COMPILER_FLAGS_factory ${SW_FACT_AUDIO_FLAGS} -DI2S_CHANS_DA -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=32 -DOUTPUT_FORMAT_COUNT=1 -DXUA_SPDIF_TX_EN=0 - -DMAX_FREQ=\(768000\) - -DMIN_FREQ=\(44100\) + -DMAX_FREQ=\(48000\) + -DMIN_FREQ=\(48000\) -DDEFAULT_FREQ=\(48000\) -DUART_DEBUG=0 -DHID_CONTROLS=1 @@ -125,9 +125,9 @@ set(APP_COMPILER_FLAGS_fps_uac1 ${SW_USB_AUDIO_FLAGS} -DXUA_SPDIF_RX #-fxscope #-DXSCOPE -DXUA_DFU_EN=0 - -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=24 + -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=32 -DOUTPUT_FORMAT_COUNT=1 - -DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=24 + -DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=32 -DINPUT_FORMAT_COUNT=1 -DMCLK_441=\(1024*44100\) -DMCLK_48=\(1024*48000\) @@ -148,81 +148,81 @@ set(APP_COMPILER_FLAGS_fps_uac1 ${SW_USB_AUDIO_FLAGS} -DXUA_SPDIF_RX -DI2S_CHANS_ADC=2) -set(APP_COMPILER_FLAGS_fps_uac2 ${SW_USB_AUDIO_FLAGS} -DXUA_SPDIF_RX_EN=0 - -DXUA_SPDIF_TX_EN=0 - -DI2S_CHANS_DAC=2 - -DSPDIF_RX_I2S_OUT=0 - #-DAUDIO_CLASS=1 - -DXUA_USB_EN=1 - -DNUM_USB_CHAN_IN=2 - -DWINDOWS_OS_DESCRIPTOR_SUPPORT - -DNUM_USB_CHAN_IN_FS=2 - -DNUM_USB_CHAN_OUT=2 - -DNUM_USB_CHAN_OUT_FS=2 - -DXUA_USE_SW_PLL=0 - -DOUT_VOLUME_IN_MIXER=0 - -DFPS_UAC2=1 - #-fxscope - #-DXSCOPE - -DXUA_DFU_EN=1 - -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=32 - -DOUTPUT_FORMAT_COUNT=1 - -DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=32 - -DINPUT_FORMAT_COUNT=1 - -DMCLK_441=\(1024*44100\) - -DMCLK_48=\(1024*48000\) - -DMAX_FREQ=\(48000\) - -DMIN_FREQ=\(48000\) - -DDEFAULT_FREQ=\(48000\) - -lxmos_fps - #-DHID_CONTROLS_UAC1=1 - -DEQ_EN=1 - -DXMOS_FPS_EN=1 - -DUAC1=1 - -DHID_CONTROLS=1 - -DDNR_50MS=1 - -ldnr_50ms - #-DDEBUG_MEMORY_LOG_ENABLED=1 - -DNO_LOG_TIMESTAPS=0 - -DI2S_CHANS_ADC=2) - -set(APP_COMPILER_FLAGS_br_uac2 ${SW_USB_AUDIO_FLAGS} - -DXUA_SPDIF_RX_EN=0 - -DXUA_SPDIF_TX_EN=0 - -DI2S_CHANS_DAC=2 - -DSPDIF_RX_I2S_OUT=0 - #-DAUDIO_CLASS=1 - -DXUA_USB_EN=1 - -DNUM_USB_CHAN_IN=2 - -DNUM_USB_CHAN_OUT=8 - -DNUM_USB_CHAN_OUT_FS=2 - -DXUA_USE_SW_PLL=0 - -DOUT_VOLUME_IN_MIXER=0 - -DBR_UAC2=1 - #-fxscope - #-DXSCOPE - -DXUA_DFU_EN=1 - -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=32 - -DOUTPUT_FORMAT_COUNT=1 - -DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=32 - -DINPUT_FORMAT_COUNT=1 - -DMCLK_441=\(1024*44100\) - -DMCLK_48=\(1024*48000\) - -DMAX_FREQ=\(48000\) - -DMIN_FREQ=\(48000\) - -DDEFAULT_FREQ=\(48000\) - -DUAC1=1 - -DTHREE_AUDIO=1 - #-lxmos_fps - -DHID_CONTROLS=1 - -DBR_ALGO=1 - -lbr - -DEQ_EN=1 - -DDNR_50MS=1 - -ldnr_50ms - #-DDEBUG_MEMORY_LOG_ENABLED=1 - -DNO_LOG_TIMESTAPS=0 - -DI2S_CHANS_ADC=2) +#set(APP_COMPILER_FLAGS_fps_uac2 ${SW_USB_AUDIO_FLAGS} -DXUA_SPDIF_RX_EN=0 +# -DXUA_SPDIF_TX_EN=0 +# -DI2S_CHANS_DAC=2 +# -DSPDIF_RX_I2S_OUT=0 +# #-DAUDIO_CLASS=1 +# -DXUA_USB_EN=1 +# -DNUM_USB_CHAN_IN=2 +# -DWINDOWS_OS_DESCRIPTOR_SUPPORT +# -DNUM_USB_CHAN_IN_FS=2 +# -DNUM_USB_CHAN_OUT=2 +# -DNUM_USB_CHAN_OUT_FS=2 +# -DXUA_USE_SW_PLL=0 +# -DOUT_VOLUME_IN_MIXER=0 +# -DFPS_UAC2=1 +# #-fxscope +# #-DXSCOPE +# -DXUA_DFU_EN=1 +# -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=32 +# -DOUTPUT_FORMAT_COUNT=1 +# -DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=32 +# -DINPUT_FORMAT_COUNT=1 +# -DMCLK_441=\(1024*44100\) +# -DMCLK_48=\(1024*48000\) +# -DMAX_FREQ=\(48000\) +# -DMIN_FREQ=\(48000\) +# -DDEFAULT_FREQ=\(48000\) +# -lxmos_fps +# #-DHID_CONTROLS_UAC1=1 +# -DEQ_EN=1 +# -DXMOS_FPS_EN=1 +# -DUAC1=1 +# -DHID_CONTROLS=1 +# -DDNR_50MS=1 +# -ldnr_50ms +# #-DDEBUG_MEMORY_LOG_ENABLED=1 +# -DNO_LOG_TIMESTAPS=0 +# -DI2S_CHANS_ADC=2) +# +#set(APP_COMPILER_FLAGS_br_uac2 ${SW_USB_AUDIO_FLAGS} +# -DXUA_SPDIF_RX_EN=0 +# -DXUA_SPDIF_TX_EN=0 +# -DI2S_CHANS_DAC=2 +# -DSPDIF_RX_I2S_OUT=0 +# #-DAUDIO_CLASS=1 +# -DXUA_USB_EN=1 +# -DNUM_USB_CHAN_IN=2 +# -DNUM_USB_CHAN_OUT=8 +# -DNUM_USB_CHAN_OUT_FS=2 +# -DXUA_USE_SW_PLL=0 +# -DOUT_VOLUME_IN_MIXER=0 +# -DBR_UAC2=1 +# #-fxscope +# #-DXSCOPE +# -DXUA_DFU_EN=1 +# -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=32 +# -DOUTPUT_FORMAT_COUNT=1 +# -DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=32 +# -DINPUT_FORMAT_COUNT=1 +# -DMCLK_441=\(1024*44100\) +# -DMCLK_48=\(1024*48000\) +# -DMAX_FREQ=\(48000\) +# -DMIN_FREQ=\(48000\) +# -DDEFAULT_FREQ=\(48000\) +# -DUAC1=1 +# -DTHREE_AUDIO=1 +# #-lxmos_fps +# -DHID_CONTROLS=1 +# -DBR_ALGO=1 +# -lbr +# -DEQ_EN=1 +# -DDNR_50MS=1 +# -ldnr_50ms +# #-DDEBUG_MEMORY_LOG_ENABLED=1 +# -DNO_LOG_TIMESTAPS=0 +# -DI2S_CHANS_ADC=2) diff --git a/sw_usb_audio/app_usb_aud_fosi_c1/gen_factory.bat b/sw_usb_audio/app_usb_aud_fosi_c1/gen_factory.bat index fad5972..171a80f 100644 --- a/sw_usb_audio/app_usb_aud_fosi_c1/gen_factory.bat +++ b/sw_usb_audio/app_usb_aud_fosi_c1/gen_factory.bat @@ -1 +1 @@ -xflash bin/factory/phaten_module_factory.xe --loader loader.o --upgrade 2 bin/fps_uac1/phaten_module_fps_uac1.xe --upgrade 1 bin/fps_uac2/phaten_module_fps_uac2.xe --upgrade 6 ../app_usb_aud_fosi_c1_lp/bin/bypass_uac2/phaten_module_bypass_uac2.xe -o %1 +xflash bin/factory/phaten_module_factory.xe --loader loader.o --upgrade 6 bin/fps_uac1/phaten_module_fps_uac1.xe --upgrade 2 ../app_usb_aud_fosi_c1_lp/bin/bypass_uac1/phaten_module_bypass_uac1.xe -o %1 diff --git a/sw_usb_audio/app_usb_aud_fosi_c1/gen_update.bat b/sw_usb_audio/app_usb_aud_fosi_c1/gen_update.bat index 7683b86..e187bc8 100644 --- a/sw_usb_audio/app_usb_aud_fosi_c1/gen_update.bat +++ b/sw_usb_audio/app_usb_aud_fosi_c1/gen_update.bat @@ -1 +1 @@ -xflash --factory-version 15.3 --target-file src/core/xu316_qf60.xn --upgrade 2 bin/fps_uac1/phaten_module_fps_uac1.xe --upgrade 1 bin/fps_uac2/phaten_module_fps_uac2.xe --upgrade 6 ../app_usb_aud_fosi_c1_lp/bin/bypass_uac2/phaten_module_bypass_uac2.xe -o %1 +xflash --factory-version 15.3 --target-file src/core/xu316_qf60.xn --upgrade 6 bin/fps_uac1/phaten_module_fps_uac1.xe --upgrade 2 ../app_usb_aud_fosi_c1_lp/bin/bypass_uac1/phaten_module_bypass_uac1.xe -o %1 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 6549e44..2fcae34 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 @@ -34,11 +34,11 @@ extern "C" { #define DISABLE_REBOOT 1 #define MODE_FPS_UAC2 COAX_IN_FLAG // 1 FPS -#define MODE_FPS_UAC1 USB_IN_FLAG // 2 UAC1 +#define MODE_BYPASS_UAC1 USB_IN_FLAG // 2 BYPASS #define MODE_BR_UAC2 OPT_IN_FLAG // 3 BR #define MODE_V71_UAC2 UAC1_IN_FLAG // 4 V71 #define MODE_V71_UAC1 BT_IN_FLAG // 5 UAC1 -#define MODE_BYPASS_UAC2 I2S_IN_FLAG // 6 BYPASS +#define MODE_FPS_UAC1 I2S_IN_FLAG // 6 UAC1 extern unsigned g_host_os; // 1 -> Windows, 2 -> Others audio_sampling g_new_playback_format, g_playback_format; @@ -184,8 +184,8 @@ void switch_mode_by_c1_mode(unsigned c1_mode, unsigned force_reboot) switch (c1_mode) { case 1: -#if !BYPASS_UAC2 - SetRoleSwitchFlag(MODE_BYPASS_UAC2); +#if !BYPASS_UAC1 + SetRoleSwitchFlag(MODE_BYPASS_UAC1); reboot_need = 1; #endif break; @@ -218,8 +218,8 @@ void switch_mode_by_c1_mode(unsigned c1_mode, unsigned force_reboot) switch (c1_mode) { case 1: - SetRoleSwitchFlag(MODE_FPS_UAC1); - reboot_need = 0; + SetRoleSwitchFlag(MODE_BYPASS_UAC1); + reboot_need = 1; break; case 2: SetRoleSwitchFlag(MODE_V71_UAC1); @@ -242,6 +242,8 @@ void switch_mode_by_c1_mode(unsigned c1_mode, unsigned force_reboot) if (reboot_need || force_reboot) { delay_milliseconds(20); + debug_printf("switch_mode_by_c1_mode: reboot_need = %d, force_reboot = %d\n", reboot_need, force_reboot); + debug_printf("switch_mode_by_c1_mode: c1_mode = %d\n", c1_mode); device_reboot(); while (1); } @@ -568,7 +570,7 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli } -#if defined(WIN_OS_DETECTION) +#if 0// defined(WIN_OS_DETECTION) for(int i = 0; i < 500; i++) { GET_SHARED_GLOBAL(host_os, g_host_os); @@ -588,6 +590,7 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli switch_mode_by_c1_mode(c1_mode, 0); } #endif + switch_mode_by_c1_mode(c1_mode, 0); // 改动原因:开机从 LittleFS 恢复 DAC 音量寄存器码;无效或未写过时用最大音量 C1_DAC_VOL_MAX,避免误用默认值或垃圾数据。 diff --git a/sw_usb_audio/app_usb_aud_fosi_c1/src/extensions/eq.c b/sw_usb_audio/app_usb_aud_fosi_c1/src/extensions/eq.c index 33f3209..eca2dcf 100644 --- a/sw_usb_audio/app_usb_aud_fosi_c1/src/extensions/eq.c +++ b/sw_usb_audio/app_usb_aud_fosi_c1/src/extensions/eq.c @@ -479,7 +479,7 @@ static inline int32_t apply_gain(int32_t sample, int32_t gain_db) { * 改动原因:所有采样率共用44100Hz数组,参数相同,只需要设置sample_rate标记 * 系数会根据采样率动态计算,不需要复制参数 */ -#if !UAC1 +#if 1// !UAC1 static int copy_params_from_44100(uint32_t sample_rate, uint8_t mode) { if (mode >= NUM_EQ_MODES) { debug_printf("Error: Invalid mode %d in copy_params_from_44100\n", mode); @@ -698,7 +698,7 @@ unsigned int is_eq_disabled(void) } void clear_eq_status(unsigned sample_freq, unsigned ch_no) { -#if !UAC1 +#if 1// !UAC1 int n; debug_printf("clear_eq_status %d %d\n", sample_freq, ch_no); if(is_eq_disabled()) @@ -720,7 +720,7 @@ void clear_eq_status(unsigned sample_freq, unsigned ch_no) { // 复位EQ参数函数 uint8_t reset_eq_params(uint8_t mode) { debug_printf("Resetting EQ params for mode %d\n", mode); -#if !UAC1 +#if 1 //!UAC1 // 检查模式号有效性 if (mode != 0xFF && mode >= NUM_EQ_MODES) { debug_printf("Error: Invalid mode %d\n", mode); @@ -882,7 +882,7 @@ void debug_print_eq_mode(eq_mode_data_t *eq_data) { int32_t handler_eq_filter(unsigned sample_freq, uint32_t ch, int32_t new_sample) { int32_t temp_sample = new_sample; -#if !UAC1 +#if 1// !UAC1 if(is_eq_disabled()) { @@ -1109,7 +1109,7 @@ unsigned char process_send_params(uint8_t data[], uint16_t len) { return false; } -#if !UAC1 +#if 1// !UAC1 // Process read request (0x8E) - GET_EQ_PARAMS if (data[1] == 0x8E) { debug_printf("Received read request (GET_EQ_PARAMS)\n"); @@ -1685,7 +1685,7 @@ unsigned char process_send_params(uint8_t data[], uint16_t len) { if (data[1] == 0x8d) { -#if !UAC1 +#if 1// !UAC1 debug_printf("Received set EQ filter parameters command (SET_EQ_PARAMS)\n"); // Get mode value (跳过report_id字节) @@ -2010,7 +2010,7 @@ uint8_t process_uart_set_eq_mode(uint8_t mode) */ uint8_t process_uart_get_eq_mode(uint8_t *response, uint8_t response_size) { -#if !UAC1 +#if 1 //!UAC1 if (response_size < 22) { debug_printf("Response buffer too small\n"); return 0; @@ -2067,7 +2067,7 @@ uint8_t process_uart_get_eq_mode(uint8_t *response, uint8_t response_size) */ uint8_t process_uart_set_mode_gain_and_name(uint8_t *data) { -#if !UAC1 +#if 1// !UAC1 uint8_t mode = data[5]; // 串口数据位置 int32_t gain = (data[9] << 24) | (data[8] << 16) | (data[7] << 8) | data[6]; // 小端序 char mode_name[16] = {0}; @@ -2169,7 +2169,7 @@ uint8_t process_uart_set_mode_gain_and_name(uint8_t *data) uint8_t process_uart_set_eq_params(uint8_t *data) { uint8_t result = 0x00; -#if !UAC1 +#if 1// !UAC1 uint8_t mode = data[5]; // 模式值 uint8_t band_index = data[6]; // 滤波器索引 uint8_t filter_type = data[7]; // 滤波器类型 @@ -2240,7 +2240,7 @@ uint8_t process_uart_set_eq_params(uint8_t *data) */ uint8_t process_uart_get_eq_params(uint8_t *data, uint8_t *response, uint8_t response_size) { -#if !UAC1 +#if 1// !UAC1 if (response_size < 27) { debug_printf("Response buffer too small\n"); return 0; diff --git a/sw_usb_audio/app_usb_aud_fosi_c1_lp/CMakeLists.txt b/sw_usb_audio/app_usb_aud_fosi_c1_lp/CMakeLists.txt index 43b321c..e1bd677 100644 --- a/sw_usb_audio/app_usb_aud_fosi_c1_lp/CMakeLists.txt +++ b/sw_usb_audio/app_usb_aud_fosi_c1_lp/CMakeLists.txt @@ -97,8 +97,8 @@ set(APP_COMPILER_FLAGS_factory ${SW_FACT_AUDIO_FLAGS} -DI2S_CHANS_DA -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=32 -DOUTPUT_FORMAT_COUNT=1 -DXUA_SPDIF_TX_EN=0 - -DMAX_FREQ=\(768000\) - -DMIN_FREQ=\(44100\) + -DMAX_FREQ=\(48000\) + -DMIN_FREQ=\(48000\) -DDEFAULT_FREQ=\(48000\) -DUART_DEBUG=0 -DHID_CONTROLS=1 @@ -108,11 +108,11 @@ set(APP_COMPILER_FLAGS_factory ${SW_FACT_AUDIO_FLAGS} -DI2S_CHANS_DA -DNUM_USB_CHAN_OUT=2 -DI2S_CHANS_ADC=0) -set(APP_COMPILER_FLAGS_bypass_uac2 ${SW_USB_AUDIO_FLAGS} -DXUA_SPDIF_RX_EN=0 +set(APP_COMPILER_FLAGS_bypass_uac1 ${SW_USB_AUDIO_FLAGS} -DXUA_SPDIF_RX_EN=0 -DXUA_SPDIF_TX_EN=0 -DI2S_CHANS_DAC=2 -DSPDIF_RX_I2S_OUT=0 - #-DAUDIO_CLASS=1 + -DAUDIO_CLASS=1 -DXUA_USB_EN=1 -DNUM_USB_CHAN_IN=2 -DWINDOWS_OS_DESCRIPTOR_SUPPORT @@ -121,34 +121,73 @@ set(APP_COMPILER_FLAGS_bypass_uac2 ${SW_USB_AUDIO_FLAGS} -DXUA_SPDIF_RX -DNUM_USB_CHAN_OUT_FS=2 -DXUA_USE_SW_PLL=0 -DOUT_VOLUME_IN_MIXER=0 - -DBYPASS_UAC2=1 + -DBYPASS_UAC1=1 #-fxscope #-DXSCOPE -DXUA_DFU_EN=1 - -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=32 + -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=24 -DOUTPUT_FORMAT_COUNT=1 - -DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=32 + -DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=24 -DINPUT_FORMAT_COUNT=1 -DMCLK_441=\(1024*44100\) -DMCLK_48=\(1024*48000\) -DMAX_FREQ=\(48000\) -DMIN_FREQ=\(48000\) -DDEFAULT_FREQ=\(48000\) - #-lxmos_fps - #-DHID_CONTROLS_UAC1=1 - -DEQ_EN=0 + -DHID_CONTROLS_UAC1=1 + #-DEQ_EN=1 -DXMOS_FPS_EN=0 -DUAC1=1 -DHID_CONTROLS=1 - -DDNR_50MS=1 - -DLOW_POWER_EN=1 - -DCHAN_BUFF_CTRL=1 - -DXUD_PRIORITY_HIGH=1 - -ldnr_50ms - #-DDEBUG_MEMORY_LOG_ENABLED=1 + #-DDNR_50MS=1 + #-DLOW_POWER_EN=1 + #-DCHAN_BUFF_CTRL=1 + #-DXUD_PRIORITY_HIGH=1 + #-ldnr_50ms + -DDEBUG_MEMORY_LOG_ENABLED=1 -DNO_LOG_TIMESTAPS=0 -DI2S_CHANS_ADC=2) +#set(APP_COMPILER_FLAGS_bypass_uac2 ${SW_USB_AUDIO_FLAGS} -DXUA_SPDIF_RX_EN=0 +# -DXUA_SPDIF_TX_EN=0 +# -DI2S_CHANS_DAC=2 +# -DSPDIF_RX_I2S_OUT=0 +# -DXUA_USB_EN=1 +# -DNUM_USB_CHAN_IN=2 +# -DWINDOWS_OS_DESCRIPTOR_SUPPORT +# -DNUM_USB_CHAN_IN_FS=2 +# -DNUM_USB_CHAN_OUT=2 +# -DNUM_USB_CHAN_OUT_FS=2 +# -DXUA_USE_SW_PLL=0 +# -DOUT_VOLUME_IN_MIXER=0 +# -DBYPASS_UAC2=1 +# #-fxscope +# #-DXSCOPE +# -DXUA_DFU_EN=1 +# -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=32 +# -DOUTPUT_FORMAT_COUNT=1 +# -DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=32 +# -DINPUT_FORMAT_COUNT=1 +# -DMCLK_441=\(1024*44100\) +# -DMCLK_48=\(1024*48000\) +# -DMAX_FREQ=\(48000\) +# -DMIN_FREQ=\(48000\) +# -DDEFAULT_FREQ=\(48000\) +# #-lxmos_fps +# #-DHID_CONTROLS_UAC1=1 +# -DEQ_EN=0 +# -DXMOS_FPS_EN=0 +# -DUAC1=1 +# -DHID_CONTROLS=1 +# -DDNR_50MS=1 +# -DLOW_POWER_EN=1 +# -DCHAN_BUFF_CTRL=1 +# -DXUD_PRIORITY_HIGH=1 +# -ldnr_50ms +# #-DDEBUG_MEMORY_LOG_ENABLED=1 +# -DNO_LOG_TIMESTAPS=0 +# -DI2S_CHANS_ADC=2) + set(APP_INCLUDES src src/core src/extensions ../shared/) set(XMOS_SANDBOX_DIR ${CMAKE_CURRENT_LIST_DIR}/../..) link_directories("${CMAKE_CURRENT_LIST_DIR}/src/extensions/dnr/") diff --git a/sw_usb_audio/app_usb_aud_fosi_c1_lp/gen_factory.bat b/sw_usb_audio/app_usb_aud_fosi_c1_lp/gen_factory.bat deleted file mode 100644 index bfd2001..0000000 --- a/sw_usb_audio/app_usb_aud_fosi_c1_lp/gen_factory.bat +++ /dev/null @@ -1 +0,0 @@ -xflash bin/factory/phaten_module_factory.xe --loader loader.o --upgrade 2 bin/fps_uac1/phaten_module_fps_uac1.xe --upgrade 1 bin/fps_uac2/phaten_module_fps_uac2.xe --upgrade 6 ../app_usb_aud_fosi_c1_lp/bin/bypass_uac2/phaten_module_bypass_uac2.xe -o %1 diff --git a/sw_usb_audio/app_usb_aud_fosi_c1_lp/gen_update.bat b/sw_usb_audio/app_usb_aud_fosi_c1_lp/gen_update.bat deleted file mode 100644 index 7683b86..0000000 --- a/sw_usb_audio/app_usb_aud_fosi_c1_lp/gen_update.bat +++ /dev/null @@ -1 +0,0 @@ -xflash --factory-version 15.3 --target-file src/core/xu316_qf60.xn --upgrade 2 bin/fps_uac1/phaten_module_fps_uac1.xe --upgrade 1 bin/fps_uac2/phaten_module_fps_uac2.xe --upgrade 6 ../app_usb_aud_fosi_c1_lp/bin/bypass_uac2/phaten_module_bypass_uac2.xe -o %1 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 6549e44..9b0f06e 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 @@ -34,11 +34,11 @@ extern "C" { #define DISABLE_REBOOT 1 #define MODE_FPS_UAC2 COAX_IN_FLAG // 1 FPS -#define MODE_FPS_UAC1 USB_IN_FLAG // 2 UAC1 +#define MODE_BYPASS_UAC1 USB_IN_FLAG // 2 BYPASS #define MODE_BR_UAC2 OPT_IN_FLAG // 3 BR #define MODE_V71_UAC2 UAC1_IN_FLAG // 4 V71 #define MODE_V71_UAC1 BT_IN_FLAG // 5 UAC1 -#define MODE_BYPASS_UAC2 I2S_IN_FLAG // 6 BYPASS +#define MODE_FPS_UAC1 I2S_IN_FLAG // 6 UAC1 extern unsigned g_host_os; // 1 -> Windows, 2 -> Others audio_sampling g_new_playback_format, g_playback_format; @@ -184,8 +184,8 @@ void switch_mode_by_c1_mode(unsigned c1_mode, unsigned force_reboot) switch (c1_mode) { case 1: -#if !BYPASS_UAC2 - SetRoleSwitchFlag(MODE_BYPASS_UAC2); +#if !BYPASS_UAC1 + SetRoleSwitchFlag(MODE_BYPASS_UAC1); reboot_need = 1; #endif break; @@ -218,8 +218,8 @@ void switch_mode_by_c1_mode(unsigned c1_mode, unsigned force_reboot) switch (c1_mode) { case 1: - SetRoleSwitchFlag(MODE_FPS_UAC1); - reboot_need = 0; + SetRoleSwitchFlag(MODE_BYPASS_UAC1); + reboot_need = 1; break; case 2: SetRoleSwitchFlag(MODE_V71_UAC1); @@ -242,8 +242,10 @@ void switch_mode_by_c1_mode(unsigned c1_mode, unsigned force_reboot) if (reboot_need || force_reboot) { delay_milliseconds(20); - device_reboot(); - while (1); + debug_printf("switch_mode_by_c1_mode: reboot_need = %d, force_reboot = %d\n", reboot_need, force_reboot); + debug_printf("switch_mode_by_c1_mode: c1_mode = %d\n", c1_mode); + // device_reboot(); + // while (1); } } @@ -489,7 +491,7 @@ void save_value(unsigned char * unsafe path, unsigned char value); unsigned char load_value(unsigned char * unsafe path); #define C1_MODE_INFO_PATH "c1_mode" /* 改动原因:c_dfu 仅接收 FIRMWARE_UPGRADE_START,在此线程执行 handle_firmware_upgrade_start */ -void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, client interface c1_led_ctrl_if i_c1_led_ctrl, chanend c_erase, streaming chanend c_dfu) +void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, client interface c1_led_ctrl_if i_c1_led_ctrl, streaming chanend c_dfu) { unsigned cmd; int value; @@ -557,6 +559,9 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli firmware_upgrade_init(); #endif + + debug_printf("AudioHwRemote2: c1_mode = %d\n", c1_mode); + // 改动原因:上电归一 c1_mode(含停用档 2/3→4),与按键循环 1/4/5 一致并写回 Flash。 { unsigned c1_mode_corrected = c1_mode_sanitize(c1_mode); @@ -568,7 +573,7 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli } -#if defined(WIN_OS_DETECTION) +#if 0 // defined(WIN_OS_DETECTION) for(int i = 0; i < 500; i++) { GET_SHARED_GLOBAL(host_os, g_host_os); @@ -588,6 +593,7 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli switch_mode_by_c1_mode(c1_mode, 0); } #endif + switch_mode_by_c1_mode(c1_mode, 0); // 改动原因:开机从 LittleFS 恢复 DAC 音量寄存器码;无效或未写过时用最大音量 C1_DAC_VOL_MAX,避免误用默认值或垃圾数据。 @@ -1553,14 +1559,14 @@ void flag_handler() } -void AudioHwRemote(streaming chanend c, client interface c1_led_ctrl_if i_c1_led_ctrl, chanend c_erase, streaming chanend c_dfu) +void AudioHwRemote(streaming chanend c, client interface c1_led_ctrl_if i_c1_led_ctrl, streaming chanend c_dfu) { i2c_master_if i2c[1]; par { i2c_master(i2c, 1, p_scl, p_sda, 100); - AudioHwRemote2(c, i2c[0], i_c1_led_ctrl, c_erase, c_dfu); + AudioHwRemote2(c, i2c[0], i_c1_led_ctrl, c_dfu); } } diff --git a/sw_usb_audio/app_usb_aud_fosi_c1_lp/src/extensions/dnr/dnr_dsp_buf.c b/sw_usb_audio/app_usb_aud_fosi_c1_lp/src/extensions/dnr/dnr_dsp_buf.c index 6fa18b1..ab685e8 100644 --- a/sw_usb_audio/app_usb_aud_fosi_c1_lp/src/extensions/dnr/dnr_dsp_buf.c +++ b/sw_usb_audio/app_usb_aud_fosi_c1_lp/src/extensions/dnr/dnr_dsp_buf.c @@ -16,6 +16,10 @@ #include "aizip_dnr.h" #include "debug_print.h" #include "flash.h" +#include "swlock.h" + +// Global flash lock defined in lfs_services.c — protects all flash hardware access +extern swlock_t flash_lock; //for AGC //static agc_stage_ctx_t DWORD_ALIGNED agc_stage_state = {}; @@ -80,7 +84,9 @@ void Aizip_DNR_init(void) delay_microseconds(10000); // setFlashPortPins(XS1_PORT_1B,XS1_PORT_1C,XS1_PORT_4B, XS1_CLKBLK_3); + swlock_acquire(&flash_lock); int sta = AI_DNR_init(&pram); + swlock_release(&flash_lock); dnr_init_flag = 1; debug_printf("AI_DNR_init status %d\n", sta); } diff --git a/sw_usb_audio/app_usb_aud_fosi_c1_lp/src/extensions/eq.c b/sw_usb_audio/app_usb_aud_fosi_c1_lp/src/extensions/eq.c index 33f3209..577c115 100644 --- a/sw_usb_audio/app_usb_aud_fosi_c1_lp/src/extensions/eq.c +++ b/sw_usb_audio/app_usb_aud_fosi_c1_lp/src/extensions/eq.c @@ -34,7 +34,7 @@ unsigned g_log_switch = 0; #include #include #include -#if !UAC1 +#if 1// !UAC1 #include "eq_params_44100.h" // 改动原因:进一步优化EQ参数存储策略,所有采样率共用44100Hz数组 @@ -479,7 +479,7 @@ static inline int32_t apply_gain(int32_t sample, int32_t gain_db) { * 改动原因:所有采样率共用44100Hz数组,参数相同,只需要设置sample_rate标记 * 系数会根据采样率动态计算,不需要复制参数 */ -#if !UAC1 +#if 1// !UAC1 static int copy_params_from_44100(uint32_t sample_rate, uint8_t mode) { if (mode >= NUM_EQ_MODES) { debug_printf("Error: Invalid mode %d in copy_params_from_44100\n", mode); @@ -698,7 +698,7 @@ unsigned int is_eq_disabled(void) } void clear_eq_status(unsigned sample_freq, unsigned ch_no) { -#if !UAC1 +#if 1// !UAC1 int n; debug_printf("clear_eq_status %d %d\n", sample_freq, ch_no); if(is_eq_disabled()) @@ -720,7 +720,7 @@ void clear_eq_status(unsigned sample_freq, unsigned ch_no) { // 复位EQ参数函数 uint8_t reset_eq_params(uint8_t mode) { debug_printf("Resetting EQ params for mode %d\n", mode); -#if !UAC1 +#if 1 //!UAC1 // 检查模式号有效性 if (mode != 0xFF && mode >= NUM_EQ_MODES) { debug_printf("Error: Invalid mode %d\n", mode); @@ -882,7 +882,7 @@ void debug_print_eq_mode(eq_mode_data_t *eq_data) { int32_t handler_eq_filter(unsigned sample_freq, uint32_t ch, int32_t new_sample) { int32_t temp_sample = new_sample; -#if !UAC1 +#if 1// !UAC1 if(is_eq_disabled()) { @@ -1109,7 +1109,7 @@ unsigned char process_send_params(uint8_t data[], uint16_t len) { return false; } -#if !UAC1 +#if 1// !UAC1 // Process read request (0x8E) - GET_EQ_PARAMS if (data[1] == 0x8E) { debug_printf("Received read request (GET_EQ_PARAMS)\n"); @@ -1685,7 +1685,7 @@ unsigned char process_send_params(uint8_t data[], uint16_t len) { if (data[1] == 0x8d) { -#if !UAC1 +#if 1// !UAC1 debug_printf("Received set EQ filter parameters command (SET_EQ_PARAMS)\n"); // Get mode value (跳过report_id字节) @@ -2010,7 +2010,7 @@ uint8_t process_uart_set_eq_mode(uint8_t mode) */ uint8_t process_uart_get_eq_mode(uint8_t *response, uint8_t response_size) { -#if !UAC1 +#if 1 //!UAC1 if (response_size < 22) { debug_printf("Response buffer too small\n"); return 0; @@ -2067,7 +2067,7 @@ uint8_t process_uart_get_eq_mode(uint8_t *response, uint8_t response_size) */ uint8_t process_uart_set_mode_gain_and_name(uint8_t *data) { -#if !UAC1 +#if 1// !UAC1 uint8_t mode = data[5]; // 串口数据位置 int32_t gain = (data[9] << 24) | (data[8] << 16) | (data[7] << 8) | data[6]; // 小端序 char mode_name[16] = {0}; @@ -2169,7 +2169,7 @@ uint8_t process_uart_set_mode_gain_and_name(uint8_t *data) uint8_t process_uart_set_eq_params(uint8_t *data) { uint8_t result = 0x00; -#if !UAC1 +#if 1// !UAC1 uint8_t mode = data[5]; // 模式值 uint8_t band_index = data[6]; // 滤波器索引 uint8_t filter_type = data[7]; // 滤波器类型 @@ -2240,7 +2240,7 @@ uint8_t process_uart_set_eq_params(uint8_t *data) */ uint8_t process_uart_get_eq_params(uint8_t *data, uint8_t *response, uint8_t response_size) { -#if !UAC1 +#if 1// !UAC1 if (response_size < 27) { debug_printf("Response buffer too small\n"); return 0; diff --git a/sw_usb_audio/app_usb_aud_fosi_c1_lp/src/extensions/extra_i2s.xc b/sw_usb_audio/app_usb_aud_fosi_c1_lp/src/extensions/extra_i2s.xc index eadaca6..e34e9d3 100644 --- a/sw_usb_audio/app_usb_aud_fosi_c1_lp/src/extensions/extra_i2s.xc +++ b/sw_usb_audio/app_usb_aud_fosi_c1_lp/src/extensions/extra_i2s.xc @@ -73,37 +73,6 @@ extern unsigned g_adc_loop; void unmute_dac(void); -inline unsigned is_silence(const unsigned samps[], int len) -{ - // -30dB阈值:20*log10(threshold/max_value) = -30 - // threshold = max_value * 10^(-30/20) = max_value * 0.0316 - // 对于32位有符号整数,max_value = 2^31-1 ≈ 0x7FFFFFFF - // threshold ≈ 0x7FFFFFFF * 0.0316 ≈ 0x04000000 - const unsigned int SILENCE_THRESHOLD = 0x10945; // -90db 0x20c49b; // 0x30000; // 0x0246b4e3; -35 // 0x04000000; // 约-30dB - - for (int i = 0; i < len; ++i) { - // 正确的绝对值计算:使用条件运算符 - unsigned int abs_val; - if (samps[i] & 0x80000000) { - // 负数:取反加1 - abs_val = ~samps[i] + 1; - } else { - // 正数:直接使用 - abs_val = samps[i]; - } - - // 检查是否超过静音阈值 - if (abs_val > SILENCE_THRESHOLD) { - //static int count = 0; - //count++; - // if (count % 1000000 == 0) - // debug_printf("abs_val %08x, %08x\n", abs_val, samps[i]); - return 0; // 不是静音 - } - } - return 1; // 是静音 -} - void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudioToUsb[]) { unsigned dnr_enable = 0; diff --git a/sw_usb_audio/app_usb_aud_fosi_c1_lp/src/extensions/user_main.h b/sw_usb_audio/app_usb_aud_fosi_c1_lp/src/extensions/user_main.h index ab07ab8..8eebeb1 100644 --- a/sw_usb_audio/app_usb_aud_fosi_c1_lp/src/extensions/user_main.h +++ b/sw_usb_audio/app_usb_aud_fosi_c1_lp/src/extensions/user_main.h @@ -17,11 +17,7 @@ interface c1_led_ctrl_if { void switch_handler(void); void flag_handler(); /* 改动原因:固件升级 START 在 AudioHwRemote2 处理,需传入 c_dfu;其余升级命令在 process_send_params 直接处理 */ -void AudioHwRemote(streaming chanend c, client interface c1_led_ctrl_if i_c1_led_ctrl, chanend c_erase, streaming chanend c_dfu); -void uart_handler(streaming chanend c_tx, streaming chanend c_rx); -void uart_tx_handler(streaming chanend c_tx); -void uart_rx_handler(streaming chanend c_rx); -void i2s_driver(chanend c); +void AudioHwRemote(streaming chanend c, client interface c1_led_ctrl_if i_c1_led_ctrl, streaming chanend c_dfu); extern unsafe chanend uc_i2s; extern unsafe chanend uc_br_data; extern unsafe chanend uc_eq_data; @@ -38,11 +34,9 @@ extern unsafe streaming chanend uc_dfu; extern void fps1_dsp_proc_task(void); extern void fps2_dsp_proc_task(void); -#define USER_MAIN_DECLARATIONS streaming chan c_rx; streaming chan c_tx; \ - chan c_i2s; chan c_data_transport, cc_br_eof, c_eq_data, c_validate; \ +#define USER_MAIN_DECLARATIONS chan c_data_transport, cc_br_eof, c_eq_data, c_validate; \ streaming chan c_audiohw; streaming chan c_dfu; interface c1_led_ctrl_if i_c1_led_ctrl; \ chan c_usb_to_io; chan c_io_to_usb; chan c_io_to_dspL; chan c_dspL_to_io; chan c_io_to_dspR; chan c_dspR_to_io; \ - chan c_erase; @@ -50,11 +44,10 @@ extern void fps2_dsp_proc_task(void); unsafe { \ uc_audiohw = (chanend) c_audiohw;\ uc_dfu = (chanend) c_dfu;\ - dsp_core0();\ } \ }\ on tile[0]: {\ - AudioHwRemote(c_audiohw, i_c1_led_ctrl, c_erase, c_dfu);\ + AudioHwRemote(c_audiohw, i_c1_led_ctrl, c_dfu);\ }\ on tile[1]: app_control_slave(i_c1_led_ctrl, c_eq_data); \ \