@@ -159,6 +159,7 @@ void NTPClient::processPacket (struct pbuf* packet) {
159
159
NTPPacket_t ntpPacket;
160
160
bool offsetApplied = false ;
161
161
static bool wasPartial;
162
+ static double lastOffset;
162
163
163
164
if (!packet) {
164
165
DEBUGLOG (" Received packet empty" );
@@ -214,6 +215,7 @@ void NTPClient::processPacket (struct pbuf* packet) {
214
215
DEBUGLOG (" Next sync programmed for %d ms" , FAST_NTP_SYNCNTERVAL);
215
216
status = partialSync;
216
217
wasPartial = true ;
218
+ lastOffset = offset;
217
219
} else {
218
220
DEBUGLOG (" Status set to SYNCD" );
219
221
DEBUGLOG (" Next sync programmed for %d seconds" , getLongInterval ());
@@ -222,7 +224,7 @@ void NTPClient::processPacket (struct pbuf* packet) {
222
224
offsetApplied = true ;
223
225
}
224
226
// Serial.printf ("Status: %d wasPartial: %d offsetApplied %d Offset %0.3f\n", status, wasPartial, offsetApplied, ((float)tvOffset.tv_sec + (float)tvOffset.tv_usec / 1000000.0) * 1000);
225
- wasPartial = false ;
227
+ // wasPartial = false;
226
228
}
227
229
if (status == partialSync) {
228
230
actualInterval = FAST_NTP_SYNCNTERVAL;
@@ -239,10 +241,16 @@ void NTPClient::processPacket (struct pbuf* packet) {
239
241
NTPEvent_t event;
240
242
if (status == partialSync){
241
243
event.event = partlySync;
244
+ event.info .offset = offset;
242
245
} else {
243
246
event.event = timeSyncd;
247
+ if (wasPartial) {
248
+ event.info .offset = lastOffset;
249
+ } else {
250
+ event.info .offset = offset;
251
+ }
252
+ wasPartial = false ;
244
253
}
245
- event.info .offset = offset;
246
254
event.info .delay = delay;
247
255
event.info .serverAddress = ntpServerIPAddress;
248
256
event.info .port = DEFAULT_NTP_PORT;
0 commit comments