Driver: Add general predicate parameter for waitForRx

This commit is contained in:
Yasser Yassine
2024-05-28 18:21:22 +00:00
parent 659fcf633c
commit 77928dc93d
10 changed files with 22 additions and 14 deletions
+3 -2
View File
@@ -27,7 +27,8 @@ public:
virtual bool isDisconnected() { return disconnected; };
virtual bool close() = 0;
bool waitForRx(size_t minBytes, std::chrono::milliseconds timeout);
bool waitForRx(size_t limit, std::chrono::milliseconds timeout);
bool waitForRx(std::function<bool()> predicate, std::chrono::milliseconds timeout);
bool readWait(std::vector<uint8_t>& bytes, std::chrono::milliseconds timeout = std::chrono::milliseconds(100), size_t limit = 0);
bool write(const std::vector<uint8_t>& bytes);
virtual bool isEthernet() const { return false; }
@@ -59,7 +60,7 @@ protected:
virtual bool writeQueueAlmostFull() { return writeQueue.size_approx() > (writeQueueSize * 3 / 4); }
virtual bool writeInternal(const std::vector<uint8_t>& b) { return writeQueue.enqueue(WriteOperation(b)); }
bool writeToReadBuffer(const uint8_t* buf, size_t numReceived);
bool pushRx(const uint8_t* buf, size_t numReceived);
RingBuffer readBuffer = RingBuffer(ICSNEO_DRIVER_RINGBUFFER_SIZE);
std::atomic<bool> hasRxWaitRequest = false;
std::condition_variable rxWaitRequestCv;