Experiment of serial command protocol

Dependencies:   RingBuffer SerialInterfaceProtocol duinotech_16x2_LCD mbed

You can edit this area

Committer:
rba90
Date:
Sat Jun 04 12:08:49 2016 +0000
Revision:
0:2ba6a9f316b6
init

Who changed what in which revision?

UserRevisionLine numberNew 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