feat(firmware): event-driven WiFi reconnect with exponential backoff
net_guard registers WiFi.onEvent() so disconnects are handled immediately instead of polled every 1s. Backoff 1s->2s->4s->...->60s cap. Every up/down transition is logged to the event log with the disconnect reason code, so field failures are diagnosable.
This commit is contained in:
32
firmware/test/test_net_guard/test_net_guard.cpp
Normal file
32
firmware/test/test_net_guard/test_net_guard.cpp
Normal file
@@ -0,0 +1,32 @@
|
||||
// firmware/test/test_net_guard/test_net_guard.cpp
|
||||
#include <unity.h>
|
||||
#include "net_guard.h"
|
||||
|
||||
void setUp() {}
|
||||
void tearDown() {}
|
||||
|
||||
void test_backoff_starts_at_one_second() {
|
||||
TEST_ASSERT_EQUAL(1000, net_guard_next_backoff_ms(0));
|
||||
}
|
||||
|
||||
void test_backoff_doubles_each_attempt() {
|
||||
TEST_ASSERT_EQUAL(2000, net_guard_next_backoff_ms(1));
|
||||
TEST_ASSERT_EQUAL(4000, net_guard_next_backoff_ms(2));
|
||||
TEST_ASSERT_EQUAL(8000, net_guard_next_backoff_ms(3));
|
||||
TEST_ASSERT_EQUAL(16000, net_guard_next_backoff_ms(4));
|
||||
TEST_ASSERT_EQUAL(32000, net_guard_next_backoff_ms(5));
|
||||
}
|
||||
|
||||
void test_backoff_clamps_at_60s() {
|
||||
TEST_ASSERT_EQUAL(60000, net_guard_next_backoff_ms(6));
|
||||
TEST_ASSERT_EQUAL(60000, net_guard_next_backoff_ms(7));
|
||||
TEST_ASSERT_EQUAL(60000, net_guard_next_backoff_ms(100));
|
||||
}
|
||||
|
||||
int main() {
|
||||
UNITY_BEGIN();
|
||||
RUN_TEST(test_backoff_starts_at_one_second);
|
||||
RUN_TEST(test_backoff_doubles_each_attempt);
|
||||
RUN_TEST(test_backoff_clamps_at_60s);
|
||||
return UNITY_END();
|
||||
}
|
||||
Reference in New Issue
Block a user