MX Foundation 4
Basic Transmission

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

This is the most basic method to send data. The example below shows all the steps required to build a basic ARINC 708 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 mxfA708NextDataRecordPtrGet() function.
  • Finally, the mxfA708TxAperiodicWrite() function with the MXF_TXAPERIODIC_FLAG_DEFAULT flag must be used.

Example

ar708_aperiodic.c

uint32 rc;
size_t txBufferSize;
HMXF_CHANNEL txChannel;
HMXF_BUFFER txBuffer;
MXF_A708_DATAREC * txHostBuffer;
uint32 delay100ms = 100000000;
uint64 data, word;
...
// Allocates 4 KB buffer for tx data
if(!rc)
{
txBufferSize = 4*1024;
// 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_A708_DATAREC*)calloc(1, txBufferSize);
if(!txHostBuffer)
rc = MAXT_ERROR_MEM;
}
}
...
rec=txHostBuffer;
// In the example below the record are sent back-to-back 100 ms in the future.
printf("\nAperiodic transmission (Relative Start Time-Default)\n");
//Prepares records to send for basic transmission/reception test
for(data=0; data<MAX_TX_RECORDS_TO_TRANSMIT; data++)
{
rec->timeTag = 0;
rec->control = 0;
rec->repeatCount = 1;
rec->manchesterBitErr = 0;
rec->dataSize = 200; //200 bytes corresponds to 1600 bits (see ARINC 708 specification)
for(word=0; word < rec->dataSize/2; word++)
{
switch(word)
{
case 0:
rec->data[word] = 055; // Label 055
break;
case 1:
case 2:
case 3:
rec->data[word] = 0x0000;
break;
default:
rec->data[word] = (uint16)(0x0101*data);
}
}
rc = mxfA708NextDataRecordPtrGet(rec, &rec);
}
if(!rc)
{
printf("Transmitting ...\n");
// Transmits strings on relative start time
rc = mxfA708TxAperiodicWrite(txBuffer, MXF_TXAPERIODIC_FLAG_DEFAULT, delay100ms, MAX_TX_RECORDS_TO_TRANSMIT, txHostBuffer);
}
...
Updated 10/23/2023