update mode update

This commit is contained in:
Steven Dan
2026-03-24 12:29:58 +08:00
parent c789a27ae5
commit 059308a616
2 changed files with 71 additions and 118 deletions

View File

@@ -61,6 +61,7 @@ set(APP_COMPILER_FLAGS_f1_music_uac2 ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC
-DF1_MUSIC_UAC2=1
#-DUSE_EX3D
-DMIXER=0
-DUAC2_MODE=1
#-ldnr_50ms
#-llib_ex3d_all
-DEQ_EN=1
@@ -84,6 +85,7 @@ set(APP_COMPILER_FLAGS_f3_f4_fps_uac2 ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC=2
-DUSE_EX3D=1
-DF3_F4_FPS_UAC2=1
-DMIXER=0
-DUAC2_MODE=1
-ldnr_50ms
-llib_ex3d_all
-DEQ_EN=1
@@ -129,6 +131,7 @@ set(APP_COMPILER_FLAGS_f6_f7_fps_uac1 ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC=2
-DAUDIO_CLASS=1
-DMIN_FREQ=48000
-DMAX_FREQ=48000
-DUAC1_MODE=1
-DUSE_EX3D=1
-DF6_F7_FPS_UAC1=1
-DMIXER=0

View File

@@ -128,12 +128,10 @@ unsigned g_led_blink_is_white = 0;
#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_STEREO_2K UAC1_IN_FLAG // 4 STEREO_2K模式标志
#define MODE_SPATIAL_GAME COAX_IN_FLAG //1 SPATIAL_GAME模式标志
#define MODE_SPATIAL_MOVIE OPT_IN_FLAG // 3 STEREO_8K模式标志
#define MODE_UAC1 USB_IN_FLAG // 2 UAC1模式标志
#define MODE_F3_F4_FPS_UAC2 COAX_IN_FLAG //1 SPATIAL_GAME模式标志
#define MODE_F5_MUSIC_UAC1 UAC1_IN_FLAG // 2 UAC1模式标志
#define MODE_F1_MUSIC_UAC2 OPT_IN_FLAG // 3 STEREO_8K模式标志
#define MODE_F6_F7_FPS_UAC1 USB_IN_FLAG // 4 STEREO_2K模式标志
/* All on tile[0] */
port p_scl = PORT_I2C_SCL;
@@ -268,6 +266,8 @@ extern unsigned g_host_os; // 1 -> Windows, 2 -> Others
extern unsigned g_mute_on_off_t0;
extern unsigned g_uac_vol;
extern void device_reboot(void);
void save_value(unsigned char * unsafe path, unsigned char value);
unsigned char load_value(unsigned char * unsafe path);
@@ -354,6 +354,67 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol)
// LED控制上下文
led_control_t led_ctx;
// Windows模式从 "game_mode" 加载(模式值 0-3
// UAC1模式从 "uac1_mode" 加载(等效模式值 0-2
unsigned /* char */ saved_mode;
unsigned char saved_uac1_mode = 0;
unsigned char path[] = "game_mode";
unsigned host_os;
GET_SHARED_GLOBAL(host_os, g_host_os);
saved_mode = load_value(path);
debug_printf("Loaded game_mode from flash: %d\n", saved_mode);
#if defined(UAC1_MODE)
delay_milliseconds(300);
if (saved_mode == 255) {
saved_mode = 0;
save_value(path, saved_mode);
debug_printf("Saved game_mode to flash: %d\n", saved_mode);
}
#else
if (saved_mode == 255) {
// 如果文件不存在,根据编译模式设置默认值
#if defined(MODE_F1_MUSIC_UAC2)
saved_mode = 0;
#elif defined(MODE_F3_F4_FPS_UAC2)
saved_mode = 2;
#endif
save_value(path, saved_mode);
debug_printf("Saved game_mode to flash: %d\n", saved_mode);
}
#endif
printf("host_os: %d\n", host_os);
#if UAC1_MODE == 1
if (host_os == OS_WIN) {
printf("Detected Windows OS (OS_WIN) saved_mode: %d\n", saved_mode);
unsigned flag = (saved_mode == 0) ? MODE_F1_MUSIC_UAC2 : MODE_F3_F4_FPS_UAC2;
SetRoleSwitchFlag(flag);
device_reboot();
while (1);
}
else
{
if (saved_mode != 0) {
SetRoleSwitchFlag(MODE_F6_F7_FPS_UAC1);
device_reboot();
while (1);
}
}
#endif
g_windows_detect_done = 1;
SET_SHARED_GLOBAL(g_game_mode, saved_mode);
debug_printf("Set new g_game_mode to %d\n", saved_mode);
// 初始化硬件
htr3236_init(&htr3236_dev, HTR3236_ADDR_GND);
htr3236_hw_enable(&htr3236_dev);
@@ -423,121 +484,10 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol)
delay_milliseconds(200);
codec_init();
unsigned ex3d_key_verified;
delay_milliseconds(300);
debug_printf("button task start\n");
// Windows模式从 "game_mode" 加载(模式值 0-3
// UAC1模式从 "uac1_mode" 加载(等效模式值 0-2
unsigned /* char */ saved_mode;
unsigned char saved_uac1_mode = 0;
unsigned char path[] = "game_mode";
unsigned host_os;
GET_SHARED_GLOBAL(host_os, g_host_os);
saved_mode = load_value(path);
debug_printf("Loaded game_mode from flash: %d\n", saved_mode);
#if defined(UAC1_MODE)
if (saved_mode == 255) {
saved_mode = 0;
save_value(path, saved_mode);
debug_printf("Saved game_mode to flash: %d\n", saved_mode);
}
#else
if (saved_mode == 255) {
// 如果文件不存在,根据编译模式设置默认值
#if defined(STEREO_2K)
saved_mode = 0;
#elif defined(SPATIAL_GAME)
saved_mode = 2;
#elif defined(SPATIAL_MOVIE)
saved_mode = 3;
#endif
save_value(path, saved_mode);
debug_printf("Saved game_mode to flash: %d\n", saved_mode);
}
#endif
//printf("host_os: %d\n", host_os);
#if 0
if ((host_os == OS_OTHERS) || (host_os == 0)) {
#if !UAC1_MODE
printf("Detected non-Windows OS (OS_OTHERS), switching to UAC1 mode\n");
SetRoleSwitchFlag(MODE_UAC1);
debug_printf("Set role switch flag: 0x%04X (UAC1), device will restart\n", MODE_UAC1);
// 设备会重启,退出函数
device_reboot();
while(1);
#endif
}
#endif
#if UAC1_MODE == 1
if (host_os == OS_WIN) {
printf("Detected Windows OS (OS_WIN) saved_mode: %d\n", saved_mode);
#if IR_SWITCHING_MODE
if (saved_mode == 0) {
SetRoleSwitchFlag(MODE_STEREO_2K);
} else {
SetRoleSwitchFlag(MODE_SPATIAL_GAME);
}
#else
{
switch (saved_mode) {
case 0:
SetRoleSwitchFlag(MODE_STEREO_2K);
break;
case 1:
SetRoleSwitchFlag(MODE_STEREO_2K);
break;
case 2:
SetRoleSwitchFlag(MODE_SPATIAL_GAME);
break;
case 3:
SetRoleSwitchFlag(MODE_SPATIAL_MOVIE);
break;
default:
SetRoleSwitchFlag(MODE_STEREO_2K);
break;
}
debug_printf("Switch to saved mode: %d, device will restart.\n", saved_mode);
delay_milliseconds(200);
// device_reboot();
// while (1);
}
#endif
}
#endif
#if defined(STEREO_2K)
if ((saved_mode != 255) && (saved_mode != 0) && (saved_mode != 1)) {
saved_mode = 0;
}
#endif
#if defined(SPATIAL_GAME)
if ((saved_mode != 255) && (saved_mode != 2)) {
saved_mode = 2;
}
#endif
#if defined(SPATIAL_MOVIE)
if ((saved_mode != 255) && (saved_mode != 3)) {
saved_mode = 3;
}
#endif
g_windows_detect_done = 1;
SET_SHARED_GLOBAL(g_game_mode, saved_mode);
debug_printf("Set new g_game_mode to %d\n", saved_mode);
//chan_out_byte(cc_mic_level, 0xFC); // 音频模式传输命令
//chan_out_byte(cc_mic_level, 0xFC); // 音频模式传输命令
//chan_out_byte(cc_mic_level, saved_mode); // 音频模式值0=无音效1=STEREO_2K2=SPATIAL_GAME3=SPATIAL_MOVIE
cc_mic_level <: 0xFC;
cc_mic_level <: saved_mode;