Christian Burri / Mbed 2 deprecated autonomous Robot Android

Dependencies:   mbed

Fork of autonomous Robot Android by Christian Burri

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers PacketBuffer.cpp Source File

PacketBuffer.cpp

Go to the documentation of this file.
00001 
00002 /** @file PacketBuffer.cpp
00003  * @brief Ring Buffer
00004  */
00005 
00006 #include "PacketBuffer.h"
00007 
00008 
00009 PacketBuffer::PacketBuffer(int num,int packet_size)
00010 {
00011     max_num = num;
00012     max_size = packet_size;
00013 
00014     p_buf = new PacketBufInf[num];
00015         
00016     for(int i = 0 ; i < num ; i++)
00017     {
00018         p_buf[i].buf = new char[packet_size];
00019         p_buf[i].size = 0;
00020     }
00021     addr_w = 0;
00022     addr_r = 0;
00023 }
00024 
00025 PacketBuffer::~PacketBuffer()
00026 {
00027     
00028     for(int i = 0 ; i < max_num ; i++)
00029     {
00030         delete [] p_buf[i].buf;
00031     }
00032     delete [] p_buf;
00033 }
00034 
00035 int PacketBuffer::PutPacket(char *packet, int len)
00036 {
00037     int next;
00038     
00039     if(max_size < len) return(-1);
00040      
00041     next = (addr_w + 1) % max_num;
00042     
00043     if( next == addr_r ) return(0);
00044     
00045     memcpy( p_buf[addr_w].buf , packet , len );
00046     
00047     p_buf[addr_w].size = len;
00048     
00049     addr_w = next;
00050     
00051     return(len);
00052 }
00053 
00054 int PacketBuffer::GetPacket(char *packet)
00055 {
00056     int len;
00057     
00058     if( addr_w == addr_r ) return(0);
00059     
00060     len = p_buf[addr_r].size;
00061     
00062     memcpy( packet , p_buf[addr_r].buf , len );
00063     
00064     addr_r = (addr_r + 1) % max_num;
00065     
00066     return len;
00067 }
00068 
00069 int PacketBuffer::available () {
00070     if (addr_w < addr_r) {
00071         return addr_r - addr_w - 1;
00072     } else {
00073         return (max_num - addr_w) + addr_r - 1;
00074     }
00075 }
00076 
00077 int PacketBuffer::use () {
00078     return max_num - available() - 1;
00079 }
00080 
00081 void PacketBuffer::clear () {
00082     addr_w = 0;
00083     addr_r = 0;
00084 }