nucho
/
RTno_Template
Embed:
(wiki syntax)
Show/hide line numbers
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
Generated on Tue Jul 12 2022 17:15:43 by 1.7.2