#include "example.h"
#define BUFFER_SIZE (512*1024) // 512KB
#define MAX_TX_RECORDS_TO_TRANSMIT 8
uint32 TXCanbusStartAperiodicTransmissionDefault(HMXF_BUFFER txBuffer,
MXF_CANBUS_DATAREC *recCanbus);
uint32 TXCanbusStartAperiodicTransmissionAbsolute(HMXF_DEVICE device, HMXF_BUFFER txBuffer,
MXF_CANBUS_DATAREC *recCanbus);
uint32 TXCanbusStartAperiodicTransmissionRecordAbsolute(HMXF_DEVICE device, HMXF_BUFFER txBuffer,
MXF_CANBUS_DATAREC *recCanbus);
uint32 TXCanbusStartAperiodicTransmissionRecordRelative(HMXF_BUFFER txBuffer,
MXF_CANBUS_DATAREC *recCanbus);
int main(void)
{
uint32 rc;
HMXF_SERVER server;
HMXF_DEVICE device=0;
HMXF_MODULE module=0;
uint64 count=0;
HMXF_CHANNEL channel[2]={0};
HMXF_BUFFER rxBuffer=0;
HMXF_BUFFER txBuffer=0;
uint64 status, txErrorCnt, rxErrorCnt;
int chn;
#ifdef LOCAL
#else
#endif
if (rc)
{
printf("Failed to connect; rc=0x%08x", rc);
printf("\nPress a key to terminate\n");
getchar();
return 0;
}
printf("\nStarting\n");
if(rc == MAXT_ERROR_ANOTHER_PROCESS_RUNNING)
if (!rc)
if (!rc)
if (!rc && count)
if(!rc && !count)
rc = MAXT_ERROR_NOT_FOUND;
if (!rc)
for (chn = 0; chn<2 && !rc; chn++)
{
if (!rc)
}
if (!rc)
if (!rc)
if (!rc)
{
if (!recCanbus)
rc = MAXT_ERROR_MEM;
}
if (!rc)
if (!rc)
if (!rc)
{
if (!rc)
printf("\nAcquisition started\n\r");
}
if (!rc)
{
rc = TXCanbusStartAperiodicTransmissionDefault(txBuffer, recCanbus);
if (!rc)
rc = RXCanbusReadAcquisitionData(rxBuffer, recCanbus);
if (!rc)
rc = TXCanbusStartAperiodicTransmissionAbsolute(device, txBuffer, recCanbus);
if (!rc)
rc = RXCanbusReadAcquisitionData(rxBuffer, recCanbus);
if (!rc)
rc = TXCanbusStartAperiodicTransmissionRecordAbsolute(device, txBuffer, recCanbus);
if (!rc)
rc = RXCanbusReadAcquisitionData(rxBuffer, recCanbus);
if (!rc)
rc = TXCanbusStartAperiodicTransmissionRecordRelative(txBuffer, recCanbus);
if (!rc)
rc = RXCanbusReadAcquisitionData(rxBuffer, recCanbus);
}
if (!rc)
if (!rc)
{
if (!rc)
printf("\nAcquisition stopped\n\r");
}
for (chn = 0; chn<2 && !rc; chn++)
{
if(!rc)
{
char s[128];
if(status & MXF_CANBUS_BUS_STATUS_ERROR_OFF)
strcpy(s, "OFF (Error)");
else if (status & MXF_CANBUS_BUS_STATUS_ERROR_PASSIVE)
strcpy(s, "Error Passive");
else if (status & MXF_CANBUS_BUS_STATUS_ON)
strcpy(s, "ON");
else
strcpy(s, "OFF");
printf("txErrorCnt=%"PRIu64", rxErrorCnt=%"PRIu64", status=%s\n", txErrorCnt, rxErrorCnt, s);
}
if (!rc)
}
if (rc)
{
char buffer[256];
printf("%s\n", buffer);
}
printf("\nTerminating\n");
for (chn = 0; chn<2; chn++)
if (rxBuffer)
if (txBuffer)
if (recCanbus)
free(recCanbus);
printf("\nPress enter to terminate\n");
getchar();
return rc;
}
{
uint64 status, msgsCount, bytesCount;
uint64 index;
uint32 rc, byte;
rc =
mxfCanBusRxAcqRead(rxBuffer, 0, BUFFER_SIZE, &status, &msgsCount, &bytesCount, recCanbus);
for (index =0; index<msgsCount && !rc; index++)
{
printf(
" %03"PRIu64
": Timetag=%012"PRIu64
", Size=%u", index, recPtr->
timeTag, recPtr->
dataSize);
printf(" OK");
else
printf(" Error");
printf("\n Data=");
for (byte=0; byte<recPtr->
dataSize; byte++)
{
printf(
"%02X ", recPtr->
data[byte]);
}
printf("\n");
}
return rc;
}
uint32 TXCanbusStartAperiodicTransmissionDefault(HMXF_BUFFER txBuffer,
MXF_CANBUS_DATAREC *recCanbus)
{
uint32 record;
uint64 delay100ms = 100*1000*1000;
uint32 rc;
uint32 i;
printf("\nAperiodic transmission (Relative Start Time-Default)\n");
rec = recCanbus;
for (record=0; record<MAX_TX_RECORDS_TO_TRANSMIT; record++)
{
rec->
info = MXF_CANBUS_REC_INFO_EXTENDED | 8;
}
if (!rc)
return rc;
}
uint32 TXCanbusStartAperiodicTransmissionAbsolute(HMXF_DEVICE device, HMXF_BUFFER txBuffer,
MXF_CANBUS_DATAREC *recCanbus)
{
uint32 record, rc;
uint64 delay100ms=100*1000*1000;
uint64 currentTime;
uint32 i;
if (rc)
return rc;
printf("\nAperiodic transmission (Absolute)\n");
rec = recCanbus;
for (record=0; record<MAX_TX_RECORDS_TO_TRANSMIT; record++)
{
if(record == 1)
{
rec->
control |= MXF_CANBUS_TX_REC_CTRL_ERROR_INJ | MXF_CANBUS_TX_REC_CTRL_SINGLE_SHOT;
}
rec->
info = MXF_CANBUS_REC_INFO_EXTENDED | 4;
}
rc =
mxfCanBusTxAperiodicWrite(txBuffer, MXF_TXAPERIODIC_FLAG_ABSOLUTE_START_TIME, currentTime+delay100ms, MAX_TX_RECORDS_TO_TRANSMIT, recCanbus);
if (!rc)
return rc;
}
uint32 TXCanbusStartAperiodicTransmissionRecordAbsolute(HMXF_DEVICE device, HMXF_BUFFER txBuffer,
MXF_CANBUS_DATAREC *recCanbus)
{
uint32 record;
uint64 currentTime;
uint32 rc;
uint32 i;
printf("\nAperiodic transmission (Absolute with timetag)\n");
if (rc)
return rc;
currentTime+=100*1000*1000;
rec = recCanbus;
for (record=0; record<MAX_TX_RECORDS_TO_TRANSMIT; record++)
{
rec->
timeTag = currentTime+((record+1)*10*1000*1000);
rec->
info = MXF_CANBUS_REC_INFO_EXTENDED | 2;
}
rc =
mxfCanBusTxAperiodicWrite(txBuffer, MXF_TXAPERIODIC_FLAG_USE_RECORD_ABSOLUTE_TIME, 0, MAX_TX_RECORDS_TO_TRANSMIT, recCanbus);
if (!rc)
return rc;
}
uint32 TXCanbusStartAperiodicTransmissionRecordRelative(HMXF_BUFFER txBuffer,
MXF_CANBUS_DATAREC *recCanbus)
{
uint32 record;
uint64 currentTime;
uint32 rc;
uint32 i;
printf("\nAperiodic transmission (Record Relative)\n");
rec = recCanbus;
for (record=0, currentTime=100*1000*1000; record<MAX_TX_RECORDS_TO_TRANSMIT; record++)
{
rec->
timeTag = currentTime+((record+1)*10*1000*1000);
}
rc =
mxfCanBusTxAperiodicWrite(txBuffer, MXF_TXAPERIODIC_FLAG_USE_RECORD_RELATIVE_TIME, 0, MAX_TX_RECORDS_TO_TRANSMIT, recCanbus);
if (!rc)
return rc;
}