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 aux événements est gérée via l'implémentation de sondage/sélection traditionnelle sur l'adaptation de la 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
Un délégué de gestionnaire d'événements est alors ajouté à 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 ponctuel démarré avant StartTimer().
DispatchEvent(Event aEvent)
Error
L'événement spécifié est envoyé pour être traité par cette instance.
DispatchEvents(void)
Error
Il s'agit d'un wrapper syntaxique autour d'un hook spécifique à la plate-forme qui affecte une boucle d'événements, qui attend une file d'attente qui dessert cette instance, extrait des événements de cette file d'attente, puis les envoie pour qu'ils soient traités.
GetPlatformData(void) const
void *
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 permet de mettre en œuvre l'envoi et la gestion réels d'un événement de couche de système Weave.
HandlePlatformTimer(void)
Error
Gérez l'événement d'expiration du minuteur de la plate-forme.
HandleSelectResult(int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet)
void
Gérez les E/S à partir d'un appel sélectionné.
Init(void *aContext)
Error
NewTimer(Timer *& aTimerPtr)
Error
PostEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
Error
Cette commande publie 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 pour select().
ScheduleWork(TimerCompleteFunct aComplete, void *aAppState)
Error
Programme l'exécution d'une fonction avec 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 alors définies sur l'instance en vue de leur 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 permet de démarrer un minuteur "one-shot" (minuterie unique).
State(void) const
LayerState
Cette opération renvoie l'état actuel de l'objet de calque.
WakeSelect(void)
void
Activez le thread d'E/S qui surveille les descripteurs de fichier à l'aide de select() en écrivant un octet unique dans le pipe.

Fonctions statiques publiques

GetClock_Monotonic(void)
uint64_t
Renvoie un temps système monotone en microsecondes.
GetClock_MonotonicHiRes(void)
uint64_t
Renvoie une durée système monotone (potentiellement) haute résolution en microsecondes.
GetClock_MonotonicMS(void)
uint64_t
Renvoie une durée système monotone exprimée en millisecondes.
GetClock_RealTime(uint64_t & curTime)
Error
Renvoie le temps réel (civil) actuel au format d'heure Unix en microsecondes.
GetClock_RealTimeMS(uint64_t & curTimeMS)
Error
Renvoie le temps réel (civil) actuel au format d'heure Unix en millisecondes.
SetClock_RealTime(uint64_t newCurTime)
Error
Définit la notion de temps réel (civil) actuel sur 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
)

Un délégué de gestionnaire d'événements est alors ajouté à la couche système pour étendre sa capacité à gérer les événements LwIP.

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

CancelTimer

void CancelTimer(
  TimerCompleteFunct aOnComplete,
  void *aAppState
)

Cette méthode annule un minuteur ponctuel démarré avant StartTimer().

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

DispatchEvent

Error DispatchEvent(
  Event aEvent
)

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

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

Détails
Paramètres
[in] aEvent
Objet d'événement spécifique à la plate-forme à envoyer pour traitement.
Renvoie
WEAVE_SYSTEM_NO_ERROR en cas de réussite; Sinon, une 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 à la plate-forme qui affecte une boucle d'événements, qui attend une file d'attente qui dessert cette instance, extrait des événements de cette file d'attente, puis les envoie pour qu'ils soient traités.

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

GetPlatformData

void * GetPlatformData(
  void
) const 

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 au préalable sinon NULL.

HandleEvent

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

Cela permet de mettre en œuvre l'envoi et la gestion réels d'un événement de couche de 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
Événement / Type de message à gérer.
[in] aArgument
Argument associé à l'événement ou au message.
Valeurs renvoyées
WEAVE_SYSTEM_NO_ERROR
En cas de 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 la plate-forme.

Appels nl::Weave::System::Minuteur::HandleExpirationMinuteurs pour gérer les minuteurs arrivés à expiration. Nous partons du principe que cette API n'est appelée que sur le thread qui possède l'objet Layer (Layer) du système Weave.

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

HandleSelectResult

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

