Simple Network Time Protocol Client. This lib feature: Access to SNTP server, and get Epoch (Unix) time.

Revision:
0:2be905de8e28
Child:
1:b5a2e4532331
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SimpleNTP.cpp	Wed Nov 25 10:03:10 2015 +0000
@@ -0,0 +1,51 @@
+#include "SimpleNTP.h"
+
+SimpleNTP::Result SimpleNTP::setNTPServer(string _server, unsigned short _port)
+{
+    server= _server;
+    port= _port;
+
+    socket.set_blocking(false, 1500);
+    if(socket.init() == -1)
+        return ERR_SocketInit;
+
+    if(serverNTP.set_address(server.c_str(), port) == -1)
+        return ERR_SetNTPAddr;
+
+    return SUCCESS;
+}
+
+long SimpleNTP::getNetworkTime()
+{
+//    long timeEpoch= -1;
+    int idx, bytes;
+// LeapIndicator:0(0x00), VersionNumber:4(0x100), Mode:3(0x011);
+// -> 0b0010 0011 = 0x23
+    char req[49];
+    for(idx= 0; idx < 48; idx++)
+        req[idx]= 0x00;
+    req[48]= NULL;
+    req[0]= 0x23;
+    bytes= socket.sendTo(serverNTP, (char *)req, 48);
+    if(bytes == -1)
+        return -1;
+
+// NTP response is max 68 Byte (EXPECTED).
+    char resSNTP[70];
+    bytes= socket.receiveFrom(serverNTP, resSNTP, sizeof(resSNTP));
+    if(bytes == -1)
+        return -1;
+
+    // RFC2030; Transmit TimeStamp[40-48Byte]:BigEndian 32bit unsigned long (dec), + 32bit under floating-point.
+    unsigned long timeNTP= 0;
+    for(idx = 0; idx < 4; idx++)
+        timeNTP= (timeNTP << 8) | resSNTP[40+ idx];
+
+//  25567day * 24h * 60m * 60s = 2208988800 s. w/o leap seconds(DEFINED).
+// Epoch: 1970/01/01~. NTP:1900/01/01~
+//    timeEpoch= timeNTP- 2208988800;
+    return timeNTP- 2208988800;//timeEpoch;
+}
+
+
+// EOF
\ No newline at end of file