EthernetNetIf Compatibility.
Dependents: XBeeWiFi_SPI_example
Fork of NetServicesSource by
Diff: services/ntp/NTPClient.h
- Revision:
- 12:8dc6b255af6c
- Parent:
- 11:da4498f591ee
--- a/services/ntp/NTPClient.h Thu Aug 05 15:01:33 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,200 +0,0 @@ - -/* -Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -/** \file -NTP Client header file -*/ - -#ifndef NTP_CLIENT_H -#define NTP_CLIENT_H - -#include "core/net.h" -#include "core/netservice.h" -#include "api/UDPSocket.h" -#include "api/DNSRequest.h" -#include "mbed.h" - -///NTP Client results -enum NTPResult -{ - NTP_OK, ///<Success - NTP_PROCESSING, ///<Processing - NTP_PRTCL, ///<Protocol error - NTP_TIMEOUT, ///<Connection timeout - NTP_DNS ///<Could not resolve DNS hostname -}; - -///A NTP Client -/** -The NTP client is a simple UDP client that will update the mbed's RTC -*/ -class NTPClient : protected NetService -{ -public: - /** - Instantiates the NTP client - */ - NTPClient(); - virtual ~NTPClient(); - - //High level setup functions - - ///Gets current time (blocking) - /** - Updates the time using the server host - Blocks until completion - @param host : NTP server - */ - NTPResult setTime(const Host& host); //Blocking - - ///Gets current time (non-blocking) - /** - Updates the time using the server host - The function returns immediately and calls the callback on completion or error - @param host : NTP server - @param pMethod : callback function - */ - NTPResult setTime(const Host& host, void (*pMethod)(NTPResult)); //Non blocking - - ///Gets current time (non-blocking) - /** - Updates the time - @param host : NTP server - @param pItem : instance of class on which to execute the callback method - @param pMethod : callback method - The function returns immediately and calls the callback on completion or error - */ - template<class T> - NTPResult setTime(const Host& host, T* pItem, void (T::*pMethod)(NTPResult)) //Non blocking - { - setOnResult(pItem, pMethod); - doSetTime(host); - return NTP_PROCESSING; - } - - ///Gets current time (non-blocking) - /** - Updates the time using the server host - The function returns immediately and calls the previously set callback on completion or error - @param host : NTP server - */ - void doSetTime(const Host& host); - - ///Setups the result callback - /** - @param pMethod : callback function - */ - void setOnResult( void (*pMethod)(NTPResult) ); - - ///Setups the result callback - /** - @param pItem : instance of class on which to execute the callback method - @param pMethod : callback method - */ - class CDummy; - template<class T> - void setOnResult( T* pItem, void (T::*pMethod)(NTPResult) ) - { - m_pCbItem = (CDummy*) pItem; - m_pCbMeth = (void (CDummy::*)(NTPResult)) pMethod; - } - - void close(); - -protected: - virtual void poll(); //Called by NetServices - -private: - void init(); - void open(); - - __packed struct NTPPacket //See RFC 4330 for Simple NTP - { - //WARN: We are in LE! Network is BE! - //LSb first - unsigned mode : 3; - unsigned vn : 3; - unsigned li : 2; - - uint8_t stratum; - uint8_t poll; - uint8_t precision; - //32 bits header - - uint32_t rootDelay; - uint32_t rootDispersion; - uint32_t refId; - - uint32_t refTm_s; - uint32_t refTm_f; - uint32_t origTm_s; - uint32_t origTm_f; - uint32_t rxTm_s; - uint32_t rxTm_f; - uint32_t txTm_s; - uint32_t txTm_f; - }; - - void process(); //Main state-machine - - void setTimeout(int ms); - void resetTimeout(); - - void onTimeout(); //Connection has timed out - void onDNSReply(DNSReply r); - void onUDPSocketEvent(UDPSocketEvent e); - void onResult(NTPResult r); //Called when exchange completed or on failure - - NTPResult blockingProcess(); //Called in blocking mode, calls Net::poll() until return code is available - - UDPSocket* m_pUDPSocket; - - enum NTPStep - { - NTP_PING, - NTP_PONG - }; - - NTPStep m_state; - - NTPPacket m_pkt; - - CDummy* m_pCbItem; - void (CDummy::*m_pCbMeth)(NTPResult); - - void (*m_pCb)(NTPResult); - - Timer m_watchdog; - int m_timeout; - - bool m_closed; - - Host m_host; - - DNSRequest* m_pDnsReq; - - NTPResult m_blockingResult; //Result if blocking mode - -}; - -#endif