This program is for an autonomous robot for the competition at the Hochschule Luzern. We are one of the 32 teams. <a href="http://cruisingcrepe.wordpress.com/">http://cruisingcrepe.wordpress.com/</a> The postition control is based on this Documentation: Control of Wheeled Mobile Robots: An Experimental Overview from Alessandro De Luca, Giuseppe Oriolo, Marilena Vendittelli. For more information see here: <a href="http://www.dis.uniroma1.it/~labrob/pub/papers/Ramsete01.pdf">http://www.dis.uniroma1.it/~labrob/pub/papers/Ramsete01.pdf</a>

Dependencies:   mbed

Fork of autonomousRobotAndroid by Christian Burri

Revision:
17:f0a973f17917
diff -r b5d949136a21 -r f0a973f17917 MicroBridge/PacketBuffer/PacketBuffer.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MicroBridge/PacketBuffer/PacketBuffer.cpp	Fri May 03 06:30:46 2013 +0000
@@ -0,0 +1,84 @@
+
+/** @file PacketBuffer.cpp
+ * @brief Ring Buffer
+ */
+
+#include "PacketBuffer.h"
+
+
+PacketBuffer::PacketBuffer(int num,int packet_size)
+{
+    max_num = num;
+    max_size = packet_size;
+
+    p_buf = new PacketBufInf[num];
+        
+    for(int i = 0 ; i < num ; i++)
+    {
+        p_buf[i].buf = new char[packet_size];
+        p_buf[i].size = 0;
+    }
+    addr_w = 0;
+    addr_r = 0;
+}
+
+PacketBuffer::~PacketBuffer()
+{
+    
+    for(int i = 0 ; i < max_num ; i++)
+    {
+        delete [] p_buf[i].buf;
+    }
+    delete [] p_buf;
+}
+
+int PacketBuffer::PutPacket(char *packet, int len)
+{
+    int next;
+    
+    if(max_size < len) return(-1);
+     
+    next = (addr_w + 1) % max_num;
+    
+    if( next == addr_r ) return(0);
+    
+    memcpy( p_buf[addr_w].buf , packet , len );
+    
+    p_buf[addr_w].size = len;
+    
+    addr_w = next;
+    
+    return(len);
+}
+
+int PacketBuffer::GetPacket(char *packet)
+{
+    int len;
+    
+    if( addr_w == addr_r ) return(0);
+    
+    len = p_buf[addr_r].size;
+    
+    memcpy( packet , p_buf[addr_r].buf , len );
+    
+    addr_r = (addr_r + 1) % max_num;
+    
+    return len;
+}
+
+int PacketBuffer::available () {
+    if (addr_w < addr_r) {
+        return addr_r - addr_w - 1;
+    } else {
+        return (max_num - addr_w) + addr_r - 1;
+    }
+}
+
+int PacketBuffer::use () {
+    return max_num - available() - 1;
+}
+
+void PacketBuffer::clear () {
+    addr_w = 0;
+    addr_r = 0;
+}