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; 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[]) { size_t SerialWifiInterface::checkRecvFrame(uint8_t dest[]) {
// check if new client connected // check if new client connected
auto newClient = server.available(); auto newClient = server.available();
@@ -56,7 +65,7 @@ size_t SerialWifiInterface::checkRecvFrame(uint8_t dest[]) {
client = newClient; client = newClient;
// forget received frame header // forget received frame header
received_frame_header = NULL; resetReceivedFrameHeader();
} }
@@ -91,7 +100,7 @@ size_t SerialWifiInterface::checkRecvFrame(uint8_t dest[]) {
} else { } else {
// check if we are waiting for a frame header // 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 // 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) // 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); memcpy(&frame_length, &frame_header[1], 2);
// we have received a frame header // we have received a frame header
received_frame_header = new FrameHeader(); received_frame_header.type = frame_type;
received_frame_header->type = frame_type; received_frame_header.length = frame_length;
received_frame_header->length = frame_length;
} }
} }
// check if we have received a frame header // 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 // make sure we have received enough bytes for the required frame length
int available = client.available(); int available = client.available();
int frame_type = received_frame_header->type; int frame_type = received_frame_header.type;
int frame_length = received_frame_header->length; int frame_length = received_frame_header.length;
if(frame_length > available){ if(frame_length > available){
WIFI_DEBUG_PRINTLN("Waiting for %d more bytes", frame_length - available); WIFI_DEBUG_PRINTLN("Waiting for %d more bytes", frame_length - available);
return 0; return 0;
@@ -136,7 +144,7 @@ size_t SerialWifiInterface::checkRecvFrame(uint8_t dest[]) {
int skipped = client.read(skip, 1); int skipped = client.read(skip, 1);
frame_length -= skipped; frame_length -= skipped;
} }
received_frame_header = NULL; resetReceivedFrameHeader();
return 0; return 0;
} }
@@ -149,7 +157,7 @@ size_t SerialWifiInterface::checkRecvFrame(uint8_t dest[]) {
int skipped = client.read(skip, 1); int skipped = client.read(skip, 1);
frame_length -= skipped; frame_length -= skipped;
} }
received_frame_header = NULL; resetReceivedFrameHeader();
return 0; return 0;
} }
@@ -161,7 +169,7 @@ size_t SerialWifiInterface::checkRecvFrame(uint8_t dest[]) {
memcpy(dest, frame_data, frame_length); memcpy(dest, frame_data, frame_length);
// ready for next frame // ready for next frame
received_frame_header = NULL; resetReceivedFrameHeader();
return frame_length; return frame_length;
} }

View File

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