Modified NTP library

Dependents:   NTPTest

Committer:
loopsva
Date:
Fri Nov 11 18:11:34 2016 +0000
Revision:
0:2c0aaa9a3e87
My modifications to TFTP State codes upon exit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
loopsva 0:2c0aaa9a3e87 1 /* NTPClient.h */
loopsva 0:2c0aaa9a3e87 2 /* Copyright (C) 2012 mbed.org, MIT License
loopsva 0:2c0aaa9a3e87 3 *
loopsva 0:2c0aaa9a3e87 4 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
loopsva 0:2c0aaa9a3e87 5 * and associated documentation files (the "Software"), to deal in the Software without restriction,
loopsva 0:2c0aaa9a3e87 6 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
loopsva 0:2c0aaa9a3e87 7 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
loopsva 0:2c0aaa9a3e87 8 * furnished to do so, subject to the following conditions:
loopsva 0:2c0aaa9a3e87 9 *
loopsva 0:2c0aaa9a3e87 10 * The above copyright notice and this permission notice shall be included in all copies or
loopsva 0:2c0aaa9a3e87 11 * substantial portions of the Software.
loopsva 0:2c0aaa9a3e87 12 *
loopsva 0:2c0aaa9a3e87 13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
loopsva 0:2c0aaa9a3e87 14 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
loopsva 0:2c0aaa9a3e87 15 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
loopsva 0:2c0aaa9a3e87 16 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
loopsva 0:2c0aaa9a3e87 17 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
loopsva 0:2c0aaa9a3e87 18 */
loopsva 0:2c0aaa9a3e87 19
loopsva 0:2c0aaa9a3e87 20 /** \file
loopsva 0:2c0aaa9a3e87 21 NTP Client header file
loopsva 0:2c0aaa9a3e87 22 */
loopsva 0:2c0aaa9a3e87 23
loopsva 0:2c0aaa9a3e87 24 #ifndef NTPCLIENT_H_
loopsva 0:2c0aaa9a3e87 25 #define NTPCLIENT_H_
loopsva 0:2c0aaa9a3e87 26
loopsva 0:2c0aaa9a3e87 27 #include <cstdint>
loopsva 0:2c0aaa9a3e87 28
loopsva 0:2c0aaa9a3e87 29 using std::uint8_t;
loopsva 0:2c0aaa9a3e87 30 using std::uint16_t;
loopsva 0:2c0aaa9a3e87 31 using std::uint32_t;
loopsva 0:2c0aaa9a3e87 32
loopsva 0:2c0aaa9a3e87 33 #include "UDPSocket.h"
loopsva 0:2c0aaa9a3e87 34
loopsva 0:2c0aaa9a3e87 35 #define NTP_DEFAULT_PORT 123
loopsva 0:2c0aaa9a3e87 36 #define NTP_DEFAULT_TIMEOUT 4000
loopsva 0:2c0aaa9a3e87 37
loopsva 0:2c0aaa9a3e87 38 ///NTP client results
loopsva 0:2c0aaa9a3e87 39 enum NTPResult
loopsva 0:2c0aaa9a3e87 40 {
loopsva 0:2c0aaa9a3e87 41 NTP_DNS = 1, ///<Could not resolve name
loopsva 0:2c0aaa9a3e87 42 NTP_PRTCL = 2, ///<Protocol error
loopsva 0:2c0aaa9a3e87 43 NTP_TIMEOUT = 3, ///<Connection timeout
loopsva 0:2c0aaa9a3e87 44 NTP_CONN = 4, ///<Connection error
loopsva 0:2c0aaa9a3e87 45 NTP_OK = 0, ///<Success
loopsva 0:2c0aaa9a3e87 46 };
loopsva 0:2c0aaa9a3e87 47
loopsva 0:2c0aaa9a3e87 48 /** NTP Client to update the mbed's RTC using a remote time server
loopsva 0:2c0aaa9a3e87 49 *
loopsva 0:2c0aaa9a3e87 50 */
loopsva 0:2c0aaa9a3e87 51 class NTPClient
loopsva 0:2c0aaa9a3e87 52 {
loopsva 0:2c0aaa9a3e87 53 public:
loopsva 0:2c0aaa9a3e87 54 /**
loopsva 0:2c0aaa9a3e87 55 Instantiate the NTP client
loopsva 0:2c0aaa9a3e87 56 */
loopsva 0:2c0aaa9a3e87 57 NTPClient();
loopsva 0:2c0aaa9a3e87 58
loopsva 0:2c0aaa9a3e87 59 uint32_t NTPLastResult;
loopsva 0:2c0aaa9a3e87 60
loopsva 0:2c0aaa9a3e87 61 /**Get current time (blocking)
loopsva 0:2c0aaa9a3e87 62 Update the time using the server host
loopsva 0:2c0aaa9a3e87 63 Blocks until completion
loopsva 0:2c0aaa9a3e87 64 @param host NTP server IPv4 address or hostname (will be resolved via DNS)
loopsva 0:2c0aaa9a3e87 65 @param port port to use; defaults to 123
loopsva 0:2c0aaa9a3e87 66 @param timeout waiting timeout in ms (osWaitForever for blocking function, not recommended)
loopsva 0:2c0aaa9a3e87 67 @return 0 on success, NTP error code (<0) on failure
loopsva 0:2c0aaa9a3e87 68 */
loopsva 0:2c0aaa9a3e87 69 NTPResult setTime(const char* host, uint16_t port = NTP_DEFAULT_PORT, uint32_t timeout = NTP_DEFAULT_TIMEOUT); //Blocking
loopsva 0:2c0aaa9a3e87 70
loopsva 0:2c0aaa9a3e87 71 private:
loopsva 0:2c0aaa9a3e87 72 struct NTPPacket //See RFC 4330 for Simple NTP
loopsva 0:2c0aaa9a3e87 73 {
loopsva 0:2c0aaa9a3e87 74 //WARN: We are in LE! Network is BE!
loopsva 0:2c0aaa9a3e87 75 //LSb first
loopsva 0:2c0aaa9a3e87 76 unsigned mode : 3;
loopsva 0:2c0aaa9a3e87 77 unsigned vn : 3;
loopsva 0:2c0aaa9a3e87 78 unsigned li : 2;
loopsva 0:2c0aaa9a3e87 79
loopsva 0:2c0aaa9a3e87 80 uint8_t stratum;
loopsva 0:2c0aaa9a3e87 81 uint8_t poll;
loopsva 0:2c0aaa9a3e87 82 uint8_t precision;
loopsva 0:2c0aaa9a3e87 83 //32 bits header
loopsva 0:2c0aaa9a3e87 84
loopsva 0:2c0aaa9a3e87 85 uint32_t rootDelay;
loopsva 0:2c0aaa9a3e87 86 uint32_t rootDispersion;
loopsva 0:2c0aaa9a3e87 87 uint32_t refId;
loopsva 0:2c0aaa9a3e87 88
loopsva 0:2c0aaa9a3e87 89 uint32_t refTm_s;
loopsva 0:2c0aaa9a3e87 90 uint32_t refTm_f;
loopsva 0:2c0aaa9a3e87 91 uint32_t origTm_s;
loopsva 0:2c0aaa9a3e87 92 uint32_t origTm_f;
loopsva 0:2c0aaa9a3e87 93 uint32_t rxTm_s;
loopsva 0:2c0aaa9a3e87 94 uint32_t rxTm_f;
loopsva 0:2c0aaa9a3e87 95 uint32_t txTm_s;
loopsva 0:2c0aaa9a3e87 96 uint32_t txTm_f;
loopsva 0:2c0aaa9a3e87 97 } __attribute__ ((packed));
loopsva 0:2c0aaa9a3e87 98
loopsva 0:2c0aaa9a3e87 99 UDPSocket m_sock;
loopsva 0:2c0aaa9a3e87 100
loopsva 0:2c0aaa9a3e87 101 };
loopsva 0:2c0aaa9a3e87 102
loopsva 0:2c0aaa9a3e87 103
loopsva 0:2c0aaa9a3e87 104 #endif /* NTPCLIENT_H_ */