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)
|
typedefError(*
|
TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)
|
typedefvoid(*
|
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 |
|
||||
Valeurs renvoyées |
|
CancelTimer
void CancelTimer( TimerCompleteFunct aOnComplete, void *aAppState )
Cette méthode annule un minuteur ponctuel démarré avant StartTimer()
.
Détails | |||||
---|---|---|---|---|---|
Paramètres |
|
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 |
|
||
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 |
|
||||||
Valeurs renvoyées |
|
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 |
|
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 |
|
||||||||
Valeurs renvoyées |
|
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 |
|
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 |
|
||||||
Valeurs renvoyées |
|
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 |
|
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 |
|
||||||
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 |
|
||||||
Valeurs renvoyées |
|
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 |
|
||||||
Valeurs renvoyées |
|
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 |
|
||||||
Valeurs renvoyées |
|