class library to access fischertechnik interfaces via USB

Dependencies:   FatFileSystem mbed myBlueUSB neigbourhood rfcomm sdp

Revision:
0:7da612835693
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/message.h	Wed Jun 15 19:12:25 2011 +0000
@@ -0,0 +1,61 @@
+#ifndef MESSAGE_H
+#define MESSAGE_H
+
+template <class T, int N> class msgbuffer {
+    T buffer[N];
+    int in, out, n;
+public:
+    int push(T msg, int mode = 0);
+    int nrOfMessages() {
+        return n;
+    }
+    T pop();
+    msgbuffer() {
+        in = 0;
+        out = 0;
+        n = 0;
+    }
+    void clear() {
+        in = 0;
+        out = 0;
+        n = 0;
+    }
+};
+
+template <class T> bool operator==(T a, T b) {
+    return memcmp(&a, &b, sizeof(T))==0;
+}
+
+template <class T, int N> int msgbuffer<T, N> ::push(T msg, int mode) {
+    if (n>=N) return -1; //buffer full
+    switch (mode) {
+        case 2:
+            for (int i = 0, j = out; i < n; i++, j++) {
+                if (j >= N) j = 0;
+                if (buffer[j] == msg)
+                    return 0;
+            }
+            goto insert;
+        case 1:
+            if (buffer[in] == msg)
+                return 0;
+            goto insert;
+        case 0:
+insert:
+            in++;
+            if (in >= N) in = 0;
+            buffer[in] = msg;
+            n++;
+            return 0;
+    }
+    return -2; //illegal option
+}
+
+template <class T, int N> T msgbuffer<T, N> ::pop() {
+    T tmp = buffer[out++];
+    if (out >= N)
+        out = 0;
+    return tmp;
+}
+
+#endif
\ No newline at end of file