nl::Weave::System::Layer

#include <src/system/SystemLayer.h>

This provides access to timers according to the configured event handling model.

Résumé

Pour WEAVE_SYSTEM_CONFIG_USE_SOCKETS, la notification d'aptitude à un événement est gérée via une implémentation traditionnelle de sondage/sélection sur l'adaptation de plate-forme.

Pour WEAVE_SYSTEM_CONFIG_USE_LWIP, la notification de préparation aux événements est gérée via des événements / messages et des hooks spécifiques à la plate-forme et au système pour le système d'événements/de messages.

Constructeurs et destructeurs

Layer(void)

Types publics

EventHandler)(Object &aTarget, EventType aEventType, uintptr_t aArgument) typedef
Error(*
TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError) typedef
void(*

Fonctions publiques

AddEventHandlerDelegate(LwIPEventHandlerDelegate & aDelegate)
Error
Cela ajoute un délégué de gestionnaire d'événements à la couche système pour étendre sa capacité à gérer les événements LwIP.
CancelTimer(TimerCompleteFunct aOnComplete, void *aAppState)
void
Cette méthode annule un minuteur one-shot, lancé plus tôt jusqu'à StartTimer().
DispatchEvent(Event aEvent)
Error
L'événement spécifié est alors envoyé pour être traité par cette instance.
DispatchEvents(void)
Error
Il s'agit d'un wrapper syntaxique autour d'un hook spécifique à une plate-forme qui agit sur une boucle d'événements, qui attend une file d'attente qui traite cette instance, extrait des événements de cette file d'attente, puis les envoie pour traitement.
GetPlatformData(void) const
void *
Cette commande renvoie toutes les données de plate-forme spécifiques au client qui ont été attribuées à l'instance, si elles ont été définies précédemment.
HandleEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
Error
Cela implémente l'envoi et la gestion réels d'un événement de couche du système Weave.
HandlePlatformTimer(void)
Error
Gérez l'événement d'expiration du minuteur de plate-forme.
HandleSelectResult(int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet)
void
Gérer les E/S depuis un appel sélectionné
Init(void *aContext)
Error
NewTimer(Timer *& aTimerPtr)
Error
PostEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
Error
Publication d'un événement / message du type spécifié avec l'argument fourni dans la file d'attente d'événements spécifique à la plate-forme de cette instance.
PrepareSelect(int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime)
void
Préparez les ensembles de descripteurs de fichier à utiliser pour select().
ScheduleWork(TimerCompleteFunct aComplete, void *aAppState)
Error
Planifie l'exécution d'une fonction ayant une signature identique à TimerCompleteFunct sur le thread Weave.
SetPlatformData(void *aPlatformData)
void
Les données spécifiées de la plate-forme spécifique au client sont ainsi définies sur l'instance en vue d'une récupération ultérieure par la plate-forme cliente.
Shutdown(void)
Error
StartTimer(uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState)
Error
Cette méthode démarre un minuteur one-shot.
State(void) const
LayerState
Cette opération renvoie l'état actuel de l'objet calque.
WakeSelect(void)
void
Activez le thread d'E/S qui surveille les descripteurs de fichier à l'aide de select() en écrivant un seul octet dans le wakepipe.

Fonctions statiques publiques

GetClock_Monotonic(void)
uint64_t
Renvoie une heure système monotone en microsecondes.
GetClock_MonotonicHiRes(void)
uint64_t
Renvoie une heure système monotone (potentiellement) haute résolution exprimée en microsecondes.
GetClock_MonotonicMS(void)
uint64_t
Renvoie une heure système monotone en millisecondes.
GetClock_RealTime(uint64_t & curTime)
Error
Renvoie l'heure réelle (civil) actuelle au format d'heure Unix en microsecondes.
GetClock_RealTimeMS(uint64_t & curTimeMS)
Error
Renvoie l'heure réelle (civil) actuelle au format d'heure Unix en millisecondes.
SetClock_RealTime(uint64_t newCurTime)
Error
Définit la notion de temps réel (civil) actuel de la plate-forme.

Types publics

EventHandler

Error(* EventHandler)(Object &aTarget, EventType aEventType, uintptr_t aArgument)

TimerCompleteFunct

void(* TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)

Fonctions publiques

AddEventHandlerDelegate

Error AddEventHandlerDelegate(
  LwIPEventHandlerDelegate & aDelegate
)

Cela ajoute un délégué de gestionnaire d'événements à la couche système pour étendre sa capacité à gérer les événements LwIP.

Détails
Paramètres
[in] aDelegate
Structure déléguée du gestionnaire d'événements LwIP non initialisée
Valeurs de retour
WEAVE_SYSTEM_NO_ERROR
Pour la réussite.
WEAVE_SYSTEM_ERROR_BAD_ARGS
Si le pointeur de fonction contenu dans aDelegation est NULL

CancelTimer

void CancelTimer(
  TimerCompleteFunct aOnComplete,
  void *aAppState
)

Cette méthode annule un minuteur one-shot, lancé plus tôt jusqu'à StartTimer().

Détails
Paramètres
[in] aOnComplete
Pointeur vers la fonction de rappel utilisée pour appeler StartTimer().
[in] aAppState
Pointeur vers l'objet d'état de l'application utilisé pour appeler StartTimer().

DispatchEvent

Error DispatchEvent(
  Event aEvent
)

L'événement spécifié est alors envoyé pour être traité par cette instance.

Le dégroupement du type et des arguments de l'événement est géré par un hook spécifique à la plate-forme, qui doit ensuite rappeler Layer::HandleEvent pour la distribution effective.

Détails
Paramètres
[in] aEvent
Objet événement spécifique à la plate-forme à envoyer pour traitement.
Renvoie
WEAVE_SYSTEM_NO_ERROR en cas de réussite ; sinon, erreur spécifique indiquant la raison de l'échec de l'initialisation.

DispatchEvents

Error DispatchEvents(
  void
)

Il s'agit d'un wrapper syntaxique autour d'un hook spécifique à une plate-forme qui agit sur une boucle d'événements, qui attend une file d'attente qui traite cette instance, extrait des événements de cette file d'attente, puis les envoie pour traitement.

Détails
Renvoie
WEAVE_SYSTEM_NO_ERROR en cas de réussite. Sinon, erreur spécifique indiquant la raison de l'échec de l'initialisation.

GetPlatformData

void * GetPlatformData(
  void
) const 

Cette commande renvoie toutes les données de plate-forme spécifiques au client qui ont été attribuées à l'instance, si elles ont été définies précédemment.

Détails
Renvoie
Données de plate-forme spécifiques au client, si elles ont été définies précédemment ; sinon, valeur NULL.

HandleEvent

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

Cela implémente l'envoi et la gestion réels d'un événement de couche du système Weave.

Détails
Paramètres
[in,out] aTarget
Référence à l'objet de calque sur lequel l'événement est ciblé.
[in] aEventType
Type d'événement / de message à gérer.
[in] aArgument
Argument associé à l'événement ou au message.
Valeurs de retour
WEAVE_SYSTEM_NO_ERROR
Pour la réussite.
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Si l'état de l'objet InetLayer est incorrect.
WEAVE_SYSTEM_ERROR_UNEXPECTED_EVENT
Si le type d'événement n'est pas reconnu.

HandlePlatformTimer

Error HandlePlatformTimer(
  void
)

Gérez l'événement d'expiration du minuteur de plate-forme.

Appels nl::Weave::System::Timer::HandleexpirationTimers pour gérer les minuteurs expirés Nous partons du principe que cette API n'est appelée que sur le thread qui possède l'objet Layer du système Weave.

Détails
Renvoie
WEAVE_SYSTEM_NO_ERROR en cas de réussite, sinon, code d'erreur.

HandleSelectResult

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

Gérer les E/S depuis un appel sélectionné

Cette méthode enregistre l'événement d'E/S en attente dans chaque point de terminaison actif, puis appelle les fonctions de traitement des E/S correspondantes pour ces points de terminaison.

Détails
Paramètres
[in] aSetSize
Valeur renvoyée par l'appel select.
[in] aReadSet
Pointeur vers l'ensemble des descripteurs de fichier de lecture.
[in] aWriteSet
Pointeur vers l'ensemble des descripteurs de fichier d'écriture.
[in] aExceptionSet
Pointeur vers l'ensemble des descripteurs de fichier comportant des erreurs.

Init

Error Init(
  void *aContext
)

Layer

 Layer(
  void
)

NewTimer

Error NewTimer(
  Timer *& aTimerPtr
)

PostEvent

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

Publication d'un événement / message du type spécifié avec l'argument fourni dans la file d'attente d'événements spécifique à la plate-forme de cette instance.

Détails
Paramètres
[in,out] aTarget
Pointeur vers l'objet Layer du système Weave effectuant la requête post.
[in] aEventType
Type d'événement à publier.
[in,out] aArgument
Argument associé à l'événement à publier.
Valeurs de retour
WEAVE_SYSTEM_NO_ERROR
Pour la réussite.
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Si l'état de l'objet Layer est incorrect.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Si la file d'attente des événements est déjà pleine.
other
Erreurs propres à la plate-forme générées indiquant la raison de l'échec.

PrepareSelect

void PrepareSelect(
  int & aSetSize,
  fd_set *aReadSet,
  fd_set *aWriteSet,
  fd_set *aExceptionSet,
  struct timeval & aSleepTime
)

Préparez les ensembles de descripteurs de fichier à utiliser pour select().

Détails
Paramètres
[out] aSetSize
Plage de descripteurs de fichier dans l'ensemble de descripteurs de fichier.
[in] aReadSet
Pointeur vers l'ensemble de descripteurs de fichier lisibles.
[in] aWriteSet
Pointeur vers l'ensemble des descripteurs de fichier accessibles en écriture.
[in] aExceptionSet
Pointeur vers l'ensemble des descripteurs de fichier comportant des erreurs.
[in] aSleepTime
Référence au temps de sommeil maximal.

ScheduleWork

Error ScheduleWork(
  TimerCompleteFunct aComplete,
  void *aAppState
)

Planifie l'exécution d'une fonction ayant une signature identique à TimerCompleteFunct sur le thread Weave.

Détails
Paramètres
[in] aComplete
Pointeur vers une fonction de rappel à appeler lorsque ce minuteur se déclenche.
[in] aAppState
Pointeur vers un objet d'état de l'application à transmettre à la fonction de rappel en tant qu'argument.
Valeurs de retour
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Si le SystemLayer n'a pas été initialisé.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Si la SystemLayer ne peut pas allouer un nouveau minuteur.
WEAVE_SYSTEM_NO_ERROR
Pour la réussite.

SetPlatformData

void SetPlatformData(
  void *aPlatformData
)

Les données spécifiées de la plate-forme spécifique au client sont ainsi définies sur l'instance en vue d'une récupération ultérieure par la plate-forme cliente.

Détails
Paramètres
[in] aPlatformData
Données de la plate-forme spécifique au client à définir.

Arrêt

Error Shutdown(
  void
)

StartTimer

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

Cette méthode démarre un minuteur one-shot.

Détails
Paramètres
[in] aMilliseconds
Délai d'expiration en millisecondes.
[in] aComplete
Pointeur vers la fonction appelée lorsque le minuteur expire.
[in] aAppState
Pointeur vers l'objet d'état de l'application utilisé à l'expiration du minuteur.
Renvoie
WEAVE_SYSTEM_NO_ERROR En cas de réussite.
Renvoie
WEAVE_SYSTEM_ERROR_NO_MEMORY Si un minuteur ne peut pas être alloué.
Renvoie
Autre valeur indiquant que le minuteur n'a pas pu démarrer.

État

LayerState State(
  void
) const 

Cette opération renvoie l'état actuel de l'objet calque.

WakeSelect

void WakeSelect(
  void
)

Activez le thread d'E/S qui surveille les descripteurs de fichier à l'aide de select() en écrivant un seul octet dans le wakepipe.

Remarque:Si WakeSelect() est appelé à partir de HandleSelectResult(), l'écriture dans le pipeline de wakeup peut être ignorée, car le thread d'E/S est déjà activé. De plus, peu importe l'échec de cette écriture, car le seul échec probable est que le pipe est plein. Dans ce cas, le thread appelant sélectionné s'activera de toute façon.

Fonctions statiques publiques

GetClock_Monotonic

uint64_t GetClock_Monotonic(
  void
)

Renvoie une heure système monotone en microsecondes.

Cette fonction renvoie le temps écoulé en microsecondes depuis une epoch arbitraire définie par la plate-forme. La valeur renvoyée est garantie d'augmenter constamment (c'est-à-dire de ne jamais encapsuler) entre les redémarrages du système. De plus, la source de temps sous-jacente est garantie en permanence pendant tous les modes de veille du système qui n'impliquent pas de redémarrage à la sortie de veille.

