![](/media/cache/profiles/aa03f7d585b4ae5554378b5843a73d11.jpg.50x50_q85.png)
Experiment of serial command protocol
Dependencies: RingBuffer SerialInterfaceProtocol duinotech_16x2_LCD mbed
You can edit this area
buffer.h@0:2ba6a9f316b6, 2016-06-04 (annotated)
- Committer:
- rba90
- Date:
- Sat Jun 04 12:08:49 2016 +0000
- Revision:
- 0:2ba6a9f316b6
init
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rba90 | 0:2ba6a9f316b6 | 1 | #ifndef BUFFER_H_ |
rba90 | 0:2ba6a9f316b6 | 2 | #define BUFFER_H_ |
rba90 | 0:2ba6a9f316b6 | 3 | |
rba90 | 0:2ba6a9f316b6 | 4 | #define DEFAULT_MAX_BUFFER_SZ 64 |
rba90 | 0:2ba6a9f316b6 | 5 | |
rba90 | 0:2ba6a9f316b6 | 6 | #include "stdint.h" |
rba90 | 0:2ba6a9f316b6 | 7 | |
rba90 | 0:2ba6a9f316b6 | 8 | template <typename T> |
rba90 | 0:2ba6a9f316b6 | 9 | class CircularBuffer |
rba90 | 0:2ba6a9f316b6 | 10 | { |
rba90 | 0:2ba6a9f316b6 | 11 | private: |
rba90 | 0:2ba6a9f316b6 | 12 | const uint32_t buffer_size; |
rba90 | 0:2ba6a9f316b6 | 13 | uint32_t read_ptr; |
rba90 | 0:2ba6a9f316b6 | 14 | uint32_t write_ptr; |
rba90 | 0:2ba6a9f316b6 | 15 | uint32_t count; |
rba90 | 0:2ba6a9f316b6 | 16 | |
rba90 | 0:2ba6a9f316b6 | 17 | // mutex lock |
rba90 | 0:2ba6a9f316b6 | 18 | bool mux; |
rba90 | 0:2ba6a9f316b6 | 19 | |
rba90 | 0:2ba6a9f316b6 | 20 | // overflow |
rba90 | 0:2ba6a9f316b6 | 21 | bool is_over_flow; |
rba90 | 0:2ba6a9f316b6 | 22 | |
rba90 | 0:2ba6a9f316b6 | 23 | // container |
rba90 | 0:2ba6a9f316b6 | 24 | T *data; |
rba90 | 0:2ba6a9f316b6 | 25 | |
rba90 | 0:2ba6a9f316b6 | 26 | |
rba90 | 0:2ba6a9f316b6 | 27 | public: |
rba90 | 0:2ba6a9f316b6 | 28 | CircularBuffer(const uint32_t size=DEFAULT_MAX_BUFFER_SZ); |
rba90 | 0:2ba6a9f316b6 | 29 | ~CircularBuffer(); |
rba90 | 0:2ba6a9f316b6 | 30 | |
rba90 | 0:2ba6a9f316b6 | 31 | // psudo mutex |
rba90 | 0:2ba6a9f316b6 | 32 | bool isLocked(); |
rba90 | 0:2ba6a9f316b6 | 33 | void lock(); |
rba90 | 0:2ba6a9f316b6 | 34 | void unlock(); |
rba90 | 0:2ba6a9f316b6 | 35 | |
rba90 | 0:2ba6a9f316b6 | 36 | // enqueue and dequeue |
rba90 | 0:2ba6a9f316b6 | 37 | void enqueue(T in); |
rba90 | 0:2ba6a9f316b6 | 38 | T dequeue(); |
rba90 | 0:2ba6a9f316b6 | 39 | |
rba90 | 0:2ba6a9f316b6 | 40 | // pointer operation |
rba90 | 0:2ba6a9f316b6 | 41 | uint32_t getReadPtr(); |
rba90 | 0:2ba6a9f316b6 | 42 | uint32_t getWritePtr(); |
rba90 | 0:2ba6a9f316b6 | 43 | uint32_t getCounter(); |
rba90 | 0:2ba6a9f316b6 | 44 | |
rba90 | 0:2ba6a9f316b6 | 45 | // overflow |
rba90 | 0:2ba6a9f316b6 | 46 | bool getOverFlow(); |
rba90 | 0:2ba6a9f316b6 | 47 | void clearOverFlow(); |
rba90 | 0:2ba6a9f316b6 | 48 | |
rba90 | 0:2ba6a9f316b6 | 49 | // operation |
rba90 | 0:2ba6a9f316b6 | 50 | T first(); |
rba90 | 0:2ba6a9f316b6 | 51 | T last(); |
rba90 | 0:2ba6a9f316b6 | 52 | |
rba90 | 0:2ba6a9f316b6 | 53 | // random access |
rba90 | 0:2ba6a9f316b6 | 54 | T operator[](uint32_t idx); |
rba90 | 0:2ba6a9f316b6 | 55 | }; |
rba90 | 0:2ba6a9f316b6 | 56 | |
rba90 | 0:2ba6a9f316b6 | 57 | #endif |