Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Examples  

cluster::Header Class Reference

#include <Header.h>

List of all members.

Public Methods

 Header (vpr::SocketStream *stream) throw (cluster::ClusterException)
 Directly read the needed header data from socket(blocking), and parse the header. More...

 Header (vpr::Uint16 RIM_code, vpr::Uint16 packet_type, vpr::Uint32 packet_length, vpr::Uint32 frame)
virtual ~Header ()
void serializeHeader ()
void parseHeader ()
vpr::ReturnStatus send (vpr::SocketStream *socket)
void dump ()
vpr::Uint16 getRIMCode ()
vpr::Uint16 getPacketType ()
vpr::Uint32 getPacketLength ()
void setPacketLength (vpr::Uint32 length)
vpr::Uint32 getFrame ()
virtual void printData (int debug_level)

Static Public Attributes

const unsigned short RIM_PACKET = 400
const unsigned short RIM_DATA_PACKET = 401
const unsigned short RIM_DEVICE_REQ = 402
const unsigned short RIM_DEVICE_ACK = 403
const unsigned short RIM_CONNECTION_REQ = 404
const unsigned short RIM_CONNECTION_ACK = 405
const unsigned short RIM_SYNC_REQ = 406
const unsigned short RIM_SYNC_ACK = 407
const unsigned short RIM_APPDATA_REQ = 408
const unsigned short RIM_APPDATA_ACK = 409
const unsigned short RIM_END_BLOCK = 410
const unsigned short RIM_START_BLOCK = 411
const unsigned short RIM_PACKET_HEAD_SIZE = 12

Protected Attributes

vpr::BufferObjectReader * mPacketReader
vpr::BufferObjectWriter * mPacketWriter
std::vector< vpr::Uint8 > mData
vpr::Uint16 mRIMCode
vpr::Uint16 mPacketType
vpr::Uint32 mPacketLength
vpr::Uint32 mFrame


Constructor & Destructor Documentation

cluster::Header::Header vpr::SocketStream *    stream throw (cluster::ClusterException)
 

Directly read the needed header data from socket(blocking), and parse the header.

Definition at line 53 of file Header.cpp.

References gadgetDBG_RIM.

00054    {
00055       vprASSERT(NULL != stream && "Can not create a Header using a NULL SocketStream");
00056 
00057       // -Is stream is a valid SocketStream?
00058       //  -Read in the packet from the socket
00059       //  -Set the BufferObjectReader and BufferObjectWriter to use mData  <====We only need BufferObjectReader
00060       if (stream != NULL)
00061       {
00062          vpr::Uint32 bytes_read;   
00063          
00064          vpr::ReturnStatus status = stream->readn(mData,Header::RIM_PACKET_HEAD_SIZE,bytes_read);
00065          
00066          if (status != vpr::ReturnStatus::Succeed || bytes_read != RIM_PACKET_HEAD_SIZE)
00067          {
00068             vprDEBUG(gadgetDBG_RIM,vprDBG_CONFIG_LVL)
00069                << clrOutBOLD(clrRED, "ERROR:")
00070                << "Header::Header Something is seriously wrong here!" 
00071                << vprDEBUG_FLUSH;
00072             
00073             stream->close();
00074             delete stream;
00075             stream = NULL;
00076             
00077             if (status != vpr::ReturnStatus::Succeed)
00078             {
00079                throw cluster::ClusterException("Header::Header() - Could not read the header!");
00080             }
00081             else
00082             {
00083                throw cluster::ClusterException("Header::Header() - Bytes Read was lower than RIM_PACKET_HEAD_SIZE");
00084             }            
00085          }
00086          
00087          if (bytes_read != RIM_PACKET_HEAD_SIZE)
00088          {
00089             vprDEBUG(gadgetDBG_RIM,vprDBG_CONFIG_LVL)
00090                << clrOutBOLD(clrRED, "ERROR:")
00091                << "Header::Header Something is seriously wrong here!\n" 
00092                << "We only read: " << bytes_read << " bytes for the header\n"
00093                << "When we need " << RIM_PACKET_HEAD_SIZE << " bytes!" << std::endl
00094                << vprDEBUG_FLUSH;
00095                exit(0);
00096          }
00097          
00098          mPacketReader = new vpr::BufferObjectReader(&mData);
00099          mPacketWriter= new vpr::BufferObjectWriter(&mData);    // <====We only need BufferObjectReader
00100          parseHeader();
00101       }
00102       else
00103       {
00104          vprDEBUG(gadgetDBG_RIM,vprDBG_CONFIG_LVL) << clrSetBOLD(clrRED) 
00105             << "ERROR: SocketSteam is NULL\n" << clrRESET << vprDEBUG_FLUSH;
00106          throw std::exception();
00107       }
00108    }

