#include "example.h"
#define BUFFER_SIZE 100
#define NUM_REC 4
void udpInit(void);
void udpClose(int socket);
int main(void)
{
HMXF_SERVER server =0;
HMXF_CHANNEL txChannel=0, rxChannel=0;
HMXF_BUFFER rxBuffer=0,txBuffer=0;
struct sockaddr_in rxPort;
int rxPortSocket=0;
char receivedStrg[BUFFER_SIZE] ="",send_buffer[BUFFER_SIZE]="";
char temp_buffer[BUFFER_SIZE]="";
char * pEnd;
uint64 i=0,j=0,record=0, parity=0, sdi=0, ssm=0, status=0, bytesCount=0;
uint64 delay100ms = 100000, msgCount=0, usedBytes=0, freeBytes=0;
int labelArray[NUM_REC], dataRecArray[NUM_REC];
uint64 labelArrayUint64[NUM_REC], dataRecArrayUint64[NUM_REC];
uint32 rc=0;
int bytes_received=0,bytes_sent=0;
size_t client_length=0;
memset(labelArray, 0, sizeof(labelArray));
memset(dataRecArray, 0, sizeof(dataRecArray));
memset(labelArrayUint64, 0, sizeof(labelArrayUint64));
memset(dataRecArrayUint64, 0, sizeof(dataRecArrayUint64));
if(!rc)
if (!rc)
if(!rc)
rc =
mxfChannelGet(server, MXF_CLASS_A429, MXF_SCLASS_TX_CHANNEL, MXF_MODULE_A429_EH, 0, &txChannel);
if(!rc)
rc =
mxfChannelGet(server, MXF_CLASS_A429, MXF_SCLASS_RX_CHANNEL, MXF_MODULE_A429_EH, 0, &rxChannel);
if(!rc)
if (!rc)
if (!rc)
if (!rc)
{
if (!txRec429)
rc = MAXT_ERROR_MEM;
}
if (!rc)
{
if (!rxRec429)
rc = MAXT_ERROR_MEM;
}
if (!rc)
if (!rc)
{
if (!rc)
printf("\nAcquisition started\n\r");
}
if(!rc)
{
memset((void*)&rxPort, '\0', sizeof(struct sockaddr_in));
client_length = sizeof(struct sockaddr_in);
rxPort.sin_family = AF_INET;
rxPort.sin_addr.s_addr = htonl(INADDR_ANY);
rxPort.sin_port = htons(8888);
udpInit();
rxPortSocket = (int)socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(rxPortSocket == -1)
{
printf("Could not create socket.\n");
}
if(!rc)
rc = bind(rxPortSocket, (struct sockaddr*)&rxPort, sizeof(struct sockaddr_in));
if(rc!=0)
{
printf("Could not bind name to socket.\n");
udpClose(rxPortSocket);
}
printf("Waiting for datagram...\n");
bytes_received = recvfrom(rxPortSocket, receivedStrg, BUFFER_SIZE, 0, (struct sockaddr*)&(rxPort), (socklen_t*)&client_length);
if(bytes_received != -1)
{
printf("Datagram received.\n");
i=0;
do
{
if(receivedStrg[i]=='L')
{
j=0;
pEnd = &receivedStrg[i+1];
while(pEnd[1] != 'D')
{
labelArray[j] = (int)(strtol(pEnd, &pEnd, 10));
j++;
}
}
if(receivedStrg[i]=='D')
{
j=0;
pEnd = &receivedStrg[i+1];
while(pEnd[1] != '\0')
{
dataRecArray[j] = (int)(strtol(pEnd, &pEnd, 10));
j++;
}
}
i++;
} while(receivedStrg[i] != '\0');
}
}
rec = txRec429;
for (record=0; record<NUM_REC && !rc; record++)
{
rec->control = 0;
rec->repeatCount = 1;
rec->reserved = 0;
sdi = 1;
ssm = 0;
parity = VMXF_A429_PARITY_ODD;
rc =
mxfA429ArwCompose(labelArray[record], sdi, dataRecArray[record], ssm, parity, &rec->data);
if(!rc)
}
if(!rc)
do
{
if(!rc)
}while (msgCount!=0 && !rc);
if(!rc)
rc =
mxfA429RxAcqRead(rxBuffer, 0, BUFFER_SIZE, &status, &msgCount, &bytesCount, rxRec429);
recPtr = rxRec429;
for (record=0; record<msgCount && !rc; record++)
{
rc =
mxfA429ArwDecompose(recPtr->data, &labelArrayUint64[record], &sdi, &dataRecArrayUint64[record], &ssm, &parity);
if(!rc)
}
if(!rc)
{
strcat(send_buffer, "L");
for(i=0; i<NUM_REC; i++)
{
sprintf(temp_buffer, " %llu", labelArrayUint64[i]);
strcat(send_buffer, temp_buffer);
}
strcat(send_buffer, " D");
for(i=0; i<NUM_REC; i++)
{
sprintf(temp_buffer, " %llu", dataRecArrayUint64[i]);
strcat(send_buffer, temp_buffer);
}
printf("Sending datagram...\n");
client_length = sizeof(struct sockaddr_in);
bytes_sent = sendto(rxPortSocket, send_buffer, (int)strlen(send_buffer) + 1, 0, (struct sockaddr*)&rxPort, (int)client_length);
if(bytes_sent == -1)
{
printf("Error sending datagram.\n");
udpClose(rxPortSocket);
}
else
printf("Datagram sent successfully.\n");
}
if(rxPortSocket)
udpClose(rxPortSocket);
if (!rc)
if (!rc)
{
if (!rc)
printf("\nAcquisition stopped\n\r");
}
if (rc)
{
char buffer[256];
printf("%s\n", buffer);
}
printf("\nTerminating\n");
printf("\n\nPress a key to terminate\n");
getchar();
return rc;
}
void udpInit(void)
{
#ifdef _linux
#else
WSADATA wsaData = { 0 };
int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != 0)
{
wprintf(L"WSAStartup failed: %d\n", iResult);
return;
}
#endif
}
void udpClose(int socket)
{
#ifdef _linux
shutdown(socket, SHUT_RDWR);
close(socket);
#else
closesocket(socket);
WSACleanup();
#endif
}