MX Foundation 4
Basic Transmission

The basic transmission method consists in sending one or more data records on the data bus and does not care about any timing consideration between the records.

This is the most basic method of sending data. The example below shows all the steps required to build a basic ARINC 717 transmission function.

  • How to initialize and set a transmit channel was discussed in a previous section.
  • Allocate the specific aperiodic buffer for transmission
  • Build the data record.
    • The time tag is set to 0 : transmit as soon as possible.
    • The repeat count is set to 1 : the record will be not be repeated.
  • The records in the buffer must be indexed by using the mxfA717NextDataRecordPtrGet() function.
  • Finally, the mxfA717TxAperiodicWrite() function with MXF_TXAPERIODIC_FLAG_DEFAULT flag must be used.

Example

ar717.c

#define MAX_TX_SUBFRAMES_TO_TRANSMIT 4
uint32 rc;
HMXF_CHANNEL txChannel;
size_t txBufferSize;
HMXF_BUFFER txBuffer;
uint64 data;
uint64 word, subframeSize=VMXF_A717_SUBFRAME_SIZE_128;
...
// Allocates buffer for tx data
if(!rc)
{
txBufferSize = MAX_TX_SUBFRAMES_TO_TRANSMIT*sizeof(MXF_A717_DATAREC);
// Allocates TX Aperiodic static buffer for HIGH priority queue
rc=mxfTxAperiodicBufferAlloc(txChannel, MXF_TXAPERIODIC_PRIORITY_HIGH, txBufferSize, &txBuffer, NULL);
// Host buffer allocation
if(!rc)
{
txHostBuffer = (MXF_A717_DATAREC*) calloc(1, txBufferSize);
if(!txHostBuffer)
rc = MAXT_ERROR_MEM;
}
}
if(!rc)
{
// Prepares string array
rec = txHostBuffer;
for(data=0; data<MAX_TX_SUBFRAMES_TO_TRANSMIT; data++)
{
rec->timeTag = 0;
rec->control = 0;
rec->dataSize = 2 * (uint32)subframeSize; // 16 bits per word in subframe
rec->repeatCount = 1;
rec->reserved = 0;
for(word=0; word < subframeSize; word++)
{
if (word == 0)
{
// 1st word of each subframe has to be a sync word
// sync words are:
// - 0x247 for subframe #0
// - 0x5B8 for subframe #1
// - 0xA47 for subframe #2
// - 0xDB8 for subframe #3
switch (data%4)
{
case 0:
rec->data[word] = 0x247;
break;
case 1:
rec->data[word] = 0x5B8;
break;
case 2:
rec->data[word] = 0xA47;
break;
case 3:
rec->data[word] = 0xDB8;
break;
default:
break;
}
}
else
rec->data[word] = (uint16)(0x11*word);
}
rc = mxfA717NextDataRecordPtrGet(rec, &rec);
}
}
if(!rc)
{
printf("Transmitting ...\n");
// Transmits records with default option
rc = mxfA717TxAperiodicWrite(txBuffer, MXF_TXAPERIODIC_FLAG_DEFAULT, 0, MAX_TX_SUBFRAMES_TO_TRANSMIT, txHostBuffer);
}
...
Updated 10/23/2023