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