MX Foundation 4
Self-Test

A self-test function is available to perform a self-test of a pair of Tx-Rx ARINC 429 channels. This function can easily support devices and modules that have the same number of Tx and Rx ARINC 429 channels.
A Tx-Rx pair is defined as followed: the first Tx goes with the first Rx, the second Tx with the second Rx and so on. A Tx-Rx pair can be located on the same connector or different connectors.

When Tx-Rx pair is located on the same connector, an external loopback kit can be purchased separately from MAX Technologies. The self-test can also be performed without an external loopback in that configuration.

When Tx-Rx pair is located on different connectors, a user-made external loopback is necessary. This external loopback must connect the Tx-Rx pair(s) to be tested. In the case of FlexMulti devices with 64 dedicated Rx ARINC 429 channels (FM664-64, FM429-64, FM-A64-C2-F2-M2-S6, FM-A64-C2-M2 and FM-A64-C2-M2-S6), this function is supported with an external loopback configured this way:

Loopback
ARINC 429 RX0-15 –> MULTI TX0
ARINC 429 RX16-31 –> MULTI TX1
ARINC 429 RX32-47 –> MULTI TX2
ARINC 429 RX48-63 –> MULTI TX3
MULTI RX0 –> MULTI TX0
MULTI RX1 –> MULTI TX1
...
MULTI RX7 –> MULTI TX7

In the case of a module with only transmitters you will need another module with exactly the same number of receivers. In the case of a module with only receivers you will need another module with exactly the same number of transmitters. Modules with Tx and Rx channels must be located first, followed by modules with only transmitters and finally modules with only receivers.
If your setup doesn't fall into one of those configurations, you will need to make your own self-test function by using the transmit and receive function of the API.

Example

The code below shows how to perform a self-test on all ARINC 429 ports using an external loopback.

ar429_selftest.c

uint32 rc;
HMXF_SERVER server=0;
HMXF_DEVICE device=0;
uint64 result=0;
char info[256]="";
char diagnostic[256]="";
uint64 port;
int testCnt=0;
int failCnt=0;
...
for(port=0; !rc; port++) {
printf("mxfSelfTestARINC429(port #%"PRIu64") ... ", port);
rc=mxfSelfTestARINC429(device, port, MXF_SELFTEST_LEVEL_QUICK, VMXF_ENABLE, &result, info, diagnostic);
if(rc==MAXT_ERROR_PORT_NOT_FOUND) { rc=0; printf("\r \r"); break; }
printf("\n");
testCnt++; if(rc || result) failCnt++;
if(rc) {
printf(" ERROR = 0x%08X \n", rc);
}
else {
printf(" info = %s \n", info);
printf(" Result = %s \n", result?"FAILED":"PASSED");
if(result) {
printf(" diagnostic = %s \n", diagnostic);
}
}
printf(" \n");
}
printf(" --------------------------------------- \n");
printf(" TEST %s ", failCnt?"FAILED":"PASSED");
if(failCnt) {
printf("(%u of %u tests failed) \n", failCnt, testCnt);
}
else {
printf("\n");
}
printf(" --------------------------------------- \n");
printf("\n");
...
Updated 10/23/2023