RadioSvegliaGBE
Clock.h
Go to the documentation of this file.
1 #pragma once
2 
19 #pragma region INCLUSIONS
20 // Libreria per la gestione del WiFi per il modulo 'esp8266'
21 #include <ESP8266WiFi.h>
22 
23 // Librerie necessarie per la comunicazione con il TIME SERVER per la sincronizzazione online dell'ora corrente
24 /*
25 Le librerie necessarie sono due per una corretta comunicazione:
26 --- "WiFiUdp.h" gestisce la comunicazione WiFi secondo il PROTOCOLLO UDP
27 --- "NTPClient.h" gestisce la comunicazione con il Time Server. Questa comunicazione utilizza il PROTOCOLLO UDP.
28 Per tale motivo, sono necessarie due librerie per il corretto funzionamento.
29 */
30 #include <WiFiUdp.h>
31 #include <NTPClient.h>
32 #pragma endregion INCLUSIONS
33 
34 // Namespace di protezione dalle inclusioni multiple con nominazione uguale
35 /*
36 I valori constexpr, come spiegato appena sopra, equivalgono alla direttiva '#define'. Questo può creare problemi nel momento in cui un singolo file viene incluso
37 in una gerarchia di molti più file, dove si potrebbe riscontrare la presenza di constexpr appartenenti a file diversi ma con gli stessi nomi! Questa ripetitività dei nomi deriva
38 dagli standard di nominazione. Per evitare, quindi, conflitti di multipla definizione, andremo ad utilizzare un 'namespace', che, come dice il nome, fornisce uno SPAZIO per i NOMI del nostro
39 file in cui il 'namespace' è stato dichiarato ed implementato.
40 Mantieniamo comunque la specificazione 'static', per evitare errori di linker in caso di inclusioni multiple di questa unità di traslazione [file].
41 */
42 
51 namespace Clock__file
52 {
53 
54  // Espressione costante (equivalente della direttiva '#define') per la definizione dei valori '_PoolingZone', '_TimeOffset', '_UpdateInterval'.
55  // Questi valori sono delle costanti immutabili che rappresentano VALORI DI DEFAULT scelti dal creatore ed implementatore della classe.
56  // L'utilizzo di un metodo di inizializzazione di default 'Init (1)' provocherà l'uso di tali valori.
57  // L'utilizzo, se disponibile, di un metodo di inizializzazione parametrico 'Init (2)' NON provocherà l'utilizzo di tali valori.
58  /*Questi valori risiederanno nel Data Segment*/
60  static constexpr auto _PoolingZone = "europe.pool.ntp.org";
61 
63  static constexpr auto _TimeOffset = 3600; /*1 ora in avanti rispetto al Meridiano Zero*/
64 
66  static constexpr auto _UpdateInterval = 60000; /*[ms]*/
67 
68  // Valore di default per il formato dell'ora
69  /*forbidden*/ /***static constexpr auto _TimeFormat = Clock::TimeFormat::_24HOURS;***/
70 
71  // In default, anche se il formato è impostato sulle 12h, viene messo nello stato 'NOT_USED'.
72  // Questo non crea problemi perchè l'attributo 'm_TimePeriod' viene aggiornato al valore corretto ad ogni chiamata di un qualsiasi metodo 'getter'.
73  /*forbidden*/ /***static constexpr auto _TimePeriod = Clock::TimePeriod::NOT_USED;***/
74 
75  // Valore costante rappresentante il periodo per la gestione del formato --> 12h
77  static constexpr auto _Period = 12;
78 
79  // Valore costante per la formattazione "elegante" del formato --> 12h
81  static constexpr auto _ElegantAdj /*Adjustment*/ = 10;
82 
83  // Valore costante che viene ritornato in caso di invalidità riscontrata nell'oggetto durante il dereferenziamento
84  // per la chiamata dei metodi.
85  // Il valore invalido utilizzato è un valore impossibile, cioè che non potrebbe essere mai restituito naturalmente.
87  static constexpr int _invalidvalue = -1;
88 }
89 /*
90 'forbidden' indica una operazione che non può essere effettuata per diverse motivazioni dipendenti dal contesto.
91 In questo caso, abbiamo riscontrato due proibizioni tentando di dichiarare dei valori di default che si riferivano ad una classe e ai componenti di tale prima della
92 sua effettiva dichiarazione.
93 Si potrebbe pensare all'impiego di una 'forward declaration'. In questo caso non avrebbe portato a nessun risultato dato che stavamo anche andando ad utilizzare
94 dei componenti della classe. Ricordiamo che la 'forward declaration' permette la creazione di puntatori e referenze al tipo 'forwarded', ma non implementa la sua
95 definizione/implementazione completa. Questo causa l'impossibilità nell'utilizzo di elementi esistenti nella definizione/implementazione del tipo.
96 */
97 
98 // Gerarchia sincronizzazione
99 /*
100 - 'Init' alloca i due oggetti necessari per la comunicazione con il Time Server.
101 La comunicazione NON viene avviata. Vengono solamente create le impostazioni per la comunicazione.
102 
103 - 'StartService' avvia la comunicazione con il Time Server.
104 La comunicazione VIENE avviata con le impostazioni prima allocate.
105 Con il valore definito nella constexpr '_UpdateInterval', l'aggiornamento dei valori avviene automaticamente ogni 60 secondi.
106 
107 - 'update' (libreria "NTPClient") forza l'aggiornamento dei valori.
108 Richiamato ad ogni metodo 'getter' della classe "Clock". Questo per garantire in valore di ritorno sempre valori "strong-updated" (appena aggiornati/"freschi")
109 */
110 
119 class Clock
120 {
121  /*Blocco trivial*/
122  /*
123  Stiamo trattando una classe interamente statica. Per la definizione di staticit�, descritta successivamente, questa classe funger� solamente
124  da "contenitore astratto" per organizzare pi� logicamente i dati. In verit�, tutto risieder� principalmente nel Data Segment, quindi sar�
125  globale, ma statico (anche questo descritto successivamente).
126  Questa staticit� implica la NON necessit� di creare istanze di questa classe, che risulterebbero totalmente inutili dato che tutti gli attributi
127  e i metodi esistono nell'ambito globale.
128  Per evitare, quindi, inutili istanziamenti, verranno bloccati il costruttore trivial (di default generato dal compilatore) e il distruttore, reso
129  inutile dalla non-istanziabilit� della classe stessa.
130  */
131 private:
132  // Blocco attraverso privatizzazione del costruttore trivial
139  Clock() = default;
140  // Blocco attraverso privatizzazione del distruttore trivial
147  ~Clock() = default;
148 
149  /*Enumerazioni*/
150  /*
151  Una enumerazione permette una gestione più intelligente degli "switcher" forniti all'utente finale.
152  Tramite nomi significativi, si gestiscono gli "switcher" appunto con dei nomi, utilizzati per mascherare i valori di enumerazione meno significativi per l'utente.
153  Anche qua si applica la staticità descritta successivamente. Una classe di enumarazione è automaticamente statica.
154  */
155 public:
165  enum class TimeFormat
166  {
167  _12HOURS,
168  _24HOURS,
170  };
171 
182  enum class TimePeriod
183  {
184  NOT_USED,
185  AM,
186  PM
187  };
188 
189  /*Attributi*/
190 private:
191  // Puntatore all'oggetto di classe "WiFiUDP"
192  /*
193  Questa variabile conterr� l'istanza dell'oggetto di classe "WiFiUDP" creata durante l'operazione di inizializzazione.
194  Questo oggetto � necessario per garantire un corretto funzionamento del programma. Infatti, gestisce il protocollo di
195  comunicazione UDP, protocollo utilizzato dalla classe "NTPClient" per la comunicazione con il Time Server.
196  L'oggetto sar� sottoposto ad allocazione dinamica [heap]. Questo per evitare problemi con la deallocazione mirata all'ambito
197  caratteristica della memoria statica [stack]. Una allocazione statica [stack] provocherebbe l'allocazione e successiva deallocazione
198  immediata dell'oggetto esistendo solamente nell'ambito di inizializzazione.
199  Essendo statica, la variabile (puntatore) verr� allocata nel 'Data Segment' (segmento dei dati) ed "esister�" fino a termine
200  del programma stesso. Quindi si tratta di una variabile globale, ma statica. Questo la rende esistente solamente in questa unit�
201  di traslazione (file).
202  */
204  static WiFiUDP* m_UDPProtocol;
205 
206  // Puntatore all'oggetto di classe "NTPClient"
207  /*
208  Questa variabile conterr� l'istanza dell'oggetto di classe "NTPClient" creata durante l'operazione di inizializzazione.
209  Questo oggetto funge da 'Entry Point' per la comunicazione con il Time Server.
210  Anche qua, per via della staticit�, viene applicata la gestione analizzata prima.
211  */
213  static NTPClient* m_NTPEntryPoint;
214 
215  // Valore stringa indicante la 'pool zone' dalla quale prelevare i valori richiesti (ora corrente)
216  /*
217  Questa variabile conterrà una stringa che rappresenta una zona, denominata 'pool', nel Time Server dalla quale prelevare
218  il dato da noi richiesto.
219  Anche qua, per via della staticità, viene applicata la gestione analizzata prima.
220  */
222  static const char* m_PoolingZone;
223 
224  // Valore indicante l'Offset in secondi per "ridimensionare" l'ora corrente. La Base è il Meridiano di Greenwich
225  /*
226  La lettura dell'ora corrente dal Time Server restituisce il valore secondo il meridiano zero, cioè quello di Greenwich.
227  Ovviamente, noi dobbiamo adattare questo valore al nostro fuso orario. Per fare ciò, applichiamo un Offset al valore ottenuto. Quello che stiamo
228  facendo non è altro che sommare una certa quantità in secondi [s] al valore ottenuto dal Meridiano di Greenwich.
229  Anche qua, per via della staticità, viene applicata la gestione analizzata prima.
230  L'attributo è del tipo 'int' perchè deve concordare con il tipo richiesto dal costruttore parametrico della classe "NTPClient".
231  Sarebbe stato più ottimizzato specificarlo come 'unsigned int'.
232  */
234  static int m_TimeOffset;
235 
236  // Valore indicante l'intervallo, in 'ms' [millisecondi] per l'aggiornamento dei valori, cioè ogni quanto viene effettuata
237  // una richiesta dei valori al Time Server
238  /*
239  Per ottenere l'ora corrente, andremo ad utilizzare un metodo della classe "NTPClient" chiamato "getFormattedTime()". E' necessario precisare che questo
240  metodo andrà solamente a restituire un valore che è l'ora corrente. La lettura dei valori dal Time Server non è vincolata da questo metodo, ma inizierà
241  alla chiamata del metodo "begin()" sempre della stessa classe e continuerà ogni 'm_UpdateInterval' millisecondi [ms] fino alla deallocazione dell'oggetto
242  rappresentante l'Entry Point.
243  Anche qua, per via della staticità, viene applicata la gestione analizzata prima.
244  L'attributo è del tipo 'int' perchè deve concordare con il tipo richiesto dal costruttore parametrico della classe "NTPClient".
245  Sarebbe stato più ottimizzato specificarlo come 'unsigned int'.
246  */
248  static int m_UpdateInterval;
249 
250  // Valore di enumerazione 'TimeFormat' indicante il formato di visualizzazione dell'ora --> 12h/24h
251  /*
252  - TimeFormat::_12HOURS --> formato 12h
253  - TimeFormat::_24HOURS --> formato 24h
254  Anche qua, per via della staticità, viene applicata la gestione analizzata prima.
255  */
258 
259  // Valore di enumerazione 'TimePeriod' indicante il periodo
260  /*
261  Variabile utilizzata solo nel caso dell'uso del formato --> 12h.
262  - TimePeriod::NOT_USED --> non in uso
263  - TimePeriod::AM --> AM
264  - TimePeriod::PM --> PM
265  Anche qua, per via della staticità, viene applicata la gestione analizzata prima.
266  */
269 
270  /*Init*/
271 public:
272  // Inizializza la comunicazione con il Time Server con i rispettivi costruttori
273  // Verranno utilizzati costruttori della classe "WiFiUDP" e della classe "NTPClient"
274  /*
275  Questo metodo, fondamentale, "dà vita" alla sincronizzazione dell'ora corrente. Effettua rispettivamente due allocazioni (dinamiche [heap])
276  attraverso rispettivi costruttori delle classi sopra elencate.
277  Analizzando i due costruttori:
278  --- costruttore della classe "WiFiUDP" non richiede alcun parametro
279  --- costruttore della classe "NTPClient" richiede 4 parametri, i quali sono:
280  1 --> Oggetto che rappresenta il protocollo di comunicazione utilizzato
281  2 --> Stringa che rappresenta su quale 'pool' prelevare i valori richiesti (ora corrente)
282  3 --> Offset per il calcolo dell'ora corrente con Base --> Meridiano di Greenwich
283  4 --> intervallo, in 'ms' [millisecondi] per l'aggiornamento dei valori, cioè ogni quanto viene effettuata una richiesta dei valori al Time Server
284  I parametri, per evitare inutili copie, vengono passati per riferimento [reference --> '&'] (ove possibile).
285  Il metodo ritorna un valore booleano, utilizzato per comunicare eventuali errori durante l'allocazione.
286  Inoltre, prima dell'effettiva allocazione, esegue una deallocazione [delete] se necessaria.
287  Anche qua ritroviamo la specificazione di staticità. Nel caso di applicazione ad un metodo, dissocia il metodo stesso da qualsiasi possibile istanza
288  della classe. Quindi, il metodo sarà richiamabile come se fosse globale (e statico). Sarà solamente necessario anteporre il nome della classe di
289  appartenenza. Ricordiamo anche che i metodi statici possono operare solo su variabili statiche, che anch'esse, essendo globali (e statiche) sono
290  totalmente dissociate da possibili istanze della classe stessa (da oggetti).
291  */
292 
293  // Init (1) --> default
294  // Utilizzerà i valori forniti dalle espressioni costanti [constexpr] dichiarate all'inizio dell'intestazione
315  static bool Init();
316 
317  // Init (2) --> parametrico
318  // Utilizzerà i valori forniti dalle espressioni costanti [constexpr] dichiarate all'inizio dell'intestazione
319  // Utilizzerà il valore fornito come parametro dall'utente richiamante questo metodo solamente per l'assegnazione del valore all'attributo 'm_TimeFormat'
342  static bool Init(const TimeFormat& t_TimeFormat);
343 
344  // Init (3) --> parametrico
345  // Utilizzerà i valori forniti dai parametri forniti dall'utente richiamante questo metodo
372  static bool Init(WiFiUDP* t_UDPProtocol, const char* t_PoolingZone, const int& t_TimeOffset, const int& t_UpdateInterval, const TimeFormat& t_TimeFormat);
373 
374  /*Service management*/
375 private:
376  // Inizia l'interrogazione del Time Server
377  /*
378  Questo metodo viene utilizzato per iniziare l'interrogazione del Time Server. Non è supposto come metodo richiamabile dall'utente, ma viene automaticamente richiamato
379  in ciascun override del metodo 'Init'.
380  Non assicura un'effettivo inizio della procedura di interrogazione. Infatti, quest'ultima necessità di una connessione ad Internet. Per testarla verrà utilizzata la classe
381  "ESP8266WiFi". In caso negativo, verrà restituito un valore booleano 'false' al metodo 'Init', che a sua volta comunicherà l'errore.
382  In questo caso sarà necessaria una richiamata del metodo 'Init', il quale effettuerà deallocazioni e reallocazioni e ritenterà con lo 'StartService'.
383  Anche qua, per via della staticità, viene applicata la gestione analizzata prima.
384  */
403  static bool StartService();
404 
405  // Arresta l'interrogazione del Time Server
406  /*
407  Questo metodo viene utilizzato per arrestare l'interrogazione del Time Server. Non è supposto come metodo richiamabile dall'utente. Questo metodo viene richiamto
408  ogni qualvolta l'oggetto 'm_UDPProtocol' sta per essere deallocato. Questo viene effettuato per garantire non tanto una corretta deallocazione, ma soprattutto
409  una corretta chiusura della conversazione con il Time Server.
410  Le effettive chiamate di questo metodo compaiono in ciascun override del metodo 'Init' durante la reallocazione con pre-deallocazione.
411  Anche qua, per via della staticità, viene applicata la gestione analizzata prima.
412  */
429  static bool StopService();
430 
431  /*LowLevel getters*/
432  /*
433  I seguenti metodi LowLevel sono supposti soprattutto per uso a scopo di debug e management manuale.
434  Forniscono un punto di accesso costante a VALORE MODIFICABILE (quindi dereferenziabile ma non reindirizzabile).
435  In release mode, potrebbe risultare efficace cambiare il contrassegno da 'public' a 'private'.
436  Anche qua, per via della staticità, viene applicata la gestione analizzata prima.
437  */
438 public:
439  // Ritorna un puntatore all'oggetto di classe "WiFiUDP"
451  static WiFiUDP* const get_UDPProtocol();
452 
453  // Ritorna un puntatore all'oggetto di classe "NTPClient"
465  static NTPClient* const get_NTPEntryPoint();
466 
467  // Ritorna un puntatore a 'm_PoolingZone'
479  static const char* const get_PoolingZone();
480 
481  // Ritorna un puntatore a 'm_TimeOffset'
493  static int* const get_TimeOffset();
494 
495  // Ritorna un puntatore a 'm_UpdateInterval'
507  static int* const get_UpdateInterval();
508 
509  // Ritorna un puntatore a 'm_TimeFormat'
521  static TimeFormat* const get_TimeFormat();
522 
523  // Ritorna un puntatore a 'm_TimePeriod'
535  static TimePeriod* const get_TimePeriod();
536 
537  /*LowLevel reallocator*/
538  /*
539  Il seguente metodo è supposto soprattutto per uso a scopo di debug e management manuale.
540  Esegue una riallocazione degli oggetti interessati con i corrispettivi coostruttori (di librerie 'WiFiUDP' e 'NTPClient') con i valori degli attributi interessati
541  della classe.
542  Inoltre, prima dell'effettiva riallocazione, esegue una deallocazione [delete] se necessaria.
543  Il metodo ritorna un valore booleano, utilizzato per comunicare eventuali errori durante l'allocazione.
544  Anche qua, per via della staticità, viene applicata la gestione analizzata prima.
545  */
546 public:
547  // Riesegue una operazione di inizializzazione con i valori degli attributi 'm_UDPProtocol', 'm_NTPEntryPoint', 'm_TimeOffset', 'm_UpdateInterval'
568  static bool ReInit();
569 
570  /*Value Setters*/
571 public:
572  // Imposta il valore dell'attributo 'm_TimeFormat'
573  /*
574  Metodo di impostazione che permette di impostare il valore dell'attributo 'm_TimeFormat' tramite il parametro 't_FormatTime' indicato dall'utente.
575  Questo metodo restituisce un valore booleano per indicare se il valore fornito come parametro 't_TimeFormat' ha provocato o meno un cambiamento nel valore
576  precedente di 'm_TimeFormat'. Quindi, si avrà in ritorno il valore 'false' se il 'm_TimeFormat' risulterà uguale a 'm_TimeFormat'.
577  Anche qua, per via della staticità, viene applicata la gestione analizzata prima.
578  */
597  static bool set_TimeFormat(const TimeFormat& t_TimeFormat);
598 
599  /*Metodi*/
600 public:
601  // Ritorna il valore corrispondente al giorno corrente
602  /*
603  Uno dei metodi principali di questa classe.
604  Ritorna il giorno corrente sincronizzato via connessione Internet.
605  Anche qua, per via della staticità, viene applicata la gestione analizzata prima.
606  */
620  static int get_Day();
621 
622  // Ritorna il valore corrispondente all'ora corrente formattazione --> 'hh'
623  /*
624  Uno dei metodi principali di questa classe.
625  Ritorna l'ora nel formato 'hh' corrente sincronizzata via connessione Internet.
626  Anche qua, per via della staticità, viene applicata la gestione analizzata prima.
627  */
645  static int get_Hours();
646 
647  // Ritorna il valore corrispondente all'ora corrente formattazione --> 'mm'
648  /*
649  Uno dei metodi principali di questa classe.
650  Ritorna l'ora corrente nel formato 'mm' corrente sincronizzata via connessione Internet.
651  Anche qua, per via della staticità, viene applicata la gestione analizzata prima.
652  */
668  static int get_Minutes();
669 
670  // Ritorna il valore corrispondente all'ora corrente formattazione --> 'ss'
671  /*
672  Uno dei metodi principali di questa classe.
673  Ritorna l'ora corrente nel formato 'ss' corrente sincronizzata via connessione Internet.
674  Anche qua, per via della staticità, viene applicata la gestione analizzata prima.
675  */
691  static int get_Seconds();
692 
693  // Ritorna il valore corrispondente all'ora corrente formattazione --> 'hh:mm:ss'
694  /*
695  Il metodo principale di questa classe.
696  Ritorna l'ora corrente sincronizzata via connessione Internet automaticamente formattata nel modo seguente --> 'hh:mm:ss'.
697  L'ora corrente formattata in questo modo viene ritornata nel tipo 'String' [stringa].
698  Anche qua, per via della staticità, viene applicata la gestione analizzata prima.
699  */
717  static String get_CurrentFormattedTime();
718 
719  // Ritorna il valore corrispondente all'ora corrente nella formattazione --> 'hh:mm'
720  /*
721  Il metodo principale di questa classe.
722  Ritorna l'ora corrente sincronizzata via connessione Internet automaticamente formattata nel modo seguente --> 'hh:mm'.
723  L'ora corrente formattata in questo modo viene ritornata nel tipo 'String' [stringa].
724  Anche qua, per via della staticità, viene applicata la gestione analizzata prima.
725  */
743  static String get_CurrentFormattedTimeHM();
744 
745  // Ritorna il valore corrispondente all'ora corrente espressa in SECONDI passati dalla data "1 Gennaio 1900"
746  /*
747  Questo metodo ritorna il valore dell'ora corrente come "secondi passati dalla data "1 Gennaio 1900"".
748  Ci aspettiamo un valore "enorme", per questo il tipo di ritorno è 'unsigned long'.
749  Anche qua, per via della staticità, viene applicata la gestione analizzata prima.
750  */
766  static unsigned long get_EpochTime();
767 
768  // Ritorna il valore corrispondente al periodo durante la lettura in formato 12h
769  /*
770  Anche qua, per via della staticità, viene applicata la gestione analizzata prima.
771  */
786  static const TimePeriod get_Period();
787 
788  // Ritorna il valore corrispondente al formato corrente dell'ora
789  /*
790  Anche qua, per via della staticità, viene applicata la gestione analizzata prima.
791  */
805  static const TimeFormat get_Format();
806 
807  /*Invalidator*/
808  /*
809  L'invalidatore consiste in quel valore che viene ritornato ogni qualvolta una chiamata da parte dell'utente ai metodi non produce il risultato atteso.
810  E' importante specificare che, l'invalidatore, pur essendo costante, non deve essere dichiarato come 'constexpr' perchè NON deve seguire le regole di
811  comportamento della direttiva '#define'. Il compilatore NON deve sostituire il nome dell'attributo con un valore numerico costante --> i.e. RVALUE!!
812  L'invalidatore deve essere un vero e proprio attributo della classe, che però non deve mai appartenere ad uno specifico oggetto. Per questo deve essere sempre
813  specificato come statico. Ovviamente, avrà una locazione nel Data Segment, sarà quindi globale ma statico (valido sono in questa unità di traslazione (file)) e utilizzabile
814  solamente nell'ambito della classe di dichiarazione.
815  */
816  /*Attributo*/
817 private:
818  // Valore costante che viene ritornato in caso di invalidità riscontrata nell'oggetto durante il dereferenziamento
819  // per la chiamata dei metodi.
820  // Il valore invalido utilizzato è un valore impossibile, cioè che non potrebbe essere mai restituito naturalmente.
822  static const int m_Invalidator;
823 
824  /*getter*/
825 public:
826  // Metodo per il ritorno del valore dell'Invalidatore. Verrà ritornata una referenza [reference --> '&'] costante, in modo tale da ottimizzare il processo e,
827  // allo stesso tempo evitare modifiche inappropriate.
828  /*
829  Un'altra particolarità di questo metodo sta nel fatto che è definita come 'inline'. Questa keyword comunica al compilatore, ovunque trovi una chiamata
830  a questo metodo, di NON effettuare una vera e propria chiamata, ma di sostituire la porzione del codice per la chiamata con il BODY del metodo (la implementazione stessa).
831  Questa tecnica risulta molto utile per funzioni che effettuano pochissime operazioni e sono sottoposte a frequenti chiamate.
832  Anche qua, per via della staticità, viene applicata la gestione analizzata prima.
833  */
844  static inline const int& get_Invalidator();
845 };
846 
847 // Dichiarazione delle variabili GLOBALI STATICHE
848 // Risiederanno nel Data Segment
849 /*
850 Essendo statiche in classe, tutti gli attributi non sono altro che variabili GLOBALI STATICHE.
851 Per questo è richiesta la dichiarazione globale. Non è necessario specificare 'static' essendo già stato specificato nella dichiarazione degli
852 attributi nella classe stessa.
853 */
855 WiFiUDP* Clock::m_UDPProtocol = nullptr;
857 NTPClient* Clock::m_NTPEntryPoint = nullptr;
859 const char* Clock::m_PoolingZone;
870 
Clock::TimeFormat::_12HOURS
Clock::~Clock
~Clock()=default
Distruttore della classe Clock.
Clock::StopService
static bool StopService()
Metodo per arrestare il servizio di sincronizzazione online dell'ora corrente.
Definition: Clock.cpp:185
Clock::get_NTPEntryPoint
static NTPClient *const get_NTPEntryPoint()
LowLevel getter per l'attributo m_NTPEntryPoint.
Definition: Clock.cpp:206
Clock::Clock
Clock()=default
Costruttore di default della classe Clock.
Clock::TimeFormat
TimeFormat
Enumerazione per la gestione del formato di visualizzazione dell'ora corrente.
Definition: Clock.h:165
Clock::get_UDPProtocol
static WiFiUDP *const get_UDPProtocol()
LowLevel getter per l'attributo m_UDPProtocol.
Definition: Clock.cpp:199
Clock::get_TimePeriod
static TimePeriod *const get_TimePeriod()
LowLevel getter per l'attributo m_TimePeriod.
Definition: Clock.cpp:245
Clock::TimePeriod::PM
Clock::TimePeriod
TimePeriod
Enumerazione per la gestione del periodo durante la visualizzazione dell'ora corrente.
Definition: Clock.h:182
Clock::Init
static bool Init()
Metodo di inizializzazione dei componenti della classe.
Definition: Clock.cpp:16
Clock::TimePeriod::AM
Clock::m_TimeOffset
static int m_TimeOffset
Definition: Clock.h:234
Clock::m_Period
static TimePeriod m_Period
Definition: Clock.h:268
Clock::get_TimeOffset
static int *const get_TimeOffset()
LowLevel getter per l'attributo m_TimeOffset.
Definition: Clock.cpp:221
Clock::ReInit
static bool ReInit()
LowLevel reallocator della classe Clock.
Definition: Clock.cpp:253
Clock::m_NTPEntryPoint
static NTPClient * m_NTPEntryPoint
Definition: Clock.h:213
Clock::m_UpdateInterval
static int m_UpdateInterval
Definition: Clock.h:248
Clock::get_Hours
static int get_Hours()
Permette di ottenere il valore dell'ora sincronizzata online. Il formato è: 'h/hh'.
Definition: Clock.cpp:346
Clock::get_PoolingZone
static const char *const get_PoolingZone()
LowLevel getter per l'attributo m_PoolingZone.
Definition: Clock.cpp:213
Clock::get_EpochTime
static unsigned long get_EpochTime()
Permette di ottenere il valore dell'ora sincronizzata online Il formato è: 'secondi passati dal '1 Ge...
Definition: Clock.cpp:698
Clock::get_Minutes
static int get_Minutes()
Permette di ottenere il valore dell'ora sincronizzata online. Il formato è: 'm/mm'.
Definition: Clock.cpp:404
Clock__file::_PoolingZone
static constexpr auto _PoolingZone
Definition: Clock.h:60
Clock
Classe per la gestione della sincronizzazione online dell'ora corrente.
Definition: Clock.h:119
Clock::get_CurrentFormattedTime
static String get_CurrentFormattedTime()
Permette di ottenere il valore dell'ora sincronizzata online. Il formato è: 'hh:mm:ss'.
Definition: Clock.cpp:458
Clock::m_TimeFormat
static TimeFormat m_TimeFormat
Definition: Clock.h:257
Clock::m_UDPProtocol
static WiFiUDP * m_UDPProtocol
Definition: Clock.h:204
Clock::get_Period
static const TimePeriod get_Period()
Permette di ottenere il valore del periodo corrente.
Definition: Clock.cpp:732
Clock::m_Invalidator
static const int m_Invalidator
Definition: Clock.h:822
Clock::get_Format
static const TimeFormat get_Format()
Permette di ottenere il valore del formato corrente dell'ora.
Definition: Clock.cpp:746
Clock::m_PoolingZone
static const char * m_PoolingZone
Definition: Clock.h:222
Clock__file::_UpdateInterval
static constexpr auto _UpdateInterval
Definition: Clock.h:66
Clock::set_TimeFormat
static bool set_TimeFormat(const TimeFormat &t_TimeFormat)
Permette di impostare il formato di visualizzazione dell'ora corrente.
Definition: Clock.cpp:297
Clock::get_TimeFormat
static TimeFormat *const get_TimeFormat()
LowLevel getter per l'attributo m_TimeFormat.
Definition: Clock.cpp:237
Clock::get_UpdateInterval
static int *const get_UpdateInterval()
LowLevel getter per l'attributo m_UpdateInterval.
Definition: Clock.cpp:229
Clock::get_Seconds
static int get_Seconds()
Permette di ottenere il valore dell'ora sincronizzata online. Il formato è: 's/ss'.
Definition: Clock.cpp:431
Clock::TimePeriod::NOT_USED
Clock::StartService
static bool StartService()
Metodo per avviare il servizio di sincronizzazione online dell'ora corrente.
Definition: Clock.cpp:167
Clock__file::_Period
static constexpr auto _Period
Definition: Clock.h:77
Clock::get_Invalidator
static const int & get_Invalidator()
Permette di ottenere l'invalidatore della classe.
Definition: Clock.cpp:761
Clock::TimeFormat::INVALID_REFERENCE
Clock__file::_ElegantAdj
static constexpr auto _ElegantAdj
Definition: Clock.h:81
Clock__file::_invalidvalue
static constexpr int _invalidvalue
Definition: Clock.h:87
Clock::get_Day
static int get_Day()
Permette di ottenere il valore del giorno corrente sincronizzato online.
Definition: Clock.cpp:319
Clock__file::_TimeOffset
static constexpr auto _TimeOffset
Definition: Clock.h:63
Clock__file
Spazio dei nomi riferito al file Clock.h.
Clock::TimeFormat::_24HOURS
Clock::get_CurrentFormattedTimeHM
static String get_CurrentFormattedTimeHM()
Permette di ottenere il valore dell'ora sincronizzata online. Il formato è: 'hh:mm'.
Definition: Clock.cpp:569