MX Foundation 4
Aperiodic Transmission

In order to transmit data using a SAP port you must:

Example

ar664_aperiodicSap.c
The code snippets below demonstrate the basic steps needed to setup a SAP port transmission.

...
// Create the transmission (TX) virtual link
if (!rc)
{
memset(&vlParam, 0, sizeof(MXF_A664_VL_PARAM));
vlParam.direction = MXF_A664_VL_DIR_TX;
vlParam.VLId = vlid;
vlParam.frameType = MXF_A664_FRAME_TYPE_ARINC664;
vlParam.frameSizeMax = 512;
vlParam.dir.Tx.subVlNumber = 1;
vlParam.dir.Tx.bag = 1 * 1000 * 1000; // 1ms
vlParam.dir.Tx.netSelection = MXF_A664_NETSELECT_ALL;
vlParam.dir.Tx.Ede.enable = FALSE;
vlParam.dir.Tx.subVl[0].bufferSize = vlParam.frameSizeMax;
vlParam.dir.Tx.subVl[0].maxBuffers = maxTxRecords;
rc = mxfA664VlCreate(phyChn, &vlParam, &vlTx);
}
// Create the transmission SAP port
if (!rc)
{
inet_pton(AF_INET, DST_IP_ADRS, &srcIpAdrs);
inet_pton(AF_INET, SRC_IP_ADRS, &dstIpAdrs);
dstIpAdrs = ntohl(dstIpAdrs);
memset(&portParam, 0, sizeof(MXF_A664_PORT_PARAM));
portParam.portType = MXF_A664_PORT_TYPE_SAP;
portParam.family = MXF_A664_PORT_FAMILY_IPV4;
portParam.mode = MXF_A664_PORT_MODE_QUEUING;
portParam.type.SAP.srcAddress.port = SRC_UDP_PORT;
portParam.type.SAP.srcAddress.version.IPv4.address = ntohl(srcIpAdrs);
rc = mxfA664PortCreate(vlTx, &portParam, &portTx);
}
...
// Build the Transmit Records
for (recordIdx = 0, data = txRec; recordIdx < maxTxRecords && !rc; recordIdx++)
{
data->control = 0;
data->dataSize = TEST_DATASIZE;
data->repeatCount = 1;
// Index to the base address (LSB byte) for sending
// to a range of host addresses [10.0.0.111 .. 10.0.0.127].
data->type.Sap.ipAddress = dstIpAdrs + recordIdx;
data->type.Sap.udpPort = DST_UDP_PORT;
for (dataIdx = 0; dataIdx < TEST_DATASIZE; dataIdx++)
data->data[dataIdx] = (uint8)((dataIdx + ((recordIdx*TEST_DATASIZE) & 0xff)));
rc = mxfA664NextDataRecordPtrGet(data, &data);
}
// Transmit the data
if (!rc)
{
rc = mxfA664TxAperiodicWrite(portTx, MXF_TXAPERIODIC_FLAG_DEFAULT, 0, maxTxRecords, txRec, &count);
printf("%llu frames transmitted\n\n", count);
// Wait for complete transmission
mxfSleep(500);
}
...
if (!rc)
rc = mxfA664PortRelease(portTx);
...
Updated 10/23/2023