mirror of
https://github.com/mikecarper/MeshCore.git
synced 2026-10-24 04:32:19 +00:00
test: update bridge lifecycle stand-ins for recovery state
This commit is contained in:
1 parent
617aacba42
commit
4b074e12c1
2 files changed
+21
-7
No files matched your search
@@ -37,6 +37,8 @@ struct RS232Bridge : BridgeBase {
|
||||
NodePrefs* _prefs;
|
||||
Stream* _serial;
|
||||
int16_t _rx_pin, _tx_pin;
|
||||
uint16_t _rx_buffer_pos = 37;
|
||||
bool _rx_packet_ready = true;
|
||||
RS232Bridge(NodePrefs& prefs, HardwareSerial& serial)
|
||||
: _prefs(&prefs), _serial(&serial), _rx_pin(5), _tx_pin(6) {}
|
||||
void begin();
|
||||
@@ -48,30 +50,40 @@ int main() {
|
||||
NodePrefs prefs;
|
||||
HardwareSerial serial;
|
||||
RS232Bridge bridge(prefs, serial);
|
||||
auto dirty_parser = [&]() { bridge._rx_buffer_pos = 37; bridge._rx_packet_ready = true; };
|
||||
auto assert_parser_reset = [&]() { assert(bridge._rx_buffer_pos == 0 && !bridge._rx_packet_ready); };
|
||||
assert(!bridge.isRunning());
|
||||
serial.pins_ok = false;
|
||||
bridge.begin();
|
||||
assert(!bridge.isRunning() && serial.pin_calls == 1 && serial.begin_calls == 0);
|
||||
assert_parser_reset();
|
||||
serial.pins_ok = true; serial.begin_ok = false;
|
||||
dirty_parser();
|
||||
bridge.begin();
|
||||
assert(!bridge.isRunning() && !serial.installed && serial.begin_calls == 1);
|
||||
assert_parser_reset();
|
||||
serial.begin_ok = true;
|
||||
dirty_parser();
|
||||
bridge.begin();
|
||||
assert(bridge.isRunning() && serial.installed && serial.begin_calls == 2);
|
||||
assert_parser_reset();
|
||||
assert(serial.rx == 5 && serial.tx == 6 && serial.baud == 57600);
|
||||
dirty_parser();
|
||||
bridge.end();
|
||||
assert(!bridge.isRunning() && !serial.installed && serial.end_calls == 1);
|
||||
assert_parser_reset();
|
||||
// A failed restart must clear its former state, and a later retry can recover.
|
||||
bridge.begin(); assert(bridge.isRunning());
|
||||
dirty_parser(); bridge.begin(); assert(bridge.isRunning()); assert_parser_reset();
|
||||
serial.pins_ok = false;
|
||||
bridge.begin(); assert(!bridge.isRunning());
|
||||
bridge.end(); serial.pins_ok = true; prefs.bridge_baud = 19200;
|
||||
bridge.begin(); assert(bridge.isRunning() && serial.baud == 19200);
|
||||
dirty_parser(); bridge.begin(); assert(!bridge.isRunning()); assert_parser_reset();
|
||||
dirty_parser(); bridge.end(); assert_parser_reset();
|
||||
serial.pins_ok = true; prefs.bridge_baud = 19200;
|
||||
dirty_parser(); bridge.begin(); assert(bridge.isRunning() && serial.baud == 19200); assert_parser_reset();
|
||||
for (unsigned cycle = 0; cycle < 100; ++cycle) {
|
||||
bridge.end(); assert(!bridge.isRunning());
|
||||
bridge.begin(); assert(bridge.isRunning());
|
||||
dirty_parser(); bridge.end(); assert(!bridge.isRunning()); assert_parser_reset();
|
||||
dirty_parser(); bridge.begin(); assert(bridge.isRunning()); assert_parser_reset();
|
||||
}
|
||||
bridge.end(); assert(!bridge.isRunning());
|
||||
dirty_parser(); bridge.end(); assert(!bridge.isRunning()); assert_parser_reset();
|
||||
}
|
||||
'''
|
||||
|
||||
|
||||
@@ -16,6 +16,8 @@ public:
|
||||
int _active_format=0,_rx_mux=0,_rx_head=0,_rx_tail=0,_rx_count=0,_rx_dropped=0,_rx_dropped_reported=0;
|
||||
int _tx_mux=0,_tx_head=0,_tx_tail=0,_tx_count=0,_tx_waiting=0,_tx_callback_done=0;
|
||||
int _tx_callback_status=0,_tx_dropped=0,_tx_dropped_reported=0;
|
||||
uint32_t _tx_started_at=0,_tx_retry_at=0;
|
||||
bool _sdk_teardown_failed=false;
|
||||
mesh::espnow::ESPNowRawReassembler _raw_reassembler;
|
||||
struct QueuedTransmit {bool started=false;int packet=0;};
|
||||
static constexpr int TX_QUEUE_DEPTH=2;
|
||||
|
||||
Reference in new issue
Block a user