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

intermediate: actisense format on USB

This commit is contained in:
wellenvogel
2021-11-26 00:09:34 +01:00
parent dbadb6fb11
commit 284be741f5
6 changed files with 119 additions and 19 deletions

View File

@@ -1,4 +1,44 @@
#include "GwSerial.h"
class GwSerialStream: public Stream{
private:
GwSerial *serial;
bool partialWrites;
public:
GwSerialStream(GwSerial *serial,bool partialWrites=false){
this->serial=serial;
this->partialWrites=partialWrites;
}
virtual int available(){
if (! serial->isInitialized()) return 0;
if (! serial->readBuffer) return 0;
return serial->readBuffer->usedSpace();
}
virtual int read(){
if (! serial->isInitialized()) return -1;
if (! serial->readBuffer) return -1;
return serial->readBuffer->read();
}
virtual int peek(){
if (! serial->isInitialized()) return -1;
if (! serial->readBuffer) return -1;
return serial->readBuffer->peek();
}
virtual void flush() {};
virtual size_t write(uint8_t v){
if (! serial->isInitialized()) return 0;
size_t rt=serial->buffer->addData(&v,1,partialWrites);
return rt;
}
virtual size_t write(const uint8_t *buffer, size_t size){
if (! serial->isInitialized()) return 0;
size_t rt=serial->buffer->addData(buffer,size,partialWrites);
return rt;
}
};
class SerialWriter : public GwBufferWriter{
private:
HardwareSerial *serial;
@@ -90,4 +130,7 @@ void GwSerial::flush(){
while (buffer->fetchData(writer,-1,false) == GwBuffer::AGAIN){
vTaskDelay(1);
}
}
}
Stream * GwSerial::getStream(bool partialWrite){
return new GwSerialStream(this,partialWrite);
}

View File

@@ -4,6 +4,7 @@
#include "GwLog.h"
#include "GwBuffer.h"
class SerialWriter;
class GwSerialStream;
class GwSerial{
private:
GwBuffer *buffer;
@@ -28,5 +29,7 @@ class GwSerial{
void loop(bool handleRead=true);
bool readMessages(GwBufferWriter *writer);
void flush();
Stream *getStream(bool partialWrites);
friend GwSerialStream;
};
#endif