From 9eb6adc8d42b34017bfe6369e14286d8d855a3c6 Mon Sep 17 00:00:00 2001 From: Steven Dan Date: Thu, 4 Jun 2026 16:43:59 +0800 Subject: [PATCH] seperate f3 and f4 mode --- .../gen_factory.bat | 3 +- .../gen_update.bat | 2 +- .../src/core/xua_conf.h | 6 +- .../src/extensions/audiohw.xc | 90 ++++++++++++++----- 4 files changed, 73 insertions(+), 28 deletions(-) diff --git a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/gen_factory.bat b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/gen_factory.bat index 22327bb..57339d8 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/gen_factory.bat +++ b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/gen_factory.bat @@ -1,3 +1,4 @@ -xflash bin/fact/app_usb_aud_sy102_fact.xe --loader loader.o --upgrade 2 bin/f5_music_uac1/app_usb_aud_sy102_f5_music_uac1.xe --upgrade 3 bin/f1_music_uac2/app_usb_aud_sy102_f1_music_uac2.xe --upgrade 1 bin/f3_f4_fps_uac2/app_usb_aud_sy102_f3_f4_fps_uac2.xe --upgrade 4 bin/f6_f7_fps_uac1/app_usb_aud_sy102_f6_f7_fps_uac1.xe -o %1 +rem 改动原因:F3/F4 拆分——slot1=F3 Game,slot5=F4 AI7.1 +xflash bin/fact/app_usb_aud_sy102_fact.xe --loader loader.o --upgrade 2 bin/f5_music_uac1/app_usb_aud_sy102_f5_music_uac1.xe --upgrade 3 bin/f1_music_uac2/app_usb_aud_sy102_f1_music_uac2.xe --upgrade 1 bin/f3_fps_uac2/app_usb_aud_sy102_f3_fps_uac2.xe --upgrade 4 bin/f6_f7_fps_uac1/app_usb_aud_sy102_f6_f7_fps_uac1.xe --upgrade 5 bin/f4_fps_uac2/app_usb_aud_sy102_f4_fps_uac2.xe -o %1 rem --upgrade 4 bin/f6_f7_fps_uac1/app_usb_aud_sy102_f6_f7_fps_uac1.xe diff --git a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/gen_update.bat b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/gen_update.bat index 707adfd..81dec5b 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/gen_update.bat +++ b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/gen_update.bat @@ -1 +1 @@ -xflash --factory-version 15.3 --target-file src/core/synido.xn --upgrade 2 bin/f5_music_uac1/app_usb_aud_sy102_f5_music_uac1.xe --upgrade 3 bin/f1_music_uac2/app_usb_aud_sy102_f1_music_uac2.xe --upgrade 1 bin/f3_f4_fps_uac2/app_usb_aud_sy102_f3_f4_fps_uac2.xe --upgrade 4 bin/f6_f7_fps_uac1/app_usb_aud_sy102_f6_f7_fps_uac1.xe -o %1 +xflash --factory-version 15.3 --target-file src/core/synido.xn --upgrade 2 bin/f5_music_uac1/app_usb_aud_sy102_f5_music_uac1.xe --upgrade 3 bin/f1_music_uac2/app_usb_aud_sy102_f1_music_uac2.xe --upgrade 1 bin/f3_fps_uac2/app_usb_aud_sy102_f3_fps_uac2.xe --upgrade 4 bin/f6_f7_fps_uac1/app_usb_aud_sy102_f6_f7_fps_uac1.xe --upgrade 5 bin/f4_fps_uac2/app_usb_aud_sy102_f4_fps_uac2.xe -o %1 diff --git a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/core/xua_conf.h b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/core/xua_conf.h index a18eb3b..65d7c35 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/core/xua_conf.h +++ b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/core/xua_conf.h @@ -147,8 +147,8 @@ #ifndef PID_AUDIO_2 #if defined(F1_MUSIC_UAC2) #define PID_AUDIO_2 (0x2000) /* F1: Music, UAC2, Windows */ -#elif defined(F3_F4_FPS_UAC2) -#define PID_AUDIO_2 (0x2001) /* F3/F4: FPS/AI7.1, UAC2, Windows */ +#elif defined(F3_FPS_UAC2) || defined(F4_FPS_UAC2) +#define PID_AUDIO_2 (0x2001) /* F3 Game / F4 AI7.1, UAC2, Windows */ #else #define PID_AUDIO_2 (0x2000) #endif @@ -167,7 +167,7 @@ #if defined(F1_MUSIC_UAC2) || defined(F5_MUSIC_UAC1) #define PRODUCT_STR_A2 "SY102 Music" #define PRODUCT_STR_A1 "SY102 Music" -#elif defined(F3_F4_FPS_UAC2) || defined(F6_F7_FPS_UAC1) +#elif defined(F3_FPS_UAC2) || defined(F4_FPS_UAC2) || defined(F6_F7_FPS_UAC1) #define PRODUCT_STR_A2 "SY102 AI Game" #define PRODUCT_STR_A1 "SY102 AI Game" #else 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 95f794e..6a5c0a8 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 @@ -213,11 +213,19 @@ unsigned g_led_blink_is_white = 0; #define LED_PURPLE (LED_RED & LED_BLUE) #define LED_WHITE (LED_RED & LED_GREEN & LED_BLUE) enum { OS_WIN = 1, OS_OTHERS = 2 }; -// 改动原因:定义模式切换标志值,用于在SPATIAL_GAME、STEREO_8K、STEREO_2K、UAC1之间循环切换 -#define MODE_F3_F4_FPS_UAC2 COAX_IN_FLAG //1 SPATIAL_GAME模式标志 -#define MODE_F5_MUSIC_UAC1 USB_IN_FLAG // 2 F5 MUSIC -#define MODE_F1_MUSIC_UAC2 OPT_IN_FLAG // 3 F1 MUSIC -#define MODE_F6_F7_FPS_UAC1 UAC1_IN_FLAG // 4 STEREO_2K模式标志 +// 改动原因:F3/F4拆分为独立固件——Game键切F3(COAX/slot1),AI7.1键切F4(BT/slot5) +#define MODE_F3_FPS_UAC2 COAX_IN_FLAG // F3 Game (upgrade slot 1) +#define MODE_F5_MUSIC_UAC1 USB_IN_FLAG // F5 Music UAC1 (upgrade slot 2) +#define MODE_F1_MUSIC_UAC2 OPT_IN_FLAG // F1 Music UAC2 (upgrade slot 3) +#define MODE_F6_F7_FPS_UAC1 UAC1_IN_FLAG // F6/F7 FPS UAC1 (upgrade slot 4) +#define MODE_F4_FPS_UAC2 BT_IN_FLAG // F4 AI7.1 (upgrade slot 5) + +// 改动原因:按 game_mode(2=Game/3=AI7.1) 选择 F3 或 F4 固件标志,供启动链与 HID 复用 +static unsigned get_fps_firmware_flag(unsigned mode) +{ + if (mode == 3) return MODE_F4_FPS_UAC2; + return MODE_F3_FPS_UAC2; // mode==2 或其它 FPS 模式默认 F3 Game +} /* All on tile[0] */ port p_scl = PORT_I2C_SCL; @@ -666,7 +674,8 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, if (host_os == OS_WIN) { debug_printf("Detected Windows OS (OS_WIN) saved_mode: %d\n", saved_mode); - unsigned flag = (saved_mode <= 1) ? MODE_F1_MUSIC_UAC2 : MODE_F3_F4_FPS_UAC2; + // 改动原因:Windows 下 mode2→F3 Game,mode3→F4 AI7.1,不再共用 F3_F4 合并固件 + unsigned flag = (saved_mode <= 1) ? MODE_F1_MUSIC_UAC2 : get_fps_firmware_flag(saved_mode); SetRoleSwitchFlag(flag); #ifndef DISABLE_REBOOT device_reboot(); @@ -1319,9 +1328,10 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, // Music btn: toggle LED locally (no reboot) // Game/AI7.1 btn: save mode + reboot (F5 will route to FPS firmware) // - // FPS firmware (F3/F4, F6/F7): USE_EX3D set + // FPS firmware (F3 Game / F4 AI7.1, F6/F7): USE_EX3D set // Music btn: save mode=1 + reboot (F5 will route to music firmware) - // Game/AI7.1 btn: switch IR algorithm locally (no reboot) + // F3: Game 本地切 mode2;AI7.1 需重启切 F4 + // F4: AI7.1 本地切 mode3;Game 需重启切 F3 unsigned mode_btn_change = 0; unsigned need_reboot = 0; @@ -1390,7 +1400,8 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, if (!btn_combo_active) { if (btn_music_hold_ticks == BTN_COMBO_DELAY_TICKS) { debug_printf("Music button pressed for %d ticks\n", BTN_COMBO_DELAY_TICKS); -#if (F3_F4_FPS_UAC2 == 1) +#if (F3_FPS_UAC2 == 1) || (F4_FPS_UAC2 == 1) + // 改动原因:F3/F4 FPS 固件按 Music 键切回 F1 Music active_mode = 1; need_reboot = 1; SetRoleSwitchFlag(MODE_F1_MUSIC_UAC2); @@ -1423,9 +1434,10 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, if (btn_game_hold_ticks == BTN_COMBO_DELAY_TICKS) { debug_printf("Game button pressed for %d ticks\n", BTN_COMBO_DELAY_TICKS); #if F1_MUSIC_UAC2 == 1 + // 改动原因:Music 固件按 Game 键启动 F3 Game 固件 active_mode = 2; need_reboot = 1; - SetRoleSwitchFlag(MODE_F3_F4_FPS_UAC2); + SetRoleSwitchFlag(MODE_F3_FPS_UAC2); #elif (F5_MUSIC_UAC1 == 1) // UAC1 Music firmware: game needs F6/F7, reboot if not already game if (active_mode != 2) { @@ -1439,11 +1451,17 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, active_mode = 2; mode_btn_change = 1; } -#else +#elif (F3_FPS_UAC2 == 1) + // 改动原因:已在 F3 Game 固件,Game 键仅本地切 mode2 if (active_mode != 2) { active_mode = 2; mode_btn_change = 1; } +#elif (F4_FPS_UAC2 == 1) + // 改动原因:F4 AI7.1 固件按 Game 键需重启加载 F3 Game 固件 + active_mode = 2; + need_reboot = 1; + SetRoleSwitchFlag(MODE_F3_FPS_UAC2); #endif } } @@ -1459,10 +1477,10 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, if (button_ai71_onoff == 0) { if (push_button_ai71_onoff_state_old == 1) { #if (F1_MUSIC_UAC2 == 1) - // Music-only firmware: AI7.1 needs FPS firmware + // 改动原因:Music 固件按 AI7.1 键启动 F4 AI7.1 固件 active_mode = 3; need_reboot = 1; - SetRoleSwitchFlag(MODE_F3_F4_FPS_UAC2); + SetRoleSwitchFlag(MODE_F4_FPS_UAC2); #elif (F5_MUSIC_UAC1 == 1) // UAC1 Music firmware: AI71 needs F6/F7 FPS, reboot if not already AI71 if (active_mode != 3) { @@ -1476,12 +1494,17 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, active_mode = 3; mode_btn_change = 1; } -#else - // FPS firmware: switch algorithm locally (activate if not already) +#elif (F4_FPS_UAC2 == 1) + // 改动原因:已在 F4 AI7.1 固件,AI7.1 键仅本地切 mode3 if (active_mode != 3) { active_mode = 3; mode_btn_change = 1; } +#elif (F3_FPS_UAC2 == 1) + // 改动原因:F3 Game 固件按 AI7.1 键需重启加载 F4 AI7.1 固件 + active_mode = 3; + need_reboot = 1; + SetRoleSwitchFlag(MODE_F4_FPS_UAC2); #endif } } @@ -1494,20 +1517,40 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, if (hid_req_mode != (unsigned)-1) { SET_SHARED_GLOBAL(g_request_game_mode, (unsigned)-1); unsigned target = (hid_req_mode <= 3) ? hid_req_mode : 0; -#if (F3_F4_FPS_UAC2 == 1) +#if (F3_FPS_UAC2 == 1) || (F4_FPS_UAC2 == 1) + // 改动原因:HID 0xA4 在 F3/F4 间切换需跨固件重启,同固件则本地切算法 if (target == 1) { active_mode = target; need_reboot = 1; SetRoleSwitchFlag(MODE_F1_MUSIC_UAC2); - } else { - active_mode = target; - mode_btn_change = 1; + } else if (target == 2) { +#if (F3_FPS_UAC2 == 1) + if (active_mode != 2) { + active_mode = 2; + mode_btn_change = 1; + } +#else + active_mode = 2; + need_reboot = 1; + SetRoleSwitchFlag(MODE_F3_FPS_UAC2); +#endif + } else if (target == 3) { +#if (F4_FPS_UAC2 == 1) + if (active_mode != 3) { + active_mode = 3; + mode_btn_change = 1; + } +#else + active_mode = 3; + need_reboot = 1; + SetRoleSwitchFlag(MODE_F4_FPS_UAC2); +#endif } #elif (F1_MUSIC_UAC2 == 1) if (target >= 2) { active_mode = target; need_reboot = 1; - SetRoleSwitchFlag(MODE_F3_F4_FPS_UAC2); + SetRoleSwitchFlag(get_fps_firmware_flag(target)); } else { active_mode = target; mode_btn_change = 1; @@ -1616,8 +1659,8 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, delay_milliseconds(100); } #endif - // 出厂恢复默认AI7.1模式(mode=3),需要F3/F4固件 - SetRoleSwitchFlag(MODE_F3_F4_FPS_UAC2); + // 改动原因:出厂默认 AI7.1(mode=3),启动 F4 AI7.1 固件 + SetRoleSwitchFlag(MODE_F4_FPS_UAC2); delay_milliseconds(20); #ifndef DISABLE_REBOOT device_reboot(); @@ -2426,7 +2469,8 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, #if UAC1_MODE == 1 GET_SHARED_GLOBAL(host_os, g_host_os); if (host_os == OS_WIN) { - unsigned flag = (saved_mode <= 1) ? MODE_F1_MUSIC_UAC2 : MODE_F3_F4_FPS_UAC2; + // 改动原因:运行时 OS 检测为 Windows 时按 mode 路由 F1/F3/F4 + unsigned flag = (saved_mode <= 1) ? MODE_F1_MUSIC_UAC2 : get_fps_firmware_flag(saved_mode); SetRoleSwitchFlag(flag); #ifndef DISABLE_REBOOT device_reboot();