10 #if FW_ENABLE_TEXT_LOGGING 32 this->m_recvReturnIn_InputPort[port].
init();
37 this->m_recvReturnIn_InputPort[port].
setPortNum(port);
39 #if FW_OBJECT_NAMES == 1 43 this->m_objName.toChar(),
46 this->m_recvReturnIn_InputPort[port].setObjName(portName.
toChar());
56 this->m_run_InputPort[port].
init();
63 #if FW_OBJECT_NAMES == 1 67 this->m_objName.toChar(),
70 this->m_run_InputPort[port].setObjName(portName.
toChar());
80 this->m_send_InputPort[port].
init();
87 #if FW_OBJECT_NAMES == 1 91 this->m_objName.toChar(),
94 this->m_send_InputPort[port].setObjName(portName.
toChar());
104 this->m_Log_OutputPort[port].
init();
106 #if FW_OBJECT_NAMES == 1 110 this->m_objName.toChar(),
113 this->m_Log_OutputPort[port].setObjName(portName.
toChar());
117 #if FW_ENABLE_TEXT_LOGGING == 1 121 port < static_cast<FwIndexType>(this->getNum_LogText_OutputPorts());
124 this->m_LogText_OutputPort[port].
init();
126 #if FW_OBJECT_NAMES == 1 130 this->m_objName.toChar(),
133 this->m_LogText_OutputPort[port].setObjName(portName.
toChar());
144 this->m_Time_OutputPort[port].
init();
146 #if FW_OBJECT_NAMES == 1 150 this->m_objName.toChar(),
153 this->m_Time_OutputPort[port].setObjName(portName.
toChar());
163 this->m_Tlm_OutputPort[port].
init();
165 #if FW_OBJECT_NAMES == 1 169 this->m_objName.toChar(),
172 this->m_Tlm_OutputPort[port].setObjName(portName.
toChar());
182 this->m_allocate_OutputPort[port].
init();
184 #if FW_OBJECT_NAMES == 1 188 this->m_objName.toChar(),
191 this->m_allocate_OutputPort[port].setObjName(portName.
toChar());
201 this->m_deallocate_OutputPort[port].
init();
203 #if FW_OBJECT_NAMES == 1 207 this->m_objName.toChar(),
210 this->m_deallocate_OutputPort[port].setObjName(portName.
toChar());
220 this->m_ready_OutputPort[port].
init();
222 #if FW_OBJECT_NAMES == 1 226 this->m_objName.toChar(),
229 this->m_ready_OutputPort[port].setObjName(portName.
toChar());
239 this->m_recv_OutputPort[port].
init();
241 #if FW_OBJECT_NAMES == 1 245 this->m_objName.toChar(),
248 this->m_recv_OutputPort[port].setObjName(portName.
toChar());
262 static_cast<FwAssertArgType>(portNum)
265 return &this->m_recvReturnIn_InputPort[portNum];
273 static_cast<FwAssertArgType>(portNum)
276 return &this->m_run_InputPort[portNum];
284 static_cast<FwAssertArgType>(portNum)
287 return &this->m_send_InputPort[portNum];
302 static_cast<FwAssertArgType>(portNum)
308 #if FW_ENABLE_TEXT_LOGGING == 1 310 void LinuxUartDriverComponentBase ::
311 set_LogText_OutputPort(
317 (0 <= portNum) && (portNum < this->getNum_LogText_OutputPorts()),
318 static_cast<FwAssertArgType>(portNum)
321 this->m_LogText_OutputPort[portNum].addCallPort(port);
334 static_cast<FwAssertArgType>(portNum)
337 this->m_Time_OutputPort[portNum].
addCallPort(port);
348 static_cast<FwAssertArgType>(portNum)
366 static_cast<FwAssertArgType>(portNum)
369 this->m_allocate_OutputPort[portNum].
addCallPort(port);
380 static_cast<FwAssertArgType>(portNum)
383 this->m_deallocate_OutputPort[portNum].
addCallPort(port);
394 static_cast<FwAssertArgType>(portNum)
397 this->m_ready_OutputPort[portNum].
addCallPort(port);
408 static_cast<FwAssertArgType>(portNum)
411 this->m_recv_OutputPort[portNum].
addCallPort(port);
414 #if FW_PORT_SERIALIZATION 423 Fw::InputSerializePort* port
428 static_cast<FwAssertArgType>(portNum)
431 this->m_Log_OutputPort[portNum].registerSerialPort(port);
434 #if FW_ENABLE_TEXT_LOGGING == 1 436 void LinuxUartDriverComponentBase ::
437 set_LogText_OutputPort(
439 Fw::InputSerializePort* port
443 (0 <= portNum) && (portNum < this->getNum_LogText_OutputPorts()),
444 static_cast<FwAssertArgType>(portNum)
447 this->m_LogText_OutputPort[portNum].registerSerialPort(port);
455 Fw::InputSerializePort* port
460 static_cast<FwAssertArgType>(portNum)
463 this->m_Time_OutputPort[portNum].registerSerialPort(port);
469 Fw::InputSerializePort* port
474 static_cast<FwAssertArgType>(portNum)
477 this->m_Tlm_OutputPort[portNum].registerSerialPort(port);
482 #if FW_PORT_SERIALIZATION 491 Fw::InputSerializePort* port
496 static_cast<FwAssertArgType>(portNum)
499 this->m_deallocate_OutputPort[portNum].registerSerialPort(port);
505 Fw::InputSerializePort* port
510 static_cast<FwAssertArgType>(portNum)
513 this->m_ready_OutputPort[portNum].registerSerialPort(port);
519 Fw::InputSerializePort* port
524 static_cast<FwAssertArgType>(portNum)
527 this->m_recv_OutputPort[portNum].registerSerialPort(port);
538 Fw::PassiveComponentBase(compName)
540 this->m_WriteErrorThrottle = 0;
541 this->m_ReadErrorThrottle = 0;
542 this->m_NoBuffersThrottle = 0;
560 static_cast<FwAssertArgType>(portNum)
563 return this->m_Log_OutputPort[portNum].
isConnected();
566 #if FW_ENABLE_TEXT_LOGGING == 1 568 bool LinuxUartDriverComponentBase ::
569 isConnected_LogText_OutputPort(
FwIndexType portNum)
572 (0 <= portNum) && (portNum < this->getNum_LogText_OutputPorts()),
573 static_cast<FwAssertArgType>(portNum)
576 return this->m_LogText_OutputPort[portNum].isConnected();
586 static_cast<FwAssertArgType>(portNum)
589 return this->m_Time_OutputPort[portNum].
isConnected();
597 static_cast<FwAssertArgType>(portNum)
600 return this->m_Tlm_OutputPort[portNum].
isConnected();
612 static_cast<FwAssertArgType>(portNum)
615 return this->m_allocate_OutputPort[portNum].
isConnected();
623 static_cast<FwAssertArgType>(portNum)
626 return this->m_deallocate_OutputPort[portNum].
isConnected();
634 static_cast<FwAssertArgType>(portNum)
637 return this->m_ready_OutputPort[portNum].
isConnected();
645 static_cast<FwAssertArgType>(portNum)
648 return this->m_recv_OutputPort[portNum].
isConnected();
666 static_cast<FwAssertArgType>(portNum)
691 static_cast<FwAssertArgType>(portNum)
710 static_cast<FwAssertArgType>(portNum)
742 static_cast<FwAssertArgType>(portNum)
746 this->m_allocate_OutputPort[portNum].isConnected(),
747 static_cast<FwAssertArgType>(portNum)
749 return this->m_allocate_OutputPort[portNum].
invoke(
762 static_cast<FwAssertArgType>(portNum)
766 this->m_deallocate_OutputPort[portNum].isConnected(),
767 static_cast<FwAssertArgType>(portNum)
769 this->m_deallocate_OutputPort[portNum].
invoke(
779 static_cast<FwAssertArgType>(portNum)
783 this->m_ready_OutputPort[portNum].isConnected(),
784 static_cast<FwAssertArgType>(portNum)
786 this->m_ready_OutputPort[portNum].
invoke();
798 static_cast<FwAssertArgType>(portNum)
802 this->m_recv_OutputPort[portNum].isConnected(),
803 static_cast<FwAssertArgType>(portNum)
805 this->m_recv_OutputPort[portNum].
invoke(
824 if (this->m_Time_OutputPort[0].isConnected()) {
825 this->m_Time_OutputPort[0].
invoke(_logTime);
833 if (this->m_Log_OutputPort[0].isConnected()) {
837 #if FW_AMPCS_COMPATIBLE 842 static_cast<FwAssertArgType>(_status)
849 static_cast<FwAssertArgType>(_status)
852 #if FW_AMPCS_COMPATIBLE 855 static_cast<U8>(
sizeof(I32))
859 static_cast<FwAssertArgType>(_status)
865 static_cast<FwAssertArgType>(_status)
871 static_cast<FwAssertArgType>(_status)
874 this->m_Log_OutputPort[0].
invoke(
883 #if FW_ENABLE_TEXT_LOGGING 884 if (this->m_LogText_OutputPort[0].isConnected()) {
885 #if FW_OBJECT_NAMES == 1 886 const char* _formatString =
887 "(%s) %s: Error opening UART device %s: %" PRIi32
" %s";
889 const char* _formatString =
890 "%s: Error opening UART device %s: %" PRIi32
" %s";
897 this->m_objName.toChar(),
905 this->m_LogText_OutputPort[0].invoke(
923 if (this->m_Time_OutputPort[0].isConnected()) {
924 this->m_Time_OutputPort[0].
invoke(_logTime);
932 if (this->m_Log_OutputPort[0].isConnected()) {
936 #if FW_AMPCS_COMPATIBLE 941 static_cast<FwAssertArgType>(_status)
948 static_cast<FwAssertArgType>(_status)
951 #if FW_AMPCS_COMPATIBLE 954 static_cast<U8>(
sizeof(I32))
958 static_cast<FwAssertArgType>(_status)
964 static_cast<FwAssertArgType>(_status)
967 this->m_Log_OutputPort[0].
invoke(
976 #if FW_ENABLE_TEXT_LOGGING 977 if (this->m_LogText_OutputPort[0].isConnected()) {
978 #if FW_OBJECT_NAMES == 1 979 const char* _formatString =
980 "(%s) %s: Error configuring UART device %s: %" PRIi32
"";
982 const char* _formatString =
983 "%s: Error configuring UART device %s: %" PRIi32
"";
990 this->m_objName.toChar(),
997 this->m_LogText_OutputPort[0].invoke(
1018 this->m_WriteErrorThrottle++;
1023 if (this->m_Time_OutputPort[0].isConnected()) {
1024 this->m_Time_OutputPort[0].
invoke(_logTime);
1032 if (this->m_Log_OutputPort[0].isConnected()) {
1036 #if FW_AMPCS_COMPATIBLE 1041 static_cast<FwAssertArgType>(_status)
1048 static_cast<FwAssertArgType>(_status)
1051 #if FW_AMPCS_COMPATIBLE 1054 static_cast<U8>(
sizeof(I32))
1058 static_cast<FwAssertArgType>(_status)
1064 static_cast<FwAssertArgType>(_status)
1067 this->m_Log_OutputPort[0].
invoke(
1076 #if FW_ENABLE_TEXT_LOGGING 1077 if (this->m_LogText_OutputPort[0].isConnected()) {
1078 #if FW_OBJECT_NAMES == 1 1079 const char* _formatString =
1080 "(%s) %s: Error writing UART device %s: %" PRIi32
"";
1082 const char* _formatString =
1083 "%s: Error writing UART device %s: %" PRIi32
"";
1090 this->m_objName.toChar(),
1097 this->m_LogText_OutputPort[0].invoke(
1118 this->m_ReadErrorThrottle++;
1123 if (this->m_Time_OutputPort[0].isConnected()) {
1124 this->m_Time_OutputPort[0].
invoke(_logTime);
1132 if (this->m_Log_OutputPort[0].isConnected()) {
1136 #if FW_AMPCS_COMPATIBLE 1141 static_cast<FwAssertArgType>(_status)
1148 static_cast<FwAssertArgType>(_status)
1151 #if FW_AMPCS_COMPATIBLE 1154 static_cast<U8>(
sizeof(I32))
1158 static_cast<FwAssertArgType>(_status)
1164 static_cast<FwAssertArgType>(_status)
1167 this->m_Log_OutputPort[0].
invoke(
1176 #if FW_ENABLE_TEXT_LOGGING 1177 if (this->m_LogText_OutputPort[0].isConnected()) {
1178 #if FW_OBJECT_NAMES == 1 1179 const char* _formatString =
1180 "(%s) %s: Error reading UART device %s: %" PRIi32
"";
1182 const char* _formatString =
1183 "%s: Error reading UART device %s: %" PRIi32
"";
1190 this->m_objName.toChar(),
1197 this->m_LogText_OutputPort[0].invoke(
1212 if (this->m_Time_OutputPort[0].isConnected()) {
1213 this->m_Time_OutputPort[0].
invoke(_logTime);
1221 if (this->m_Log_OutputPort[0].isConnected()) {
1225 #if FW_AMPCS_COMPATIBLE 1230 static_cast<FwAssertArgType>(_status)
1237 static_cast<FwAssertArgType>(_status)
1240 this->m_Log_OutputPort[0].
invoke(
1249 #if FW_ENABLE_TEXT_LOGGING 1250 if (this->m_LogText_OutputPort[0].isConnected()) {
1251 #if FW_OBJECT_NAMES == 1 1252 const char* _formatString =
1253 "(%s) %s: UART Device %s configured";
1255 const char* _formatString =
1256 "%s: UART Device %s configured";
1263 this->m_objName.toChar(),
1269 this->m_LogText_OutputPort[0].invoke(
1287 this->m_NoBuffersThrottle++;
1292 if (this->m_Time_OutputPort[0].isConnected()) {
1293 this->m_Time_OutputPort[0].
invoke(_logTime);
1301 if (this->m_Log_OutputPort[0].isConnected()) {
1305 #if FW_AMPCS_COMPATIBLE 1310 static_cast<FwAssertArgType>(_status)
1317 static_cast<FwAssertArgType>(_status)
1320 this->m_Log_OutputPort[0].
invoke(
1329 #if FW_ENABLE_TEXT_LOGGING 1330 if (this->m_LogText_OutputPort[0].isConnected()) {
1331 #if FW_OBJECT_NAMES == 1 1332 const char* _formatString =
1333 "(%s) %s: UART Device %s ran out of buffers";
1335 const char* _formatString =
1336 "%s: UART Device %s ran out of buffers";
1343 this->m_objName.toChar(),
1349 this->m_LogText_OutputPort[0].invoke(
1368 if (this->m_Time_OutputPort[0].isConnected()) {
1369 this->m_Time_OutputPort[0].
invoke(_logTime);
1377 if (this->m_Log_OutputPort[0].isConnected()) {
1381 #if FW_AMPCS_COMPATIBLE 1386 static_cast<FwAssertArgType>(_status)
1393 static_cast<FwAssertArgType>(_status)
1396 #if FW_AMPCS_COMPATIBLE 1399 static_cast<U8>(
sizeof(U32))
1403 static_cast<FwAssertArgType>(_status)
1409 static_cast<FwAssertArgType>(_status)
1412 #if FW_AMPCS_COMPATIBLE 1415 static_cast<U8>(
sizeof(U32))
1419 static_cast<FwAssertArgType>(_status)
1425 static_cast<FwAssertArgType>(_status)
1428 this->m_Log_OutputPort[0].
invoke(
1437 #if FW_ENABLE_TEXT_LOGGING 1438 if (this->m_LogText_OutputPort[0].isConnected()) {
1439 #if FW_OBJECT_NAMES == 1 1440 const char* _formatString =
1441 "(%s) %s: UART Device %s target buffer too small. Size: %" PRIu32
" Needs: %" PRIu32
"";
1443 const char* _formatString =
1444 "%s: UART Device %s target buffer too small. Size: %" PRIu32
" Needs: %" PRIu32
"";
1451 this->m_objName.toChar(),
1459 this->m_LogText_OutputPort[0].invoke(
1477 this->m_WriteErrorThrottle = 0;
1484 this->m_ReadErrorThrottle = 0;
1491 this->m_NoBuffersThrottle = 0;
1504 if (this->m_Tlm_OutputPort[0].isConnected()) {
1506 this->m_Time_OutputPort[0].isConnected() &&
1509 this->m_Time_OutputPort[0].
invoke(_tlmTime);
1516 static_cast<FwAssertArgType>(_stat)
1523 this->m_Tlm_OutputPort[0].
invoke(
1537 if (this->m_Tlm_OutputPort[0].isConnected()) {
1539 this->m_Time_OutputPort[0].isConnected() &&
1542 this->m_Time_OutputPort[0].
invoke(_tlmTime);
1549 static_cast<FwAssertArgType>(_stat)
1556 this->m_Tlm_OutputPort[0].
invoke(
1571 if (this->m_Time_OutputPort[0].isConnected()) {
1573 this->m_Time_OutputPort[0].
invoke(_time);
1591 this->m_guardedPortMutex.
lock();
1597 this->m_guardedPortMutex.
unLock();
1604 void LinuxUartDriverComponentBase ::
1605 m_p_recvReturnIn_in(
1619 void LinuxUartDriverComponentBase ::
1628 compPtr->run_handlerBase(
1643 return compPtr->send_handlerBase(
virtual void lock()
Lock the guarded mutex.
Serialization/Deserialization operation was successful.
virtual void unLock()
Unlock the guarded mutex.
Throttle reset count for NoBuffers.
bool isConnected_deallocate_OutputPort(FwIndexType portNum)
void addCallPort(InputTimePort *callPort)
Register an input port.
void addCallPort(InputByteStreamReadyPort *callPort)
Register an input port.
void log_WARNING_HI_BufferTooSmall(const Fw::StringBase &device, U32 size, U32 needed) const
static constexpr FwIndexType getNum_deallocate_OutputPorts()
bool isConnected_Time_OutputPort(FwIndexType portNum)
SerializeStatus serializeFrom(U8 val, Endianness mode=Endianness::BIG) override
Serialize an 8-bit unsigned integer value.
void recvReturnIn_handlerBase(FwIndexType portNum, Fw::Buffer &fwBuffer)
Handler base-class function for input port recvReturnIn.
FwIdType getIdBase() const
PlatformSizeType FwSizeType
Drv::ByteStreamStatus send_handlerBase(FwIndexType portNum, Fw::Buffer &sendBuffer)
Handler base-class function for input port send.
bool isConnected_allocate_OutputPort(FwIndexType portNum)
Drv::InputByteStreamSendPort * get_send_InputPort(FwIndexType portNum)
void set_Tlm_OutputPort(FwIndexType portNum, Fw::InputTlmPort *port)
Connect port to Tlm[portNum].
virtual void recvReturnIn_handler(FwIndexType portNum, Fw::Buffer &fwBuffer)=0
Handler for input port recvReturnIn.
static constexpr FwIndexType getNum_recv_OutputPorts()
void unLock()
unlock the mutex and assert success
void tlmWrite_BytesRecv(FwSizeType arg, Fw::Time _tlmTime=Fw::Time()) const
virtual const CHAR * toChar() const =0
Convert to a C-style char*.
LinuxUartDriverComponentBase(const char *compName="")
Construct LinuxUartDriverComponentBase object.
void init()
Initialization function.
Auto-generated base for LinuxUartDriver component.
No time base has been established (Required)
static constexpr FwIndexType getNum_Log_OutputPorts()
void log_WARNING_HI_WriteError(const Fw::StringBase &device, I32 error)
void addCallPort(InputTlmPort *callPort)
Register an input port.
void set_ready_OutputPort(FwIndexType portNum, Drv::InputByteStreamReadyPort *port)
Connect port to ready[portNum].
void init()
Object initializer.
void log_WARNING_HI_ReadError(const Fw::StringBase &device, I32 error)
SerializeStatus
forward declaration for string
void addCallPort(InputBufferGetPort *callPort)
Register an input port.
void addCallPort(InputByteStreamDataPort *callPort)
Register an input port.
void deallocate_out(FwIndexType portNum, Fw::Buffer &fwBuffer)
Invoke output port deallocate.
Fw::InputBufferSendPort * get_recvReturnIn_InputPort(FwIndexType portNum)
FwIdType FwEventIdType
The type of an event identifier.
Status returned by the send call.
#define FW_OBJECT_NAMES
Indicates whether or not object names are stored (more memory, can be used for tracking objects) ...
void init()
Initialization function.
static constexpr FwIndexType getNum_ready_OutputPorts()
#define FW_MIN(a, b)
MIN macro.
void invoke(Fw::Buffer &buffer, const Drv::ByteStreamStatus &status) const
Invoke a port interface.
void invoke(Fw::Buffer &fwBuffer) const
Invoke a port interface.
void addCallPort(InputBufferSendPort *callPort)
Register an input port.
void invoke(Fw::Time &time) const
Invoke a port interface.
static constexpr FwIndexType getNum_recvReturnIn_InputPorts()
Throttle reset count for ReadError.
void set_Log_OutputPort(FwIndexType portNum, Fw::InputLogPort *port)
Connect port to Log[portNum].
void recv_out(FwIndexType portNum, Fw::Buffer &buffer, const Drv::ByteStreamStatus &status)
Invoke output port recv.
void log_WARNING_HI_WriteError_ThrottleClear()
Reset throttle value for WriteError.
const char * toChar() const
Convert to a C-style char*.
FwIdType FwChanIdType
The type of a telemetry channel identifier.
void log_WARNING_HI_OpenError(const Fw::StringBase &device, I32 error, const Fw::StringBase &name) const
Throttle reset count for WriteError.
static constexpr FwIndexType getNum_run_InputPorts()
virtual Drv::ByteStreamStatus send_handler(FwIndexType portNum, Fw::Buffer &sendBuffer)=0
Handler for input port send.
A serious but recoverable event.
bool isConnected_Log_OutputPort(FwIndexType portNum)
void log_ACTIVITY_HI_PortOpened(const Fw::StringBase &device) const
void invoke(FwChanIdType id, Fw::Time &timeTag, Fw::TlmBuffer &val) const
Invoke a port interface.
void set_allocate_OutputPort(FwIndexType portNum, Fw::InputBufferGetPort *port)
Connect port to allocate[portNum].
FormatStatus format(const CHAR *formatString,...)
write formatted string to buffer
void init()
Initialization function.
void log_WARNING_HI_NoBuffers(const Fw::StringBase &device)
static constexpr FwIndexType getNum_allocate_OutputPorts()
bool isConnected_Tlm_OutputPort(FwIndexType portNum)
static constexpr FwIndexType getNum_Time_OutputPorts()
Fw::Buffer invoke(FwSizeType size) const
Invoke a port interface.
static constexpr FwIndexType getNum_Tlm_OutputPorts()
bool isConnected_recv_OutputPort(FwIndexType portNum)
virtual void run_handler(FwIndexType portNum, U32 context)=0
Handler for input port run.
Important informational events.
Svc::InputSchedPort * get_run_InputPort(FwIndexType portNum)
void init()
Initialization function.
void invoke(FwEventIdType id, Fw::Time &timeTag, const Fw::LogSeverity &severity, Fw::LogBuffer &args) const
Invoke a port interface.
void run_handlerBase(FwIndexType portNum, U32 context)
Handler base-class function for input port run.
void init()
Initialization function.
void set_deallocate_OutputPort(FwIndexType portNum, Fw::InputBufferSendPort *port)
Connect port to deallocate[portNum].
PlatformIndexType FwIndexType
void invoke() const
Invoke a port interface.
void addCallPort(InputLogPort *callPort)
Register an input port.
void ready_out(FwIndexType portNum)
Invoke output port ready.
void init()
Initialization function.
void set_Time_OutputPort(FwIndexType portNum, Fw::InputTimePort *port)
Connect port to Time[portNum].
virtual ~LinuxUartDriverComponentBase()
Destroy LinuxUartDriverComponentBase object.
bool isConnected_ready_OutputPort(FwIndexType portNum)
void log_WARNING_HI_NoBuffers_ThrottleClear()
Reset throttle value for NoBuffers.
Channel ID for BytesRecv.
Implementation of malloc based allocator.
void set_recv_OutputPort(FwIndexType portNum, Drv::InputByteStreamDataPort *port)
Connect port to recv[portNum].
Channel ID for BytesSent.
void tlmWrite_BytesSent(FwSizeType arg, Fw::Time _tlmTime=Fw::Time()) const
void init()
Initialization function.
Fw::Buffer allocate_out(FwIndexType portNum, FwSizeType size)
Invoke output port allocate.
void lock()
lock the mutex and assert success
void log_WARNING_HI_ReadError_ThrottleClear()
Reset throttle value for ReadError.
SerializeStatus serializeTo(SerialBufferBase &buffer, Endianness mode=Endianness::BIG) const override
Serialize the contents of this object to a buffer.
void log_WARNING_HI_ConfigError(const Fw::StringBase &device, I32 error) const
static constexpr FwIndexType getNum_send_InputPorts()