Experiment of serial command protocol

Dependencies:   RingBuffer SerialInterfaceProtocol duinotech_16x2_LCD mbed

You can edit this area

buffer.h

Committer:
rba90
Date:
2016-06-04
Revision:
0:2ba6a9f316b6

File content as of revision 0:2ba6a9f316b6:

#ifndef BUFFER_H_
#define BUFFER_H_

#define DEFAULT_MAX_BUFFER_SZ 64

#include "stdint.h"

template <typename T>
class CircularBuffer
{
private:
    const uint32_t buffer_size;
    uint32_t read_ptr;
    uint32_t write_ptr;
    uint32_t count;
    
    // mutex lock
    bool mux; 
    
    // overflow
    bool is_over_flow;
    
    // container
    T *data;
    
    
public:
    CircularBuffer(const uint32_t size=DEFAULT_MAX_BUFFER_SZ);
    ~CircularBuffer();
    
    // psudo mutex
    bool isLocked();
    void lock();
    void unlock();
    
    // enqueue and dequeue
    void enqueue(T in);
    T dequeue();
    
    // pointer operation
    uint32_t getReadPtr();
    uint32_t getWritePtr();
    uint32_t getCounter();
    
    // overflow
    bool getOverFlow();
    void clearOverFlow();
    
    // operation
    T first();
    T last();
    
    // random access
    T operator[](uint32_t idx);
};

#endif