-
-
Notifications
You must be signed in to change notification settings - Fork 55
/
Copy pathNTPClient.h
154 lines (120 loc) · 3.41 KB
/
NTPClient.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#pragma once
#include "Arduino.h"
#include <Udp.h>
#define SEVENZYYEARS 2208988800UL
#define NTP_PACKET_SIZE 48
#define NTP_DEFAULT_LOCAL_PORT 1337
extern "C" {
/*
* Signature for our callback functions(s)
*/
typedef void (*callbackFunction)(void);
/*
* The time-data as a structure.
*/
typedef struct {
int Second;
int Minute;
int Hour;
int Wday;
int Day;
int Month;
int Year;
} time_data;
}
class NTPClient {
private:
UDP* _udp;
bool _udpSetup = false;
const char* _poolServerName = "time.nist.gov"; // Default time server
int _port = NTP_DEFAULT_LOCAL_PORT;
int _timeOffset = 0;
unsigned long _updateInterval = 60000; // In ms
unsigned long _currentEpoc = 0; // In s
unsigned long _lastUpdate = 0; // In ms
byte _packetBuffer[NTP_PACKET_SIZE];
void sendNTPPacket();
/*
* Callback handles.
*/
callbackFunction on_before = NULL;
callbackFunction on_after = NULL;
/*
* The current time-data
*/
time_data _data;
public:
NTPClient(UDP& udp);
NTPClient(UDP& udp, int timeOffset);
NTPClient(UDP& udp, const char* poolServerName);
NTPClient(UDP& udp, const char* poolServerName, int timeOffset);
NTPClient(UDP& udp, const char* poolServerName, int timeOffset, unsigned long updateInterval);
/**
* Invoke this user-function before we update.
*/
void on_before_update(callbackFunction newFunction);
/**
* Invoke this user-function after we update.
*/
void on_after_update(callbackFunction newFunction);
/**
* Starts the underlying UDP client with the default local port
*/
void begin();
/**
* Starts the underlying UDP client with the specified local port
*/
void begin(int port);
/**
* This should be called in the main loop of your application. By default an update from the NTP Server is only
* made every 60 seconds. This can be configured in the NTPClient constructor.
*
* @return true on success, false on failure
*/
bool update();
/**
* This will force the update from the NTP Server.
*
* @return true on success, false on failure
*/
bool forceUpdate();
// Day of week
int getDay();
// Hour / Minute / Seconds
int getHours();
int getMinutes();
int getSeconds();
// The day of the month
int getDayOfMonth();
// The month name, as a string.
String getMonth( bool abbreviate = true);
// The week-day, as a string.
String getWeekDay(bool abbreviate = true);
// The year.
int getYear();
/**
* Return the time-data as a structure.
*/
time_data parse_date_time();
/**
* Changes the time offset. Useful for changing timezones dynamically
*/
void setTimeOffset(int timeOffset);
/**
* Set the update interval to another frequency. E.g. useful when the
* timeOffset should not be set in the constructor
*/
void setUpdateInterval(unsigned long updateInterval);
/**
* @return time formatted like `hh:mm:ss`
*/
String getFormattedTime();
/**
* @return time in seconds since Jan. 1, 1970
*/
unsigned long getEpochTime();
/**
* Stops the underlying UDP client
*/
void end();
};