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)
|
typedefError(*
|
TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)
|
typedefvoid(*
|
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 |
|
||||
Valeurs de retour |
|
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 |
|
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 |
|
||
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 |
|
||||||
Valeurs de retour |
|
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 |
|
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 |
|
||||||||
Valeurs de retour |
|
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 |
|
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 |
|
||||||
Valeurs de retour |
|
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 |
|
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 |
|
||||||
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 |
|
||||||
Valeurs de retour |
|
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 |
|
||||||
Valeurs de retour |
|
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 |
|
||||||
Valeurs de retour |
|