Gérez les E/S à partir d'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 fichiers lus.
[in] aWriteSet
Pointeur vers l'ensemble des descripteurs de fichier en écriture.
[in] aExceptionSet
Pointeur vers l'ensemble des descripteurs de fichier comportant des erreurs.

Init

Error Init(
  void *aContext
)

intégrée

 Layer(
  void
)

NewTimer

Error NewTimer(
  Timer *& aTimerPtr
)

PostEvent

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

Cette commande publie 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 à l'origine de la requête post.
[in] aEventType
Type d'événement à publier.
[in,out] aArgument
Argument associé à l'événement à publier.
Valeurs renvoyées
WEAVE_SYSTEM_NO_ERROR
En cas de réussite.
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Si l'état de l'objet Layer (Calque) est incorrect.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Si la file d'attente des événements est déjà pleine.
other
Erreurs spécifiques à 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 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 fichiers 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
)

Programme l'exécution d'une fonction avec 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 d'application à transmettre à la fonction de rappel en tant qu'argument.
Valeurs renvoyées
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Si la couche SystemLayer n'a pas été initialisée.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Si la couche SystemLayer ne peut pas allouer un nouveau minuteur.
WEAVE_SYSTEM_NO_ERROR
En cas de réussite.

SetPlatformData

void SetPlatformData(
  void *aPlatformData
)

Les données spécifiées de la plate-forme spécifique au client sont alors définies sur l'instance en vue de leur 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 permet de démarrer un minuteur "one-shot" (minuterie unique).

