USBAudio example using a microphone

Dependencies:   USBDevice mbed

Committer:
samux
Date:
Fri Dec 16 12:31:41 2011 +0000
Revision:
0:539ec61e1fbb
works with m0 and m3 (sinus) but the code is different to have the same result...

Who changed what in which revision?

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