Bien que certaines plates-formes puissent choisir de renvoyer une valeur mesurant le temps écoulé depuis le démarrage du système, les applications ne doivent pas s'en servir. De plus, l'epoch de GetClock_Monotonic() n'a pas besoin d'être identique à celle d'autres fonctions GetClock. Par conséquent, les calculs de temps relatif ne peuvent être effectués qu'avec des valeurs renvoyées par la même fonction.

Cette fonction est thread-safe sur toute plate-forme utilisant des threads.

Détails
Renvoie
Temps écoulé, en microsecondes, depuis une epoch arbitraire définie par la plate-forme.

GetClock_MonotonicHiRes

uint64_t GetClock_MonotonicHiRes(
  void
)

Renvoie une heure système monotone (potentiellement) haute résolution exprimée en microsecondes.

Cette fonction renvoie le temps écoulé en microsecondes depuis une epoch arbitraire définie par la plate-forme. La valeur renvoyée est garantie d'augmenter constamment (c'est-à-dire de ne jamais encapsuler) entre les redémarrages du système. Toutefois, le minuteur sous-jacent n'est pas nécessaire pour fonctionner en continu pendant les états de sommeil profond du système.

Certaines plates-formes peuvent implémenter GetClock_MonotonicHiRes() à l'aide d'un minuteur haute résolution offrant une plus grande précision que GetClock_Monotonic(). Ce type de minuteur n'est pas soumis à un ajustement progressif de l'horloge (swing). Les systèmes sans ce type de minuteur peuvent simplement renvoyer la même valeur que GetClock_Monotonic().

