USBHost custom library.
Dependents: GR-PEACH_HVC-P2_sample_client mbed-os-storage-access GR-PEACH_Digital_Signage GR-PEACH_Audio_Playback_Sample ... more
Fork of USBHost by
Diff: USBHostSerial/MtxCircBuffer.h
- Revision:
- 36:f8c0979c2814
- Parent:
- 24:868cbfe611a7
diff -r f72ccc6892ee -r f8c0979c2814 USBHostSerial/MtxCircBuffer.h --- a/USBHostSerial/MtxCircBuffer.h Fri Apr 29 01:16:38 2016 +0100 +++ b/USBHostSerial/MtxCircBuffer.h Mon Jan 23 06:05:50 2017 +0000 @@ -18,7 +18,6 @@ #define MTXCIRCBUFFER_H #include "stdint.h" -#include "rtos.h" //Mutex protected circular buffer template<typename T, int size> @@ -31,17 +30,11 @@ } bool isFull() { - mtx.lock(); - bool r = (((write + 1) % size) == read); - mtx.unlock(); - return r; + return (((write + 1) % size) == read); } bool isEmpty() { - mtx.lock(); - bool r = (read == write); - mtx.unlock(); - return r; + return (read == write); } void flush() { @@ -49,41 +42,34 @@ read = 0; } - void queue(T k) { - mtx.lock(); - while (((write + 1) % size) == read) { - mtx.unlock(); - Thread::wait(10); - mtx.lock(); + bool queue(T k) { + if (isFull()) { + return false; } - buf[write++] = k; - write %= size; - mtx.unlock(); + buf[write] = k; + write = (write + 1) % size; + return true; } - uint16_t available() { - mtx.lock(); - uint16_t a = (write >= read) ? (write - read) : (size - read + write); - mtx.unlock(); + uint32_t available() { + uint32_t a = (write >= read) ? (write - read) : (size - read + write); return a; } bool dequeue(T * c) { - mtx.lock(); - bool empty = (read == write); - if (!empty) { - *c = buf[read++]; - read %= size; + if (isEmpty()) { + return false; } - mtx.unlock(); - return (!empty); + *c = buf[read]; + read = (read + 1) % size; + return true; } private: - volatile uint16_t write; - volatile uint16_t read; + volatile uint32_t write; + volatile uint32_t read; volatile T buf[size]; - Mutex mtx; }; #endif +