cluster::Header::Header vpr::Uint16    RIM_code,
vpr::Uint16    packet_type,
vpr::Uint32    packet_length,
vpr::Uint32    frame
 

Definition at line 41 of file Header.cpp.

References mData, mFrame, mPacketLength, mPacketReader, mPacketType, mPacketWriter, and mRIMCode.

00043    {
00044       //mData = new std::vector<vpr::Uint8>(RIM_PACKET_HEAD_SIZE);
00045       mPacketReader = new vpr::BufferObjectReader(&mData);
00046       mPacketWriter= new vpr::BufferObjectWriter(&mData);
00047    
00048       mRIMCode = RIM_code;
00049       mPacketType = packet_type;
00050       mPacketLength = packet_length;
00051       mFrame = frame;
00052    }

virtual cluster::Header::~Header   [inline, virtual]
 

Definition at line 83 of file Header.h.

00084    {
00085       delete mPacketReader;
00086       delete mPacketWriter;
00087       //delete mData;
00088    }


Member Function Documentation

void cluster::Header::serializeHeader  
 

Definition at line 110 of file Header.cpp.

References mFrame, mPacketLength, mPacketType, mPacketWriter, and mRIMCode.

00111    {  
00112       mPacketWriter->getData()->clear();
00113       mPacketWriter->setCurPos(0);
00114 
00115       // -Write all packet header information to the base Header class
00116 
00117          
00118 //         std::cout << "Head Starting at Position: " << mPacketWriter->getCurPos() << std::endl;
00119       mPacketWriter->writeUint16(mRIMCode);
00120 //         std::cout << "Write RIMCode: " << mRIMCode << std::endl;
00121 //         std::cout << "Current Position: " << mPacketWriter->getCurPos() << std::endl;
00122 
00123       mPacketWriter->writeUint16(mPacketType);
00124 //         std::cout << "Write PacketType: " << mPacketType << std::endl;
00125 //         std::cout << "Current Position: " << mPacketWriter->getCurPos() << std::endl;
00126 
00127       mPacketWriter->writeUint32(mFrame);
00128 //         std::cout << "Write Frame: " << mFrame << std::endl;
00129 //         std::cout << "Current Position: " << mPacketWriter->getCurPos() << std::endl;
00130 
00131       mPacketWriter->writeUint32(mPacketLength);
00132 //         std::cout << "Write Packet Length: " << mPacketLength << std::endl;
00133 //         std::cout << "Current Position: " << mPacketWriter->getCurPos() << std::endl;
00134    }

void cluster::Header::parseHeader  
 

Definition at line 136 of file Header.cpp.

References gadgetDBG_RIM, mFrame, mPacketLength, mPacketReader, mPacketType, mRIMCode, and RIM_PACKET.

