diff --git a/src/modules/SX127x.cpp b/src/modules/SX127x.cpp index 724cb9ef..9dcf72e2 100644 --- a/src/modules/SX127x.cpp +++ b/src/modules/SX127x.cpp @@ -150,8 +150,19 @@ uint8_t SX127x::receive(uint8_t* data, size_t len) { } // read packet data + if(len == 0) { + // argument len equal to zero indicates String call, which means dynamically allocated data array + // dispose of the original and create a new one + delete[] data; + data = new uint8_t[length]; + } _mod->SPIreadRegisterBurst(SX127X_REG_FIFO, length, data); + // add terminating null + if(len == 0) { + data[length] = 0; + } + // update data rate, RSSI and SNR dataRate = (length*8.0)/((float)elapsed/1000.0); lastPacketRSSI = -157 + _mod->SPIgetRegValue(SX127X_REG_PKT_RSSI_VALUE); @@ -166,12 +177,11 @@ uint8_t SX127x::receive(uint8_t* data, size_t len) { uint8_t SX127x::receive(String& str, size_t len) { // create temporary array to store received data - char* data = new char[0]; + char* data = new char[len]; uint8_t state = SX127x::receive((uint8_t*)data, len); // if packet was received successfully, copy data into String if(state == ERR_NONE) { - data[strlen(data) - 1] = 0; str = String(data); }