1
0
mirror of https://github.com/thooge/esp32-nmea2000-obp60.git synced 2025-12-16 07:23:07 +01:00

introduce write lock for USB channel

This commit is contained in:
andreas
2024-11-24 16:07:27 +01:00
parent 874dcffba8
commit 8cb012eac0
4 changed files with 30 additions and 7 deletions

View File

@@ -63,6 +63,7 @@ GwSerial::~GwSerial()
{
delete buffer;
if (readBuffer) delete readBuffer;
if (lock != nullptr) vSemaphoreDelete(lock);
}
String GwSerial::getMode(){
@@ -87,10 +88,14 @@ size_t GwSerial::enqueue(const uint8_t *data, size_t len, bool partial)
}
GwBuffer::WriteStatus GwSerial::write(){
if (! isInitialized()) return GwBuffer::ERROR;
size_t numWrite=availableForWrite();
size_t rt=buffer->fetchData(numWrite,[](uint8_t *buffer,size_t len, void *p){
return ((GwSerial *)p)->stream->write(buffer,len);
},this);
size_t rt=0;
{
GWSYNCHRONIZED(lock);
size_t numWrite=availableForWrite();
rt=buffer->fetchData(numWrite,[](uint8_t *buffer,size_t len, void *p){
return ((GwSerial *)p)->stream->write(buffer,len);
},this);
}
if (rt != 0){
LOG_DEBUG(GwLog::DEBUG+1,"Serial %d write %d",id,rt);
}