MX Foundation 4
Transmission with Record Relative Timing

Transmission with relative record timing means the records are scheduled one after another based on the delta time tag set.

The option MXF_TXAPERIODIC_FLAG_USE_RECORD_RELATIVE_TIME is used to perform this function.

For instance, for an array of n records to transmit, the records' transmit timing is as follows:

Time record 1 = record 1 time tag (offset from current time)
Time record 2 = Time record 1 + (record 2 time tag - record 1 time tag)
Time record 3 = Time record 2 + (record 3 time tag - record 2 time tag)
......
Time record n = Time record n-1 + (record n time tag - record n-1 time tag)

Each time tag becomes relative to the previous record sent.

ar429_aperiodic.c

#define BUFFER_SIZE 4096 // 4KB
#define MAX_TX_RECORDS_TO_TRANSMIT 8
HMXF_SERVER server;
HMXF_CHANNEL txChannel;
HMXF_BUFFER txBuffer=0;
MXF_A429_DATAREC *rec429=NULL;
uint32 label, sdi, data, ssm, parity;
uint32 record;
uint64 currentTime;
uint64 delay100ms = 100000;
uint32 rc;
...
// Sets timebase to 64-bit microseconds
if (!rc)
rc = mxfSystemTimeBaseSet(server, MXF_TIMEBASE_DEVICE_USEC);
// Allocates Aperiodic TX static buffer for HIGH priority queue
if (!rc)
rc = mxfTxAperiodicBufferAlloc(txChannel, MXF_TXAPERIODIC_PRIORITY_HIGH, BUFFER_SIZE, &txBuffer, NULL);
// Allocates host buffer
if (!rc)
{
rec429 = (MXF_A429_DATAREC*)malloc(BUFFER_SIZE);
if (!rec429)
rc = MAXT_ERROR_MEM;
}
// Sets the records: ARINC 429 LABEL=010, SDI=1
rec = rec429;
for (record=0, currentTime=delay100ms; record < MAX_TX_RECORDS_TO_TRANSMIT && !rc; record++)
{
rec->timeTag = currentTime+((record+1)*10000LL);
rec->control = 0;
rec->repeatCount = 1;
rec->reserved = 0;
label = 010;
sdi = 1;
data = record*64;
ssm = 0;
parity = VMXF_A429_PARITY_ODD;
rc = mxfA429ArwCompose(label, sdi, data, ssm, parity, &rec->data);
if(!rc)
rc = mxfA429NextDataRecordPtrGet(rec, &rec);
}
// Transmits the array of records
if (!rc)
rc = mxfA429TxAperiodicWrite(txBuffer, MXF_TXAPERIODIC_FLAG_USE_RECORD_RELATIVE_TIME, 0, MAX_TX_RECORDS_TO_TRANSMIT, rec429);
if (rec429)
free(rec429);
...
Updated 10/23/2023