L'epoch de l'heure renvoyée par GetClock_MonotonicHiRes() ne doit pas nécessairement être la même que pour les autres fonctions GetClock..., y compris GetClock_Monotonic().

Cette fonction est thread-safe sur toute plate-forme utilisant des threads.

Détails
Renvoie
Temps écoulé, en microsecondes, depuis une epoch arbitraire définie par la plate-forme.

GetClock_MonotonicMS

uint64_t GetClock_MonotonicMS(
  void
)

Renvoie une heure système monotone en millisecondes.

Cette fonction renvoie le temps écoulé, en millisecondes, depuis une epoch arbitraire définie par la plate-forme. La valeur renvoyée est garantie d'augmenter constamment (c'est-à-dire de ne jamais encapsuler) entre les redémarrages du système. De plus, la source de temps sous-jacente est garantie en permanence pendant tous les modes de veille du système qui n'impliquent pas de redémarrage à la sortie de veille.

Bien que certaines plates-formes puissent choisir de renvoyer une valeur mesurant le temps écoulé depuis le démarrage du système, les applications ne doivent pas s'en servir. De plus, l'epoch de GetClock_Monotonic() n'a pas besoin d'être identique à celle d'autres fonctions GetClock. Par conséquent, les calculs de temps relatif ne peuvent être effectués qu'avec des valeurs renvoyées par la même fonction.

