remove bypass mode

This commit is contained in:
Steven Dan
2026-05-27 08:33:08 +08:00
parent aa7ef0ad7a
commit c47224eca0
7 changed files with 117 additions and 166 deletions

View File

@@ -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
/* 改动原因:去掉 BYPASSg_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_fps0=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)
{
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
/**
* 改动原因:仅 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 = 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 重启进 fps71fps71 切到非 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_downBYPASS 下循环 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);

View File

@@ -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;

View File

@@ -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/LFStile1 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;
}

View File

@@ -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 */

View File

@@ -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_mode0=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) {
tx1_azimuth_test_scan_ccw();
tx1_azimuth_effect_loop(dev, i2c);
return;
}
/* 改动原因:三档均有 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
}

View File

@@ -102,25 +102,47 @@ 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 v;
return tx1_normalize_game_mode(v);
}
/* 改动原因:面板 SYSTEM_VOLUME 调节的是 DAC 0~48 级(与 HID 0x93/0x94 一致),写入 NAU88 0x0034 前持久化 */

View File

@@ -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);