#include "example.h"
#define BUFFER_SIZE 4096
#define EX_MAX_PARAM 8
#define EX_USER_COMMAND_ID_INIT 0x0
#define EX_USER_COMMAND_ID_START_TX 0x1
#define EX_USER_COMMAND_ID_STOP_TX 0x2
#define EX_USER_COMMAND_ID_START_ACQ 0x3
#define EX_USER_COMMAND_ID_STOP_ACQ 0x4
#define EX_USER_COMMAND_ID_TERMINATE 0x5
#define EX_USER_COMMAND_ACK 0xA5A5A5A5
#define TX_INDEX 1
#define RX_INDEX 0
HMXF_CHANNEL rxChannel=0;
HMXF_CHANNEL txChannel=0;
HMXF_BUFFER rx429Buffer=0;
HMXF_BUFFER tx429Buffer=0;
HMXF_ASYNCEVENT asyncEvent=0;
HMXF_SCHED schedule=0;
HMXF_SCHED_MSG schedmsg;
uint32 acqStarted=FALSE;
uint32 bRun=TRUE;
typedef struct
{
uint32 command;
uint32 paramNum;
uint32 param[EX_MAX_PARAM];
}
EX_COMMAND;
typedef struct
{
HMXF_MODULE module;
HMXF_BUFFER txCommBuffer;
}
ASYNC_EVENT_PARAM;
uint32 asyncEventHandler(HMXF_ASYNCEVENT asyncEvent, void* param);
uint32 CommandExecute(HMXF_BUFFER txCommBuffer, HMXF_MODULE module, EX_COMMAND *cmd);
uint32 CommandSend(HMXF_BUFFER txCommBuffer, EX_COMMAND *cmd);
int main(void)
{
HMXF_SERVER server;
HMXF_DEVICE device=0;
HMXF_MODULE module=0;
uint64 count=0;
HMXF_BUFFER rxCommBuffer=0;
HMXF_BUFFER txCommBuffer=0;
char buffer[64];
uint32 rc=0;
ASYNC_EVENT_PARAM asyncEventParam;
if (rc)
{
printf("\nCannot connect locally to server (0x%08x)\n", rc);
exit(0);
}
printf("\nLoading\n");
if (!rc)
if (!rc)
if(!rc && !count)
rc = MAXT_ERROR_NOT_FOUND;
if (!rc)
if (!rc)
if(!rc)
{
if(!hostBuffer)
rc = MAXT_ERROR_MEM;
}
if(!rc)
{
asyncEventParam.txCommBuffer = txCommBuffer;
asyncEventParam.hostBuffer = hostBuffer;
asyncEventParam.module = module;
}
if(!rc)
{
memset(&asyncEventInfoComm, 0, sizeof(asyncEventInfoComm));
asyncEventInfoComm.
condID = MXF_ASYNCEVENT_COND_COMM_RX_BUFFER_THRESHOLD;
}
while (bRun && !rc)
{
}
if(!rc)
if(!rc)
if(rc)
{
printf("\n\r%s\n\r", buffer);
}
if(device)
if (server)
{
}
printf("Stopped\n");
return 0;
}
uint32 asyncEventHandler(HMXF_ASYNCEVENT hAsyncEvent, void* param)
{
uint64 maxCount=64, pendingCount;
uint64 i;
uint32 rc;
uint64 readCnt, byteCnt;
ASYNC_EVENT_PARAM *asyncEventParam=(ASYNC_EVENT_PARAM *)param;
for (i=0; !rc && i<pendingCount; i++)
{
switch(pendingList[i].condID)
{
case MXF_ASYNCEVENT_COND_COMM_RX_BUFFER_THRESHOLD:
{
rc =
mxfDeviceCommBufferRead(pendingList[i].condition.commBufferThreshold.buffer, 1,
sizeof(msg), &readCnt, &byteCnt, &msg);
if (!rc && readCnt)
rc = CommandExecute(asyncEventParam->txCommBuffer, asyncEventParam->module, (EX_COMMAND*)& msg.
data);
break;
}
case MXF_ASYNCEVENT_COND_RXACQ_BUFFER_THRESHOLD:
readAcquisition(pendingList[i].condition.rxAcqBufferThreshold.buffer, asyncEventParam->hostBuffer);
break;
default:
printf("Unknown condID 0x%llx)", pendingList[i].condID);
break;
}
}
return rc;
}
uint32 CommandExecute(HMXF_BUFFER txCommBuffer, HMXF_MODULE module, EX_COMMAND *cmd)
{
EX_COMMAND ack;
uint32 rc=0;
switch(cmd->command)
{
case EX_USER_COMMAND_ID_INIT:
printf("Starting\n\r");
break;
case EX_USER_COMMAND_ID_START_TX:
{
uint32 label, sdi, data, ssm, parity;
if (cmd->paramNum == 0)
{
printf("Error: no channel index passed to transmission");
rc = MAXT_ERROR_DATA;
}
if (!rc)
{
printf("Starting transmission on channel %d\n\r", cmd->param[0]);
}
if(!rc)
if(!rc)
if(!rc)
if(!rc)
if(!rc)
{
label = 1;
sdi = 0;
data = 0x7fe;
ssm = 1;
parity = VMXF_A429_PARITY_ODD;
if(!rc)
}
if(!rc)
if(!rc)
printf("Periodic transmission running\n\r");
break;
}
case EX_USER_COMMAND_ID_START_ACQ:
{
if (cmd->paramNum == 0)
{
printf("Error: no channel index passed to acquisition");
rc = MAXT_ERROR_DATA;
}
if (!rc)
{
printf("Starting acquisition on channel %d\n\r", cmd->param[0]);
}
if(!rc)
if(!rc)
{
memset(&asyncEventInfoAcq, 0, sizeof(asyncEventInfoAcq));
asyncEventInfoAcq.
condID = MXF_ASYNCEVENT_COND_RXACQ_BUFFER_THRESHOLD;
}
if (!rc)
if (!rc)
{
if (!rc)
{
printf("Acquisition running\n\r");
acqStarted=TRUE;
}
}
break;
}
case EX_USER_COMMAND_ID_STOP_TX:
{
if(schedule)
{
printf("Stopping periodic transmission\n\r");
if(rc)
printf("mxfTxPeriodicScheduleFree rc=0x%08x\n", rc);
}
break;
}
case EX_USER_COMMAND_ID_STOP_ACQ:
{
printf("Stopping acquisition\n\r");
if (rx429Buffer)
{
if(!rc)
if(!rc)
if (!rc)
printf("Acquisition stopped\n\r");
}
acqStarted=FALSE;
break;
}
case EX_USER_COMMAND_ID_TERMINATE:
{
printf("Terminating\n\r");
bRun=FALSE;
break;
}
default:
break;
}
#if 1
printf("Exit rc=0x%08x\n", rc);
#endif
ack.command = EX_USER_COMMAND_ACK;
ack.paramNum = 4;
ack.param[0] = rc;
CommandSend(txCommBuffer, &ack);
return rc;
}
uint32 CommandSend(HMXF_BUFFER txCommBuffer, EX_COMMAND *cmd)
{
uint32 rc;
memset(&msg, 0, sizeof(msg));
if (rc)
printf("Error writing: rc=0x%08x\n", rc);
return rc;
}
{
uint64 status, msgsCount, bytesCount;
uint64 label, sdi, data, ssm, parity;
uint64 j;
uint32 rc;
rc =
mxfA429RxAcqRead(buffer, 0, BUFFER_SIZE, &status, &msgsCount, &bytesCount, hostBuffer);
if(!rc)
{
printf("Read %llu messages\n\r", msgsCount);
for (j=0; !rc && j<msgsCount; j++)
{
if(!rc)
{
printf("%02llu: Timetag %llu - ARINC word=[%03llo,%lld,%05llX,%lld,%s]\n",
j, recPtr->
timeTag, label, sdi, data, ssm, (parity==VMXF_A429_PARITY_ODD)?
"ODD":
"EVEN");
if(!rc)
}
}
}
if(rc)
printf("Acquisition read failed; rc=0x%08x\n", rc);
return rc;
}