1
0
mirror of https://github.com/thooge/esp32-nmea2000-obp60.git synced 2025-12-13 05:53:06 +01:00

intermediate: restructure buffer handling

This commit is contained in:
wellenvogel
2021-12-01 22:55:37 +01:00
parent d8950c4eb4
commit 9dcb98bb51
7 changed files with 119 additions and 54 deletions

View File

@@ -783,20 +783,15 @@ void handleSendAndRead(bool handleRead){
usbSerial->loop(handleRead);
if (serial1) serial1->loop(handleRead);
}
class NMEAMessageReceiver : public GwBufferWriter{
uint8_t buffer[GwBuffer::RX_BUFFER_SIZE+4];
class NMEAMessageReceiver : public GwMessageFetcher{
static const int bufferSize=GwBuffer::RX_BUFFER_SIZE+4;
uint8_t buffer[bufferSize];
uint8_t *writePointer=buffer;
public:
virtual int write(const uint8_t *buffer,size_t len){
size_t toWrite=GwBuffer::RX_BUFFER_SIZE-(writePointer-buffer);
if (toWrite > len) toWrite=len;
memcpy(writePointer,buffer,toWrite);
writePointer+=toWrite;
*writePointer=0;
return toWrite;
}
virtual void done(){
if (writePointer == buffer) return;
virtual bool handleBuffer(GwBuffer *gwbuffer){
size_t len=fetchMessageToBuffer(gwbuffer,buffer,bufferSize-4,'\n');
writePointer=buffer+len;
if (writePointer == buffer) return false;
uint8_t *p;
for (p=writePointer-1;p>=buffer && *p <= 0x20;p--){
*p=0;
@@ -821,6 +816,7 @@ class NMEAMessageReceiver : public GwBufferWriter{
handleSendAndRead(false);
}
writePointer=buffer;
return true;
}
};
NMEAMessageReceiver receiver;