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) typedef
Error(*
TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError) typedef
void(*

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
[in] aDelegate
Una struttura di delegati per il gestore di eventi LwIP non inizializzata
Valori restituiti
WEAVE_SYSTEM_NO_ERROR
Un successo.
WEAVE_SYSTEM_ERROR_BAD_ARGS
Se il puntatore di funzione contenuto in aDelegate è NULL

CancelTimer

void CancelTimer(
  TimerCompleteFunct aOnComplete,
  void *aAppState
)

Questo metodo consente di annullare un timer one-shot, avviato prima del giorno StartTimer().

Dettagli
Parametri
[in] aOnComplete
Un puntatore alla funzione di callback utilizzata per chiamare StartTimer().
[in] aAppState
Un puntatore all'oggetto di stato dell'applicazione utilizzato per chiamare StartTimer().

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
[in] aEvent
L'oggetto evento specifico della piattaforma da inviare per la gestione.
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
[in,out] aTarget
Un riferimento all'oggetto livello a cui viene indirizzato l'evento.
[in] aEventType
Il tipo di evento / messaggio da gestire.
[in] aArgument
L'argomento associato all'evento / messaggio.
Valori restituiti
WEAVE_SYSTEM_NO_ERROR
Un successo.
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Se lo stato dell'oggetto IoT non è corretto.
WEAVE_SYSTEM_ERROR_UNEXPECTED_EVENT
Se il tipo di evento non viene riconosciuto.

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
[in] aSetSize
Il valore restituito della chiamata selezionata.
[in] aReadSet
Un puntatore all'insieme di descrittori dei file letti.
[in] aWriteSet
Un puntatore all'insieme di descrittori di scrittura dei file.
[in] aExceptionSet
Un puntatore all'insieme di descrittori dei file con errori.

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
[in,out] aTarget
Un puntatore all'oggetto Livello di sistema Weave che effettua la richiesta di pubblicazione.
[in] aEventType
Il tipo di evento da pubblicare.
[in,out] aArgument
L'argomento associato all'evento da pubblicare.
Valori restituiti
WEAVE_SYSTEM_NO_ERROR
Un successo.
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Se lo stato dell'oggetto Livello non è corretto.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Se la coda di eventi è già piena.
other
Sono stati generati errori specifici della piattaforma che indicano il motivo dell'errore.

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
[out] aSetSize
L'intervallo di descrittori di file nel set di descrittori di file.
[in] aReadSet
Un puntatore all'insieme di descrittori leggibili dei file.
[in] aWriteSet
Un puntatore all'insieme di descrittori dei file scrivibili.
[in] aExceptionSet
Un puntatore all'insieme di descrittori dei file con errori.
[in] aSleepTime
Un riferimento al tempo di sospensione massimo.

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
[in] aComplete
Un puntatore a una funzione di callback da chiamare quando si attiva questo timer.
[in] aAppState
Un puntatore a un oggetto di stato dell'applicazione da passare alla funzione callback come argomento.
Valori restituiti
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Se il livello del sistema non è stato inizializzato.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Se il livello del sistema non è in grado di allocare un nuovo timer.
WEAVE_SYSTEM_NO_ERROR
Un successo.

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
[in] aPlatformData
I dati della piattaforma specifica del client da impostare.

Arresto

Error Shutdown(
  void
)

StartTimer

Error StartTimer(
  uint32_t aMilliseconds,
  TimerCompleteFunct aComplete,
  void *aAppState
)

Questo metodo avvia un timer one-shot.

Dettagli
Parametri
[in] aMilliseconds
Tempo di scadenza in millisecondi.
[in] aComplete
Un puntatore alla funzione richiamata allo scadere del timer.
[in] aAppState
Un puntatore all'oggetto di stato dell'applicazione utilizzato alla scadenza del timer.
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
[out] curTime
L'ora corrente, espressa come tempo Unix scalato in microsecondi.
Valori restituiti
WEAVE_SYSTEM_NO_ERROR
Se il metodo ha esito positivo.
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Se la piattaforma è in grado di monitorare in tempo reale, ma al momento non è sincronizzata.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Se la piattaforma non è in grado di monitorare in tempo reale.

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
[out] curTime
L'ora attuale, espressa come tempo Unix scalato in millisecondi.
Valori restituiti
WEAVE_SYSTEM_NO_ERROR
Se il metodo ha esito positivo.
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Se la piattaforma è in grado di monitorare in tempo reale, ma al momento non è sincronizzata.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Se la piattaforma non è in grado di monitorare in tempo reale.

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
[in] newCurTime
La nuova ora corrente, espressa come tempo Unix scalato in microsecondi.
Valori restituiti
WEAVE_SYSTEM_NO_ERROR
Se il metodo ha esito positivo.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Se la piattaforma non è in grado di monitorare in tempo reale.
#WEAVE_SYSTEM_ERROR_ACCESS_DENIED
Se l'applicazione chiamante non dispone del privilegio necessario per impostare l'ora attuale.