USB CDC (serial) and USB MSC (strage) Composite Device. http://mbed.org/users/okini3939/notebook/USB_Device/

Dependencies:   ChaNFSSD mbed ChaNFS

Committer:
okini3939
Date:
Fri Dec 23 16:37:58 2011 +0000
Revision:
2:5db90410bb90
Parent:
0:9b1d17d54055

        

Who changed what in which revision?

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