Dependencies:   mbed QEI

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers OutPort.cpp Source File

OutPort.cpp

00001 /*******************************************
00002  * OutPort.cpp
00003  * @author Yuki Suga
00004  * @copyright Yuki Suga (ysuga.net) Nov, 10th, 2010.
00005  * @license LGPLv3
00006  *****************************************/
00007 
00008 #include <string.h>
00009 #include "BasicDataType.h"
00010 #include "OutPort.h"
00011 #include "SendPacket.h"
00012 #include "ReceivePacket.h"
00013 #include "Serial.h"
00014 
00015 OutPort::OutPort(char* name, TimedBoolean& Data) :
00016   OutPortBase(name)
00017 {
00018   //  m_pData = pData;
00019   m_pData = &Data;
00020   m_TypeCode = 'b';
00021 }
00022 
00023 OutPort::OutPort(char* name, TimedChar& Data) :
00024   OutPortBase(name)
00025 {
00026   //  m_pData = pData;
00027   m_pData = &Data;
00028   m_TypeCode = 'c';
00029 }
00030 
00031 OutPort::OutPort(char* name, TimedOctet& Data) :
00032   OutPortBase(name)
00033 {
00034   //  m_pData = pData;
00035   m_pData = &Data;
00036   m_TypeCode = 'o';
00037 }
00038 
00039 OutPort::OutPort(char* name, TimedLong& Data) :
00040   OutPortBase(name)
00041 {
00042   //  m_pData = pData;
00043   m_pData = &Data;
00044   m_TypeCode = 'l';
00045 }
00046 
00047 OutPort::OutPort(char* name, TimedFloat& Data) :
00048   OutPortBase(name)
00049 {
00050   //  m_pData = pData;
00051   m_pData = &Data;
00052   m_TypeCode = 'f';
00053 }
00054 
00055 OutPort::OutPort(char* name, TimedDouble& Data) :
00056   OutPortBase(name)
00057 {
00058   //  m_pData = pData;
00059   m_pData = &Data;
00060   m_TypeCode = 'd';
00061 }
00062 
00063 OutPort::OutPort(char* name, TimedBooleanSeq& Data) :
00064   OutPortBase(name)
00065 {
00066   //  m_pData = pData;
00067   m_pData = &Data;
00068   m_TypeCode = 'B';
00069 }
00070 
00071 OutPort::OutPort(char* name, TimedCharSeq& Data) :
00072   OutPortBase(name)
00073 {
00074   //  m_pData = pData;
00075   m_pData = &Data;
00076   m_TypeCode = 'C';
00077 }
00078 
00079 OutPort::OutPort(char* name, TimedOctetSeq& Data) :
00080   OutPortBase(name)
00081 {
00082   //  m_pData = pData;
00083   m_pData = &Data;
00084   m_TypeCode = 'O';
00085 }
00086 
00087 
00088 OutPort::OutPort(char* name, TimedLongSeq& Data) :
00089   OutPortBase(name)
00090 {
00091   //  m_pData = pData;
00092   m_pData = &Data;
00093   m_TypeCode = 'L';
00094 }
00095 
00096 OutPort::OutPort(char* name, TimedFloatSeq& Data) :
00097   OutPortBase(name)
00098 {
00099   //  m_pData = pData;
00100   m_pData = &Data;
00101   m_TypeCode = 'F';
00102 }
00103 
00104 OutPort::OutPort(char* name, TimedDoubleSeq& Data) :
00105   OutPortBase(name)
00106 {
00107   //  m_pData = pData;
00108   m_pData = &Data;
00109   m_TypeCode = 'D';
00110 }
00111 
00112 OutPort::~OutPort()
00113 {
00114 
00115 }
00116 
00117 int OutPort::SizeofData() {
00118   switch(m_TypeCode) {
00119   case 'b':
00120   case 'B':
00121   case 'o':
00122   case 'O':
00123   case 'c':
00124   case 'C':
00125     return 1;
00126   default:
00127     return 4;
00128   }
00129 }
00130 
00131 int OutPort::write()
00132 {
00133   int datalen = GetLength() * SizeofData();
00134   int namelen = strlen(GetName());
00135   char packet_buffer[MAX_PACKET_SIZE];;
00136   packet_buffer[0] = namelen;
00137   packet_buffer[1] = datalen;
00138   memcpy(&(packet_buffer[2]), GetName(), namelen);
00139   memcpy(&(packet_buffer[2 + namelen]), GetBuffer(), datalen);
00140   SendPacket(OUTPORT_WRITE, 2+namelen+datalen, packet_buffer);
00141   ReceivePacket(packet_buffer);
00142   return PACKET_HEADER_SIZE+2+namelen+datalen;
00143 }