diff --git a/sw_usb_audio/app_usb_aud_phaten_golden/CMakeLists.txt b/sw_usb_audio/app_usb_aud_phaten_golden/CMakeLists.txt index a4d0001..1b4f50a 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden/CMakeLists.txt +++ b/sw_usb_audio/app_usb_aud_phaten_golden/CMakeLists.txt @@ -89,7 +89,7 @@ set(APP_COMPILER_FLAGS_ex3d_stereo_2k ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC=2 -DMIXER=0 -DAIZIP_DNR=0 #-ldnr_50ms -llib_ex3d_stereo_2k - -DNUM_USB_CHAN_OUT=2 + -DNUM_USB_CHAN_OUT=8 -DNUM_USB_CHAN_IN=0 -DEQ_EN=1 -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=16 @@ -105,16 +105,15 @@ set(APP_COMPILER_FLAGS_ex3d_stereo_2k ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC=2 -DHID_CONTROLS=1) set(APP_COMPILER_FLAGS_ex3d_stereo_8k ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC=2 - -DI2S_CHANS_ADC=2 - -DAUDIO_CLASS=1 + -DI2S_CHANS_ADC=0 -DMIN_FREQ=48000 -DMAX_FREQ=48000 -DUSE_EX3D -DMIXER=0 -DAIZIP_DNR=0 #-ldnr_50ms -llib_ex3d_stereo_8k - -DNUM_USB_CHAN_OUT=2 - -DNUM_USB_CHAN_IN=2 + -DNUM_USB_CHAN_OUT=8 + -DNUM_USB_CHAN_IN=0 -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=16 -DSTREAM_FORMAT_OUTPUT_2_RESOLUTION_BITS=16 -DSTREAM_FORMAT_OUTPUT_3_RESOLUTION_BITS=16 diff --git a/sw_usb_audio/app_usb_aud_phaten_golden/gen_factory.bat b/sw_usb_audio/app_usb_aud_phaten_golden/gen_factory.bat index 2e1d4e0..3896855 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden/gen_factory.bat +++ b/sw_usb_audio/app_usb_aud_phaten_golden/gen_factory.bat @@ -1 +1 @@ -xflash bin/factory/fact.xe --loader loader.o --upgrade 2 bin\ex3d_UAC1\app_usb_aud_phaten_gs_ex3d_UAC1.xe --upgrade 4 bin/ex3d_stereo_2k/app_usb_aud_phaten_gs_ex3d_stereo_2k.xe --upgrade 1 bin\ex3d_71_game\app_usb_aud_phaten_gs_ex3d_71_game.xe --upgrade 3 bin\ex3d_stereo_8k\app_usb_aud_phaten_gs_ex3d_stereo_8k.xe -o %1 +xflash bin/factory/fact.xe --loader loader.o --upgrade 4 bin\ex3d_UAC1\app_usb_aud_phaten_gs_ex3d_UAC1.xe --upgrade 2 bin/ex3d_stereo_2k/app_usb_aud_phaten_gs_ex3d_stereo_2k.xe --upgrade 1 bin\ex3d_71_game\app_usb_aud_phaten_gs_ex3d_71_game.xe --upgrade 3 bin\ex3d_71_movie\app_usb_aud_phaten_gs_ex3d_71_movie.xe -o %1 diff --git a/sw_usb_audio/app_usb_aud_phaten_golden/gen_update.bat b/sw_usb_audio/app_usb_aud_phaten_golden/gen_update.bat index a6fa31e..4814c17 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden/gen_update.bat +++ b/sw_usb_audio/app_usb_aud_phaten_golden/gen_update.bat @@ -1,2 +1,2 @@ -xflash --factory-version 15.3 --target-file src/core/PHATEN_GS.xn --upgrade 2 bin\ex3d_UAC1\app_usb_aud_phaten_gs_ex3d_UAC1.xe --upgrade 4 bin/ex3d_stereo_2k/app_usb_aud_phaten_gs_ex3d_stereo_2k.xe --upgrade 1 bin\ex3d_71_game\app_usb_aud_phaten_gs_ex3d_71_game.xe --upgrade 3 bin\ex3d_stereo_8k\app_usb_aud_phaten_gs_ex3d_stereo_8k.xe -o %1 +xflash --factory-version 15.3 --target-file src/core/PHATEN_GS.xn --upgrade 4 bin\ex3d_UAC1\app_usb_aud_phaten_gs_ex3d_UAC1.xe --upgrade 2 bin/ex3d_stereo_2k/app_usb_aud_phaten_gs_ex3d_stereo_2k.xe --upgrade 1 bin\ex3d_71_game\app_usb_aud_phaten_gs_ex3d_71_game.xe --upgrade 3 bin\ex3d_71_movie\app_usb_aud_phaten_gs_ex3d_71_movie.xe -o %1 diff --git a/sw_usb_audio/app_usb_aud_phaten_golden/src/extensions/dsp.c b/sw_usb_audio/app_usb_aud_phaten_golden/src/extensions/dsp.c index 81b1c27..532c88b 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden/src/extensions/dsp.c +++ b/sw_usb_audio/app_usb_aud_phaten_golden/src/extensions/dsp.c @@ -1,4 +1,5 @@ -#define DEBUG_PRINT_ENABLE 0 +#define DEBUG_PRINT_ENABLE 1 + #include #include #include @@ -41,8 +42,13 @@ enum { OS_WIN = 1, OS_OTHERS = 2 }; extern unsigned g_uac_vol; chanend_t uc_ex3d_to_ubm, uc_eq_data; +#if (STEREO_8K == 1) || (STEREO_2K == 1) +#define UBM_TO_EX3D_CHANS (2) +#define EX3D_TO_UBM_CHANS (2) +#else #define UBM_TO_EX3D_CHANS (NUM_USB_CHAN_OUT) #define EX3D_TO_UBM_CHANS (2) +#endif // tile 1, mic level unsigned g_mic_level_t1; @@ -696,10 +702,10 @@ void hid_update(unsigned char hid_data) { #define BLUE_LED_PIN 0 // 3D LED (蓝色LED) - bit 0 of leds2_val, 0b11111110 // 改动原因:定义模式切换标志值,用于在SPATIAL_GAME、SPATIAL_MOVIE、STEREO_2K、UAC1之间循环切换 -#define MODE_STEREO_2K UAC1_IN_FLAG //4 STEREO_2K模式标志 +#define MODE_STEREO_2K USB_IN_FLAG // 2 STEREO_2K模式标志 #define MODE_SPATIAL_GAME COAX_IN_FLAG //1 SPATIAL_GAME模式标志 -#define MODE_STEREO_8K OPT_IN_FLAG // 3 SPATIAL_MOVIE模式标志 -#define MODE_UAC1 USB_IN_FLAG // 2 UAC1模式标志 +#define MODE_SPATIAL_MOVIE OPT_IN_FLAG // 3 SPATIAL_MOVIE模式标志 +#define MODE_UAC1 UAC1_IN_FLAG // 4 UAC1模式标志 //Tile 1 void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c_hidSendData, chanend_t c_uac_vol) @@ -726,9 +732,9 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c static unsigned is_no_effect_mode = 0; // 是否为无音效模式标志(模式3) static unsigned is_uac1_mode = 0; // 是否为UAC1模式标志(模式4) static unsigned actual_mode_for_led = 0; // UAC1模式下的实际模式值(0=STEREO_2K, 1=SPATIAL_GAME, 2=SPATIAL_MOVIE),用于LED闪烁 - // 改动原因:添加当前模式变量,用于短按切换模式(0=无音效,1=STEREO_2K,2=SPATIAL_GAME,3=STEREO_8K) + // 改动原因:添加当前模式变量,用于短按切换模式(0=无音效,1=STEREO_2K,2=SPATIAL_GAME,3=SPATIAL_MOVIE) static unsigned current_mode_local = 0; // 当前模式值(0-3) - // 改动原因:添加LED闪烁相关变量,用于STEREO_8K模式的蓝灯闪烁 + // 改动原因:添加LED闪烁相关变量,用于SPATIAL_MOVIE模式的蓝灯闪烁 static unsigned blink_counter = 0; // LED闪烁计数器(每100ms递增) int ret = 0; hwtimer_t timer = hwtimer_alloc(); @@ -781,9 +787,9 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c // 这是音频模式传输命令(用于短按切换模式) current_mode_local = chan_in_byte(cc_mic_level); if (current_mode_local > 3) { - current_mode_local = 1; // 如果值无效,重置为STEREO_2K + current_mode_local = 0; // 如果值无效,重置为STEREO_2K } - debug_printf("hid_button_task received audio_mode: %d (0=NO_EFFECT, 1=STEREO_2K, 2=SPATIAL_GAME, 3=STEREO_8K)\n", current_mode_local); + debug_printf("hid_button_task received audio_mode: %d (0=NO_EFFECT, 1=STEREO_2K, 2=SPATIAL_GAME, 3=SPATIAL_MOVIE)\n", current_mode_local); // 改动原因:根据接收到的模式值初始化LED和算法状态 if (current_mode_local == 0) { @@ -814,74 +820,18 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c leds2_val |= (1< 0) { - // 改动原因:短按切换模式(0=无音效,1=STEREO_2K,2=SPATIAL_GAME,3=STEREO_8K) + // 改动原因:短按切换模式(0=无音效,1=STEREO_2K,2=SPATIAL_GAME,3=SPATIAL_MOVIE) // 循环切换:0→1→2→3→0 +#if 0 unsigned old_mode = current_mode_local; current_mode_local = (current_mode_local + 1) % 4; // 循环切换 0→1→2→3→0 debug_printf("Short press: switching mode from %d to %d\n", old_mode, current_mode_local); - - // 改动原因:通过c_hidSendData发送命令通知button_task保存新模式到flash - // 命令格式:0xFB000000 + mode_value(mode_value在低8位) - unsigned save_cmd = 0xFB000000 | (current_mode_local & 0xFF); - chan_out_word(c_hidSendData, save_cmd); - debug_printf("Sent save audio_mode command to button_task: 0x%08X\n", save_cmd); - // 改动原因:根据模式控制算法和LED if (current_mode_local == 0) { // 无音效模式:灯灭,算法关闭 @@ -999,7 +943,7 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c leds2_val |= (1<= 5) { // 5 * 100ms = 500ms @@ -1184,10 +992,30 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c } port_out(p_leds2, leds2_val); } - } else { - // 非STEREO_8K模式,重置闪烁计数器 + } + else { blink_counter = 0; + } +#if 0 + if (current_mode_local == 0) { + leds2_val |= (1< 3) { - audio_mode_local = 1; // 如果值无效,重置为STEREO_2K - save_value(path_audio_mode, audio_mode_local); - } - debug_printf("button_task: loaded audio_mode=%d from flash\n", audio_mode_local); + chan_out_byte(cc_mic_level, 0xFC); // 音频模式传输命令 + chan_out_byte(cc_mic_level, saved_mode); // 音频模式值(0=无音效,1=STEREO_2K,2=SPATIAL_GAME,3=SPATIAL_MOVIE) + debug_printf("Sent audio_mode %d to hid_button_task via cc_mic_level channel\n", saved_mode); - // 改动原因:通过cc_mic_level channel发送audio_mode到hid_button_task(用于短按切换模式) - // 发送格式:0xFC(命令) + audio_mode_value(模式值 0-3) - chan_out_byte(cc_mic_level, 0xFC); // 音频模式传输命令 - chan_out_byte(cc_mic_level, audio_mode_local); // 音频模式值(0=无音效,1=STEREO_2K,2=SPATIAL_GAME,3=STEREO_8K) - debug_printf("Sent audio_mode %d to hid_button_task via cc_mic_level channel\n", audio_mode_local); - - // 改动原因:通过cc_mic_level channel发送game_mode到hid_button_task(用于固件模式切换) - // 发送格式:0xFE(命令) + mode_value(模式值) - chan_out_byte(cc_mic_level, 0xFE); // game_mode传输命令 - chan_out_byte(cc_mic_level, saved_mode); // 模式值(Windows: 0-3, UAC1: 4) - debug_printf("Sent game_mode %d to hid_button_task via cc_mic_level channel\n", saved_mode); - -#if defined(UAC1_MODE) - // 改动原因:UAC1模式下,还需要发送等效模式值(0-2)给hid_button_task用于LED显示 - chan_out_byte(cc_mic_level, 0xFD); // UAC1等效模式传输命令 - chan_out_byte(cc_mic_level, saved_uac1_mode); // UAC1等效模式值(0=STEREO_2K, 1=SPATIAL_GAME, 2=SPATIAL_MOVIE) - debug_printf("Sent uac1_mode %d to hid_button_task via cc_mic_level channel\n", saved_uac1_mode); -#endif - port_enable(p_ctrl_keys); port_ctrl_keys = port_in(p_ctrl_keys); if ((port_ctrl_keys & KEY_MUTE) == 0) { @@ -1381,17 +1177,7 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level, chanend_t c_ua unsigned hidData0 = chan_in_word(c_hidSendData); unsigned *reportData = hidSendData; reportData[0] = hidData0; - // 改动原因:检查是否是保存audio_mode命令(0xFB000000格式) - if ((hidData0 & 0xFF000000) == 0xFB000000) { - // 这是保存audio_mode命令,低8位是模式值 - unsigned char new_audio_mode = (unsigned char)(hidData0 & 0xFF); - if (new_audio_mode <= 3) { - unsigned char path_audio_mode[] = "audio_mode"; - save_value(path_audio_mode, new_audio_mode); - debug_printf("button_task: saved audio_mode=%d to flash\n", new_audio_mode); - } - continue; // 处理完保存命令后继续,不发送HID报告 - } else if (hidData0 == 0xffffffff) { + if (hidData0 == 0xffffffff) { debug_printf("receive end data\n"); // 改动原因:收到0xffffffff后,循环切换模式并保存到flash,然后设置切换标志 // 注意:UAC1模式下不会收到此命令(hid_button_task不发送) @@ -1403,40 +1189,39 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level, chanend_t c_ua // 循环切换模式:0(STEREO_2K) -> 1(SPATIAL_GAME) -> 2(SPATIAL_MOVIE) -> 3(无音效) -> 0 unsigned new_mode; unsigned mode_flag; + debug_printf("current_mode: %d\n", current_mode); #if UAC1_MODE != 1 if (current_mode == 0) { - // 当前是STEREO_2K,切换到SPATIAL_GAME + // 当前是STEREO_2K,切换到STEREO_2K new_mode = 1; - mode_flag = MODE_SPATIAL_GAME; - debug_printf("Switching from STEREO_2K (0) to SPATIAL_GAME (1)\n"); + mode_flag = MODE_STEREO_2K; + debug_printf("Switching from STEREO_2K (0) to STEREO_2K (1)\n"); } else if (current_mode == 1) { - // 当前是SPATIAL_GAME,切换到SPATIAL_MOVIE + // 当前是STEREO_2K,切换到SPATIAL_GAME new_mode = 2; - mode_flag = MODE_STEREO_8K; - debug_printf("Switching from SPATIAL_GAME (1) to SPATIAL_MOVIE (2)\n"); + mode_flag = MODE_SPATIAL_GAME; + debug_printf("Switching from STEREO_2K (1) to SPATIAL_GAME (2)\n"); } else if (current_mode == 2) { - // 当前是STEREO_8K,切换到无音效模式 + // 当前是SPATIAL_GAME,切换到SPATIAL_MOVIE new_mode = 3; - mode_flag = MODE_STEREO_2K; // 无音效模式使用STEREO_2K固件 - debug_printf("Switching from STEREO_8K (2) to NO_EFFECT (3)\n"); - } else if (current_mode == 3) { - // 当前是无音效模式,切换回STEREO_2K(完成循环) + mode_flag = MODE_SPATIAL_MOVIE; // SPATIAL_MOVIE模式使用SPATIAL_MOVIE固件 + debug_printf("Switching from SPATIAL_GAME (2) to SPATIAL_MOVIE (3)\n"); + } // 更新g_game_mode + else if(current_mode == 3) { new_mode = 0; mode_flag = MODE_STEREO_2K; - debug_printf("Switching from NO_EFFECT (3) to STEREO_2K (0)\n"); - } - // 更新g_game_mode - SET_SHARED_GLOBAL(g_game_mode, new_mode); - + debug_printf("Switching from SPATIAL_MOVIE (3) to STEREO_2K (0)\n"); + } + // 改动原因:保存新的模式值到flash的 "game_mode" 文件(Windows模式专用) unsigned char path[] = "game_mode"; save_value(path, (unsigned char)new_mode); debug_printf("Saved game_mode %d to flash\n", new_mode); + debug_printf("Set role switch flag: 0x%04X\n", mode_flag); // 设置角色切换标志,触发模式切换 SetRoleSwitchFlag(mode_flag); - debug_printf("Set role switch flag: 0x%04X\n", mode_flag); - delay_milliseconds(5); + delay_milliseconds(20); device_reboot(); while (1); #endif diff --git a/sw_usb_audio/app_usb_aud_phaten_golden/src/extensions/main.xc b/sw_usb_audio/app_usb_aud_phaten_golden/src/extensions/main.xc index 33094f3..a556961 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden/src/extensions/main.xc +++ b/sw_usb_audio/app_usb_aud_phaten_golden/src/extensions/main.xc @@ -617,8 +617,6 @@ int main() on tile[AUDIO_IO_TILE]: sw_pll_task(c_sw_pll); #endif - on tile[0]: while (1); - on tile[AUDIO_IO_TILE]: { /* Audio I/O task, includes mixing etc */