#include "example.h"
#define MAX_TX_RECORDS_TO_TRANSMIT 8
#define EX_USER_COMMAND_ID_START 0x80000001
#define EX_USER_COMMAND_ID_STOP 0x80000002
#define EX_USER_COMMAND_ID_READ 0x80000003
#define EX_USER_COMMAND_ID_TERMINATE 0x80000005
#define EX_USER_COMMAND_ACK 0xA5A5A5A5
#define RT_ADDRESS 1
#define RT_SUBADDRESS 2
typedef struct
{
HMXF_SERVER server;
HMXF_DEVICE device;
HMXF_MODULE module1553;
HMXF_CHANNEL bcChannel;
HMXF_CHANNEL bmChannel;
HMXF_BUFFER commTxBuffer;
HMXF_BUFFER commRxBuffer;
HMXF_BUFFER commTxUpdateDataBuffer;
}
TEST_INFO;
typedef struct
{
uint32 command;
uint32 paramNum;
uint32 param[32];
}
EX_COMMAND;
typedef struct
{
uint64 txBufferSize;
HMXF_BUFFER bcBuffer;
}
EVENT_INFO;
uint32 initHandler(HMXF_SERVER server, uint64 deviceIndex, uint64 moduleIndex, uint64 channelIndex, uint64 attrib, uint64* value);
uint32 commandSend(HMXF_BUFFER txBuffer, HMXF_BUFFER rxBuffer, EX_COMMAND* cmd);
uint32 commandRead(HMXF_BUFFER rxBuffer, uint64* readCnt, EX_COMMAND* cmd);
uint32 embeddedPart(TEST_INFO info);
uint32 eventHandler(HMXF_HANDLE asyncEvent, void* param);
int
main(void)
{
TEST_INFO info;
uint32 rc;
uint64 moduleCount=0;
uint64 channelCount=0;
if(!rc)
if(!rc)
{
printf("Starting ...\n\r");
}
if (!rc)
if(!rc)
if(!rc && moduleCount)
rc =
mxfModuleChannelAllGet(info.module1553, MXF_CLASS_MIL1553, MXF_SCLASS_BC_CHANNEL, 1, &channelCount, &info.bcChannel);
if(!rc && channelCount)
rc =
mxfModuleChannelAllGet(info.module1553, MXF_CLASS_MIL1553, MXF_SCLASS_BM_CHANNEL, 1, &channelCount, &info.bmChannel);
if(!rc && !channelCount)
rc = MAXT_ERROR_NOT_FOUND;
if(!rc)
rc = embeddedPart(info);
if(rc)
{
char errorString[200];
sprintf (errorString,"ERROR # 0x%X", rc);
printf("%s\n\r", errorString);
}
printf("Terminating ...\n\r");
return rc;
}
uint32
initHandler(HMXF_SERVER server, uint64 deviceIndex, uint64 moduleIndex, uint64 channelIndex, uint64 attrib, uint64* value)
{
server=server;
deviceIndex=deviceIndex;
moduleIndex=moduleIndex;
channelIndex=channelIndex;
if(attrib == KMXF_DEVICE_COMM_QUEUE_NUM)
{
*value = 3;
return TRUE;
}
return FALSE;
}
uint32
commandSend(HMXF_BUFFER txBuffer, HMXF_BUFFER rxBuffer, EX_COMMAND* cmd)
{
uint64 readCnt=0;
uint64 byteCnt;
uint32 rc=0;
memset(&msg, 0, sizeof(msg));
if(!rc && rxBuffer)
{
while(!rc)
{
if(!rc && readCnt)
{
if((msg.
dataSize >= 8) && (msg.
data[0]==EX_USER_COMMAND_ACK))
{
break;
}
}
}
}
return rc;
}
uint32
commandRead(HMXF_BUFFER rxBuffer, uint64* readCnt, EX_COMMAND* cmd)
{
uint64 byteCnt;
uint32 rc;
memset(cmd, 0, sizeof(*cmd));
if(!rc && *readCnt)
{
cmd->command = msg.
data[0];
cmd->paramNum = msg.
data[1];
memcpy(cmd->param, &msg.
data[2], cmd->paramNum*4);
}
return rc;
}
uint32
embeddedPart(TEST_INFO info)
{
EX_COMMAND cmd;
HMXF_BUFFER bcBuffer=0;
uint32 rc;
int run=TRUE;
size_t txBufferSize=0;
uint64 msgCount=0;
HMXF_ASYNCEVENT asyncEvent=0;
EVENT_INFO eventInfo;
HMXF_BUFFER bmBuffer=0;
size_t rxBufferSize=0;
uint64 status=0;
uint64 byteCount=0;
uint64 data;
uint64 word;
memset(&eventInfo, 0, sizeof(eventInfo));
if(!rc)
if(!rc)
if(!rc)
if(!rc)
{
txBufferSize = 1*1024;
if(!rc)
{
if(!eventInfo.bcHostBuffer)
rc = MAXT_ERROR_MEM;
}
}
if(!rc)
{
txBufferSize = 10*1024;
if(!commTxHostBuffer)
rc = MAXT_ERROR_MEM;
}
if(!rc)
{
eventInfo.txBufferSize = 1*1024;
eventInfo.commTxHostUpdateDataBuffer = (
MXF_EMBEDDED_DATAREC*)malloc((
size_t)eventInfo.txBufferSize);
if(!eventInfo.commTxHostUpdateDataBuffer)
rc = MAXT_ERROR_MEM;
}
if(!rc)
{
rxBufferSize = 10*1024;
if(!rc)
{
if(!bmHostBuffer)
rc = MAXT_ERROR_MEM;
}
}
memset(&condition, 0, sizeof(condition));
condition.
condID = MXF_ASYNCEVENT_COND_COMM_RX_BUFFER_THRESHOLD;
while(!rc && run)
{
rc=commandRead(info.commRxBuffer, &msgCount, &cmd);
if(!rc && msgCount)
{
msgCount=0;
switch(cmd.command)
{
case EX_USER_COMMAND_ID_START:
memset(&minorFrame, 0, sizeof(minorFrame));
if(!rc)
{
}
if(!rc)
{
eventInfo.bcBuffer = bcBuffer;
}
if(!rc)
if(!rc)
if(!rc)
printf("Recorder started !\n\r");
break;
case EX_USER_COMMAND_ID_STOP:
if(!rc)
if(!rc)
if(!rc)
if(!rc)
printf("Recorder stopped !\n\r");
break;
case EX_USER_COMMAND_ID_READ:
if(!rc)
{
printf("Reading ...\n\r");
rc=
mxfMIL1553RxAcqRead(bmBuffer, 0, rxBufferSize, &status, &msgCount, &byteCount, bmHostBuffer);
if(!rc)
{
printf("Message received count = %llu \n\r", msgCount);
rec = bmHostBuffer;
for(data=0; data<msgCount && !rc; data++)
{
printf(
" %02llu: Timetag=%012llu, Size=%u, Data=", data, rec->
timeTag, rec->
dataSize);
for(word=0; word<rec->
dataSize/2; word++)
printf(
"%04X", rec->
data[word]);
printf("\n\r");
}
}
}
break;
case EX_USER_COMMAND_ID_TERMINATE:
run=FALSE;
printf("App terminated !\n\r");
break;
}
cmd.command = EX_USER_COMMAND_ACK;
cmd.paramNum = 1;
cmd.param[0] = rc;
commandSend(info.commTxBuffer, 0, &cmd);
}
}
if(eventInfo.commTxHostUpdateDataBuffer)
free(eventInfo.commTxHostUpdateDataBuffer);
if(commTxHostBuffer)
free(commTxHostBuffer);
if(bmHostBuffer)
free(bmHostBuffer);
return rc;
}
uint32 eventHandler(HMXF_HANDLE asyncEvent, void* param)
{
EVENT_INFO* eventInfo=(EVENT_INFO*)param;
uint32 rc=0;
uint64 eventCount;
uint64 msg, msgCount, byteCount;
if(!rc && eventCount)
{
{
case MXF_ASYNCEVENT_COND_COMM_RX_BUFFER_THRESHOLD:
if(!rc)
{
memset(eventInfo->bcHostBuffer, 0, (size_t)eventInfo->txBufferSize);
mil1553Rec = eventInfo->bcHostBuffer;
commRec = eventInfo->commTxHostUpdateDataBuffer;
for(msg=0; msg<msgCount; msg++)
{
}
}
break;
}
}
if(rc)
printf("event handler rc=0x%08x\n\r", rc);
return rc;
}