00137    {
00138       // *Now that we have recieved the correct number 
00139       //  of bytes from the socket(RIM_PACKET_HEAD_SIZE)
00140       
00141       // -Parse the new data using a BufferObjectReader
00142       // -Is this a valid RIM packet?
00143       //  -If not exit immediately
00144          
00145          //std::cout << "Head Starting at Position: " << mPacketWriter->getCurPos() << std::endl;
00146       
00147       mRIMCode = mPacketReader->readUint16();
00148 //         std::cout << "Read RIMCode: " << mRIMCode << std::endl;
00149 //         std::cout << "Current Position: " << mPacketReader->getCurPos() << std::endl;
00150       mPacketType = mPacketReader->readUint16();
00151 //         std::cout << "Read PacketType: " << mPacketType << std::endl;
00152 //         std::cout << "Current Position: " << mPacketReader->getCurPos() << std::endl;
00153       mFrame = mPacketReader->readUint32();
00154 //         std::cout << "Read Frame#: " << mFrame << std::endl;
00155 //         std::cout << "Current Position: " << mPacketReader->getCurPos() << std::endl;
00156       mPacketLength = mPacketReader->readUint32();
00157 //         std::cout << "Read Packet Length: " << mPacketLength << std::endl;
00158 //         std::cout << "Current Position: " << mPacketReader->getCurPos() << std::endl;
00159 
00160       // Change to a vprASSERT
00161       if (mRIMCode != RIM_PACKET)
00162       {
00163          vprDEBUG(gadgetDBG_RIM,vprDBG_CONFIG_LVL) << clrSetBOLD(clrRED) 
00164             << "ERROR: This Packet is not a valid RIM Packet!!\n" 
00165             << "RIMCode: " << mRIMCode << " is not valid!" 
00166             << "\n\nApplication Exiting immediately!!" << clrRESET << vprDEBUG_FLUSH;
00167             exit(0);
00168       }
00169    }

vpr::ReturnStatus cluster::Header::send vpr::SocketStream *    socket
 

Definition at line 170 of file Header.cpp.

References mData, and RIM_PACKET_HEAD_SIZE.

00171    {
00172       vprASSERT(NULL != socket && "Socket is NULL");
00173 
00174       // -Send the data in this packet
00175       vpr::Uint32 bytes_written;
00176       
00177       vpr::ReturnStatus status = socket->send(mData,RIM_PACKET_HEAD_SIZE,bytes_written);
00178       return(status);   
00179 
00180       //if (bytes_written != mPacketLength)
00181       //{
00182       //   std::cout << "Something is seriously wrong here!" << std::endl;
00183       //   return(vpr::ReturnStatus::Fail);
00184       //}
00185       //return(vpr::ReturnStatus::Succeed);
00186       
00187    }   

void cluster::Header::dump  
 

Definition at line 188 of file Header.cpp.

References mData.

00189    {
00190       std::cout << "Dumping Header(" << mData.size() << " bytes): ";
00191       for ( std::vector<vpr::Uint8>::iterator i = mData.begin();
00192            i!= mData.end(); i++ )
00193       {
00194          std::cout << (int)*i << " ";
00195       }
00196       std::cout << std::endl;
00197    }

vpr::Uint16 cluster::Header::getRIMCode   [inline]
 

Definition at line 94 of file Header.h.

00094 { return mRIMCode; }

vpr::Uint16 cluster::Header::getPacketType   [inline]
 

Definition at line 95 of file Header.h.

00095 { return mPacketType; }

vpr::Uint32 cluster::Header::getPacketLength   [inline]
 

Definition at line 96 of file Header.h.

00096 { return mPacketLength; }

void cluster::Header::setPacketLength vpr::Uint32    length [inline]
 

Definition at line 97 of file Header.h.

00097 { mPacketLength = length; }

vpr::Uint32 cluster::Header::getFrame   [inline]
 

Definition at line 98 of file Header.h.

00098 { return mFrame; }

void cluster::Header::printData int    debug_level [virtual]
 

Definition at line 199 of file Header.cpp.

References gadgetDBG_RIM, mFrame, mPacketLength, mPacketType, and mRIMCode.

