From f6fe7e2b5f3572e6ae8ded3e712143cde34e92a1 Mon Sep 17 00:00:00 2001 From: "jacob.eva" Date: Tue, 15 Oct 2024 17:34:16 +0100 Subject: [PATCH] Fix buffer overrun and freezing bugs --- Config.h | 3 +-- RNode_Firmware_CE.ino | 8 +++++--- Radio.cpp | 6 +++--- Radio.hpp | 3 --- 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/Config.h b/Config.h index 4798062..bfa07ff 100644 --- a/Config.h +++ b/Config.h @@ -80,8 +80,7 @@ bool memory_low = false; uint8_t implicit_l = 0; - volatile bool packet_ready = false; - volatile uint8_t packet_interface = 0xFF; + uint8_t packet_interface = 0xFF; uint8_t op_mode = MODE_HOST; uint8_t model = 0x00; diff --git a/RNode_Firmware_CE.ino b/RNode_Firmware_CE.ino index 48c38e4..5f80700 100644 --- a/RNode_Firmware_CE.ino +++ b/RNode_Firmware_CE.ino @@ -79,8 +79,8 @@ typedef struct { size_t len; int rssi; int snr_raw; - uint8_t data[]; uint8_t interface; + uint8_t data[]; } modem_packet_t; static xQueueHandle modem_packet_queue = NULL; @@ -392,7 +392,7 @@ inline void getPacketData(RadioInterface* radio, uint16_t len) { #endif } -inline bool queuePacket(RadioInterface* radio, uint8_t index) { +inline bool queue_packet(RadioInterface* radio, uint8_t index) { // Allocate packet struct, but abort if there // is not enough memory available. modem_packet_t *modem_packet = (modem_packet_t*)malloc(sizeof(modem_packet_t) + read_len); @@ -413,7 +413,9 @@ inline bool queuePacket(RadioInterface* radio, uint8_t index) { memcpy(modem_packet->data, pbuf, read_len); if (!modem_packet_queue || xQueueSendFromISR(modem_packet_queue, &modem_packet, NULL) != pdPASS) { free(modem_packet); + return false; } + return true; } void ISR_VECT receive_callback(uint8_t index, int packet_size) { @@ -500,7 +502,7 @@ void ISR_VECT receive_callback(uint8_t index, int packet_size) { } if (ready) { - queuePacket(selected_radio, index); + queue_packet(selected_radio, index); } last_rx = millis(); diff --git a/Radio.cpp b/Radio.cpp index 07485ce..89e68d0 100644 --- a/Radio.cpp +++ b/Radio.cpp @@ -129,7 +129,7 @@ sx126x::sx126x(uint8_t index, SPIClass* spi, bool tcxo, bool dio2_as_rf_switch, setTimeout(0); // TODO, figure out why this has to be done. Using the index to reference the // interface_obj list causes a crash otherwise - _index = getIndex(); + //_index = getIndex(); } bool sx126x::preInit() { @@ -1098,7 +1098,7 @@ sx127x::sx127x(uint8_t index, SPIClass* spi, int ss, int sclk, int mosi, int mis setTimeout(0); // TODO, figure out why this has to be done. Using the index to reference the // interface_obj list causes a crash otherwise - _index = getIndex(); + //_index = getIndex(); } void sx127x::setSPIFrequency(uint32_t frequency) { _spiSettings = SPISettings(frequency, MSBFIRST, SPI_MODE0); } @@ -1628,7 +1628,7 @@ sx128x::sx128x(uint8_t index, SPIClass* spi, bool tcxo, int ss, int sclk, int mo setTimeout(0); // TODO, figure out why this has to be done. Using the index to reference the // interface_obj list causes a crash otherwise - _index = getIndex(); + //_index = getIndex(); } bool sx128x::preInit() { diff --git a/Radio.hpp b/Radio.hpp index 8413ebc..208a3d2 100644 --- a/Radio.hpp +++ b/Radio.hpp @@ -451,7 +451,6 @@ private: int _fifo_tx_addr_ptr; int _fifo_rx_addr_ptr; bool _preinit_done; - uint8_t _index; bool _tcxo; bool _dio2_as_rf_switch; }; @@ -545,7 +544,6 @@ private: int _packetIndex; int _implicitHeaderMode; bool _preinit_done; - uint8_t _index; uint8_t _sf; uint8_t _cr; }; @@ -664,7 +662,6 @@ private: int _fifo_rx_addr_ptr; bool _preinit_done; int _rxPacketLength; - uint8_t _index; bool _tcxo; }; #endif