RF69 - Fixed incorrect size of dynamically allocated array

This commit is contained in:
Jan Gromeš 2018-08-02 14:50:20 +02:00
parent 619fd8a072
commit 0ca15ac41f

View file

@ -84,6 +84,14 @@ int16_t RF69::begin(float freq, float br, float rxBw, float freqDev, int8_t powe
return(ERR_NONE);
}
int16_t RF69::transmit(String& str, uint8_t addr) {
return(RF69::transmit(str.c_str()));
}
int16_t RF69::transmit(const char* str, uint8_t addr) {
return(RF69::transmit((uint8_t*)str, strlen(str), addr));
}
int16_t RF69::transmit(uint8_t* data, size_t len, uint8_t addr) {
// check packet length
if(len > 64) {
@ -125,12 +133,18 @@ int16_t RF69::transmit(uint8_t* data, size_t len, uint8_t addr) {
return(ERR_NONE);
}
int16_t RF69::transmit(const char* str, uint8_t addr) {
return(RF69::transmit((uint8_t*)str, strlen(str), addr));
}
int16_t RF69::transmit(String& str, uint8_t addr) {
return(RF69::transmit(str.c_str()));
int16_t RF69::receive(String& str, size_t len) {
// create temporary array to store received data
char* data = new char[len];
int16_t state = RF69::receive((uint8_t*)data, len);
// if packet was received successfully, copy data into String
if(state == ERR_NONE) {
str = String(data);
}
delete[] data;
return(state);
}
int16_t RF69::receive(uint8_t* data, size_t len) {
@ -170,7 +184,7 @@ int16_t RF69::receive(uint8_t* data, size_t len) {
// 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];
data = new uint8_t[length + 1];
}
_mod->SPIreadRegisterBurst(RF69_REG_FIFO, length, data);
@ -185,20 +199,6 @@ int16_t RF69::receive(uint8_t* data, size_t len) {
return(ERR_NONE);
}
int16_t RF69::receive(String& str, size_t len) {
// create temporary array to store received data
char* data = new char[len];
int16_t state = RF69::receive((uint8_t*)data, len);
// if packet was received successfully, copy data into String
if(state == ERR_NONE) {
str = String(data);
}
delete[] data;
return(state);
}
int16_t RF69::sleep() {
// set module to sleep
return(setMode(RF69_SLEEP));