I am trying to alter the buffer using snprintf. I have a feeling I am meant to break this up into different sections of processing, as in, receive message, make modifications to buffer, send intial message + altered component. I believe this has something to do with seperating network tasks from sys/bios tasks? Do i need 3 separate tasks and then use semaphores to lock one task at a time?
Void echoFxn(UArg arg0, UArg arg1)
{
int bytesRcvd;
int bytesSent;
int status;
int server;
fd_set readSet;
struct sockaddr_in localAddr;
struct sockaddr_in clientAddr;
socklen_t addrlen;
char buffer[UDPPACKETSIZE];
char copybuffer[20]; // Added by terry
int cx; // Added by terry
int count; // Added by terry
server = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (server == -1) {
System_printf("Error: socket not created.\n");
goto shutdown;
}
memset(&localAddr, 0, sizeof(localAddr));
localAddr.sin_family = AF_INET;
localAddr.sin_addr.s_addr = htonl(INADDR_ANY);
localAddr.sin_port = htons(arg0);
status = bind(server, (struct sockaddr *)&localAddr, sizeof(localAddr));
if (status == -1) {
System_printf("Error: bind failed.\n");
goto shutdown;
}
count = 1;
do {
/*
* readSet and addrlen are value-result arguments, which must be reset
* in between each select() and recvfrom() call
*/
FD_ZERO(&readSet);
FD_SET(server, &readSet);
addrlen = sizeof(clientAddr);
/* Wait forever for the reply */
status = select(server + 1, &readSet, NULL, NULL, NULL);
if (status > 0) {
if (FD_ISSET(server, &readSet)) {
bytesRcvd = recvfrom(server, buffer, UDPPACKETSIZE, 0,
(struct sockaddr *)&clientAddr, &addrlen);
cx = snprintf(copybuffer,20,"Message %u ", count); // Added by terry
sendto(server, copybuffer, cx, 0, (struct sockaddr *)&clientAddr, addrlen); // Added by terry
count++; // Added by terry
if (bytesRcvd > 0) {
bytesSent = sendto(server, buffer, bytesRcvd, 0,
(struct sockaddr *)&clientAddr, addrlen);
if (bytesSent < 0 || bytesSent != bytesRcvd) {
System_printf("Error: sendto failed.\n");
goto shutdown;
}
}
}
}
} while (status > 0);
shutdown:
if (server > 0) {
close(server);
}
}
/*
* ======== main ========
*/
int main(void)
{
/* Call board init functions */
Board_initGeneral();
Board_initGPIO();
Board_initEMAC();
/* Turn on user LED */
GPIO_write(Board_LED0, Board_LED_ON);
System_printf("Starting the UDP Echo example\nSystem provider is set to "
"SysMin. Halt the target to view any SysMin contents in"
" ROV.\n");
/* SysMin will only print to the console when you call flush or exit */
System_flush();
/* Start BIOS */
BIOS_start();
return (0);
}
This code comes directly from the example highlighted in the picture below:
Also, versions i'm using:
CCS Version: 6.1.0.00104
tirtos_tivac_2_14_00_10
TivaWare_C_Series-2.1.1.71
XDCtools Version 3.31.1.33_core