00200    {
00201       vprDEBUG_BEGIN(gadgetDBG_RIM,debug_level) 
00202          <<  clrOutBOLD(clrYELLOW,"====== Packet Header ======\n") << vprDEBUG_FLUSH;
00203       
00204       vprDEBUG(gadgetDBG_RIM,debug_level) 
00205          << clrOutBOLD(clrYELLOW, "RIMCode:    ") << mRIMCode
00206          << std::endl << vprDEBUG_FLUSH;
00207       vprDEBUG(gadgetDBG_RIM,debug_level) 
00208          << clrOutBOLD(clrYELLOW, "PacketType: ") << mPacketType
00209          << std::endl << vprDEBUG_FLUSH;
00210       vprDEBUG(gadgetDBG_RIM,debug_level)
00211          << clrOutBOLD(clrYELLOW, "Frame #:    ") << mFrame
00212          << std::endl << vprDEBUG_FLUSH;
00213       vprDEBUG(gadgetDBG_RIM,debug_level)
00214          << clrOutBOLD(clrYELLOW, "Length:     ") << mPacketLength
00215          << std::endl << vprDEBUG_FLUSH;
00216 
00217 
00218       vprDEBUG_END(gadgetDBG_RIM,debug_level) 
00219          <<  clrOutBOLD(clrYELLOW,"===========================\n") << vprDEBUG_FLUSH;
00220 
00221       
00222 /*
00223       vprDEBUG(gadgetDBG_RIM,vprDBG_CONFIG_LVL) 
00224          << clrOutBOLD(clrCYAN,"\n====== Packet Header ======")
00225          << "\nRIMCode:    " << mRIMCode
00226          << "\nPacketType: " << mPacketType
00227          << "\nFrame #:    " << mFrame
00228          << "\nLength:     " << mPacketLength << std::endl
00229          << vprDEBUG_FLUSH;      
00230 */         
00231    }


Member Data Documentation

const unsigned short cluster::Header::RIM_PACKET = 400 [static]
 

Definition at line 52 of file Header.h.

Referenced by parseHeader.

const unsigned short cluster::Header::RIM_DATA_PACKET = 401 [static]
 

Definition at line 53 of file Header.h.

const unsigned short cluster::Header::RIM_DEVICE_REQ = 402 [static]
 

Definition at line 54 of file Header.h.

const unsigned short cluster::Header::RIM_DEVICE_ACK = 403 [static]
 

Definition at line 55 of file Header.h.

const unsigned short cluster::Header::RIM_CONNECTION_REQ = 404 [static]
 

Definition at line 56 of file Header.h.

const unsigned short cluster::Header::RIM_CONNECTION_ACK = 405 [static]
 

Definition at line 57 of file Header.h.

const unsigned short cluster::Header::RIM_SYNC_REQ = 406 [static]
 

Definition at line 58 of file Header.h.

const unsigned short cluster::Header::RIM_SYNC_ACK = 407 [static]
 

Definition at line 59 of file Header.h.

const unsigned short cluster::Header::RIM_APPDATA_REQ = 408 [static]
 

Definition at line 60 of file Header.h.

const unsigned short cluster::Header::RIM_APPDATA_ACK = 409 [static]
 

Definition at line 61 of file Header.h.

const unsigned short cluster::Header::RIM_END_BLOCK = 410 [static]
 

Definition at line 62 of file Header.h.

const unsigned short cluster::Header::RIM_START_BLOCK = 411 [static]
 

Definition at line 63 of file Header.h.

const unsigned short cluster::Header::RIM_PACKET_HEAD_SIZE = 12 [static]
 

Definition at line 71 of file Header.h.

Referenced by send.

vpr::BufferObjectReader* cluster::Header::mPacketReader [protected]
 

Definition at line 102 of file Header.h.

Referenced by Header, and parseHeader.

vpr::BufferObjectWriter* cluster::Header::mPacketWriter [protected]
 

Definition at line 103 of file Header.h.

Referenced by Header, and serializeHeader.

std::vector<vpr::Uint8> cluster::Header::mData [protected]
 

Definition at line 104 of file Header.h.

Referenced by dump, Header, and send.

vpr::Uint16 cluster::Header::mRIMCode [protected]
 

Definition at line 106 of file Header.h.

Referenced by Header, parseHeader, printData, and serializeHeader.

vpr::Uint16 cluster::Header::mPacketType [protected]
 

Definition at line 107 of file Header.h.

Referenced by Header, parseHeader, printData, and serializeHeader.

vpr::Uint32 cluster::Header::mPacketLength [protected]
 

Definition at line 108 of file Header.h.

Referenced by Header, parseHeader, printData, and serializeHeader.

vpr::Uint32 cluster::Header::mFrame [protected]
 

Definition at line 109 of file Header.h.

Referenced by Header, parseHeader, printData, and serializeHeader.


The documentation for this class was generated from the following files:
Generated on Sun May 2 14:26:46 2004 for Gadgeteer by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002