remove use of dynamic allocation

This commit is contained in:
liamcottle
2026-01-03 16:36:19 +13:00
parent ed263b0727
commit 71bb49e556
2 changed files with 25 additions and 12 deletions

View File

@@ -43,6 +43,15 @@ bool SerialWifiInterface::isWriteBusy() const {
return false;
}
bool SerialWifiInterface::hasReceivedFrameHeader() {
return received_frame_header.type != 0 && received_frame_header.length != 0;
}
void SerialWifiInterface::resetReceivedFrameHeader() {
received_frame_header.type = 0;
received_frame_header.length = 0;
}
size_t SerialWifiInterface::checkRecvFrame(uint8_t dest[]) {
// check if new client connected
auto newClient = server.available();
@@ -56,7 +65,7 @@ size_t SerialWifiInterface::checkRecvFrame(uint8_t dest[]) {
client = newClient;
// forget received frame header
received_frame_header = NULL;
resetReceivedFrameHeader();
}
@@ -91,7 +100,7 @@ size_t SerialWifiInterface::checkRecvFrame(uint8_t dest[]) {
} else {
// check if we are waiting for a frame header
if(received_frame_header == NULL){
if(!hasReceivedFrameHeader()){
// make sure we have received enough bytes for a frame header
// 3 bytes frame header = (1 byte frame type) + (2 bytes frame length as unsigned 16-bit little endian)
@@ -108,21 +117,20 @@ size_t SerialWifiInterface::checkRecvFrame(uint8_t dest[]) {
memcpy(&frame_length, &frame_header[1], 2);
// we have received a frame header
received_frame_header = new FrameHeader();
received_frame_header->type = frame_type;
received_frame_header->length = frame_length;
received_frame_header.type = frame_type;
received_frame_header.length = frame_length;
}
}
// check if we have received a frame header
if(received_frame_header){
if(hasReceivedFrameHeader()){
// make sure we have received enough bytes for the required frame length
int available = client.available();
int frame_type = received_frame_header->type;
int frame_length = received_frame_header->length;
int frame_type = received_frame_header.type;
int frame_length = received_frame_header.length;
if(frame_length > available){
WIFI_DEBUG_PRINTLN("Waiting for %d more bytes", frame_length - available);
return 0;
@@ -136,7 +144,7 @@ size_t SerialWifiInterface::checkRecvFrame(uint8_t dest[]) {
int skipped = client.read(skip, 1);
frame_length -= skipped;
}
received_frame_header = NULL;
resetReceivedFrameHeader();
return 0;
}
@@ -149,7 +157,7 @@ size_t SerialWifiInterface::checkRecvFrame(uint8_t dest[]) {
int skipped = client.read(skip, 1);
frame_length -= skipped;
}
received_frame_header = NULL;
resetReceivedFrameHeader();
return 0;
}
@@ -161,7 +169,7 @@ size_t SerialWifiInterface::checkRecvFrame(uint8_t dest[]) {
memcpy(dest, frame_data, frame_length);
// ready for next frame
received_frame_header = NULL;
resetReceivedFrameHeader();
return frame_length;
}

View File

@@ -22,7 +22,7 @@ class SerialWifiInterface : public BaseSerialInterface {
uint8_t buf[MAX_FRAME_SIZE];
};
FrameHeader* received_frame_header = NULL;
FrameHeader received_frame_header;
#define FRAME_QUEUE_SIZE 4
int recv_queue_len;
@@ -40,6 +40,8 @@ public:
_isEnabled = false;
_last_write = 0;
send_queue_len = recv_queue_len = 0;
received_frame_header.type = 0;
received_frame_header.length = 0;
}
void begin(int port);
@@ -54,6 +56,9 @@ public:
size_t writeFrame(const uint8_t src[], size_t len) override;
size_t checkRecvFrame(uint8_t dest[]) override;
bool hasReceivedFrameHeader();
void resetReceivedFrameHeader();
};
#if WIFI_DEBUG_LOGGING && ARDUINO