diff --git a/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/audiohw.xc b/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/audiohw.xc index 0c4939f..9cc9d91 100644 --- a/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/audiohw.xc +++ b/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/audiohw.xc @@ -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) - { - 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 重启进 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); diff --git a/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/dsp.c b/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/dsp.c index 59b8b69..2e2ad68 100644 --- a/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/dsp.c +++ b/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/dsp.c @@ -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 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; diff --git a/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/eq.c b/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/eq.c index f10669e..e44ac7e 100644 --- a/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/eq.c +++ b/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/eq.c @@ -8,8 +8,8 @@ #include // 添加数学函数支持 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; } diff --git a/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/tx1_ex3d_game.h b/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/tx1_ex3d_game.h index 2cb4aa7..a437036 100644 --- a/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/tx1_ex3d_game.h +++ b/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/tx1_ex3d_game.h @@ -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 */ diff --git a/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/tx1_led_effects.xc b/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/tx1_led_effects.xc index b766fff..65320bb 100644 --- a/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/tx1_led_effects.xc +++ b/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/tx1_led_effects.xc @@ -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) { - 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 } diff --git a/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/user_func.c b/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/user_func.c index 23fe9bc..ac819b4 100644 --- a/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/user_func.c +++ b/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/user_func.c @@ -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 前持久化 */ diff --git a/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/user_func.h b/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/user_func.h index 04e3a13..1874643 100644 --- a/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/user_func.h +++ b/sw_usb_audio/app_usb_aud_fosi_c1_v71/src/extensions/user_func.h @@ -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);