Cette fonction est thread-safe sur toute plate-forme utilisant des threads.

Détails
Renvoie
Temps écoulé, en millisecondes, depuis une epoch arbitraire définie par la plate-forme.

GetClock_RealTime

Error GetClock_RealTime(
  uint64_t & curTime
)

Renvoie l'heure réelle (civil) actuelle au format d'heure Unix en microsecondes.

Cette méthode renvoie la notion de temps réel actuelle de la plate-forme locale, exprimée sous la forme d'une valeur de temps Unix adaptée à la microseconde. Le tic-tac de l'horloge sous-jacente est garanti à une fréquence minimale d'au moins une seconde entière (des valeurs de 1 000 000), mais sur certaines plates-formes, son affichage peut être plus rapide.

Si la plate-forme sous-jacente est capable de suivre en temps réel, mais que le système est actuellement désynchronisé, GetClock_RealTime() renvoie l'erreur WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED.

Sur les plates-formes incapables de suivre en temps réel, la méthode GetClock_RealTime() peut être absente, ce qui entraîne une erreur de lien pour toute application qui y fait référence. Ces plates-formes peuvent également fournir une implémentation de GetClock_RealTime() qui renvoie toujours l'erreur WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.

Cette fonction est thread-safe sur toute plate-forme utilisant des threads.

