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,
|
static void tx1_apply_mic_mute_hw(unsigned mic_muted, unsigned &old_adc_vol,
|
||||||
client interface i2c_master_if i2c)
|
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/feature mode state
|
||||||
tx1_game_mode_t game_mode = GAME_MODE_FPS20;
|
tx1_game_mode_t game_mode = GAME_MODE_FPS20;
|
||||||
tx1_feature_mode_t feature_mode = FEATURE_MODE_NONE;
|
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 feature_volume = 12; // 改动原因:与 jok ui_app gunshot/footstep/mic 默认 12 一致
|
||||||
unsigned mic_muted = 0;
|
unsigned mic_muted = 0;
|
||||||
/* 改动原因:与 phaten golden 相同 LFS 键名,断电保存 MIC 静音;255=首次无记录默认未静音 */
|
/* 改动原因:与 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;
|
led_pattern_step = (led_pattern_step + 1) % TX1_EFFECT_MAX;
|
||||||
debug_printf("TX1: VOL++VOL- combo - led_pattern_step=%u\n", led_pattern_step);
|
debug_printf("TX1: VOL++VOL- combo - led_pattern_step=%u\n", led_pattern_step);
|
||||||
} else if (feature_mode != FEATURE_MODE_NONE) {
|
} else if (feature_mode != FEATURE_MODE_NONE) {
|
||||||
|
tx1_feature_mode_remember_on_exit(feature_mode, last_feature_mode);
|
||||||
feature_mode = FEATURE_MODE_NONE;
|
feature_mode = FEATURE_MODE_NONE;
|
||||||
feature_timeout_ticks = 0;
|
feature_timeout_ticks = 0;
|
||||||
gpio_leds_dirty = 1;
|
gpio_leds_dirty = 1;
|
||||||
@@ -1805,12 +1835,12 @@ void AudioHwRemote2(streaming chanend c, chanend cc_mic_level, client interface
|
|||||||
fps_long_fired = 0;
|
fps_long_fired = 0;
|
||||||
} else { // Released
|
} else { // Released
|
||||||
if (!fps_long_fired && (now - fps_press_time) < 1000000000ull) {
|
if (!fps_long_fired && (now - fps_press_time) < 1000000000ull) {
|
||||||
// Short press: cycle feature mode
|
tx1_feature_mode_fps_short_press(feature_mode, last_feature_mode);
|
||||||
feature_mode = (feature_mode + 1) % 5;
|
|
||||||
feature_timeout_ticks = 0;
|
feature_timeout_ticks = 0;
|
||||||
tx1_sync_feature_volume_from_hw(feature_mode, feature_volume);
|
tx1_sync_feature_volume_from_hw(feature_mode, feature_volume);
|
||||||
gpio_leds_dirty = 1;
|
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;
|
prev_fps = fps;
|
||||||
@@ -1937,10 +1967,11 @@ void AudioHwRemote2(streaming chanend c, chanend cc_mic_level, client interface
|
|||||||
if (feature_mode != FEATURE_MODE_NONE) {
|
if (feature_mode != FEATURE_MODE_NONE) {
|
||||||
feature_timeout_ticks++;
|
feature_timeout_ticks++;
|
||||||
if (feature_timeout_ticks >= TX1_FEATURE_TIMEOUT_MAX) {
|
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_mode = FEATURE_MODE_NONE;
|
||||||
feature_timeout_ticks = 0;
|
feature_timeout_ticks = 0;
|
||||||
gpio_leds_dirty = 1;
|
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