Hi, I trying to connect my EK-TM4C129XL to an ntp server.
I'm using CCS v6, TIRTOS 2.00.02.36 and NDK 2.23.01.01.
I tried use 'sntp.h', but not success.
#define UDPPORT 123
void ntpTest() { SOCKET lSocket; struct sockaddr_in sLocalAddr; fd_set readfds; int nbytes; int status; HANDLE hBuffer; char *buffer; char *hostname = (char *) "200.160.7.186"; unsigned char msg[48] = { 010, 0, 0, 0, 0, 0, 0, 0, 0 }; struct timeval { INT32 tv_sec; INT32 tv_usec; }; struct timeval time; time.tv_sec = 10; time.tv_usec = 0; memset((char *) &sLocalAddr, 0, sizeof(sLocalAddr)); sLocalAddr.sin_family = AF_INET; sLocalAddr.sin_len = sizeof(sLocalAddr); sLocalAddr.sin_addr.s_addr = inet_addr(hostname); sLocalAddr.sin_port = htons(UDPPORT); //fdOpenSession(TaskSelf()); lSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (lSocket < 0) { System_printf("udpHandler: socket failed\n"); Task_exit(); return; } if (setsockopt(lSocket, SOL_SOCKET, SO_RCVTIMEO, &time, sizeof(time)) < 0) { System_printf("udpHandler: setsockopt SO_RCVTIMEO failed\n"); fdClose(lSocket); return; } /* sendto( socket, pbuf: ponteiro para os dados a serem transmitidos size: tamanho dos dados flags, pName: ponteiro para o nome(endereço) dos destino, size: tamanho dos dados apontados por pName */ sendto(lSocket, (unsigned char *) msg, 48, 0, (struct sockaddr *) &sLocalAddr, sizeof(sLocalAddr)); //Clear (initialize) a file descriptor set FD_ZERO(&readfds); //Add a file descriptor to a file descriptor set FD_SET(lSocket, &readfds); /* Esta funcao permite que a tarefa de instruir a pilha de esperar por qualquer um de varios eventos a ocorrer e para acordar o processo somente quando um dos mais desses eventos ocorre ou quando uma determinada quantidade de tempo ja passou Parametros: maxfd: ignorado readset: Conjunto de descritores de arquivos para verificar se ha leitura writeset: Conjunto de descritores de arquivos para verificar se ha escrita exceptset: Conjunto de descritores de arquivos para verificar condicoes excepcionais timeout: ponteiro para uma estrutura de timeout The definition of the timeval structure is: struct timeval { INT32 tv_sec; INT32 tv_usec; }; *translate.google.com */ if (fdSelect(0, &readfds, NULL, NULL, NULL) != 1) { //network Erros errosRede(fdError()); } nbytes = recvncfrom(lSocket, (void **) &buffer, MSG_DONTWAIT, (struct sockaddr *) &sLocalAddr, (int *) sizeof(sLocalAddr), &hBuffer); if (nbytes >= 0) { /* print the data recv */ printf("Receivied data: %s\n", buffer); recvncfree(hBuffer); } else { status = fdError(); errosRede(status); if (status != EWOULDBLOCK) { System_printf( "udpHandler: recvfrom failed: returned: %d, error: %d\n", nbytes, status); fdClose(lSocket); } } if (lSocket) { fdClose(lSocket); } //fdCloseSession(TaskSelf()); }
Someone can help me?
Tiago