Détails
Paramètres
[out] curTime
Heure actuelle, exprimée en temps Unix ajusté à la microseconde.
Valeurs de retour
WEAVE_SYSTEM_NO_ERROR
Si la méthode a réussi.
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
La plate-forme est capable de suivre en temps réel, mais est désynchronisée.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Si la plate-forme n'est pas en mesure d'effectuer un suivi en temps réel.

GetClock_RealTimeMS

Error GetClock_RealTimeMS(
  uint64_t & curTimeMS
)

Renvoie l'heure réelle (civil) actuelle au format d'heure Unix en millisecondes.

Cette méthode renvoie la notion de temps réel actuelle de la plate-forme locale, exprimée sous la forme d'une valeur de temps Unix ajustée en millisecondes. Le tic-tac de l'horloge sous-jacente est garanti à une fréquence minimale d'au moins une seconde entière (des valeurs de 1 000 000), mais sur certaines plates-formes, son affichage peut être plus rapide.

Si la plate-forme sous-jacente est capable de suivre en temps réel, mais que le système est actuellement désynchronisé, GetClock_RealTimeMS() renvoie l'erreur WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED.

Sur les plates-formes incapables de suivre en temps réel, la méthode GetClock_RealTimeMS() peut être absente, ce qui entraîne une erreur de lien pour toute application qui y fait référence. Ces plates-formes peuvent également fournir une implémentation de GetClock_RealTimeMS() qui renvoie toujours l'erreur WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.

Cette fonction est thread-safe sur toute plate-forme utilisant des threads.

Détails
Paramètres
[out] curTime
Heure actuelle, exprimée en temps Unix en millisecondes.
Valeurs de retour
WEAVE_SYSTEM_NO_ERROR
Si la méthode a réussi.
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
La plate-forme est capable de suivre en temps réel, mais est désynchronisée.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Si la plate-forme n'est pas en mesure d'effectuer un suivi en temps réel.

SetClock_RealTime

Error SetClock_RealTime(
  uint64_t newCurTime
)

Définit la notion de temps réel (civil) actuel de la plate-forme.

Les applications peuvent appeler cette fonction pour définir la notion de temps réel actuelle utilisée par la plate-forme locale. La nouvelle heure actuelle est exprimée sous la forme d'une valeur de temps Unix ajustée à la microseconde.

Une fois définie, l'horloge de la plate-forme sous-jacente assure le suivi en temps réel avec un niveau de précision d'au moins des secondes entières.

Certaines plates-formes peuvent limiter les applications ou processus autorisés à définir des paramètres en temps réel. Si l'appelant n'est pas autorisé à modifier le temps réel, la fonction SetClock_RealTime() renvoie l'erreur WEAVE_SYSTEM_ERROR_ACCESS_DENIED.

La fonction SetClock_RealTime() peut être absente des plates-formes incapables d'effectuer un suivi en temps réel ou de définir ce paramètre pour toutes les applications qui y font référence. Ces plates-formes peuvent également fournir une implémentation de SetClock_RealTime() qui renvoie toujours l'erreur WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.

Cette fonction est thread-safe sur toute plate-forme utilisant des threads.

Détails
Paramètres
[in] newCurTime
Nouvelle heure actuelle, exprimée en heure Unix ajustée à la microseconde.
Valeurs de retour
WEAVE_SYSTEM_NO_ERROR
Si la méthode a réussi.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Si la plate-forme n'est pas en mesure d'effectuer un suivi en temps réel.
#WEAVE_SYSTEM_ERROR_ACCESS_DENIED
Si l'application appelante ne dispose pas du droit lui permettant de définir l'heure actuelle,