POSIX: FTDI: Report warnings and retry on libftdi errors

pull/25/head
Paul Hollinsky 2020-09-01 15:15:36 -04:00
parent aceea6dc5b
commit c48995520f
1 changed files with 12 additions and 2 deletions

View File

@ -186,7 +186,9 @@ void FTDI::readTask() {
EventManager::GetInstance().downgradeErrorsOnCurrentThread(); EventManager::GetInstance().downgradeErrorsOnCurrentThread();
while(!closing) { while(!closing) {
auto readBytes = ftdi.read(readbuf, READ_BUFFER_SIZE); auto readBytes = ftdi.read(readbuf, READ_BUFFER_SIZE);
if(readBytes > 0) if(readBytes < 0)
report(APIEvent::Type::FailedToRead, APIEvent::Severity::EventWarning);
else
readQueue.enqueue_bulk(readbuf, readBytes); readQueue.enqueue_bulk(readbuf, readBytes);
} }
} }
@ -198,6 +200,14 @@ void FTDI::writeTask() {
if(!writeQueue.wait_dequeue_timed(writeOp, std::chrono::milliseconds(100))) if(!writeQueue.wait_dequeue_timed(writeOp, std::chrono::milliseconds(100)))
continue; continue;
ftdi.write(writeOp.bytes.data(), (int)writeOp.bytes.size()); size_t offset = 0;
while(offset < writeOp.bytes.size()) {
auto writeBytes = ftdi.write(writeOp.bytes.data() + offset, (int)writeOp.bytes.size() - offset);
if(writeBytes < 0)
report(APIEvent::Type::FailedToWrite, APIEvent::Severity::EventWarning);
else
offset += writeBytes;
}
} }
} }