remove bypass mode
This commit is contained in:
@@ -186,12 +186,11 @@ on tile[0]: out port p_led_tile0 = PORT_LED_D10_8_11_9; // 8D bit7-4 = D10/D8/D
|
||||
#define TX1_LED_D7_3A_BIT 2
|
||||
#define TX1_LED_D6_FPS71_BIT 0
|
||||
|
||||
// TX1 Game modes
|
||||
/* 改动原因:去掉 BYPASS;g_3d_fps 三档循环 GAME 键 (game_mode+1)%TX1_GAME_MODE_COUNT */
|
||||
typedef enum {
|
||||
GAME_MODE_BYPASS = 0,
|
||||
GAME_MODE_FPS20 = 1,
|
||||
GAME_MODE_FPS71 = 2,
|
||||
GAME_MODE_3A = 3
|
||||
GAME_MODE_FPS20 = 0,
|
||||
GAME_MODE_FPS71 = 1,
|
||||
GAME_MODE_3A = 2
|
||||
} tx1_game_mode_t;
|
||||
|
||||
// TX1 Feature modes (for volume adjustment target)
|
||||
@@ -252,66 +251,27 @@ static unsigned tx1_wait_host_os_detection(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* 改动原因:两套固件分工——
|
||||
* 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);
|
||||
tx1_amp_mute_before_reboot();
|
||||
debug_printf("switch_mode_by_c1_mode: delay 1000ms\n");
|
||||
delay_milliseconds(1000);
|
||||
device_reboot();
|
||||
while (1);
|
||||
return;
|
||||
#endif
|
||||
|
||||
#if defined(WIN_OS_DETECTION)
|
||||
/**
|
||||
* 改动原因:仅 game_uac1 开机调用一次——Win 强制 RoleSwitch 到 fps71_uac2 并 reboot;
|
||||
* 非 Win 留在 game_uac1。与 g_3d_fps 档位无关;按键/HID 不再 reboot。
|
||||
*/
|
||||
static void tx1_boot_firmware_select_by_os(void)
|
||||
{
|
||||
unsigned host_os;
|
||||
GET_SHARED_GLOBAL(host_os, g_host_os);
|
||||
if (host_os == OS_WIN && game_mode == GAME_MODE_FPS71) {
|
||||
want_fps71_uac2 = 1;
|
||||
}
|
||||
}
|
||||
#else
|
||||
(void)game_mode;
|
||||
#endif
|
||||
unsigned host_os = tx1_wait_host_os_detection();
|
||||
|
||||
if (want_fps71_uac2) {
|
||||
if (host_os == OS_WIN) {
|
||||
debug_printf("boot: Windows -> fps71_uac2 RoleSwitch\n");
|
||||
SetRoleSwitchFlag(TX1_ROLE_FPS71_UAC2);
|
||||
reboot_need = 1;
|
||||
}
|
||||
/* game_uac1 且非 (Win+FPS71):不切换、不重启,EX3D 由 tile1 按 g_3d_fps 处理 */
|
||||
|
||||
if (reboot_need)
|
||||
{
|
||||
/* 改动原因:切固件前先功放静音,减轻 RoleSwitch 重启 pop */
|
||||
tx1_amp_mute_before_reboot();
|
||||
debug_printf("switch_mode_by_c1_mode: delay 1000ms\n");
|
||||
delay_milliseconds(1000);
|
||||
device_reboot();
|
||||
while (1);
|
||||
while (1) {
|
||||
}
|
||||
}
|
||||
debug_printf("boot: non-Windows -> stay on game_uac1\n");
|
||||
}
|
||||
#endif
|
||||
#define NAU88L21_PGA_GAIN_REG_MIN_USED_VALUE 0x0 // 0x1=1, 0dB (0x0, -1dB which is not used in this design)
|
||||
#define NAU88L21_PGA_GAIN_REG_MAX_VALUE 0x25+1 // 0x25=37, 36dB. +1 is for extra 1.5dB digital gain
|
||||
#define NAU88L21_PGA_GAIN_REG_DEFAULT_VALUE (NAU88L21_PGA_GAIN_REG_MAX_VALUE)
|
||||
@@ -831,8 +791,8 @@ static void tx1_sync_game_mode_state(unsigned mode, unsigned persist,
|
||||
{
|
||||
unsigned azimuth = TX1_AZIMUTH_MODE_FPS;
|
||||
|
||||
if (mode > 3) {
|
||||
mode = 0;
|
||||
if (mode >= TX1_GAME_MODE_COUNT) {
|
||||
mode = GAME_MODE_FPS20;
|
||||
}
|
||||
|
||||
if (persist) {
|
||||
@@ -858,9 +818,7 @@ 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);
|
||||
/* 改动原因:GAME 键 persist——game_uac1 仅 Win+FPS71 重启进 fps71;fps71 切到非 FPS71 重启回 game_uac1 */
|
||||
switch_mode_by_c1_mode(mode, 0);
|
||||
/* 未 RoleSwitch 重启则恢复放音 */
|
||||
/* 改动原因:按键只切算法不 reboot;短暂静音减轻 EX3D 切换 pop */
|
||||
delay_milliseconds(30);
|
||||
tx1_amp_ctl_mute_force(led_if, TX1_AMP_CTL_UNMUTE_VAL);
|
||||
}
|
||||
@@ -988,7 +946,7 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
|
||||
unsigned old_dac_mode = 0;
|
||||
|
||||
// TX1 game/feature mode state
|
||||
tx1_game_mode_t game_mode = GAME_MODE_BYPASS;
|
||||
tx1_game_mode_t game_mode = GAME_MODE_FPS20;
|
||||
tx1_feature_mode_t feature_mode = FEATURE_MODE_NONE;
|
||||
unsigned feature_volume = 12; // 改动原因:与 jok ui_app gunshot/footstep/mic 默认 12 一致
|
||||
unsigned mic_muted = 0;
|
||||
@@ -1022,7 +980,6 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
|
||||
unsigned led_tile0_shadow = 0xF0; // bits 7-4 all off (active low)
|
||||
unsigned feature_timeout_ticks = 0;
|
||||
|
||||
unsigned host_os = 0;
|
||||
tmr :> time; /* Input time */
|
||||
time += TIMER_PERIOD; /* Add time */
|
||||
se_tmr :> se_time;
|
||||
@@ -1072,7 +1029,7 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
|
||||
|
||||
// TX1 LED effect state for game mode indicators
|
||||
unsigned gpio_leds_dirty = 1; // refresh LEDs on first tick
|
||||
unsigned led_pattern_step = TX1_EFFECT_RACE; // 改动原因:BYPASS 下 RGB 装饰灯效,VOL++/VOL- 循环
|
||||
unsigned led_pattern_step = TX1_EFFECT_RACE; // 改动原因:VOL++/VOL- 组合键循环 RGB 装饰灯效(可选)
|
||||
|
||||
unsigned c1_mode = load_value(C1_MODE_INFO_PATH);
|
||||
|
||||
@@ -1086,7 +1043,12 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
|
||||
save_value(C1_MODE_INFO_PATH, c1_mode);
|
||||
}
|
||||
|
||||
/* 改动原因:开机从 LFS 恢复 GAME 模式(须在 Win 检测后 switch_mode,检测前需已知 g_3d_fps) */
|
||||
#if defined(WIN_OS_DETECTION)
|
||||
/* 改动原因:先 OS 检测选固件(Win→fps71_uac2 reboot),再按 Flash 恢复算法;fps71 镜像不再做 Win 检测 */
|
||||
tx1_boot_firmware_select_by_os();
|
||||
#endif
|
||||
|
||||
/* 改动原因:开机从 LFS 恢复 GAME 三档并下发 tile1 EX3D(与当前 UAC1/fps71 固件无关) */
|
||||
{
|
||||
unsigned char saved_gm = tx1_load_game_mode();
|
||||
game_mode = (tx1_game_mode_t)saved_gm;
|
||||
@@ -1095,26 +1057,8 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
|
||||
debug_printf("TX1: Loaded game_mode from flash: %u\n", (unsigned)game_mode);
|
||||
}
|
||||
|
||||
#if defined(WIN_OS_DETECTION)
|
||||
/* 改动原因:简化——轮询 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 && boot_game_mode == GAME_MODE_FPS71) {
|
||||
/* 改动原因:开机 Win+FPS71 切 fps71 前已静音,switch_mode 内会 reboot */
|
||||
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 检测、不 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");
|
||||
#if defined(FPS71_UAC2)
|
||||
debug_printf("FPS71_UAC2 running, g_3d_fps=%u\n", (unsigned)game_mode);
|
||||
#endif
|
||||
|
||||
/* 改动原因:开机恢复 DAC/MIC 音量(放在 OS 检测/切固件之后,与 c1_lp 一致避免阻塞枚举过久) */
|
||||
@@ -1776,8 +1720,8 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
|
||||
gpio_leds_dirty = 1;
|
||||
debug_printf("TX1: GAME+MIC combo - high_perf_mode=%d\n", high_perf_mode);
|
||||
} else if (current_combo == COMBO_VOL_UP_DOWN) {
|
||||
/* 改动原因:对照 jok on_combo_vol_up_down,BYPASS 下循环 RGB 灯效 */
|
||||
if (game_mode == GAME_MODE_BYPASS && feature_mode == FEATURE_MODE_NONE) {
|
||||
/* 改动原因:无 BYPASS 档;feature 空闲时 VOL 组合键可切换 RGB 装饰灯效 */
|
||||
if (feature_mode == FEATURE_MODE_NONE) {
|
||||
led_pattern_step = (led_pattern_step + 1) % TX1_EFFECT_MAX;
|
||||
debug_printf("TX1: VOL++VOL- combo - led_pattern_step=%u\n", led_pattern_step);
|
||||
} else if (feature_mode != FEATURE_MODE_NONE) {
|
||||
@@ -1858,12 +1802,8 @@ 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。
|
||||
* 固件切换(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;
|
||||
/* 改动原因:三档循环 FPS20→FPS71→3A→FPS20;只改 g_3d_fps/EX3D,不 reboot */
|
||||
game_mode = (tx1_game_mode_t)(((unsigned)game_mode + 1) % TX1_GAME_MODE_COUNT);
|
||||
gpio_leds_dirty = 1;
|
||||
tx1_sync_game_mode_state((unsigned)game_mode, 1, led_if);
|
||||
debug_printf("TX1: GAME short press - game_mode=%d saved\n", game_mode);
|
||||
@@ -1999,19 +1939,19 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
|
||||
// Update tile[1] GPIO LEDs via interface
|
||||
led_if.all_off();
|
||||
|
||||
// Game mode indicators (D4=GAME, D5=FPS20, D6=FPS71, D7=3A)
|
||||
/* 改动原因:三档指示灯 D5=FPS20, D6=FPS71, D7=3A(已去掉 D4/BYPASS) */
|
||||
switch (game_mode) {
|
||||
case GAME_MODE_BYPASS:
|
||||
led_if.led_on(TX1_GPIO_LED_D4); // D4 ON = BYPASS
|
||||
break;
|
||||
case GAME_MODE_FPS20:
|
||||
led_if.led_on(TX1_GPIO_LED_D5); // D5 ON = FPS20
|
||||
led_if.led_on(TX1_GPIO_LED_D5);
|
||||
break;
|
||||
case GAME_MODE_FPS71:
|
||||
led_if.led_on(TX1_GPIO_LED_D6); // D6 ON = FPS71
|
||||
led_if.led_on(TX1_GPIO_LED_D6);
|
||||
break;
|
||||
case GAME_MODE_3A:
|
||||
led_if.led_on(TX1_GPIO_LED_D7); // D7 ON = 3A
|
||||
led_if.led_on(TX1_GPIO_LED_D7);
|
||||
break;
|
||||
default:
|
||||
led_if.led_on(TX1_GPIO_LED_D5);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2028,7 +1968,7 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
|
||||
led_if.led_on(TX1_GPIO_LED_D2);
|
||||
}
|
||||
|
||||
/* 改动原因:仅 feature 模式刷 RGB 音量条;非 BYPASS 时由 tx1_azimuth_effect_loop 占满 RGB(同 jok) */
|
||||
/* 改动原因:仅 feature 模式刷 RGB 音量条;平时由 tx1_azimuth_effect_loop 占满 RGB */
|
||||
if (g_htr3236_ready && !tx1_factory_reset_rgb_active()
|
||||
&& feature_mode != FEATURE_MODE_NONE) {
|
||||
tx1_rgb_volume_bar_refresh(&htr3236_dev, i2c, feature_mode, feature_volume);
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include "xc_ptr.h"
|
||||
#include "dnr_dsp_buf.h"
|
||||
#include "roleswitchflag.h"
|
||||
#include "tx1_ex3d_game.h"
|
||||
#include "debug_print.h"
|
||||
#include "swlock.h"
|
||||
#include "tx1_ex3d_game.h"
|
||||
@@ -99,8 +100,7 @@ extern unsigned g_tx1_azimuth_mode;
|
||||
extern unsigned g_tx1_ex3d_resync_req;
|
||||
|
||||
/**
|
||||
* 改动原因:将 TX1 GAME 模式(0=BYPASS,1=FPS20,2=FPS71,3=3A) 映射为 g_3d_on_off_t1 并调用
|
||||
* audio_ex3d_set_sf/onoff,等价于 jok 物理键切换声场 + audio_azimuth_set_mode 的音频侧行为。
|
||||
* 改动原因:g_3d_fps 三档(0=FPS20,1=FPS71,2=3A),已去掉 BYPASS/IR_OFF;映射 EX3D 声场。
|
||||
* 须在 tile1 且 g_ex3d_init_done 后调用 audio_ex3d_*。
|
||||
*/
|
||||
static void tx1_apply_ex3d_for_game_mode(unsigned game_mode)
|
||||
@@ -108,21 +108,25 @@ static void tx1_apply_ex3d_for_game_mode(unsigned game_mode)
|
||||
unsigned ir_mode;
|
||||
unsigned azimuth_mode;
|
||||
|
||||
if (game_mode >= TX1_GAME_MODE_COUNT) {
|
||||
game_mode = 0;
|
||||
}
|
||||
|
||||
switch (game_mode) {
|
||||
case 1: /* GAME_MODE_FPS20 — jok audio_azimuth_set_mode(MODE_FPS) + 立体声游戏声场 */
|
||||
case 0: /* GAME_MODE_FPS20 */
|
||||
ir_mode = IR_GAME;
|
||||
azimuth_mode = TX1_AZIMUTH_MODE_FPS;
|
||||
break;
|
||||
case 2: /* GAME_MODE_FPS71 — MODE_FPS + 7.1 游戏声场 sf=1 */
|
||||
case 1: /* GAME_MODE_FPS71 */
|
||||
ir_mode = IR_7_1_GAME;
|
||||
azimuth_mode = TX1_AZIMUTH_MODE_FPS;
|
||||
break;
|
||||
case 3: /* GAME_MODE_3A — IR_MOVIE(非 IR_7_1_MOVIE) */
|
||||
case 2: /* GAME_MODE_3A */
|
||||
ir_mode = IR_MOVIE;
|
||||
azimuth_mode = TX1_AZIMUTH_MODE_3A;
|
||||
break;
|
||||
default: /* GAME_MODE_BYPASS */
|
||||
ir_mode = IR_OFF;
|
||||
default:
|
||||
ir_mode = IR_GAME;
|
||||
azimuth_mode = TX1_AZIMUTH_MODE_FPS;
|
||||
break;
|
||||
}
|
||||
@@ -135,10 +139,7 @@ static void tx1_apply_ex3d_for_game_mode(unsigned game_mode)
|
||||
return;
|
||||
}
|
||||
|
||||
if (ir_mode == IR_OFF) {
|
||||
audio_ex3d_set_onoff(0);
|
||||
debug_printf("TX1 ex3d: BYPASS off\n");
|
||||
} else if (ir_mode == IR_GAME) {
|
||||
if (ir_mode == IR_GAME) {
|
||||
audio_ex3d_set_sf(0);
|
||||
audio_ex3d_set_onoff(1);
|
||||
debug_printf("TX1 ex3d: FPS20 sf=0 on\n");
|
||||
@@ -452,7 +453,6 @@ void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudi
|
||||
#ifndef HID_MAX_DATA_BYTES
|
||||
#define HID_MAX_DATA_BYTES ( 64 )
|
||||
#endif
|
||||
unsigned hidSendData[HID_MAX_DATA_BYTES / 4];
|
||||
|
||||
#if (HID_CONTROLS == 1)
|
||||
|
||||
@@ -500,19 +500,6 @@ void UserHIDInit(void) {
|
||||
return;
|
||||
}
|
||||
|
||||
size_t UserHIDGetData( const unsigned id, unsigned char hidData[HID_MAX_DATA_BYTES]) {
|
||||
size_t Length = 0;
|
||||
|
||||
if(id == 1) {
|
||||
unsigned char *reportData = (unsigned char *)hidSendData;
|
||||
for (unsigned char i=0; i<HID_MAX_DATA_BYTES; i++) {
|
||||
hidData[i] = reportData[i];
|
||||
}
|
||||
Length = HID_MAX_DATA_BYTES;
|
||||
}
|
||||
|
||||
return Length;
|
||||
}
|
||||
void hid_receive_task_in_c(unsigned char * RcvData, unsigned * SendData)
|
||||
{
|
||||
unsigned command_code, cmdItem, idx = 1;
|
||||
@@ -1082,33 +1069,34 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
|
||||
// 音频模式命令:来自 audiohw.xc button_task 的模式切换
|
||||
// 必须先读取payload,无论是否启用EX3D
|
||||
current_mode_local = chan_in_word(cc_mic_level);
|
||||
if (current_mode_local > 3) current_mode_local = 0;
|
||||
if (current_mode_local >= TX1_GAME_MODE_COUNT) current_mode_local = 0;
|
||||
debug_printf("hid_button_task received audio_mode: %d\n", current_mode_local);
|
||||
#if USE_EX3D == 1
|
||||
/* 改动原因:与 g_3d_fps 四档一致,去掉 F3/F6 条件编译;UAC1 合并固件由本路径或 ex3d_task 轮询设置算法 */
|
||||
/* 改动原因:与 g_3d_fps 三档一致(0=FPS20,1=FPS71,2=3A),无 BYPASS */
|
||||
switch (current_mode_local) {
|
||||
case 1:
|
||||
case 0:
|
||||
audio_ex3d_set_sf(0);
|
||||
audio_ex3d_set_onoff(1);
|
||||
is_3d_on = IR_GAME;
|
||||
debug_printf("hid 0xFC: FPS20 IR_GAME\n");
|
||||
break;
|
||||
case 2:
|
||||
case 1:
|
||||
audio_ex3d_set_sf(1);
|
||||
audio_ex3d_set_onoff(1);
|
||||
is_3d_on = IR_7_1_GAME;
|
||||
debug_printf("hid 0xFC: FPS71 IR_7_1_GAME\n");
|
||||
break;
|
||||
case 3:
|
||||
case 2:
|
||||
audio_ex3d_set_sf(2);
|
||||
audio_ex3d_set_onoff(1);
|
||||
is_3d_on = IR_MOVIE;
|
||||
debug_printf("hid 0xFC: 3A IR_MOVIE\n");
|
||||
break;
|
||||
default:
|
||||
audio_ex3d_set_onoff(0);
|
||||
is_3d_on = IR_OFF;
|
||||
debug_printf("hid 0xFC: BYPASS IR_OFF\n");
|
||||
audio_ex3d_set_sf(0);
|
||||
audio_ex3d_set_onoff(1);
|
||||
is_3d_on = IR_GAME;
|
||||
debug_printf("hid 0xFC: default FPS20\n");
|
||||
break;
|
||||
}
|
||||
SET_SHARED_GLOBAL(g_3d_on_off_t1, is_3d_on);
|
||||
@@ -1345,7 +1333,7 @@ void ex3d_task(chanend_t c_ex3d_to_ubm){
|
||||
g_ex3d_init_done = 1;
|
||||
debug_printf("ex3d_task init: expand_gain=%d\n", Ex3dExpandGain);
|
||||
|
||||
/* 改动原因:init 完成后按当前 g_3d_fps 应用一次 EX3D(默认 BYPASS) */
|
||||
/* 改动原因:init 完成后按当前 g_3d_fps 应用一次 EX3D(默认 FPS20) */
|
||||
#if USE_EX3D == 1
|
||||
{
|
||||
unsigned init_gm;
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
#include <math.h> // 添加数学函数支持
|
||||
|
||||
extern void device_reboot(void);
|
||||
/* 改动原因:HID 0xA4 在 Windows 下切换 g_3d_fps 后调用,声明见 audiohw.xc */
|
||||
extern void switch_mode_by_c1_mode(unsigned game_mode, unsigned force_reboot);
|
||||
#include "tx1_ex3d_game.h"
|
||||
#include "user_func.h"
|
||||
|
||||
#if HID_DFU_EN
|
||||
#include "dfu_upgrade.h"
|
||||
@@ -778,13 +778,14 @@ unsigned char process_send_params(uint8_t data[], uint16_t len) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/* 改动原因:与面板 GAME 键一致——写 g_3d_fps/LFS,tile1 ex3d_task 轮询 apply EX3D */
|
||||
/* 改动原因:HID 0xA4 映射到三档 g_3d_fps,无 BYPASS;只改算法不 reboot */
|
||||
switch (hid_mode) {
|
||||
case 2: mapped = 1; break; /* 游戏 -> FPS20 */
|
||||
case 3: mapped = 2; break; /* AI7.1 -> FPS71 */
|
||||
default: mapped = 0; break;
|
||||
case 3: mapped = 1; azimuth = TX1_AZIMUTH_MODE_FPS; break; /* AI7.1 -> FPS71 */
|
||||
case 2: mapped = 0; azimuth = TX1_AZIMUTH_MODE_FPS; break; /* 游戏 -> FPS20 */
|
||||
case 1: mapped = 2; azimuth = TX1_AZIMUTH_MODE_3A; break; /* 音乐 -> 3A */
|
||||
default: mapped = 0; azimuth = TX1_AZIMUTH_MODE_FPS; break; /* 无音效等 -> FPS20 */
|
||||
}
|
||||
azimuth = TX1_AZIMUTH_MODE_FPS; /* HID 无 3A 档,与 jok 默认 MODE_FPS 一致 */
|
||||
mapped = tx1_normalize_game_mode((unsigned char)mapped);
|
||||
{
|
||||
extern unsigned g_3d_fps;
|
||||
extern unsigned g_tx1_azimuth_mode;
|
||||
@@ -795,9 +796,6 @@ 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——game_uac1 仅 Win+FPS71 切固件;fps71 仅 mapped!=FPS71 时回 UAC1 重启 */
|
||||
switch_mode_by_c1_mode(mapped, 0);
|
||||
SET_SHARED_GLOBAL(g_tx1_ex3d_resync_req, 1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -13,11 +13,10 @@
|
||||
#include "roleswitchflag.h"
|
||||
|
||||
/*
|
||||
* 改动原因:两套固件——
|
||||
* 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 选算法。
|
||||
* 改动原因:两套固件——开机 Win 检测:Windows→fps71_uac2,否则 game_uac1(仅此一次 RoleSwitch)。
|
||||
* 按键/HID 只改 g_3d_fps 算法(0=FPS20,1=FPS71,2=3A),不 reboot。已去掉 BYPASS 档。
|
||||
*/
|
||||
#define TX1_GAME_MODE_COUNT 3
|
||||
#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 */
|
||||
|
||||
|
||||
@@ -511,12 +511,15 @@ static void tx1_azimuth_effect_loop(htr3236_t *dev, client interface i2c_master_
|
||||
}
|
||||
}
|
||||
|
||||
/* game_mode / feature_mode 数值与 audiohw tx1_*_t 枚举一致:BYPASS=0, FEATURE_NONE=0 */
|
||||
/* game_mode:0=FPS20,1=FPS71,2=3A(已去掉 BYPASS) */
|
||||
void tx1_led_effects_periodic(htr3236_t *dev, client interface i2c_master_if i2c,
|
||||
unsigned game_mode,
|
||||
unsigned feature_mode,
|
||||
unsigned led_pattern_step)
|
||||
{
|
||||
(void)game_mode;
|
||||
(void)led_pattern_step;
|
||||
|
||||
if (g_tx1_factory_reset_state != TX1_FACTORY_RESET_IDLE) {
|
||||
tx1_factory_reset_led_tick(dev, i2c);
|
||||
return;
|
||||
@@ -528,13 +531,12 @@ void tx1_led_effects_periodic(htr3236_t *dev, client interface i2c_master_if i2c
|
||||
|
||||
tx1_azimuth_fx_step++;
|
||||
|
||||
/* 改动原因:与 jok led_effects_period_update_task 一致——非 BYPASS 方位灯效,BYPASS 装饰灯效 */
|
||||
if (game_mode != 0) {
|
||||
/* 改动原因:三档均有 EX3D 方位灯效,不再区分 BYPASS 装饰灯效 */
|
||||
tx1_azimuth_test_scan_ccw();
|
||||
tx1_azimuth_effect_loop(dev, i2c);
|
||||
return;
|
||||
}
|
||||
|
||||
#if 0
|
||||
switch (led_pattern_step) {
|
||||
case TX1_EFFECT_RACE:
|
||||
tx1_effect_race(dev, i2c);
|
||||
@@ -567,4 +569,5 @@ void tx1_led_effects_periodic(htr3236_t *dev, client interface i2c_master_if i2c
|
||||
tx1_fx_all_off(dev, i2c);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -102,26 +102,48 @@ void save_value32(unsigned char *path, unsigned value)
|
||||
lfs_deinit();
|
||||
}
|
||||
|
||||
/* 改动原因:与 mic_mute 相同 LFS 键值存储,供 GAME 键/HID 0xA4 写入、开机 AudioHwRemote2 恢复 */
|
||||
static unsigned char tx1_game_mode_lfs_path[] = "tx1_game_mode";
|
||||
/* 改动原因:v2 键存三档新编码;首次读不到时从旧键 tx1_game_mode(四档含 BYPASS) 迁移 */
|
||||
static unsigned char tx1_game_mode_lfs_path[] = "tx1_game_mode_v2";
|
||||
static unsigned char tx1_game_mode_lfs_path_legacy[] = "tx1_game_mode";
|
||||
|
||||
/* 改动原因:旧 Flash 0=BYPASS,1=FPS20,2=FPS71,3=3A → 新 0=FPS20,1=FPS71,2=3A */
|
||||
static unsigned char tx1_map_legacy_game_mode(unsigned char raw)
|
||||
{
|
||||
switch (raw) {
|
||||
case 0:
|
||||
case 1: return 0;
|
||||
case 2: return 1;
|
||||
case 3: return 2;
|
||||
default: return 0;
|
||||
}
|
||||
}
|
||||
|
||||
unsigned char tx1_normalize_game_mode(unsigned char raw)
|
||||
{
|
||||
if (raw <= 2) {
|
||||
return raw;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void tx1_save_game_mode(unsigned char mode)
|
||||
{
|
||||
if (mode > 3) {
|
||||
mode = 0;
|
||||
}
|
||||
mode = tx1_normalize_game_mode(mode);
|
||||
save_value(tx1_game_mode_lfs_path, mode);
|
||||
}
|
||||
|
||||
unsigned char tx1_load_game_mode(void)
|
||||
{
|
||||
unsigned char v = load_value(tx1_game_mode_lfs_path);
|
||||
if (v > 3) {
|
||||
v = 0;
|
||||
|
||||
if (v == 255) {
|
||||
v = load_value(tx1_game_mode_lfs_path_legacy);
|
||||
v = tx1_map_legacy_game_mode(v);
|
||||
save_value(tx1_game_mode_lfs_path, v);
|
||||
}
|
||||
return v;
|
||||
}
|
||||
return tx1_normalize_game_mode(v);
|
||||
}
|
||||
|
||||
/* 改动原因:面板 SYSTEM_VOLUME 调节的是 DAC 0~48 级(与 HID 0x93/0x94 一致),写入 NAU88 0x0034 前持久化 */
|
||||
static unsigned char tx1_dac_vol_lfs_path[] = "tx1_dac_vol";
|
||||
|
||||
@@ -59,9 +59,10 @@ void save_value32(unsigned char *path, unsigned value);
|
||||
unsigned load_value32(unsigned char *path);
|
||||
#endif
|
||||
|
||||
/* 改动原因:TX1 GAME 模式(0..3) 断电记忆,与 jok 面板四档一致;tile0/tile1 均可调用 */
|
||||
/* 改动原因:TX1 GAME 三档(0=FPS20,1=FPS71,2=3A),已去掉 BYPASS;断电记忆 */
|
||||
void tx1_save_game_mode(unsigned char mode);
|
||||
unsigned char tx1_load_game_mode(void);
|
||||
unsigned char tx1_normalize_game_mode(unsigned char raw);
|
||||
|
||||
/* 改动原因:SYSTEM_VOLUME 对应 DAC HID 等级(0~48)、MIC_LEVEL 对应 MIC HID 等级(0~48),断电记忆 */
|
||||
void tx1_save_dac_volume(unsigned char level);
|
||||
|
||||
Reference in New Issue
Block a user