Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers InPort.cpp Source File

InPort.cpp

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