USBDevice

Dependents:   QEI_X1_LCD_test3 macnica_test

Committer:
toucyy
Date:
Thu Apr 18 07:49:37 2013 +0000
Revision:
0:2d8d0b73e1ff
[mbed] converted /QEI_HelloWorld/USBDevice

Who changed what in which revision?

UserRevisionLine numberNew contents of line
toucyy 0:2d8d0b73e1ff 1 #ifndef CIRCBUFFER_H
toucyy 0:2d8d0b73e1ff 2 #define CIRCBUFFER_H
toucyy 0:2d8d0b73e1ff 3
toucyy 0:2d8d0b73e1ff 4 template <class T>
toucyy 0:2d8d0b73e1ff 5 class CircBuffer {
toucyy 0:2d8d0b73e1ff 6 public:
toucyy 0:2d8d0b73e1ff 7 CircBuffer(int length) {
toucyy 0:2d8d0b73e1ff 8 write = 0;
toucyy 0:2d8d0b73e1ff 9 read = 0;
toucyy 0:2d8d0b73e1ff 10 size = length + 1;
toucyy 0:2d8d0b73e1ff 11 buf = (T *)malloc(size * sizeof(T));
toucyy 0:2d8d0b73e1ff 12 };
toucyy 0:2d8d0b73e1ff 13
toucyy 0:2d8d0b73e1ff 14 bool isFull() {
toucyy 0:2d8d0b73e1ff 15 return ((write + 1) % size == read);
toucyy 0:2d8d0b73e1ff 16 };
toucyy 0:2d8d0b73e1ff 17
toucyy 0:2d8d0b73e1ff 18 bool isEmpty() {
toucyy 0:2d8d0b73e1ff 19 return (read == write);
toucyy 0:2d8d0b73e1ff 20 };
toucyy 0:2d8d0b73e1ff 21
toucyy 0:2d8d0b73e1ff 22 void queue(T k) {
toucyy 0:2d8d0b73e1ff 23 if (isFull()) {
toucyy 0:2d8d0b73e1ff 24 read++;
toucyy 0:2d8d0b73e1ff 25 read %= size;
toucyy 0:2d8d0b73e1ff 26 }
toucyy 0:2d8d0b73e1ff 27 buf[write++] = k;
toucyy 0:2d8d0b73e1ff 28 write %= size;
toucyy 0:2d8d0b73e1ff 29 }
toucyy 0:2d8d0b73e1ff 30
toucyy 0:2d8d0b73e1ff 31 uint16_t available() {
toucyy 0:2d8d0b73e1ff 32 return (write >= read) ? write - read : size - read + write;
toucyy 0:2d8d0b73e1ff 33 };
toucyy 0:2d8d0b73e1ff 34
toucyy 0:2d8d0b73e1ff 35 bool dequeue(T * c) {
toucyy 0:2d8d0b73e1ff 36 bool empty = isEmpty();
toucyy 0:2d8d0b73e1ff 37 if (!empty) {
toucyy 0:2d8d0b73e1ff 38 *c = buf[read++];
toucyy 0:2d8d0b73e1ff 39 read %= size;
toucyy 0:2d8d0b73e1ff 40 }
toucyy 0:2d8d0b73e1ff 41 return(!empty);
toucyy 0:2d8d0b73e1ff 42 };
toucyy 0:2d8d0b73e1ff 43
toucyy 0:2d8d0b73e1ff 44 private:
toucyy 0:2d8d0b73e1ff 45 volatile uint16_t write;
toucyy 0:2d8d0b73e1ff 46 volatile uint16_t read;
toucyy 0:2d8d0b73e1ff 47 uint16_t size;
toucyy 0:2d8d0b73e1ff 48 T * buf;
toucyy 0:2d8d0b73e1ff 49 };
toucyy 0:2d8d0b73e1ff 50
toucyy 0:2d8d0b73e1ff 51 #endif