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à agli eventi viene gestita tramite l'implementazione tradizionale di "sondaggio"/seleziona nell'adattamento della piattaforma.

Per WEAVE_SYSTEM_CONFIG_USE_LWIP, le notifiche di idoneità degli eventi vengono gestite 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
Ciò aggiunge un delegato per il gestore di eventi al livello di sistema per estendere la sua capacità di gestire gli eventi LwIP.
CancelTimer(TimerCompleteFunct aOnComplete, void *aAppState)
void
Questo metodo consente di annullare un timer one-shot, avviato in precedenza fino al giorno StartTimer().
DispatchEvent(Event aEvent)
Error
L'evento specificato viene inviato per essere gestito da questa istanza.
DispatchEvents(void)
Error
Si tratta di un wrapper sintattico attorno a un hook specifico della piattaforma che effettua un loop di eventi, attende una coda che gestisce l'istanza, estrae eventi dalla coda e li invia per la gestione.
GetPlatformData(void) const
void *
Vengono restituiti 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
In questo modo vengono implementati l'invio e la gestione effettivi di un evento livello del 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
Gestisci l'I/O di una chiamata selezionata.
Init(void *aContext)
Error
NewTimer(Timer *& aTimerPtr)
Error
PostEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
Error
In questo modo viene 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 il prima possibile di una funzione con una firma identica a TimerCompleteFunct nel thread Weave.
SetPlatformData(void *aPlatformData)
void
In questo modo, i dati della piattaforma specifici del client vengono impostati nell'istanza per recuperarli in un secondo momento dalla piattaforma client.
Shutdown(void)
Error
StartTimer(uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState)
Error
Questo metodo consente di avviare un timer one-shot.
State(void) const
LayerState
Restituisce lo stato corrente dell'oggetto del livello.
WakeSelect(void)
void
Riattiva il thread di I/O che monitora i descrittori dei file utilizzando select() scrivendo un singolo byte nella pipeline di riattivazione.

Funzioni statiche pubbliche

GetClock_Monotonic(void)
uint64_t
Restituisce un tempo di 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 in formato di tempo Unix in microsecondi.
GetClock_RealTimeMS(uint64_t & curTimeMS)
Error
Restituisce il tempo reale (civile) corrente in formato di tempo Unix in millisecondi.
SetClock_RealTime(uint64_t newCurTime)
Error
Imposta la nozione di tempo reale (civile) corrente nella 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
)

Ciò aggiunge un delegato per il gestore di eventi al livello di sistema per estendere la sua capacità di gestire gli eventi LwIP.

Dettagli
Parametri
[in] aDelegate
Una struttura delegata del gestore di eventi LwIP non inizializzata
Valori restituiti
WEAVE_SYSTEM_NO_ERROR
In caso di successo.
WEAVE_SYSTEM_ERROR_BAD_ARGS
Se il puntatore della funzione contenuto in aDelega è NULL

CancelTimer

void CancelTimer(
  TimerCompleteFunct aOnComplete,
  void *aAppState
)

Questo metodo consente di annullare un timer one-shot, avviato in precedenza fino al giorno StartTimer().

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

DispatchEvent

Error DispatchEvent(
  Event aEvent
)

L'evento specificato viene inviato per essere gestito da questa istanza.

L'annullamento del marshalling del tipo e degli argomenti dell'evento viene gestito da un hook specifico della piattaforma che deve 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 in caso di esito positivo; altrimenti, 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 effettua un loop di eventi, attende una coda che gestisce l'istanza, estrae eventi dalla coda e li invia per la gestione.

Dettagli
Restituisce
WEAVE_SYSTEM_NO_ERROR se l'operazione va a buon fine; in caso contrario, si tratta di un errore specifico che indica il motivo dell'errore di inizializzazione.

GetPlatformData

void * GetPlatformData(
  void
) const 

Vengono restituiti tutti i dati della piattaforma specifici del client assegnati all'istanza, se sono stati impostati in precedenza.

Dettagli
Restituisce
I dati della piattaforma specifici del client, se sono stati impostati in precedenza. In caso contrario, il valore è NULL.

HandleEvent

