fix factory reset hold timing
Replace factory-reset elapsed-time comparison with 20ms scan-tick counting. The previous code used 32-bit elapsed against 6s/10s/10.6s 64-bit constants, so trigger thresholds were unreachable and countdown got cancelled instead of firing. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -173,7 +173,10 @@ on tile[0]: out port p_led_tile0 = PORT_LED_D10_8_11_9; // 8D bit7-4 = D10/D8/D
|
||||
// TX1 Button timing thresholds (in 50ms ticks)
|
||||
#define TX1_SHORT_PRESS_TICKS 1 // 50ms minimum press
|
||||
/* 改动原因:TX1_LONG_PRESS_TICKS 已在文件顶部以 10ns 绝对时间定义(100000000ull);此处删除重复的 tick 计数版本 */
|
||||
#define TX1_FACTORY_RESET_TICKS 212 // 10.6s = 212 * 50ms
|
||||
/* 改动原因:Factory reset 按键扫描在 20ms 定时器中运行;统一用扫描 tick 计数,避免 32 位时间戳比较 10.6s 常量失效。 */
|
||||
#define TX1_FACTORY_RESET_6S_TICKS 300 // 6.0s / 20ms
|
||||
#define TX1_FACTORY_RESET_10S_TICKS 500 // 10.0s / 20ms
|
||||
#define TX1_FACTORY_RESET_TICKS 530 // 10.6s / 20ms
|
||||
|
||||
// TX1 LED bit masks for tile[0] (XS1_PORT_8D bits 7-4)
|
||||
#define TX1_LED_D10_GREEN_BIT 7
|
||||
@@ -1038,7 +1041,8 @@ void AudioHwRemote2(streaming chanend c, chanend cc_mic_level, client interface
|
||||
|
||||
// TX1 factory reset state
|
||||
unsigned factory_reset_counting = 0;
|
||||
unsigned factory_reset_start_time = 0;
|
||||
/* 改动原因:替代 factory_reset_start_time(32位时间戳)为扫描计数,避免 6s/10s/10.6s 比较溢出失效。 */
|
||||
unsigned factory_reset_hold_ticks = 0;
|
||||
unsigned factory_reset_6s_fired = 0;
|
||||
unsigned factory_reset_10s_fired = 0;
|
||||
unsigned factory_reset_done = 0;
|
||||
@@ -1757,24 +1761,26 @@ void AudioHwRemote2(streaming chanend c, chanend cc_mic_level, client interface
|
||||
if (fps == 0 && game == 0 && current_combo == COMBO_NONE) {
|
||||
if (!factory_reset_counting) {
|
||||
factory_reset_counting = 1;
|
||||
factory_reset_start_time = now;
|
||||
factory_reset_hold_ticks = 0;
|
||||
factory_reset_6s_fired = 0;
|
||||
factory_reset_10s_fired = 0;
|
||||
factory_reset_done = 0;
|
||||
tx1_factory_reset_countdown_start();
|
||||
debug_printf("TX1: Factory reset countdown started\n");
|
||||
} else if (!factory_reset_done) {
|
||||
unsigned elapsed = now - factory_reset_start_time;
|
||||
if (elapsed >= 10600000000ull && !factory_reset_done) { // 10.6s
|
||||
factory_reset_hold_ticks++;
|
||||
if (factory_reset_hold_ticks >= TX1_FACTORY_RESET_TICKS && !factory_reset_done) {
|
||||
factory_reset_done = 1;
|
||||
tx1_factory_reset_triggered();
|
||||
debug_printf("TX1: FACTORY RESET TRIGGERED!\n");
|
||||
SET_SHARED_GLOBAL(g_request_factory_reset, 1);
|
||||
} else if (elapsed >= 10000000000ull && !factory_reset_10s_fired) {
|
||||
} else if (factory_reset_hold_ticks >= TX1_FACTORY_RESET_10S_TICKS
|
||||
&& !factory_reset_10s_fired) {
|
||||
factory_reset_10s_fired = 1;
|
||||
tx1_factory_reset_countdown_10s();
|
||||
debug_printf("TX1: Factory reset 10s warning\n");
|
||||
} else if (elapsed >= 6000000000ull && !factory_reset_6s_fired) {
|
||||
} else if (factory_reset_hold_ticks >= TX1_FACTORY_RESET_6S_TICKS
|
||||
&& !factory_reset_6s_fired) {
|
||||
factory_reset_6s_fired = 1;
|
||||
tx1_factory_reset_countdown_6s();
|
||||
debug_printf("TX1: Factory reset 6s warning\n");
|
||||
@@ -1783,6 +1789,7 @@ void AudioHwRemote2(streaming chanend c, chanend cc_mic_level, client interface
|
||||
} else {
|
||||
if (factory_reset_counting) {
|
||||
factory_reset_counting = 0;
|
||||
factory_reset_hold_ticks = 0;
|
||||
tx1_factory_reset_cancel();
|
||||
debug_printf("TX1: Factory reset cancelled\n");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user