fix feature mode resume after timeout
Remember last active feature on timeout or combo exit. FPS short press from NONE restores that mode; cycling stays on SYSTEM..MIC only so MIC no longer steps through NONE (double-press issue). Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -911,6 +911,33 @@ static unsigned tx1_vol_minus_step(tx1_feature_mode_t mode, unsigned &feature_vo
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 改动原因:feature 超时或组合键退出时保存当前调节项(如 FOOTSTEPS),供下次 FPS 短按直接恢复。
|
||||
*/
|
||||
static void tx1_feature_mode_remember_on_exit(tx1_feature_mode_t mode,
|
||||
tx1_feature_mode_t &last_feature_mode)
|
||||
{
|
||||
if (mode != FEATURE_MODE_NONE) {
|
||||
last_feature_mode = mode;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 改动原因:原 (mode+1)%5 会使 MIC(4)→NONE(0),需再按才到 SYSTEM,表现为“按两次才到下一项”;
|
||||
* 超时后从 NONE 再按应回到 last_feature_mode,而非总是 SYSTEM_VOLUME。
|
||||
*/
|
||||
static void tx1_feature_mode_fps_short_press(tx1_feature_mode_t &feature_mode,
|
||||
tx1_feature_mode_t &last_feature_mode)
|
||||
{
|
||||
if (feature_mode == FEATURE_MODE_NONE) {
|
||||
feature_mode = last_feature_mode;
|
||||
} else {
|
||||
unsigned m = ((unsigned)feature_mode % 4u) + 1u;
|
||||
feature_mode = (tx1_feature_mode_t)m;
|
||||
last_feature_mode = feature_mode;
|
||||
}
|
||||
}
|
||||
|
||||
static void tx1_apply_mic_mute_hw(unsigned mic_muted, unsigned &old_adc_vol,
|
||||
client interface i2c_master_if i2c)
|
||||
{
|
||||
@@ -967,6 +994,8 @@ void AudioHwRemote2(streaming chanend c, chanend cc_mic_level, client interface
|
||||
// TX1 game/feature mode state
|
||||
tx1_game_mode_t game_mode = GAME_MODE_FPS20;
|
||||
tx1_feature_mode_t feature_mode = FEATURE_MODE_NONE;
|
||||
/* 改动原因:超时退出后再次 FPS 短按恢复上次调节项;首次进入默认系统音量。 */
|
||||
tx1_feature_mode_t last_feature_mode = FEATURE_MODE_SYSTEM_VOLUME;
|
||||
unsigned feature_volume = 12; // 改动原因:与 jok ui_app gunshot/footstep/mic 默认 12 一致
|
||||
unsigned mic_muted = 0;
|
||||
/* 改动原因:与 phaten golden 相同 LFS 键名,断电保存 MIC 静音;255=首次无记录默认未静音 */
|
||||
@@ -1743,6 +1772,7 @@ void AudioHwRemote2(streaming chanend c, chanend cc_mic_level, client interface
|
||||
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) {
|
||||
tx1_feature_mode_remember_on_exit(feature_mode, last_feature_mode);
|
||||
feature_mode = FEATURE_MODE_NONE;
|
||||
feature_timeout_ticks = 0;
|
||||
gpio_leds_dirty = 1;
|
||||
@@ -1805,12 +1835,12 @@ void AudioHwRemote2(streaming chanend c, chanend cc_mic_level, client interface
|
||||
fps_long_fired = 0;
|
||||
} else { // Released
|
||||
if (!fps_long_fired && (now - fps_press_time) < 1000000000ull) {
|
||||
// Short press: cycle feature mode
|
||||
feature_mode = (feature_mode + 1) % 5;
|
||||
tx1_feature_mode_fps_short_press(feature_mode, last_feature_mode);
|
||||
feature_timeout_ticks = 0;
|
||||
tx1_sync_feature_volume_from_hw(feature_mode, feature_volume);
|
||||
gpio_leds_dirty = 1;
|
||||
debug_printf("TX1: FPS short press - feature_mode=%d\n", feature_mode);
|
||||
debug_printf("TX1: FPS short press - feature_mode=%d last=%d\n",
|
||||
feature_mode, last_feature_mode);
|
||||
}
|
||||
}
|
||||
prev_fps = fps;
|
||||
@@ -1937,10 +1967,11 @@ void AudioHwRemote2(streaming chanend c, chanend cc_mic_level, client interface
|
||||
if (feature_mode != FEATURE_MODE_NONE) {
|
||||
feature_timeout_ticks++;
|
||||
if (feature_timeout_ticks >= TX1_FEATURE_TIMEOUT_MAX) {
|
||||
tx1_feature_mode_remember_on_exit(feature_mode, last_feature_mode);
|
||||
feature_mode = FEATURE_MODE_NONE;
|
||||
feature_timeout_ticks = 0;
|
||||
gpio_leds_dirty = 1;
|
||||
debug_printf("TX1: Feature mode timeout\n");
|
||||
debug_printf("TX1: Feature mode timeout, last=%d\n", last_feature_mode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user