Error HandleEvent(
  Object & aTarget,
  EventType aEventType,
  uintptr_t aArgument
)

In questo modo vengono implementati l'invio e la gestione effettivi di un evento livello del 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
In caso di successo.
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Se lo stato dell'oggetto Inetlayer non è corretto.
WEAVE_SYSTEM_ERROR_UNEXPECTED_EVENT
Se il tipo di evento non è riconosciuto.

HandlePlatformTimer

Error HandlePlatformTimer(
  void
)

Gestire l'evento di scadenza del timer della piattaforma.

Chiamate nl::Weave::System::Timer::HandleexpiryTimers per gestire eventuali timer scaduti. Si presume che questa API venga chiamata solo mentre si trova sul thread che possiede l'oggetto Livello di sistema Weave.

Dettagli
Restituisce
WEAVE_SYSTEM_NO_ERROR in caso di esito positivo, altrimenti codice di errore.

HandleSelectResult

void HandleSelectResult(
  int aSetSize,
  fd_set *aReadSet,
  fd_set *aWriteSet,
  fd_set *aExceptionSet
)

Gestisci l'I/O di una chiamata selezionata.

Questo metodo registra l'evento I/O in sospeso in ciascun endpoint attivo e quindi richiama le rispettive funzioni di gestione di I/O per questi endpoint.

Dettagli
Parametri
[in] aSetSize
Il valore restituito della chiamata select.
[in] aReadSet
Un puntatore all'insieme di descrittori del file letto.
[in] aWriteSet
Un puntatore all'insieme di descrittori di file di scrittura.
[in] aExceptionSet
Un puntatore all'insieme di descrittori del file con errori.

Inizia

Error Init(
  void *aContext
)

Livello

 Layer(
  void
)

NewTimer

Error NewTimer(
  Timer *& aTimerPtr
)

PostEvent

Error PostEvent(
  Object & aTarget,
  EventType aEventType,
  uintptr_t aArgument
)

In questo modo viene 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 del sistema Weave che effettua la richiesta di post.
[in] aEventType
Il tipo di evento da pubblicare.
[in,out] aArgument
L'argomento associato all'evento da pubblicare.
Valori restituiti
WEAVE_SYSTEM_NO_ERROR
In caso di successo.
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Se lo stato dell'oggetto Livello non è corretto.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Se la coda degli eventi è già piena.
other
Errori specifici della piattaforma generati 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 di file leggibili.
[in] aWriteSet
Un puntatore all'insieme di descrittori di file scrivibili.
[in] aExceptionSet
Un puntatore all'insieme di descrittori del file con errori.
[in] aSleepTime
Un riferimento al tempo di sospensione massimo.

ScheduleWork

Error ScheduleWork(
  TimerCompleteFunct aComplete,
  void *aAppState
)

Pianifica l'esecuzione il prima possibile di una funzione con una firma identica a TimerCompleteFunct nel thread Weave.

Dettagli
Parametri
[in] aComplete
Un puntatore a una funzione di callback da chiamare quando viene attivato questo timer.
[in] aAppState
Un puntatore a un oggetto di stato dell'applicazione da passare alla funzione di callback come argomento.
Valori restituiti
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Se il Systemlayer non è stato inizializzato.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Se il Systemlayer non può assegnare un nuovo timer.
WEAVE_SYSTEM_NO_ERROR
In caso di successo.

SetPlatformData

void SetPlatformData(
  void *aPlatformData
)

In questo modo, i dati della piattaforma specifici del client vengono impostati nell'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 consente di avviare un timer one-shot.

Dettagli
Parametri
[in] aMilliseconds
Tempo di scadenza in millisecondi.
[in] aComplete
Un puntatore alla funzione chiamata alla scadenza del timer.
[in] aAppState
Un puntatore all'oggetto stato dell'applicazione utilizzato alla scadenza del timer.
Restituisce
WEAVE_SYSTEM_NO_ERROR In caso di esito positivo.
Restituisce
WEAVE_SYSTEM_ERROR_NO_MEMORY Se non è possibile assegnare un timer.
Restituisce
Altro valore che indica che l'avvio del timer non è riuscito.

Stato

LayerState State(
  void
) const 

