nl:: Weave:: System:: Layer
#include <src/system/SystemLayer.h>
This provides access to timers according to the configured event handling model.
Riepilogo
Per WEAVE_SYSTEM_CONFIG_USE_SOCKETS
, la notifica di idoneità dell'evento viene gestita tramite l'implementazione tradizionale del sondaggio/selezione nell'adattamento della piattaforma.
Per WEAVE_SYSTEM_CONFIG_USE_LWIP
, la notifica di idoneità degli eventi viene gestita tramite eventi / messaggi e hook specifici della piattaforma e del sistema per il sistema di eventi/messaggi.
Costruttori e distruttori |
|
---|---|
Layer(void)
|
Tipi pubblici |
|
---|---|
EventHandler)(Object &aTarget, EventType aEventType, uintptr_t aArgument)
|
typedefError(*
|
TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)
|
typedefvoid(*
|
Funzioni pubbliche |
|
---|---|
AddEventHandlerDelegate(LwIPEventHandlerDelegate & aDelegate)
|
Error
In questo modo, viene aggiunto un delegato al gestore di eventi al livello di sistema per estendere la capacità di gestire gli eventi LwIP.
|
CancelTimer(TimerCompleteFunct aOnComplete, void *aAppState)
|
void
Questo metodo consente di annullare un timer one-shot, avviato prima del giorno
StartTimer() . |
DispatchEvent(Event aEvent)
|
Error
Invia l'evento specificato per la gestione da parte di questa istanza.
|
DispatchEvents(void)
|
Error
Si tratta di un wrapper sintattico attorno a un hook specifico della piattaforma che influisce su un loop di eventi, attende una coda che gestisce questa istanza, estrae gli eventi da quella coda e li invia per la gestione.
|
GetPlatformData(void) const
|
void *
Questa operazione restituisce tutti i dati della piattaforma specifici del client assegnati all'istanza, se sono stati impostati in precedenza.
|
HandleEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
|
Error
Questa opzione implementa l'invio e la gestione effettivi di un evento Livello di sistema Weave.
|
HandlePlatformTimer(void)
|
Error
Gestire l'evento di scadenza del timer della piattaforma.
|
HandleSelectResult(int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet)
|
void
Gestire l'I/O di una chiamata selezionata.
|
Init(void *aContext)
|
Error
|
NewTimer(Timer *& aTimerPtr)
|
Error
|
PostEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
|
Error
Verrà pubblicato un evento / messaggio del tipo specificato con l'argomento fornito nella coda di eventi specifica della piattaforma di questa istanza.
|
PrepareSelect(int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime)
|
void
Prepara i set di descrittori dei file con cui lavorare
select() . |
ScheduleWork(TimerCompleteFunct aComplete, void *aAppState)
|
Error
Pianifica l'esecuzione di una funzione con una firma identica a
TimerCompleteFunct il prima possibile nel thread Weave. |
SetPlatformData(void *aPlatformData)
|
void
In questo modo, i dati della piattaforma specifici del client specificati vengono impostati sull'istanza per recuperarli in un secondo momento dalla piattaforma client.
|
Shutdown(void)
|
Error
|
StartTimer(uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState)
|
Error
Questo metodo avvia un timer one-shot.
|
State(void) const
|
LayerState
Restituisce lo stato attuale dell'oggetto livello.
|
WakeSelect(void)
|
void
Riattiva il thread di I/O che monitora i descrittori del file utilizzando select() scrivendo un singolo byte nella pipeline di attivazione.
|
Funzioni statiche pubbliche |
|
---|---|
GetClock_Monotonic(void)
|
uint64_t
Restituisce il tempo di un sistema monotonico in unità di microsecondi.
|
GetClock_MonotonicHiRes(void)
|
uint64_t
Restituisce un tempo di sistema monotonico (potenzialmente) ad alta risoluzione in unità di microsecondi.
|
GetClock_MonotonicMS(void)
|
uint64_t
Restituisce un tempo di sistema monotonico in unità di millisecondi.
|
GetClock_RealTime(uint64_t & curTime)
|
Error
Restituisce il tempo reale (civile) corrente nel formato orario Unix in microsecondi.
|
GetClock_RealTimeMS(uint64_t & curTimeMS)
|
Error
Restituisce l'ora reale (civile) corrente nel formato dell'ora Unix in millisecondi.
|
SetClock_RealTime(uint64_t newCurTime)
|
Error
Definisce il concetto di tempo reale (civile) attuale della piattaforma.
|
Tipi pubblici
EventHandler
Error(* EventHandler)(Object &aTarget, EventType aEventType, uintptr_t aArgument)
TimerCompleteFunct
void(* TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)
Funzioni pubbliche
AddEventHandlerDelegate
Error AddEventHandlerDelegate( LwIPEventHandlerDelegate & aDelegate )
In questo modo, viene aggiunto un delegato al gestore di eventi al livello di sistema per estendere la capacità di gestire gli eventi LwIP.
Dettagli | |||||
---|---|---|---|---|---|
Parametri |
|
||||
Valori restituiti |
|
CancelTimer
void CancelTimer( TimerCompleteFunct aOnComplete, void *aAppState )
Questo metodo consente di annullare un timer one-shot, avviato prima del giorno StartTimer()
.
Dettagli | |||||
---|---|---|---|---|---|
Parametri |
|
DispatchEvent
Error DispatchEvent( Event aEvent )
Invia l'evento specificato per la gestione da parte di questa istanza.
Lo scollegamento del tipo e degli argomenti dall'evento viene gestito da un hook specifico della piattaforma che deve quindi richiamare layer::HandleEvent per l'invio effettivo.
Dettagli | |||
---|---|---|---|
Parametri |
|
||
Restituisce |
WEAVE_SYSTEM_NO_ERROR all'esito positivo; in caso contrario, un errore specifico che indica il motivo dell'errore di inizializzazione.
|
DispatchEvents
Error DispatchEvents( void )
Si tratta di un wrapper sintattico attorno a un hook specifico della piattaforma che influisce su un loop di eventi, attende una coda che gestisce questa istanza, estrae gli eventi da quella coda e li invia per la gestione.
Dettagli | |
---|---|
Restituisce |
WEAVE_SYSTEM_NO_ERROR in caso di operazione riuscita; in caso contrario, un errore specifico che indica il motivo dell'errore di inizializzazione.
|
GetPlatformData
void * GetPlatformData( void ) const
Questa operazione restituisce tutti i dati della piattaforma specifici del client assegnati all'istanza, se sono stati impostati in precedenza.
Dettagli | |
---|---|
Restituisce |
Dati della piattaforma specifici del cliente, se già impostati; altrimenti NULL.
|
HandleEvent
Error HandleEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
Questa opzione implementa l'invio e la gestione effettivi di un evento Livello di sistema Weave.
Dettagli | |||||||
---|---|---|---|---|---|---|---|
Parametri |
|
||||||
Valori restituiti |
|
HandlePlatformTimer
Error HandlePlatformTimer( void )
Gestire l'evento di scadenza del timer della piattaforma.
Chiamate nl::Weave::System::Timer::HandleSorrisoTimers per gestire i timer scaduti. Si presume che questa API venga chiamata solo nel thread che possiede l'oggetto livello di sistema Weave.
Dettagli | |
---|---|
Restituisce |
WEAVE_SYSTEM_NO_ERROR in caso di operazione riuscita, codice di errore in caso contrario.
|
HandleSelectResult
void HandleSelectResult( int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet )
Gestire l'I/O di una chiamata selezionata.
Questo metodo registra l'evento di I/O in attesa in ciascun endpoint attivo e quindi richiama le rispettive funzioni di gestione di I/O per quegli endpoint.
Dettagli | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parametri |
|
Init
Error Init( void *aContext )
incorporato
Layer( void )
NewTimer
Error NewTimer( Timer *& aTimerPtr )
PostEvent
Error PostEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
Verrà pubblicato un evento / messaggio del tipo specificato con l'argomento fornito nella coda di eventi specifica della piattaforma di questa istanza.
Dettagli | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parametri |
|
||||||||
Valori restituiti |
|
PrepareSelect
void PrepareSelect( int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime )
Prepara i set di descrittori dei file con cui lavorare select()
.
Dettagli | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parametri |
|
ScheduleWork
Error ScheduleWork( TimerCompleteFunct aComplete, void *aAppState )
Pianifica l'esecuzione di una funzione con una firma identica a TimerCompleteFunct
il prima possibile nel thread Weave.
Dettagli | |||||||
---|---|---|---|---|---|---|---|
Parametri |
|
||||||
Valori restituiti |
|
SetPlatformData
void SetPlatformData( void *aPlatformData )
In questo modo, i dati della piattaforma specifici del client specificati vengono impostati sull'istanza per recuperarli in un secondo momento dalla piattaforma client.
Dettagli | |||
---|---|---|---|
Parametri |
|
Arresto
Error Shutdown( void )
StartTimer
Error StartTimer( uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState )
Questo metodo avvia un timer one-shot.
Dettagli | |||||||
---|---|---|---|---|---|---|---|
Parametri |
|
||||||
Restituisce |
WEAVE_SYSTEM_NO_ERROR Al termine dell'operazione.
|
||||||
Restituisce |
WEAVE_SYSTEM_ERROR_NO_MEMORY Se non è possibile allocare un timer.
|
||||||
Restituisce |
Altro valore che indica che il timer non è stato avviato.
|
Stato
LayerState State( void ) const
Restituisce lo stato attuale dell'oggetto livello.
WakeSelect
void WakeSelect( void )
Riattiva il thread di I/O che monitora i descrittori del file utilizzando select() scrivendo un singolo byte nella pipeline di attivazione.
Nota:se WakeSelect()
viene chiamato dall'interno di HandleSelectResult()
, la scrittura sul wake pipe può essere saltata, poiché il thread di I/O è già attivo.
Inoltre, non ci importa se questa scrittura non riesce perché l'unico errore ragionevolmente probabile è che la barra verticale è piena, nel qual caso il thread di chiamata selezionato si riattiva comunque.
Funzioni statiche pubbliche
GetClock_Monotonic
uint64_t GetClock_Monotonic( void )
Restituisce il tempo di un sistema monotonico in unità di microsecondi.
Questa funzione restituisce un tempo trascorso in microsecondi a partire da un'epoca arbitraria definita dalla piattaforma. È garantito che il valore restituito sia sempre crescente (ovvero che non venga mai completato il wrapping) tra i riavvii del sistema. Inoltre, è garantito che la sorgente temporale sottostante continui a funzionare durante le modalità di sospensione del sistema che non comportano un riavvio alla riattivazione.
Anche se alcune piattaforme possono scegliere di restituire un valore che misura il tempo dall'avvio del sistema, le applicazioni non devono fare affidamento su questo valore. Inoltre, l'epoca per GetClock_Monotonic() non deve essere la stessa di quella per qualsiasi altra funzione GetClock.... Pertanto, i calcoli di tempi relativi possono essere eseguiti solo per valori restituiti dalla stessa funzione.
È garantita la sicurezza dei thread su qualsiasi piattaforma che utilizza il thread.
Dettagli | |
---|---|
Restituisce |
Tempo trascorso in microsecondi da un'epoca arbitraria definita dalla piattaforma.
|
GetClock_MonotonicHiRes
uint64_t GetClock_MonotonicHiRes( void )
Restituisce un tempo di sistema monotonico (potenzialmente) ad alta risoluzione in unità di microsecondi.
Questa funzione restituisce un tempo trascorso in microsecondi a partire da un'epoca arbitraria definita dalla piattaforma. È garantito che il valore restituito sia sempre crescente (ovvero che non venga mai completato il wrapping) tra i riavvii del sistema. Tuttavia, il timer sottostante non è tenuto a rispettare continuamente gli stati di sospensione profonda del sistema.
Alcune piattaforme possono implementare GetClock_MonotonicHiRes() utilizzando un timer ad alta risoluzione in grado di ottenere una precisione maggiore rispetto a GetClock_Monotonic() e che non sia soggetto a regolazioni graduali dell'orologio (slewing). I sistemi senza questo timer possono semplicemente restituire lo stesso valore di GetClock_Monotonic().
Il periodo di tempo restituito da GetClock_MonotonicHiRes() non deve essere necessariamente uguale a quello di qualsiasi altra funzione GetClock..., incluso GetClock_Monotonic().
È garantita la sicurezza dei thread su qualsiasi piattaforma che utilizza il thread.
Dettagli | |
---|---|
Restituisce |
Tempo trascorso in microsecondi da un'epoca arbitraria definita dalla piattaforma.
|
GetClock_MonotonicMS
uint64_t GetClock_MonotonicMS( void )
Restituisce un tempo di sistema monotonico in unità di millisecondi.
Questa funzione restituisce un tempo trascorso in millisecondi trascorso da un'epoca arbitraria definita dalla piattaforma. È garantito che il valore restituito sia sempre crescente (ovvero che non venga mai completato il wrapping) tra i riavvii del sistema. Inoltre, è garantito che la sorgente temporale sottostante continui a funzionare durante le modalità di sospensione del sistema che non comportano un riavvio alla riattivazione.
Anche se alcune piattaforme possono scegliere di restituire un valore che misura il tempo dall'avvio del sistema, le applicazioni non devono fare affidamento su questo valore. Inoltre, l'epoca per GetClock_Monotonic() non deve essere la stessa di quella per qualsiasi altra funzione GetClock.... Pertanto, i calcoli di tempi relativi possono essere eseguiti solo per valori restituiti dalla stessa funzione.
È garantita la sicurezza dei thread su qualsiasi piattaforma che utilizza il thread.
Dettagli | |
---|---|
Restituisce |
Tempo trascorso in millisecondi trascorso da un'epoca arbitraria definita dalla piattaforma.
|
GetClock_RealTime
Error GetClock_RealTime( uint64_t & curTime )
Restituisce il tempo reale (civile) corrente nel formato orario Unix in microsecondi.
Questo metodo restituisce il concetto di tempo reale attuale della piattaforma locale, espresso come valore temporale Unix scalato in microsecondi. È garantito che l'orologio sottostante abbia un ritmo di almeno secondi interi (valori di 1.000.000), ma su alcune piattaforme potrebbe funzionare più velocemente.
Se la piattaforma sottostante è in grado di monitorare in tempo reale, ma il sistema attualmente non è sincronizzato, GetClock_RealTime() restituirà l'errore WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED.
Sulle piattaforme che non sono in grado di monitorare in tempo reale, il metodo GetClock_RealTime() potrebbe non essere presente, generando un errore di link per qualsiasi applicazione che vi faccia riferimento. In alternativa, queste piattaforme potrebbero fornire un'implementazione di GetClock_RealTime() che restituisce sempre l'errore WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.
È garantita la sicurezza dei thread su qualsiasi piattaforma che utilizza il thread.
Dettagli | |||||||
---|---|---|---|---|---|---|---|
Parametri |
|
||||||
Valori restituiti |
|
GetClock_RealTimeMS
Error GetClock_RealTimeMS( uint64_t & curTimeMS )
Restituisce l'ora reale (civile) corrente nel formato dell'ora Unix in millisecondi.
Questo metodo restituisce il concetto di tempo reale attuale della piattaforma locale, espresso come valore di tempo Unix scalato in millisecondi. È garantito che l'orologio sottostante abbia un ritmo di almeno secondi interi (valori di 1.000.000), ma su alcune piattaforme potrebbe funzionare più velocemente.
Se la piattaforma sottostante è in grado di monitorare in tempo reale, ma il sistema attualmente non è sincronizzato, GetClock_RealTimeMS() restituirà l'errore WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED.
Sulle piattaforme che non sono in grado di monitorare in tempo reale, il metodo GetClock_RealTimeMS() potrebbe non essere presente, generando un errore di link per qualsiasi applicazione che vi faccia riferimento. In alternativa, queste piattaforme potrebbero fornire un'implementazione di GetClock_RealTimeMS() che restituisce sempre l'errore WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.
È garantita la sicurezza dei thread su qualsiasi piattaforma che utilizza il thread.
Dettagli | |||||||
---|---|---|---|---|---|---|---|
Parametri |
|
||||||
Valori restituiti |
|
SetClock_RealTime
Error SetClock_RealTime( uint64_t newCurTime )
Definisce il concetto di tempo reale (civile) attuale della piattaforma.
Le applicazioni possono chiamare questa funzione per impostare la nozione di tempo reale attuale nella piattaforma locale. La nuova ora corrente viene espressa come valore del tempo Unix scalato in microsecondi.
Una volta impostato, l'orologio della piattaforma sottostante garantisce il tracciamento in tempo reale con una granularità di almeno secondi interi.
Alcune piattaforme potrebbero limitare le applicazioni o i processi che possono essere impostati in tempo reale. Se il chiamante non dispone dell'autorizzazione per modificare il tempo reale, la funzione SetClock_RealTime() restituirà l'errore WEAVE_SYSTEM_ERROR_ACCESS_DENIED.
Sulle piattaforme che non sono in grado di monitorare in tempo reale o che non offrono la possibilità di impostare il tempo in tempo reale, la funzione SetClock_RealTime() potrebbe non essere presente, generando un errore di link per qualsiasi applicazione che vi fa riferimento. In alternativa, queste piattaforme potrebbero fornire un'implementazione di SetClock_RealTime() che restituisce sempre l'errore WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.
È garantita la sicurezza dei thread su qualsiasi piattaforma che utilizza il thread.
Dettagli | |||||||
---|---|---|---|---|---|---|---|
Parametri |
|
||||||
Valori restituiti |
|