Détails
Paramètres
[in] aMilliseconds
Délai d'expiration en millisecondes.
[in] aComplete
Pointeur vers la fonction appelée à l'expiration du minuteur.
[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 de calque.

WakeSelect

void WakeSelect(
  void
)

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

Remarque:Si WakeSelect() est appelé à partir de HandleSelectResult(), l'écriture dans le wake pipe peut être ignorée, car le thread d'E/S est déjà activé. De plus, nous ne nous soucions pas de l'échec de cette écriture, car le seul échec raisonnablement probable est que le pipeline est plein, auquel cas le thread appelant "select" se déclenchera de toute façon.

Fonctions statiques publiques

GetClock_Monotonic

uint64_t GetClock_Monotonic(
  void
)

Renvoie un temps système monotone en microsecondes.

Cette fonction renvoie un temps écoulé en microsecondes depuis une époque arbitraire définie par la plate-forme. La valeur renvoyée est toujours croissante (c'est-à-dire, ne s'encapsule jamais) entre les redémarrages du système. De plus, la source temporelle sous-jacente est garantie de fonctionner en continu pendant tout mode de veille du système qui n'implique pas de redémarrage lors de l'activation.

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'appuyer sur cette valeur. De plus, l'époque pour GetClock_Monotonic() n'a pas besoin d'être identique à celle des autres fonctions GetClock.... Par conséquent, les calculs de temps relatif ne peuvent être effectués que sur des valeurs renvoyées par la même fonction.

Cette fonction est sécurisée sur toutes les plates-formes utilisant des threads.

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

GetClock_MonotonicHiRes

uint64_t GetClock_MonotonicHiRes(
  void
)

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

Cette fonction renvoie un temps écoulé en microsecondes depuis une époque arbitraire définie par la plate-forme. La valeur renvoyée est toujours croissante (c'est-à-dire, ne s'encapsule jamais) entre les redémarrages du système. Cependant, le minuteur sous-jacent n'est pas nécessaire pour tourner 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(), et qui n'est pas soumis à des ajustements progressifs de l'horloge (balayage). Les systèmes ne disposant pas d'un tel minuteur peuvent simplement renvoyer la même valeur que GetClock_Monotonic().

L'époque pour l'heure renvoyée par GetClock_MonotonicHiRes() n'a pas besoin d'être identique à celle des autres fonctions GetClock..., y compris GetClock_Monotonic().

Cette fonction est sécurisée sur toutes les plates-formes utilisant des threads.

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

GetClock_MonotonicMS

uint64_t GetClock_MonotonicMS(
  void
)

Renvoie une durée système monotone exprimée en millisecondes.

Cette fonction renvoie un temps écoulé en millisecondes depuis une époque arbitraire définie par la plate-forme. La valeur renvoyée est toujours croissante (c'est-à-dire, ne s'encapsule jamais) entre les redémarrages du système. De plus, la source temporelle sous-jacente est garantie de fonctionner en continu pendant tout mode de veille du système qui n'implique pas de redémarrage lors de l'activation.

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'appuyer sur cette valeur. De plus, l'époque pour GetClock_Monotonic() n'a pas besoin d'être identique à celle des autres fonctions GetClock.... Par conséquent, les calculs de temps relatif ne peuvent être effectués que sur des valeurs renvoyées par la même fonction.

Cette fonction est sécurisée sur toutes les plates-formes utilisant des threads.

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

GetClock_RealTime

Error GetClock_RealTime(
  uint64_t & curTime
)

Renvoie le temps réel (civil) actuel au format d'heure Unix en microsecondes.

Cette méthode renvoie la notion de temps réel de la plate-forme locale, exprimée sous la forme d'une valeur de temps Unix mise à l'échelle en microsecondes. Le déclenchement de l'horloge sous-jacente est assuré à une fréquence d'au moins au moins une seconde entière (valeurs de 1 000 000), mais sur certaines plates-formes, son exécution peut être plus rapide.

Si la plate-forme sous-jacente est capable d'effectuer un suivi 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 le temps réel, la méthode GetClock_RealTime() peut être absente, ce qui génère 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 sécurisée sur toutes les plates-formes utilisant des threads.

Détails
Paramètres
[out] curTime
Heure actuelle, exprimée en heure Unix exprimée en microsecondes.
Valeurs renvoyées
WEAVE_SYSTEM_NO_ERROR
Si la méthode aboutit.
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Si la plate-forme est capable d'effectuer le suivi en temps réel, mais qu'elle est actuellement désynchronisée.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Si la plate-forme n'est pas en mesure d'effectuer le suivi en temps réel.

GetClock_RealTimeMS

Error GetClock_RealTimeMS(
  uint64_t & curTimeMS
)

Renvoie le temps réel (civil) actuel au format d'heure Unix en millisecondes.

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

Si la plate-forme sous-jacente est capable d'effectuer un suivi 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 le temps réel, la méthode GetClock_RealTimeMS() peut être absente, ce qui génère 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 sécurisée sur toutes les plates-formes qui utilisent des threads.

Détails
Paramètres
[out] curTime
Heure actuelle, exprimée sous la forme d'une heure Unix ajustée à la milliseconde
Valeurs renvoyées
WEAVE_SYSTEM_NO_ERROR
Si la méthode aboutit.
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Si la plate-forme est capable d'effectuer le suivi en temps réel, mais qu'elle est actuellement désynchronisée.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Si la plate-forme n'est pas en mesure d'effectuer le suivi en temps réel.

SetClock_RealTime

Error SetClock_RealTime(
  uint64_t newCurTime
)

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

Les applications peuvent appeler cette fonction pour définir la notion de temps réel de la plate-forme locale. La nouvelle heure actuelle est exprimée sous la forme d'une valeur de temps Unix mise à l'échelle en microsecondes.

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

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

Sur les plates-formes incapables de suivre en temps réel ou qui n'offrent pas la possibilité de définir le temps réel, la fonction SetClock_RealTime() peut être absente, ce qui génère une erreur de lien pour toute application qui y fait 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 sécurisée sur toutes les plates-formes qui utilisent des threads.

Détails
Paramètres
[in] newCurTime
Nouvelle heure actuelle, exprimée en heure Unix exprimée en microsecondes.
Valeurs renvoyées
WEAVE_SYSTEM_NO_ERROR
Si la méthode aboutit.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Si la plate-forme n'est pas en mesure d'effectuer le suivi en temps réel.
#WEAVE_SYSTEM_ERROR_ACCESS_DENIED
Si l'application appelante ne dispose pas du droit de définir l'heure actuelle.