@ -29,13 +29,15 @@ SerialBridge::SerialBridge(Stream& serial, mesh::PacketManager* mgr, mesh::RTCCl
void SerialBridge : : begin ( ) {
void SerialBridge : : begin ( ) {
# if defined(ESP32)
# if defined(ESP32)
( ( HardwareSerial * ) _serial ) - > setPins ( BRIDGE_OVER_SERIAL_RX , BRIDGE_OVER_SERIAL_TX ) ;
( ( HardwareSerial * ) _serial ) - > setPins ( BRIDGE_OVER_SERIAL_RX , BRIDGE_OVER_SERIAL_TX ) ;
# elif defined(NRF52_PLATFORM)
( ( HardwareSerial * ) _serial ) - > setPins ( BRIDGE_OVER_SERIAL_RX , BRIDGE_OVER_SERIAL_TX ) ;
# elif defined(RP2040_PLATFORM)
# elif defined(RP2040_PLATFORM)
( ( HardwareSerial * ) _serial ) - > setRX ( BRIDGE_OVER_SERIAL_RX ) ;
( ( SerialUART * ) _serial ) - > setRX ( BRIDGE_OVER_SERIAL_RX ) ;
( ( Hardware Serial* ) _serial ) - > setTX ( BRIDGE_OVER_SERIAL_TX ) ;
( ( SerialUART * ) _serial ) - > setTX ( BRIDGE_OVER_SERIAL_TX ) ;
# elif defined(STM32_PLATFORM)
# elif defined(STM32_PLATFORM)
( ( HardwareSerial * ) _serial ) - > setRx ( BRIDGE_OVER_SERIAL_RX ) ;
( ( HardwareSerial * ) _serial ) - > setRx ( BRIDGE_OVER_SERIAL_RX ) ;
( ( HardwareSerial * ) _serial ) - > setTx ( BRIDGE_OVER_SERIAL_TX ) ;
( ( HardwareSerial * ) _serial ) - > setTx ( BRIDGE_OVER_SERIAL_TX ) ;
# else
# else
# error SerialBridge was not tested on the current platform
# error SerialBridge was not tested on the current platform
# endif
# endif
@ -82,21 +84,20 @@ void SerialBridge::loop() {
if ( _rx_buffer_pos > = 4 ) {
if ( _rx_buffer_pos > = 4 ) {
uint16_t len = ( _rx_buffer [ 2 ] < < 8 ) | _rx_buffer [ 3 ] ;
uint16_t len = ( _rx_buffer [ 2 ] < < 8 ) | _rx_buffer [ 3 ] ;
if ( len > MAX_PACKET_PAYLOAD ) {
if ( len > ( MAX_TRANS_UNIT + 1 ) ) {
_rx_buffer_pos = 0 ; // Invalid length, reset
_rx_buffer_pos = 0 ; // Invalid length, reset
return ;
return ;
}
}
if ( _rx_buffer_pos = = len + SERIAL_OVERHEAD ) { // Full packet received
if ( _rx_buffer_pos = = len + SERIAL_OVERHEAD ) { // Full packet received
uint16_t checksum = ( _rx_buffer [ 4 + len ] < < 8 ) | _rx_buffer [ 5 + len ] ;
uint16_t checksum = ( _rx_buffer [ 4 + len ] < < 8 ) | _rx_buffer [ 5 + len ] ;
if ( checksum = = fletcher16 ( _rx_buffer + 4 , len ) ) {
if ( checksum = = fletcher16 ( _rx_buffer + 4 , len ) ) {
# if MESH_PACKET_LOGGING
# if MESH_PACKET_LOGGING
Serial . printf ( " %s: BRIDGE: RX, len=%d crc=0x%04x \n " , getLogDateTime ( ) , len , checksum ) ;
Serial . printf ( " %s: BRIDGE: RX, len=%d crc=0x%04x \n " , getLogDateTime ( ) , len , checksum ) ;
# endif
# endif
mesh : : Packet * pkt = _mgr - > allocNew ( ) ;
mesh : : Packet * pkt = _mgr - > allocNew ( ) ;
if ( pkt ) {
if ( pkt ) {
memcpy ( pkt - > payload , _rx_buffer + 4 , len ) ;
pkt - > readFrom ( _rx_buffer + 4 , len ) ;
pkt - > payload_len = len ;
onPacketReceived ( pkt ) ;
onPacketReceived ( pkt ) ;
}
}
}
}