Restituisce lo stato corrente dell'oggetto del livello.

WakeSelect

void WakeSelect(
  void
)

Riattiva il thread di I/O che monitora i descrittori dei file utilizzando select() scrivendo un singolo byte nella pipeline di riattivazione.

Nota: se WakeSelect() viene chiamato dall'interno di HandleSelectResult(), la scrittura nella pipeline di riattivazione può essere saltata, poiché il thread di I/O è già attivo. Inoltre, non importa se questa scrittura non riesce perché l'unico errore ragionevolmente probabile è che la barra verticale è piena, nel qual caso il thread chiamante selezionato si riattiva comunque.

Funzioni statiche pubbliche

GetClock_Monotonic

uint64_t GetClock_Monotonic(
  void
)

Restituisce un tempo di sistema monotonico in unità di microsecondi.

Questa funzione restituisce il tempo trascorso in microsecondi da un'epoca arbitraria definita dalla piattaforma. Il valore restituito è garantito in costante aumento (ovvero senza wrapping) tra i riavvii del sistema. Inoltre, è garantito che la sorgente di tempo sottostante salti continuamente durante le modalità di sospensione del sistema che non richiedono un riavvio alla riattivazione.

Anche se alcune piattaforme potrebbero scegliere di restituire un valore che misuri il tempo trascorso dall'avvio per il sistema, le applicazioni non devono fare affidamento su questo valore. Inoltre, l'epoca di GetClock_Monotonic() non deve essere uguale a quella delle altre funzioni GetClock.... Pertanto, i calcoli del tempo relativo possono essere eseguiti solo sui valori restituiti dalla stessa funzione.

Questa funzione garantisce la sicurezza dei thread su qualsiasi piattaforma che utilizzi i 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 il tempo trascorso in microsecondi da un'epoca arbitraria definita dalla piattaforma. Il valore restituito è garantito in costante aumento (ovvero senza wrapping) tra i riavvii del sistema. Tuttavia, il timer sottostante non è necessario che suoni di continuo durante gli stati di sospensione profonda del sistema.

Alcune piattaforme potrebbero implementare GetClock_MonotonicHiRes() utilizzando un timer ad alta risoluzione con maggiore precisione rispetto a GetClock_Monotonic() e che non è soggetto a regolazioni graduali dell'orologio (rotazione dell'orologio). I sistemi che non dispongono di un timer di questo tipo potrebbero semplicemente restituire lo stesso valore di GetClock_Monotonic().

L'epoca del tempo restituita da GetClock_MonotonicHiRes() non deve essere uguale a quella delle altre funzioni GetClock..., inclusa GetClock_Monotonic().

Questa funzione garantisce la sicurezza dei thread su qualsiasi piattaforma che utilizzi i 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 il tempo trascorso in millisecondi a partire da un'epoca arbitraria definita dalla piattaforma. Il valore restituito è garantito in costante aumento (ovvero senza wrapping) tra i riavvii del sistema. Inoltre, è garantito che la sorgente di tempo sottostante salti continuamente durante le modalità di sospensione del sistema che non richiedono un riavvio alla riattivazione.

Anche se alcune piattaforme potrebbero scegliere di restituire un valore che misuri il tempo trascorso dall'avvio per il sistema, le applicazioni non devono fare affidamento su questo valore. Inoltre, l'epoca di GetClock_Monotonic() non deve essere uguale a quella delle altre funzioni GetClock.... Pertanto, i calcoli del tempo relativo possono essere eseguiti solo sui valori restituiti dalla stessa funzione.

Questa funzione garantisce la sicurezza dei thread su qualsiasi piattaforma che utilizzi i thread.

Dettagli
Restituisce
Tempo trascorso in millisecondi da un'epoca arbitraria definita dalla piattaforma.

GetClock_RealTime

Error GetClock_RealTime(
  uint64_t & curTime
)

Restituisce il tempo reale (civile) corrente in formato di tempo Unix in microsecondi.

Questo metodo restituisce la nozione di tempo reale attuale nella piattaforma locale, espressa come valore di tempo Unix scalato in microsecondi. L'orologio sottostante è garantito di spuntare a una frequenza di almeno secondi interi (valori di 1.000.000), ma su alcune piattaforme può andare più veloce.

