Delta Robot example

Dependencies:   BufferedSerial Eigen

Fork of TCPSocket_Example by mbed_example

Committer:
je310
Date:
Mon Oct 15 18:30:20 2018 +0000
Revision:
5:01e1e68309ae
testing eigen;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
je310 5:01e1e68309ae 1 #include "ntp.h"
je310 5:01e1e68309ae 2 #include "mbed.h"
je310 5:01e1e68309ae 3
je310 5:01e1e68309ae 4 //this code has been taken from https://github.com/ARMmbed/ntp-client
je310 5:01e1e68309ae 5
je310 5:01e1e68309ae 6 NTPClient::NTPClient(NetworkInterface *iface)
je310 5:01e1e68309ae 7 : iface(iface), nist_server_address((char *)NTP_DEFULT_NIST_SERVER_ADDRESS), nist_server_port(NTP_DEFULT_NIST_SERVER_PORT) {
je310 5:01e1e68309ae 8 }
je310 5:01e1e68309ae 9
je310 5:01e1e68309ae 10 void NTPClient::set_server(char* server, int port){
je310 5:01e1e68309ae 11 nist_server_address = server;
je310 5:01e1e68309ae 12 nist_server_port = port;
je310 5:01e1e68309ae 13 }
je310 5:01e1e68309ae 14
je310 5:01e1e68309ae 15 time_t NTPClient::get_timestamp(int timeout) {
je310 5:01e1e68309ae 16 const time_t TIME1970 = (time_t)2208988800UL;
je310 5:01e1e68309ae 17 int ntp_send_values[12] = {0};
je310 5:01e1e68309ae 18 int ntp_recv_values[12] = {0};
je310 5:01e1e68309ae 19
je310 5:01e1e68309ae 20 SocketAddress nist;
je310 5:01e1e68309ae 21 int ret_gethostbyname = iface->gethostbyname(nist_server_address, &nist);
je310 5:01e1e68309ae 22
je310 5:01e1e68309ae 23 if (ret_gethostbyname < 0) {
je310 5:01e1e68309ae 24 // Network error on DNS lookup
je310 5:01e1e68309ae 25 return ret_gethostbyname;
je310 5:01e1e68309ae 26 }
je310 5:01e1e68309ae 27
je310 5:01e1e68309ae 28 nist.set_port(nist_server_port);
je310 5:01e1e68309ae 29
je310 5:01e1e68309ae 30 memset(ntp_send_values, 0x00, sizeof(ntp_send_values));
je310 5:01e1e68309ae 31 ntp_send_values[0] = '\x1b';
je310 5:01e1e68309ae 32
je310 5:01e1e68309ae 33 memset(ntp_recv_values, 0x00, sizeof(ntp_recv_values));
je310 5:01e1e68309ae 34
je310 5:01e1e68309ae 35 UDPSocket sock;
je310 5:01e1e68309ae 36 sock.open(iface);
je310 5:01e1e68309ae 37 sock.set_timeout(timeout);
je310 5:01e1e68309ae 38
je310 5:01e1e68309ae 39 sock.sendto(nist, (void*)ntp_send_values, sizeof(ntp_send_values));
je310 5:01e1e68309ae 40
je310 5:01e1e68309ae 41 SocketAddress source;
je310 5:01e1e68309ae 42 const int n = sock.recvfrom(&source, (void*)ntp_recv_values, sizeof(ntp_recv_values));
je310 5:01e1e68309ae 43
je310 5:01e1e68309ae 44 if (n > 10) {
je310 5:01e1e68309ae 45 return ntohl(ntp_recv_values[10]) - TIME1970;
je310 5:01e1e68309ae 46 } else {
je310 5:01e1e68309ae 47 if (n < 0) {
je310 5:01e1e68309ae 48 // Network error
je310 5:01e1e68309ae 49 return n;
je310 5:01e1e68309ae 50 } else {
je310 5:01e1e68309ae 51 // No or partial data returned
je310 5:01e1e68309ae 52 return -1;
je310 5:01e1e68309ae 53 }
je310 5:01e1e68309ae 54 }
je310 5:01e1e68309ae 55 }
je310 5:01e1e68309ae 56
je310 5:01e1e68309ae 57 uint32_t NTPClient::ntohl(uint32_t x) {
je310 5:01e1e68309ae 58 uint32_t ret = (x & 0xff) << 24;
je310 5:01e1e68309ae 59 ret |= (x & 0xff00) << 8;
je310 5:01e1e68309ae 60 ret |= (x & 0xff0000UL) >> 8;
je310 5:01e1e68309ae 61 ret |= (x & 0xff000000UL) >> 24;
je310 5:01e1e68309ae 62 return ret;
je310 5:01e1e68309ae 63 }