Main Content


Send data through communication channel



errFlag = rtIOStreamSend(streamID, src, size, sizeSent) sends data through a communication stream.

The API for rtIOStream functions is independent of the physical layer across which you send the data, for example, RS232, Ethernet, or Controller Area Network (CAN). The choice of physical layer affects the achievable data rates for communication between your development computer and target processor.

For a processor-in-the-loop (PIL) application, there is no minimum data rate requirement. The higher the data rate is, the faster the simulation runs.

A communications device driver can require additional hardware-specific or channel-specific configuration parameters. For example:

  • A CAN channel can require the specification of the CAN node that is used.

  • A TCP/IP channel can require the configuration of a port or static IP address.

  • A CAN channel can require the specification of the CAN message ID and priority.

When you implement the rtIOStream driver functions, provide this configuration data, for example, by hard-coding the data or by supplying arguments to rtIOStreamOpen.


Send and Receive Data from Processor

This code from rtiostreamtest.c shows how to send and receive data from a target processor.

static void blockingIO(int send, unsigned long numMemUnits)
    size_t sizeToTransfer = (size_t) numMemUnits; 
    size_t sizeTransferred;
    IOUnit_T * ioPtr = (IOUnit_T *) &buff[0];
    int status;

    if (numMemUnits > BUFFER_SIZE)
        AckCode = stat_notEnoughSpace;
        AckArg0 = BUFFER_SIZE;

   /* map to bytes */
   sizeToTransfer *= MEM_UNIT_BYTES;

   while (sizeToTransfer > 0) {
      sizeTransferred = 0;
      /* Do the low level call */
      status = send ?
         rtIOStreamSend(streamID, ioPtr, sizeToTransfer, &sizeTransferred) :
         rtIOStreamRecv(streamID, ioPtr, sizeToTransfer, &sizeTransferred);

      if (status != RTIOSTREAM_NO_ERROR) {
         if (AckCode == stat_OK) {
            AckCode = stat_RTIOSTREAM_ERROR;
            AckArg0 = data_counter;
      else {
         sizeToTransfer -= sizeTransferred;
         ioPtr += sizeTransferred;

Input Arguments

collapse all

Handle to the stream returned by a previous call to rtIOStreamOpen.

Pointer to the start of the buffer that contains a data array for transmission.

Size of data to transmit from the source buffer. For byte-addressable architectures, size is measured in bytes. Some DSP architectures are not byte-addressable. In these cases, size is measured in number of WORDs, where sizeof(WORD) == 1.

Output Arguments

collapse all

If the function runs without errors, it returns zero. Otherwise, it returns -1.

The rtiostream.h file defines these macros:


Size of transmitted data, which is less than or equal to size. If data is not transmitted, value is zero.

Introduced in R2009a