mode switch
This commit is contained in:
@@ -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/)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user