Se la piattaforma sottostante è in grado di monitorare in tempo reale, ma il sistema al momento non è sincronizzato, GetClock_RealTime() restituirà l'errore WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED.

Sulle piattaforme che non sono in grado di eseguire il monitoraggio in tempo reale, il metodo GetClock_RealTime() potrebbe essere assente, causando un errore di collegamento per qualsiasi applicazione che vi fa riferimento. In alternativa, queste piattaforme possono fornire un'implementazione di GetClock_RealTime() che restituisce sempre l'errore WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.

Questa funzione garantisce la sicurezza dei thread su qualsiasi piattaforma che utilizzi i thread.

Dettagli
Parametri
[out] curTime
L'ora attuale, espressa come tempo Unix scalato in microsecondi.
Valori restituiti
WEAVE_SYSTEM_NO_ERROR
Se il metodo è riuscito.
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Se la piattaforma è in grado di eseguire il monitoraggio in tempo reale, ma al momento non è sincronizzata.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Se la piattaforma non è in grado di eseguire il monitoraggio in tempo reale.

GetClock_RealTimeMS

Error GetClock_RealTimeMS(
  uint64_t & curTimeMS
)

Restituisce il tempo reale (civile) corrente in formato di tempo Unix in millisecondi.

Questo metodo restituisce la nozione di tempo reale attuale nella piattaforma locale, espressa come valore temporale Unix scalato in millisecondi. L'orologio sottostante è garantito di spuntare a una frequenza di almeno secondi interi (valori di 1.000.000), ma su alcune piattaforme può andare più veloce.

Se la piattaforma sottostante è in grado di monitorare in tempo reale, ma il sistema al momento non è sincronizzato, GetClock_RealTimeMS() restituirà l'errore WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED.

Sulle piattaforme che non sono in grado di eseguire il monitoraggio in tempo reale, il metodo GetClock_RealTimeMS() potrebbe essere assente, causando un errore di collegamento per qualsiasi applicazione che vi fa riferimento. In alternativa, queste piattaforme possono fornire un'implementazione di GetClock_RealTimeMS() che restituisce sempre l'errore WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.

Questa funzione garantisce la sicurezza dei thread su qualsiasi piattaforma che utilizzi i thread.

Dettagli
Parametri
[out] curTime
L'ora attuale, espressa come tempo Unix scalato in millisecondi.
Valori restituiti
WEAVE_SYSTEM_NO_ERROR
Se il metodo è riuscito.
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Se la piattaforma è in grado di eseguire il monitoraggio in tempo reale, ma al momento non è sincronizzata.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Se la piattaforma non è in grado di eseguire il monitoraggio in tempo reale.

SetClock_RealTime

Error SetClock_RealTime(
  uint64_t newCurTime
)

Imposta la nozione di tempo reale (civile) corrente nella piattaforma.

Le applicazioni possono chiamare questa funzione per impostare il concetto di tempo reale corrente nella piattaforma locale. La nuova ora corrente viene espressa come valore di tempo Unix scalato in microsecondi.

Una volta impostato, l'orologio della piattaforma sottostante è garantito per tracciare 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 al chiamante non è consentito modificare in tempo reale, la funzione SetClock_RealTime() restituirà l'errore WEAVE_SYSTEM_ERROR_ACCESS_DENIED.

Sulle piattaforme che non sono in grado di eseguire il monitoraggio in tempo reale o che non offrono la possibilità di impostare il tempo reale, la funzione SetClock_RealTime() potrebbe non essere presente, causando un errore di collegamento per qualsiasi applicazione che la fa riferimento. In alternativa, queste piattaforme possono fornire un'implementazione di SetClock_RealTime() che restituisce sempre l'errore WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.

Questa funzione garantisce la sicurezza dei thread su qualsiasi piattaforma che utilizzi i 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 è riuscito.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Se la piattaforma non è in grado di eseguire il monitoraggio in tempo reale.
#WEAVE_SYSTEM_ERROR_ACCESS_DENIED
Se l'applicazione di chiamata non dispone dei privilegi necessari per impostare l'ora attuale.