From e000260eabfb29d246460ab61db409b435b20e9d Mon Sep 17 00:00:00 2001 From: Chris Tacke Date: Wed, 7 Feb 2024 11:47:53 -0600 Subject: [PATCH] add ability to manually sync with NTP --- .../Meadow.Contracts/Hardware/INtpClient.cs | 47 +++++++++++-------- .../Meadow.Contracts/ISleepAwarePeripheral.cs | 2 - .../Platform OS/IPlatformOS.Configuration.cs | 5 ++ 3 files changed, 32 insertions(+), 22 deletions(-) diff --git a/Source/Meadow.Contracts/Hardware/INtpClient.cs b/Source/Meadow.Contracts/Hardware/INtpClient.cs index fe22365e..26f36233 100644 --- a/Source/Meadow.Contracts/Hardware/INtpClient.cs +++ b/Source/Meadow.Contracts/Hardware/INtpClient.cs @@ -1,31 +1,38 @@ using System; +using System.Threading.Tasks; -namespace Meadow +namespace Meadow; + +/// +/// Delegate representing a time changed event handler. +/// +/// The updated UTC time. +public delegate void TimeChangedEventHandler(DateTime utcTime); + +/// +/// Interface for a Network Time Protocol (NTP) client object. +/// +public interface INtpClient { /// - /// Delegate representing a time changed event handler. + /// Event called when the time is changed. /// - /// The updated UTC time. - public delegate void TimeChangedEventHandler(DateTime utcTime); + event TimeChangedEventHandler TimeChanged; /// - /// Interface for a Network Time Protocol (NTP) client object. + /// Gets a value indicating whether the NTP client is enabled. /// - public interface INtpClient - { - /// - /// Event called when the time is changed. - /// - event TimeChangedEventHandler TimeChanged; + bool Enabled { get; } - /// - /// Gets a value indicating whether the NTP client is enabled. - /// - bool Enabled { get; } + /// + /// Gets or sets the poll period for NTP synchronization. + /// + TimeSpan PollPeriod { get; set; } - /// - /// Gets or sets the poll period for NTP synchronization. - /// - TimeSpan PollPeriod { get; set; } - } + /// + /// Start an NTP time synchronization + /// + /// An optional NTP server address. If null, the device will use the platform-configured NTP server address + /// true if successful, otherwise false + Task Synchronize(string? ntpServer = null); } diff --git a/Source/Meadow.Contracts/ISleepAwarePeripheral.cs b/Source/Meadow.Contracts/ISleepAwarePeripheral.cs index 27bbb6a4..fdacc72e 100644 --- a/Source/Meadow.Contracts/ISleepAwarePeripheral.cs +++ b/Source/Meadow.Contracts/ISleepAwarePeripheral.cs @@ -12,13 +12,11 @@ public interface ISleepAwarePeripheral /// Called before the platform goes into Sleep state /// /// - /// public Task BeforeSleep(CancellationToken cancellationToken); /// /// Called after the platform returns to Wake state /// /// - /// public Task AfterWake(CancellationToken cancellationToken); } diff --git a/Source/Meadow.Contracts/Platform OS/IPlatformOS.Configuration.cs b/Source/Meadow.Contracts/Platform OS/IPlatformOS.Configuration.cs index 7f9070b9..19fb5150 100644 --- a/Source/Meadow.Contracts/Platform OS/IPlatformOS.Configuration.cs +++ b/Source/Meadow.Contracts/Platform OS/IPlatformOS.Configuration.cs @@ -229,5 +229,10 @@ public enum NetworkConnectionType /// /// This should be a semicolon list of pin names that will be reserved for OS use. public string ReservedPins { get; } + + /// + /// Gets a list of NTP servers used for time synchronization + /// + public string[] NtpServers { get; } } }