remove use of dynamic allocation
This commit is contained in:
@@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user