diff --git a/sw_usb_audio/app_usb_aud_fosi_c1_v71/CMakeLists.txt b/sw_usb_audio/app_usb_aud_fosi_c1_v71/CMakeLists.txt index 3e6793b..6f092bd 100644 --- a/sw_usb_audio/app_usb_aud_fosi_c1_v71/CMakeLists.txt +++ b/sw_usb_audio/app_usb_aud_fosi_c1_v71/CMakeLists.txt @@ -107,43 +107,41 @@ set(APP_COMPILER_FLAGS_fps71_uac2 ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC=2 # 改动原因:BYPASS/FPS20/3A 合并 UAC1;Win 检测仅本目标(参照 fosi_c1 fps_uac1 / c1_lp) set(APP_COMPILER_FLAGS_game_uac1 ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC=2 -DI2S_CHANS_ADC=2 + -DAUDIO_CLASS=1 -DMIN_FREQ=48000 - #-DAUDIO_CLASS=1 - -DUAC1_MODE=1 -DMAX_FREQ=48000 - -DWINDOWS_OS_DESCRIPTOR_SUPPORT - -DWIN_OS_DETECTION=1 - -DUSE_EX3D=1 + -DMCLK_441=512*44100 + -DMCLK_48=512*48000 + -DUAC1_MODE=1 + -DF5_MUSIC_UAC1=1 + -DUSE_EX3D -DMIXER=0 - -DUAC2_MODE=1 - -ldnr_50ms + #-ldnr_11ms + #-DDNR_ENABLE=1 -llib_ex3d_all -DEQ_EN=1 - -DFPS_GAME_UAC1=1 - -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=24 - -DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=24 - -DINPUT_FORMAT_COUNT=1 - -DOUTPUT_FORMAT_COUNT=1 - -DWIN_OS_DETECTION=1 -DEX3D_SF_NUM=3 -DNUM_USB_CHAN_OUT=8 + -DNUM_USB_CHAN_OUT_FS=2 -DNUM_USB_CHAN_IN=2 + -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=24 + -DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=24 + -DWIN_OS_DETECTION=1 + -DINPUT_FORMAT_COUNT=1 + -DOUTPUT_FORMAT_COUNT=1 -DNUM_EX3D_CHAN_OUT=2 + -DEX3D_SF_NUM=3 -DMIN_VOLUME=0xE000 - -DINPUT_VOLUME_CONTROL=1 - -DOUTPUT_VOLUME_CONTROL=1 + -DINPUT_VOLUME_CONTROL=0 + -DOUTPUT_VOLUME_CONTROL=0 -DDEBUG_MEMORY_LOG_ENABLED=1 - -DHID_CONTROLS_UAC1=1 - #-DXUA_DFU_EN=1 + -DXUA_DFU_EN=0 -DHID_DFU_EN=1 + -DHID_CONTROLS_UAC1=1 -DIR_SWITCHING_MODE -DHID_CONTROLS=1) - - - - LINK_DIRECTORIES(${CMAKE_CURRENT_LIST_DIR}/../../lib_dnr/lib_dnr ${CMAKE_CURRENT_LIST_DIR}/../../lib_ex3d/lib_ex3d/lib) set(APP_INCLUDES src src/core src/extensions ../shared/) diff --git a/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/audiohw.xc b/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/audiohw.xc index 14708ab..6d7b06f 100644 --- a/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/audiohw.xc +++ b/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/audiohw.xc @@ -216,18 +216,35 @@ static unsigned tx1_wait_host_os_detection(void) #endif /** - * 改动原因:两套固件——FPS71 UAC2(仅 UAC1 上 Win 检测为 Win 且 g_3d_fps=2)与合并 UAC1。 + * 改动原因:两套固件分工—— + * game_uac1:仅 Win 检测 + g_3d_fps=FPS71 时跳到 fps71_uac2;其它档不重启; + * fps71_uac2:不做 Win 检测;仅按键/HID 切到非 FPS71 时回 game_uac1 并重启。 * @param game_mode g_3d_fps:0=BYPASS 1=FPS20 2=FPS71 3=3A + * @param force_reboot 保留兼容,未使用 */ void switch_mode_by_c1_mode(unsigned game_mode, unsigned force_reboot) { unsigned reboot_need = 0; unsigned want_fps71_uac2 = 0; + (void)force_reboot; + if (game_mode > 3) { game_mode = 0; } +#if defined(FPS71_UAC2) + /* 改动原因:fps71 固件不参与 Windows 判断;已是 FPS71 档则直接返回 */ + if (game_mode == GAME_MODE_FPS71) { + return; + } + SetRoleSwitchFlag(TX1_ROLE_GAME_UAC1); + delay_milliseconds(20); + device_reboot(); + while (1); + return; +#endif + #if defined(WIN_OS_DETECTION) { unsigned host_os; @@ -236,27 +253,19 @@ void switch_mode_by_c1_mode(unsigned game_mode, unsigned force_reboot) want_fps71_uac2 = 1; } } -#elif defined(FPS71_UAC2) - /* 改动原因:OS 检测只在 game_uac1;FPS71 固件切离 FPS71 档则回 UAC1 */ - want_fps71_uac2 = (game_mode == GAME_MODE_FPS71) ? 1u : 0u; #else (void)game_mode; #endif if (want_fps71_uac2) { -#if !FPS71_UAC2 SetRoleSwitchFlag(TX1_ROLE_FPS71_UAC2); reboot_need = 1; -#endif - } else { -#if !FPS_GAME_UAC1 - SetRoleSwitchFlag(TX1_ROLE_GAME_UAC1); - reboot_need = 1; -#endif } + /* game_uac1 且非 (Win+FPS71):不切换、不重启,EX3D 由 tile1 按 g_3d_fps 处理 */ - if (reboot_need || force_reboot) + if (reboot_need) { + /* 改动原因:game_uac1 按键切到 FPS71 且已判定为 Win 时,RoleSwitch 后必须重启才进入 fps71_uac2 */ delay_milliseconds(20); device_reboot(); while (1); @@ -800,15 +809,8 @@ static void tx1_sync_game_mode_state(unsigned mode, unsigned persist) tx1_azimuth_clear_all_decay(); if (persist) { tx1_save_game_mode((unsigned char)mode); -#if defined(WIN_OS_DETECTION) - /* 改动原因:UAC1 固件内已检测过 OS;Win 才在 FPS71↔UAC1 间换固件 */ + /* 改动原因:GAME 键 persist——game_uac1 仅 Win+FPS71 重启进 fps71;fps71 切到非 FPS71 重启回 game_uac1 */ switch_mode_by_c1_mode(mode, 0); -#elif defined(FPS71_UAC2) - /* 改动原因:FPS71 固件无 Win 检测,离开 FPS71 必回 game_uac1 */ - if (mode != GAME_MODE_FPS71) { - switch_mode_by_c1_mode(mode, 0); - } -#endif } } @@ -1039,21 +1041,22 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli } #if defined(WIN_OS_DETECTION) - /* 改动原因:与 fosi_c1_lp 相同——仅 UAC1 固件、定时器已启动后延时轮询,再按 OS+模式切固件 */ + /* 改动原因:简化——轮询 OS 后仅 Win 且 Flash 恢复的档位为 FPS71 时才 RoleSwitch 到 fps71_uac2; + * 其它档位留在 game_uac1,不重启(EX3D 由 tile1 按 g_3d_fps 处理)。 */ host_os = tx1_wait_host_os_detection(); { unsigned boot_game_mode; GET_SHARED_GLOBAL(boot_game_mode, g_3d_fps); debug_printf("WIN_OS_DETECTION host_os=%d g_3d_fps=%d\n", host_os, boot_game_mode); - if (host_os == OS_WIN) { - switch_mode_by_c1_mode(boot_game_mode, 1); - } else { + if (host_os == OS_WIN && boot_game_mode == GAME_MODE_FPS71) { switch_mode_by_c1_mode(boot_game_mode, 0); + } else { + debug_printf("stay on game_uac1 (no fps71 role switch)\n"); } } #elif defined(FPS71_UAC2) - /* 改动原因:FPS71 固件不做 Win 检测;由 game_uac1 检测后 RoleSwitch 跳入 */ - debug_printf("FPS71_UAC2 boot g_3d_fps=%u\n", (unsigned)game_mode); + /* 改动原因:fps71 开机不做 Win 检测、不 switch_mode;仅 GAME 键切到非 FPS71 时重启回 game_uac1 */ + debug_printf("FPS71_UAC2 boot g_3d_fps=%u (no OS detect, no auto switch)\n", (unsigned)game_mode); #else debug_printf("game_uac1 no WIN_OS_DETECTION build\n"); #endif @@ -1789,7 +1792,11 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli game_long_fired = 0; } else { if (!game_long_fired && (now - game_press_time) < 1000000000ull) { - /* 改动原因:与 jok on_game_short_press 一致;写 Flash 并同步 tile1 EX3D */ + /* 改动原因:与 jok on_game_short_press 一致;写 Flash 并同步 tile1 EX3D。 + * 固件切换(switch_mode_by_c1_mode): + * game_uac1 + Windows + 新档位=FPS71 → 重启进 fps71_uac2; + * fps71_uac2 + 新档位≠FPS71 → 重启回 game_uac1; + * 其余(非 Win 下 FPS71、UAC1 下其它档)仅改 g_3d_fps,不重启。 */ game_mode = (game_mode + 1) % 4; gpio_leds_dirty = 1; tx1_sync_game_mode_state((unsigned)game_mode, 1); diff --git a/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/eq.c b/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/eq.c index 9440ad1..f10669e 100644 --- a/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/eq.c +++ b/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/eq.c @@ -795,7 +795,7 @@ unsigned char process_send_params(uint8_t data[], uint16_t len) { } tx1_save_game_mode((unsigned char)mapped); SET_SHARED_GLOBAL(g_request_game_mode, (unsigned)-1); - /* 改动原因:HID 0xA4 后 switch_mode 内判断 OS——仅 Win+FPS71 切 UAC2,非 Win 只改 tile1 算法 */ + /* 改动原因:HID 0xA4——game_uac1 仅 Win+FPS71 切固件;fps71 仅 mapped!=FPS71 时回 UAC1 重启 */ switch_mode_by_c1_mode(mapped, 0); SET_SHARED_GLOBAL(g_tx1_ex3d_resync_req, 1); diff --git a/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/tx1_ex3d_game.h b/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/tx1_ex3d_game.h index fc6529e..2cb4aa7 100644 --- a/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/tx1_ex3d_game.h +++ b/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/tx1_ex3d_game.h @@ -13,8 +13,10 @@ #include "roleswitchflag.h" /* - * 改动原因:仅两套固件——FPS71 UAC2 + 合并 UAC1(BYPASS/FPS20/3A 由 g_3d_fps 在 tile1 选算法)。 - * Windows 且 g_3d_fps=2 时加载 upgrade1;否则加载 upgrade2。 + * 改动原因:两套固件—— + * game_uac1(upgrade2):Win 检测后仅 g_3d_fps=FPS71 时跳 upgrade1;其它档留 UAC1; + * fps71_uac2(upgrade1):不做 Win 检测;仅按键/HID 切离 FPS71 时回 upgrade2。 + * BYPASS/FPS20/3A 在 game_uac1 上由 tile1 按 g_3d_fps 选算法。 */ #define TX1_ROLE_FPS71_UAC2 COAX_IN_FLAG /* upgrade 1 -DFPS71_UAC2=1 */ #define TX1_ROLE_GAME_UAC1 USB_IN_FLAG /* upgrade 2 -DFPS_GAME_UAC1=1 */