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

Committer:
chrigelburri
Date:
Fri May 03 06:30:46 2013 +0000
Revision:
17:f0a973f17917
bastel mit adb

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chrigelburri 17:f0a973f17917 1
chrigelburri 17:f0a973f17917 2 /** @file PacketBuffer.cpp
chrigelburri 17:f0a973f17917 3 * @brief Ring Buffer
chrigelburri 17:f0a973f17917 4 */
chrigelburri 17:f0a973f17917 5
chrigelburri 17:f0a973f17917 6 #include "PacketBuffer.h"
chrigelburri 17:f0a973f17917 7
chrigelburri 17:f0a973f17917 8
chrigelburri 17:f0a973f17917 9 PacketBuffer::PacketBuffer(int num,int packet_size)
chrigelburri 17:f0a973f17917 10 {
chrigelburri 17:f0a973f17917 11 max_num = num;
chrigelburri 17:f0a973f17917 12 max_size = packet_size;
chrigelburri 17:f0a973f17917 13
chrigelburri 17:f0a973f17917 14 p_buf = new PacketBufInf[num];
chrigelburri 17:f0a973f17917 15
chrigelburri 17:f0a973f17917 16 for(int i = 0 ; i < num ; i++)
chrigelburri 17:f0a973f17917 17 {
chrigelburri 17:f0a973f17917 18 p_buf[i].buf = new char[packet_size];
chrigelburri 17:f0a973f17917 19 p_buf[i].size = 0;
chrigelburri 17:f0a973f17917 20 }
chrigelburri 17:f0a973f17917 21 addr_w = 0;
chrigelburri 17:f0a973f17917 22 addr_r = 0;
chrigelburri 17:f0a973f17917 23 }
chrigelburri 17:f0a973f17917 24
chrigelburri 17:f0a973f17917 25 PacketBuffer::~PacketBuffer()
chrigelburri 17:f0a973f17917 26 {
chrigelburri 17:f0a973f17917 27
chrigelburri 17:f0a973f17917 28 for(int i = 0 ; i < max_num ; i++)
chrigelburri 17:f0a973f17917 29 {
chrigelburri 17:f0a973f17917 30 delete [] p_buf[i].buf;
chrigelburri 17:f0a973f17917 31 }
chrigelburri 17:f0a973f17917 32 delete [] p_buf;
chrigelburri 17:f0a973f17917 33 }
chrigelburri 17:f0a973f17917 34
chrigelburri 17:f0a973f17917 35 int PacketBuffer::PutPacket(char *packet, int len)
chrigelburri 17:f0a973f17917 36 {
chrigelburri 17:f0a973f17917 37 int next;
chrigelburri 17:f0a973f17917 38
chrigelburri 17:f0a973f17917 39 if(max_size < len) return(-1);
chrigelburri 17:f0a973f17917 40
chrigelburri 17:f0a973f17917 41 next = (addr_w + 1) % max_num;
chrigelburri 17:f0a973f17917 42
chrigelburri 17:f0a973f17917 43 if( next == addr_r ) return(0);
chrigelburri 17:f0a973f17917 44
chrigelburri 17:f0a973f17917 45 memcpy( p_buf[addr_w].buf , packet , len );
chrigelburri 17:f0a973f17917 46
chrigelburri 17:f0a973f17917 47 p_buf[addr_w].size = len;
chrigelburri 17:f0a973f17917 48
chrigelburri 17:f0a973f17917 49 addr_w = next;
chrigelburri 17:f0a973f17917 50
chrigelburri 17:f0a973f17917 51 return(len);
chrigelburri 17:f0a973f17917 52 }
chrigelburri 17:f0a973f17917 53
chrigelburri 17:f0a973f17917 54 int PacketBuffer::GetPacket(char *packet)
chrigelburri 17:f0a973f17917 55 {
chrigelburri 17:f0a973f17917 56 int len;
chrigelburri 17:f0a973f17917 57
chrigelburri 17:f0a973f17917 58 if( addr_w == addr_r ) return(0);
chrigelburri 17:f0a973f17917 59
chrigelburri 17:f0a973f17917 60 len = p_buf[addr_r].size;
chrigelburri 17:f0a973f17917 61
chrigelburri 17:f0a973f17917 62 memcpy( packet , p_buf[addr_r].buf , len );
chrigelburri 17:f0a973f17917 63
chrigelburri 17:f0a973f17917 64 addr_r = (addr_r + 1) % max_num;
chrigelburri 17:f0a973f17917 65
chrigelburri 17:f0a973f17917 66 return len;
chrigelburri 17:f0a973f17917 67 }
chrigelburri 17:f0a973f17917 68
chrigelburri 17:f0a973f17917 69 int PacketBuffer::available () {
chrigelburri 17:f0a973f17917 70 if (addr_w < addr_r) {
chrigelburri 17:f0a973f17917 71 return addr_r - addr_w - 1;
chrigelburri 17:f0a973f17917 72 } else {
chrigelburri 17:f0a973f17917 73 return (max_num - addr_w) + addr_r - 1;
chrigelburri 17:f0a973f17917 74 }
chrigelburri 17:f0a973f17917 75 }
chrigelburri 17:f0a973f17917 76
chrigelburri 17:f0a973f17917 77 int PacketBuffer::use () {
chrigelburri 17:f0a973f17917 78 return max_num - available() - 1;
chrigelburri 17:f0a973f17917 79 }
chrigelburri 17:f0a973f17917 80
chrigelburri 17:f0a973f17917 81 void PacketBuffer::clear () {
chrigelburri 17:f0a973f17917 82 addr_w = 0;
chrigelburri 17:f0a973f17917 83 addr_r = 0;
chrigelburri 17:f0a973f17917 84 }