update os detection
This commit is contained in:
@@ -76,8 +76,9 @@ set(APP_COMPILER_FLAGS_ex3d_UAC1 ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC=2
|
||||
-DINPUT_VOLUME_CONTROL=0
|
||||
-DUAC1_MODE=1
|
||||
-DOUTPUT_VOLUME_CONTROL=0
|
||||
-DXUA_DFU_EN=0
|
||||
-DSTEREO_2K
|
||||
-DHID_CONTROLS=1)
|
||||
-DHID_CONTROLS=0)
|
||||
|
||||
|
||||
set(APP_COMPILER_FLAGS_ex3d_stereo_2k ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC=2
|
||||
|
||||
@@ -1 +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_stereo_8k\app_usb_aud_phaten_gs_ex3d_stereo_8k.xe -o %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
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
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_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 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
|
||||
|
||||
|
||||
@@ -212,6 +212,12 @@ void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudi
|
||||
sampsFromAudioToUsb[1] = sampsFromUsbToAudio[1];
|
||||
}
|
||||
|
||||
#ifndef HID_MAX_DATA_BYTES
|
||||
#define HID_MAX_DATA_BYTES ( 64 )
|
||||
#endif
|
||||
unsigned hidSendData[HID_MAX_DATA_BYTES / 4];
|
||||
|
||||
|
||||
#if (HID_CONTROLS == 1)
|
||||
#include "user_hid.h"
|
||||
static unsigned char lastHidData;
|
||||
@@ -252,7 +258,6 @@ typedef enum {
|
||||
#define CMD_CLR_FWD_TO_2ND_DEV(item) ((item) & ~0x0800)
|
||||
#define CMD_MASK (~(CMD_SET(0)|CMD_GET(0)|CMD_PARAM(0)|CMD_FWD(0)|CMD_FWD_TO_2ND_DEV(0)))
|
||||
#define CMD_ITEM(cmd) ((cmd) & CMD_MASK)
|
||||
unsigned hidSendData[HID_MAX_DATA_BYTES / 4];
|
||||
|
||||
void UserHIDInit(void) {
|
||||
return;
|
||||
@@ -714,10 +719,10 @@ void update_button(unsigned char b)
|
||||
#define BLUE_LED_PIN 0 // 3D LED (蓝色LED) - bit 0 of leds2_val, 0b11111110
|
||||
|
||||
// 改动原因:定义模式切换标志值,用于在SPATIAL_GAME、STEREO_8K、STEREO_2K、UAC1之间循环切换
|
||||
#define MODE_STEREO_2K USB_IN_FLAG // 2 STEREO_2K模式标志
|
||||
#define MODE_STEREO_2K UAC1_IN_FLAG // 4 STEREO_2K模式标志
|
||||
#define MODE_SPATIAL_GAME COAX_IN_FLAG //1 SPATIAL_GAME模式标志
|
||||
#define MODE_STEREO_8K OPT_IN_FLAG // 3 STEREO_8K模式标志
|
||||
#define MODE_UAC1 UAC1_IN_FLAG // 4 UAC1模式标志
|
||||
#define MODE_UAC1 USB_IN_FLAG // 2 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)
|
||||
@@ -780,6 +785,7 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
|
||||
port_out(p_leds, leds1_val);
|
||||
port_out(p_leds2, leds2_val);
|
||||
debug_printf("LED init: default OFF state, waiting for mode from button_task\n");
|
||||
// delay_milliseconds(200);
|
||||
uint32_t last_status = port_in(p_keys);
|
||||
hwtimer_set_trigger_time(timer, hwtimer_get_time(timer) + KEY_POLLING_INTERVAL);
|
||||
while (1) {
|
||||
@@ -884,10 +890,12 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
|
||||
RcvData[i] = chan_in_byte(c_hidRcvData);
|
||||
}
|
||||
if(RcvData[0] == 0x01) { // REPORT ID 1
|
||||
#if (HID_CONTROLS == 1)
|
||||
hid_receive_task_in_c(RcvData, SendData);
|
||||
for(int i=0; i<(HID_MAX_DATA_BYTES / 4) ;i++) {
|
||||
chan_out_word(c_hidSendData, SendData[i]);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
continue;
|
||||
@@ -929,7 +937,7 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
|
||||
if (press_hold_cnt > 0) {
|
||||
// 改动原因:短按切换模式(0=无音效,1=STEREO_2K,2=SPATIAL_GAME,3=STEREO_8K)
|
||||
// 循环切换:0→1→2→3→0
|
||||
#if 0
|
||||
#if UAC1_MODE
|
||||
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);
|
||||
@@ -978,8 +986,9 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
|
||||
port_out(p_leds, leds1_val);
|
||||
#endif
|
||||
unsigned endData[1] = {0xffffffff};
|
||||
debug_printf("endData[0]: %d\n", endData[0]);
|
||||
debug_printf("endData[0]: %d %d\n", endData[0], current_mode_local);
|
||||
chan_out_word(c_hidSendData, endData[0]);
|
||||
chan_out_word(c_hidSendData, current_mode_local);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -1062,12 +1071,11 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level, chanend_t c_ua
|
||||
static unsigned isMute = 0;
|
||||
uint8_t tmp = 0;
|
||||
|
||||
#if (HID_CONTROLS == 1)
|
||||
unsigned hidData0;
|
||||
#endif
|
||||
|
||||
unsigned ex3d_key_verified;
|
||||
delay_milliseconds(300);
|
||||
debug_printf("button task start\n");
|
||||
debug_printf("button task start\n");
|
||||
|
||||
// 改动原因:区分Windows模式和UAC1模式,分别从不同的flash文件加载
|
||||
// Windows模式:从 "game_mode" 加载(模式值 0-3)
|
||||
@@ -1101,19 +1109,24 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level, chanend_t c_ua
|
||||
debug_printf("Saved game_mode to flash: %d\n", saved_mode);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (host_os == OS_OTHERS) {
|
||||
printf("host_os: %d\n", host_os);
|
||||
#if 0
|
||||
if ((host_os == OS_OTHERS) || (host_os == 0)) {
|
||||
// 改动原因:检测到非Windows系统,切换到UAC1模式
|
||||
debug_printf("Detected non-Windows OS (OS_OTHERS), switching to UAC1 mode\n");
|
||||
#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
|
||||
}
|
||||
else {
|
||||
debug_printf("Detected Windows OS (OS_WIN)\n");
|
||||
#endif
|
||||
|
||||
#if UAC1_MODE == 1
|
||||
if (host_os == OS_WIN) {
|
||||
printf("Detected Windows OS (OS_WIN) saved_mode: %d\n", saved_mode);
|
||||
|
||||
|
||||
{
|
||||
@@ -1122,13 +1135,13 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level, chanend_t c_ua
|
||||
SetRoleSwitchFlag(MODE_STEREO_2K);
|
||||
break;
|
||||
case 1:
|
||||
SetRoleSwitchFlag(MODE_SPATIAL_GAME);
|
||||
SetRoleSwitchFlag(MODE_STEREO_2K);
|
||||
break;
|
||||
case 2:
|
||||
SetRoleSwitchFlag(MODE_STEREO_8K);
|
||||
SetRoleSwitchFlag(MODE_SPATIAL_GAME);
|
||||
break;
|
||||
case 3:
|
||||
SetRoleSwitchFlag(MODE_STEREO_2K);
|
||||
SetRoleSwitchFlag(MODE_STEREO_8K);
|
||||
break;
|
||||
default:
|
||||
SetRoleSwitchFlag(MODE_STEREO_2K);
|
||||
@@ -1136,9 +1149,11 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level, chanend_t c_ua
|
||||
}
|
||||
debug_printf("Switch to saved mode: %d, device will restart.\n", saved_mode);
|
||||
delay_milliseconds(200);
|
||||
//device_reboot();
|
||||
//while (1);
|
||||
device_reboot();
|
||||
while (1);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(STEREO_2K)
|
||||
@@ -1159,8 +1174,6 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level, chanend_t c_ua
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
g_windows_detect_done = 1;
|
||||
|
||||
// 改动原因:更新全局变量g_game_mode为保存的模式值
|
||||
@@ -1205,15 +1218,13 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level, chanend_t c_ua
|
||||
// 改动原因:收到0xffffffff后,循环切换模式并保存到flash,然后设置切换标志
|
||||
// 注意:UAC1模式下不会收到此命令(hid_button_task不发送)
|
||||
// 读取当前g_game_mode值
|
||||
unsigned current_mode;
|
||||
GET_SHARED_GLOBAL(current_mode, g_game_mode);
|
||||
unsigned current_mode = chan_in_word(c_hidSendData);
|
||||
|
||||
// 改动原因:Windows模式下只循环切换0→1→2→3→0(不包括UAC1模式4)
|
||||
// 循环切换模式:0(STEREO_2K) -> 1(SPATIAL_GAME) -> 2(STEREO_8K) -> 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,切换到STEREO_2K
|
||||
new_mode = 1;
|
||||
@@ -1240,20 +1251,37 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level, chanend_t c_ua
|
||||
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);
|
||||
delay_milliseconds(20);
|
||||
device_reboot();
|
||||
while (1);
|
||||
|
||||
// 改动原因:判断是否需要切换固件,mode 0和mode 1都使用STEREO_2K固件,不需要reboot
|
||||
// 只有在需要切换固件时才reboot,同一固件内的模式切换(如0<->1)只更新模式和算法状态
|
||||
#if !UAC1_MODE
|
||||
|
||||
if (new_mode != 1) {
|
||||
// 改动原因:需要切换固件,执行reboot
|
||||
debug_printf("Set role switch flag: 0x%04X, switching firmware, rebooting...\n", mode_flag);
|
||||
SetRoleSwitchFlag(mode_flag);
|
||||
delay_milliseconds(20);
|
||||
device_reboot();
|
||||
while (1);
|
||||
} else {
|
||||
// 改动原因:不需要切换固件,只更新模式和算法状态(如mode 0<->1切换),不reboot
|
||||
debug_printf("Same firmware mode (0x%04X), updating mode and algorithm state without reboot\n", mode_flag);
|
||||
SET_SHARED_GLOBAL(g_game_mode, new_mode);
|
||||
// 改动原因:通过channel发送新的audio_mode给hid_button_task,更新LED和算法状态
|
||||
chan_out_byte(cc_mic_level, 0xFC); // 音频模式传输命令
|
||||
chan_out_byte(cc_mic_level, new_mode); // 音频模式值
|
||||
debug_printf("Sent audio_mode %d to hid_button_task via cc_mic_level channel\n", new_mode);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
#if (HID_CONTROLS == 1)
|
||||
for (int i=1; i<(HID_MAX_DATA_BYTES/4); i++) {
|
||||
reportData[i] = chan_in_word(c_hidSendData);
|
||||
}
|
||||
hidSetChangePending(1);
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
event_polling:
|
||||
@@ -1305,6 +1333,7 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level, chanend_t c_ua
|
||||
debug_printf("MUTE: muted\n");
|
||||
}
|
||||
break;
|
||||
#if (HID_CONTROLS == 1)
|
||||
case KEY_PLAY_VOL_DN:
|
||||
// 改动原因:处理播放音量减按键,发送HID控制命令
|
||||
if ((curr_ctrl_keys & KEY_PLAY_VOL_DN) == 0) {
|
||||
@@ -1318,6 +1347,7 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level, chanend_t c_ua
|
||||
update_button(HID_CONTROL_VOLUP); // 更新HID报告
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -102,6 +102,7 @@ extern void key_receiver(chanend c_key);
|
||||
#define USER_MAIN_CORES on tile[1]: {\
|
||||
par\
|
||||
{\
|
||||
hid_button_task(cc_mic_level, c_hidRcvData, c_hidSendData, c_uac_vol);\
|
||||
ex3d_task();\
|
||||
par(int i=0;i<DSP_WORKER_COUNT;i++) dsp_worker_tile(c_dsp_to_ex3d[i], i);\
|
||||
unsafe\
|
||||
@@ -111,7 +112,6 @@ extern void key_receiver(chanend c_key);
|
||||
for(int i=0;i<DSP_WORKER_COUNT;i++)\
|
||||
uc_dsp_to_ex3d[i] = (chanend) c_dsp_to_ex3d[i];\
|
||||
}\
|
||||
hid_button_task(cc_mic_level, c_hidRcvData, c_hidSendData, c_uac_vol);\
|
||||
}\
|
||||
}\
|
||||
on tile[0]: {\
|
||||
|
||||
Reference in New Issue
Block a user