add FPS+MIC combo to toggle EX3D on/off
Short-press FPS and MIC together toggles g_3d_enable (default on), syncs to tile1 via cc_mic_level 0xFB, and calls audio_ex3d_set_onoff on tile1. D8 green LED shows EX3D on; off when disabled. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -963,6 +963,18 @@ static void tx1_send_game_mode_to_tile1(chanend cc_mic_level, unsigned mode)
|
||||
cc_mic_level <: mode;
|
||||
debug_printf("cc_mic_level send game_mode=%u\n", mode);
|
||||
}
|
||||
|
||||
/**
|
||||
* 改动原因:FPS+MIC 组合键切换 EX3D 后,经 cc_mic_level 同步到 tile1,由 hid_button_task 调用 audio_ex3d_set_onoff。
|
||||
*/
|
||||
static void tx1_send_ex3d_onoff_to_tile1(chanend cc_mic_level, unsigned onoff)
|
||||
{
|
||||
onoff = onoff ? 1u : 0u;
|
||||
SET_SHARED_GLOBAL(g_3d_enable, onoff);
|
||||
cc_mic_level <: TX1_CC_CMD_EX3D_ONOFF;
|
||||
cc_mic_level <: onoff;
|
||||
debug_printf("cc_mic_level send ex3d_onoff=%u\n", onoff);
|
||||
}
|
||||
/* 改动原因:c_dfu 仅接收 FIRMWARE_UPGRADE_START,在此线程执行 handle_firmware_upgrade_start。
|
||||
* 移除未使用的 chanend c_erase:原占位参数无任何 select/通信,会导致 main 侧被迫接 dummy 通道且与当前拓扑无关。 */
|
||||
#if HID_DFU_EN
|
||||
@@ -1020,6 +1032,8 @@ void AudioHwRemote2(streaming chanend c, chanend cc_mic_level, client interface
|
||||
debug_printf("TX1: Loaded mic_mute from flash: mic_muted=%d\n", mic_muted);
|
||||
}
|
||||
unsigned dnr_enabled = 1;
|
||||
/* 改动原因:FPS+MIC 组合键切换 EX3D 总开关,默认开启;D8 绿灯亮=开、灭=关 */
|
||||
unsigned ex3d_enable = 1;
|
||||
unsigned high_perf_mode = 0;
|
||||
|
||||
htr3236_t htr3236_dev;
|
||||
@@ -1062,7 +1076,8 @@ void AudioHwRemote2(streaming chanend c, chanend cc_mic_level, client interface
|
||||
unsigned vol_plus_long_fired = 0, vol_minus_long_fired = 0;
|
||||
|
||||
// TX1 combo key state
|
||||
typedef enum { COMBO_NONE = 0, COMBO_GAME_MIC, COMBO_VOL_UP_DOWN } tx1_combo_t;
|
||||
/* 改动原因:增加 FPS+MIC 组合键切换 EX3D 算法开关 */
|
||||
typedef enum { COMBO_NONE = 0, COMBO_GAME_MIC, COMBO_VOL_UP_DOWN, COMBO_FPS_MIC } tx1_combo_t;
|
||||
tx1_combo_t current_combo = COMBO_NONE;
|
||||
unsigned combo_triggered = 0;
|
||||
unsigned combo_release_time = 0;
|
||||
@@ -1102,6 +1117,9 @@ void AudioHwRemote2(streaming chanend c, chanend cc_mic_level, client interface
|
||||
unsigned char saved_gm = tx1_load_game_mode();
|
||||
game_mode = (tx1_game_mode_t)saved_gm;
|
||||
tx1_sync_game_mode_state((unsigned)game_mode, 0, cc_mic_level, led_if);
|
||||
/* 改动原因:开机默认 EX3D 开启,同步 tile1 并点亮 D8 绿灯 */
|
||||
ex3d_enable = 1;
|
||||
tx1_send_ex3d_onoff_to_tile1(cc_mic_level, ex3d_enable);
|
||||
gpio_leds_dirty = 1;
|
||||
debug_printf("TX1: Loaded game_mode from flash: %u\n", (unsigned)game_mode);
|
||||
}
|
||||
@@ -1744,6 +1762,8 @@ void AudioHwRemote2(streaming chanend c, chanend cc_mic_level, client interface
|
||||
tx1_combo_t new_combo = COMBO_NONE;
|
||||
if (game == 0 && mic == 0) {
|
||||
new_combo = COMBO_GAME_MIC;
|
||||
} else if (fps == 0 && mic == 0) {
|
||||
new_combo = COMBO_FPS_MIC;
|
||||
} else if (vol_plus == 0 && vol_minus == 0) {
|
||||
new_combo = COMBO_VOL_UP_DOWN;
|
||||
}
|
||||
@@ -1777,6 +1797,11 @@ void AudioHwRemote2(streaming chanend c, chanend cc_mic_level, client interface
|
||||
feature_timeout_ticks = 0;
|
||||
gpio_leds_dirty = 1;
|
||||
}
|
||||
} else if (current_combo == COMBO_FPS_MIC) {
|
||||
ex3d_enable = !ex3d_enable;
|
||||
tx1_send_ex3d_onoff_to_tile1(cc_mic_level, ex3d_enable);
|
||||
gpio_leds_dirty = 1;
|
||||
debug_printf("TX1: FPS+MIC combo - ex3d_enable=%d\n", ex3d_enable);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1986,8 +2011,8 @@ void AudioHwRemote2(streaming chanend c, chanend cc_mic_level, client interface
|
||||
if (feature_mode == FEATURE_MODE_SYSTEM_VOLUME) {
|
||||
led_tile0_shadow &= ~(1 << TX1_LED_D10_GREEN_BIT);
|
||||
}
|
||||
// D8_GREEN = DNR indicator
|
||||
if (dnr_enabled) {
|
||||
/* 改动原因:D8 绿灯指示 EX3D 算法开/关(FPS+MIC 组合键);不再用作 DNR 灯 */
|
||||
if (ex3d_enable) {
|
||||
led_tile0_shadow &= ~(1 << TX1_LED_D8_GREEN_BIT);
|
||||
}
|
||||
// D11_BLUE = MIC Level indicator (feature_mode == MIC_LEVEL)
|
||||
|
||||
@@ -95,9 +95,12 @@ unsigned g_3d_on_off_t1 = IR_OFF; // Default 3D off
|
||||
static unsigned g_tx1_last_ex3d_game_applied = 0xFFFFFFFFu;
|
||||
|
||||
extern unsigned g_3d_fps;
|
||||
extern unsigned g_3d_enable;
|
||||
extern unsigned g_request_game_mode;
|
||||
extern unsigned g_tx1_azimuth_mode;
|
||||
|
||||
static void tx1_apply_ex3d_for_game_mode(unsigned game_mode);
|
||||
|
||||
/**
|
||||
* 改动原因:g_3d_fps 三档(0=FPS20,1=FPS71,2=3A),已去掉 BYPASS/IR_OFF;映射 EX3D 声场。
|
||||
* 须在 tile1 且 g_ex3d_init_done 后调用 audio_ex3d_*。
|
||||
@@ -106,6 +109,9 @@ static void tx1_apply_ex3d_for_game_mode(unsigned game_mode)
|
||||
{
|
||||
unsigned ir_mode;
|
||||
unsigned azimuth_mode;
|
||||
unsigned enable;
|
||||
|
||||
GET_SHARED_GLOBAL(enable, g_3d_enable);
|
||||
|
||||
if (game_mode >= TX1_GAME_MODE_COUNT) {
|
||||
game_mode = 0;
|
||||
@@ -138,6 +144,12 @@ static void tx1_apply_ex3d_for_game_mode(unsigned game_mode)
|
||||
return;
|
||||
}
|
||||
|
||||
if (!enable) {
|
||||
audio_ex3d_set_onoff(0);
|
||||
debug_printf("TX1 ex3d: disabled (g_3d_enable=0), game_mode=%u\n", game_mode);
|
||||
return;
|
||||
}
|
||||
|
||||
if (ir_mode == IR_GAME) {
|
||||
audio_ex3d_set_sf(0);
|
||||
audio_ex3d_set_onoff(1);
|
||||
@@ -153,6 +165,32 @@ static void tx1_apply_ex3d_for_game_mode(unsigned game_mode)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 改动原因:FPS+MIC 组合键经 0xFB 下发;enable=0 仅关算法,enable=1 按当前 g_3d_fps 恢复声场。
|
||||
*/
|
||||
static void tx1_apply_ex3d_enable(unsigned enable)
|
||||
{
|
||||
enable = enable ? 1u : 0u;
|
||||
|
||||
if (!g_ex3d_init_done) {
|
||||
debug_printf("TX1 ex3d: defer enable=%u\n", enable);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!enable) {
|
||||
audio_ex3d_set_onoff(0);
|
||||
debug_printf("TX1 ex3d: set_onoff(0) by enable\n");
|
||||
return;
|
||||
}
|
||||
|
||||
{
|
||||
unsigned gm;
|
||||
GET_SHARED_GLOBAL(gm, g_3d_fps);
|
||||
tx1_apply_ex3d_for_game_mode(gm);
|
||||
g_tx1_last_ex3d_game_applied = gm;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* USE_EX3D == 1 */
|
||||
|
||||
#else
|
||||
@@ -1077,8 +1115,23 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
|
||||
break;
|
||||
}
|
||||
SET_SHARED_GLOBAL(g_3d_on_off_t1, is_3d_on);
|
||||
{
|
||||
unsigned en;
|
||||
GET_SHARED_GLOBAL(en, g_3d_enable);
|
||||
if (!en) {
|
||||
audio_ex3d_set_onoff(0);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
} else if (tmp == TX1_CC_CMD_EX3D_ONOFF) {
|
||||
unsigned onoff = chan_in_word(cc_mic_level);
|
||||
onoff = onoff ? 1u : 0u;
|
||||
#if USE_EX3D == 1
|
||||
tx1_apply_ex3d_enable(onoff);
|
||||
#endif
|
||||
debug_printf("hid 0xFB: EX3D enable=%u\n", onoff);
|
||||
|
||||
} else if (tmp == 0xFD) {
|
||||
// 脚步增强按键发来的 expand gain 命令
|
||||
// 必须先读取payload,无论是否启用EX3D
|
||||
@@ -1317,6 +1370,13 @@ void ex3d_task(chanend_t c_ex3d_to_ubm){
|
||||
GET_SHARED_GLOBAL(init_gm, g_3d_fps);
|
||||
tx1_apply_ex3d_for_game_mode(init_gm);
|
||||
g_tx1_last_ex3d_game_applied = init_gm;
|
||||
{
|
||||
unsigned en;
|
||||
GET_SHARED_GLOBAL(en, g_3d_enable);
|
||||
if (!en) {
|
||||
audio_ex3d_set_onoff(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -30,4 +30,10 @@ extern unsigned g_tx1_azimuth_mode;
|
||||
/* 改动原因:tile0 从 Flash 恢复 g_3d_fps 后置 1,tile1 ex3d_task 强制重新 apply(防 init 早于 load) */
|
||||
extern unsigned g_tx1_ex3d_resync_req;
|
||||
|
||||
/* 改动原因:FPS+MIC 组合键切换 EX3D 总开关,默认 1=开启;tile0/tile1 经 SHARED_GLOBAL 同步 */
|
||||
extern unsigned g_3d_enable;
|
||||
|
||||
/* tile0 audiohw → tile1 hid_button_task:0xFB + onoff(0/1) → audio_ex3d_set_onoff */
|
||||
#define TX1_CC_CMD_EX3D_ONOFF 0xFB
|
||||
|
||||
#endif /* TX1_EX3D_GAME_H */
|
||||
|
||||
Reference in New Issue
Block a user