nl:: Weave:: System:: Layer
#include <src/system/SystemLayer.h>
This provides access to timers according to the configured event handling model.
Zusammenfassung
Bei WEAVE_SYSTEM_CONFIG_USE_SOCKETS
erfolgt die Benachrichtigung zur Ereignisbereitschaft über die herkömmliche Implementierung von Umfrage/Auswahl in der Plattformanpassung.
Bei WEAVE_SYSTEM_CONFIG_USE_LWIP
wird die Bereitschaftsbenachrichtigung über Ereignisse / Nachrichten und plattform- und systemspezifische Hooks für das Ereignis-/Nachrichtensystem verarbeitet.
Konstruktoren und Zerstörer |
|
---|---|
Layer(void)
|
Öffentliche Typen |
|
---|---|
EventHandler)(Object &aTarget, EventType aEventType, uintptr_t aArgument)
|
typedef.Error(*
|
TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)
|
typedef.void(*
|
Öffentliche Funktionen |
|
---|---|
AddEventHandlerDelegate(LwIPEventHandlerDelegate & aDelegate)
|
Error
Dadurch wird der Systemebene ein Ereignis-Handler-Delegate hinzugefügt, um die Verarbeitung von LwIP-Ereignissen zu erweitern.
|
CancelTimer(TimerCompleteFunct aOnComplete, void *aAppState)
|
void
Diese Methode bricht einen One-Shot-Timer ab, der zuvor bis
StartTimer() gestartet wurde. |
DispatchEvent(Event aEvent)
|
Error
Dadurch wird das angegebene Ereignis zur Verarbeitung durch diese Instanz ausgelöst.
|
DispatchEvents(void)
|
Error
Dies ist ein syntaktischer Wrapper um einen plattformspezifischen Hook, der eine Ereignisschleife auslöst, auf eine Warteschlange wartet, die diese Instanz bedient, Ereignisse aus dieser Warteschlange zieht und sie dann zur Verarbeitung abschickt.
|
GetPlatformData(void) const
|
void *
Dadurch werden alle clientspezifischen Plattformdaten zurückgegeben, die der Instanz zugewiesen sind, sofern sie zuvor festgelegt wurden.
|
HandleEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
|
Error
Damit wird die eigentliche Weiterleitung und Verarbeitung eines Weave-System-Layer-Ereignisses implementiert.
|
HandlePlatformTimer(void)
|
Error
Verarbeiten Sie das Ablaufereignis des Plattform-Timers.
|
HandleSelectResult(int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet)
|
void
E/A in einem Auswahlaufruf verarbeiten.
|
Init(void *aContext)
|
Error
|
NewTimer(Timer *& aTimerPtr)
|
Error
|
PostEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
|
Error
Damit wird ein Ereignis / eine Nachricht des angegebenen Typs mit dem angegebenen Argument in die plattformspezifische Ereigniswarteschlange dieser Instanz gepostet.
|
PrepareSelect(int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime)
|
void
Bereiten Sie die Gruppen von Dateideskriptoren für
select() vor. |
ScheduleWork(TimerCompleteFunct aComplete, void *aAppState)
|
Error
Plant eine Funktion mit einer mit
TimerCompleteFunct identischen Signatur, damit sie so bald wie möglich im Weave-Thread ausgeführt wird. |
SetPlatformData(void *aPlatformData)
|
void
Dadurch werden die angegebenen clientspezifischen Plattformdaten für die Instanz festgelegt, damit sie später von der Clientplattform abgerufen werden können.
|
Shutdown(void)
|
Error
|
StartTimer(uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState)
|
Error
Bei dieser Methode wird ein One-Shot-Timer gestartet.
|
State(void) const
|
LayerState
Gibt den aktuellen Status des Ebenenobjekts zurück.
|
WakeSelect(void)
|
void
Wecken Sie den E/A-Thread, der die Dateideskriptoren überwacht, mit select() auf, indem Sie ein einzelnes Byte in die Wake-Pipe schreiben.
|
Öffentliche statische Funktionen |
|
---|---|
GetClock_Monotonic(void)
|
uint64_t
Gibt eine monotone Systemzeit in Mikrosekunden zurück.
|
GetClock_MonotonicHiRes(void)
|
uint64_t
Gibt eine (möglicherweise) hochauflösende monotone Systemzeit in Mikrosekunden zurück.
|
GetClock_MonotonicMS(void)
|
uint64_t
Gibt eine monotone Systemzeit in Millisekunden zurück.
|
GetClock_RealTime(uint64_t & curTime)
|
Error
Gibt die aktuelle reelle (zivile) Zeit im Mikrosekunden-Unix-Zeitformat zurück.
|
GetClock_RealTimeMS(uint64_t & curTimeMS)
|
Error
Gibt die aktuelle reelle (zivile) Zeit im Unix-Zeitformat im Millisekundenbereich zurück.
|
SetClock_RealTime(uint64_t newCurTime)
|
Error
Legt das Konzept der Plattform für die aktuelle reale (zivile) Zeit fest.
|
Öffentliche Typen
EventHandler
Error(* EventHandler)(Object &aTarget, EventType aEventType, uintptr_t aArgument)
TimerCompleteFunct
void(* TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)
Öffentliche Funktionen
AddEventHandlerDelegate
Error AddEventHandlerDelegate( LwIPEventHandlerDelegate & aDelegate )
Dadurch wird der Systemebene ein Ereignis-Handler-Delegate hinzugefügt, um die Verarbeitung von LwIP-Ereignissen zu erweitern.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
CancelTimer
void CancelTimer( TimerCompleteFunct aOnComplete, void *aAppState )
Diese Methode bricht einen One-Shot-Timer ab, der zuvor bis StartTimer()
gestartet wurde.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
DispatchEvent
Error DispatchEvent( Event aEvent )
Dadurch wird das angegebene Ereignis zur Verarbeitung durch diese Instanz ausgelöst.
Das Unmarshalling des Typs und der Argumente aus dem Ereignis wird von einem plattformspezifischen Hook verarbeitet, der dann für die eigentliche Weiterleitung an Layer::HandleEvent zurückruft.
Details | |||
---|---|---|---|
Parameter |
|
||
Rückgabe |
WEAVE_SYSTEM_NO_ERROR bei Erfolg; Andernfalls ein bestimmter Fehler, der den Grund für das Fehlschlagen der Initialisierung angibt.
|
DispatchEvents
Error DispatchEvents( void )
Dies ist ein syntaktischer Wrapper um einen plattformspezifischen Hook, der eine Ereignisschleife auslöst, auf eine Warteschlange wartet, die diese Instanz bedient, Ereignisse aus dieser Warteschlange zieht und sie dann zur Verarbeitung abschickt.
Details | |
---|---|
Rückgabe |
WEAVE_SYSTEM_NO_ERROR bei Erfolg; Andernfalls ein bestimmter Fehler, der den Grund für das Fehlschlagen der Initialisierung angibt.
|
GetPlatformData
void * GetPlatformData( void ) const
Dadurch werden alle clientspezifischen Plattformdaten zurückgegeben, die der Instanz zugewiesen sind, sofern sie zuvor festgelegt wurden.
Details | |
---|---|
Rückgabe |
Kundenspezifische Plattformdaten, falls bereits festgelegt andernfalls NULL.
|
HandleEvent
Error HandleEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
Damit wird die eigentliche Weiterleitung und Verarbeitung eines Weave-System-Layer-Ereignisses implementiert.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|
HandlePlatformTimer
Error HandlePlatformTimer( void )
Verarbeiten Sie das Ablaufereignis des Plattform-Timers.
Ruft nl::Weave::System::Timer::HandleExpirationTimers auf, um abgelaufene Timer zu verarbeiten. Es wird davon ausgegangen, dass diese API nur während des Threads aufgerufen wird, zu dem das Weave System Layer-Objekt gehört.
Details | |
---|---|
Rückgabe |
WEAVE_SYSTEM_NO_ERROR bei Erfolg, andernfalls Fehlercode.
|
HandleSelectResult
void HandleSelectResult( int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet )
E/A in einem Auswahlaufruf verarbeiten.
Diese Methode registriert das ausstehende E/A-Ereignis an jedem aktiven Endpunkt und ruft dann die entsprechenden E/A-Verarbeitungsfunktionen für diese Endpunkte auf.
Details | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parameter |
|
Init
Error Init( void *aContext )
Ebene
Layer( void )
NewTimer
Error NewTimer( Timer *& aTimerPtr )
PostEvent
Error PostEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
Damit wird ein Ereignis / eine Nachricht des angegebenen Typs mit dem angegebenen Argument in die plattformspezifische Ereigniswarteschlange dieser Instanz gepostet.
Details | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||
Rückgabewerte |
|
PrepareSelect
void PrepareSelect( int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime )
Bereiten Sie die Gruppen von Dateideskriptoren für select()
vor.
Details | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
ScheduleWork
Error ScheduleWork( TimerCompleteFunct aComplete, void *aAppState )
Plant eine Funktion mit einer mit TimerCompleteFunct
identischen Signatur, damit sie so bald wie möglich im Weave-Thread ausgeführt wird.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|
SetPlatformData
void SetPlatformData( void *aPlatformData )
Dadurch werden die angegebenen clientspezifischen Plattformdaten für die Instanz festgelegt, damit sie später von der Clientplattform abgerufen werden können.
Details | |||
---|---|---|---|
Parameter |
|
Herunterfahren
Error Shutdown( void )
StartTimer
Error StartTimer( uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState )
Bei dieser Methode wird ein One-Shot-Timer gestartet.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabe |
WEAVE_SYSTEM_NO_ERROR Bei Erfolg.
|
||||||
Rückgabe |
WEAVE_SYSTEM_ERROR_NO_MEMORY Wenn kein Timer zugewiesen werden kann.
|
||||||
Rückgabe |
Anderer Wert, der angibt, dass der Timer nicht gestartet werden konnte.
|
Status
LayerState State( void ) const
Gibt den aktuellen Status des Ebenenobjekts zurück.
WakeSelect
void WakeSelect( void )
Wecken Sie den E/A-Thread, der die Dateideskriptoren überwacht, mit select() auf, indem Sie ein einzelnes Byte in die Wake-Pipe schreiben.
Hinweis:Wenn WakeSelect()
aus HandleSelectResult()
aufgerufen wird, kann das Schreiben in die Wake Pipe übersprungen werden, da der E/A-Thread bereits aktiv ist.
Außerdem ist es uns nicht wichtig, ob dieser Schreibvorgang fehlschlägt, da der einzig mögliche Fehler darin besteht, dass die Pipe voll ist. In diesem Fall wird der aufrufende Thread trotzdem aktiviert.
Öffentliche statische Funktionen
GetClock_Monotonic
uint64_t GetClock_Monotonic( void )
Gibt eine monotone Systemzeit in Mikrosekunden zurück.
Diese Funktion gibt eine verstrichene Zeit in Mikrosekunden seit einer beliebigen, plattformdefinierten Epoche zurück. Der zurückgegebene Wert nimmt zwischen Neustarts des Systems garantiert stetig zu (d.h. es wird nicht umgebrochen). Außerdem tickt die zugrunde liegende Zeitquelle in allen System-Ruhemodusmodi, die keinen Neustart nach dem Aufwachen beinhalten.
Obwohl einige Plattformen einen Wert zurückgeben, der die Zeit seit dem Starten des Systems misst, dürfen Anwendungen sich nicht darauf verlassen. Außerdem muss die Epoche für GetClock_Monotonic() nicht mit der Epoche für die anderen GetClock...-Funktionen übereinstimmen. Daher können relative Zeitberechnungen nur für Werte durchgeführt werden, die von derselben Funktion zurückgegeben werden.
Diese Funktion ist auf jeder Plattform, die Threading verwendet, garantiert threadsicher.
Details | |
---|---|
Rückgabe |
Verstrichene Zeit in Mikrosekunden seit einer beliebigen, plattformdefinierten Epoche.
|
GetClock_MonotonicHiRes
uint64_t GetClock_MonotonicHiRes( void )
Gibt eine (möglicherweise) hochauflösende monotone Systemzeit in Mikrosekunden zurück.
Diese Funktion gibt eine verstrichene Zeit in Mikrosekunden seit einer beliebigen, plattformdefinierten Epoche zurück. Der zurückgegebene Wert nimmt zwischen Neustarts des Systems garantiert stetig zu (d.h. es wird nicht umgebrochen). Der zugrunde liegende Timer muss jedoch im Tiefschlafmodus des Systems nicht kontinuierlich ausgelöst werden.
Auf einigen Plattformen wird GetClock_MonotonicHiRes() mit einem hochauflösenden Timer implementiert, der eine höhere Genauigkeit als GetClock_Monotonic() hat und keine graduellen Uhranpassungen (Drehbewegungen) unterliegt. Systeme ohne einen solchen Timer geben möglicherweise einfach denselben Wert wie GetClock_Monotonic() zurück.
Die von GetClock_MonotonicHiRes() zurückgegebene Epoche muss nicht mit der Epoche der anderen GetClock...-Funktionen wie GetClock_Monotonic() übereinstimmen.
Diese Funktion ist auf jeder Plattform, die Threading verwendet, garantiert threadsicher.
Details | |
---|---|
Rückgabe |
Verstrichene Zeit in Mikrosekunden seit einer beliebigen, plattformdefinierten Epoche.
|
GetClock_MonotonicMS
uint64_t GetClock_MonotonicMS( void )
Gibt eine monotone Systemzeit in Millisekunden zurück.
Diese Funktion gibt eine verstrichene Zeit in Millisekunden seit einer beliebigen, plattformdefinierten Epoche zurück. Der zurückgegebene Wert nimmt zwischen Neustarts des Systems garantiert stetig zu (d.h. es wird nicht umgebrochen). Außerdem tickt die zugrunde liegende Zeitquelle in allen System-Ruhemodusmodi, die keinen Neustart nach dem Aufwachen beinhalten.
Obwohl einige Plattformen einen Wert zurückgeben, der die Zeit seit dem Starten des Systems misst, dürfen Anwendungen sich nicht darauf verlassen. Außerdem muss die Epoche für GetClock_Monotonic() nicht mit der Epoche für die anderen GetClock...-Funktionen übereinstimmen. Daher können relative Zeitberechnungen nur für Werte durchgeführt werden, die von derselben Funktion zurückgegeben werden.
Diese Funktion ist auf jeder Plattform, die Threading verwendet, garantiert threadsicher.
Details | |
---|---|
Rückgabe |
Verstrichene Zeit in Millisekunden seit einer beliebigen plattformdefinierten Epoche.
|
GetClock_RealTime
Error GetClock_RealTime( uint64_t & curTime )
Gibt die aktuelle reelle (zivile) Zeit im Mikrosekunden-Unix-Zeitformat zurück.
Diese Methode gibt den Begriff der aktuellen Echtzeit der lokalen Plattform zurück, ausgedrückt als Unix-Zeitwert, der auf Mikrosekunden skaliert wird. Die zugrunde liegende Uhr tickt garantiert mindestens eine ganze Sekunde (Werte von 1.000.000), aber auf einigen Plattformen tickt sie möglicherweise schneller.
Wenn die zugrunde liegende Plattform in Echtzeit verfolgen kann, das System aber derzeit nicht synchronisiert ist, gibt GetClock_RealTime() den Fehler WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED zurück.
Auf Plattformen, auf denen kein Echtzeit-Tracking möglich ist, fehlt die Methode GetClock_RealTime(). Dies kann zu einem Linkfehler für jede Anwendung führen, die darauf verweist. Alternativ können solche Plattformen eine Implementierung von GetClock_RealTime() bereitstellen, die immer den Fehler WEAVE_SYSTEM_ERROR_NOT_SUPPORTED zurückgibt.
Diese Funktion ist auf jeder Plattform, die Threading verwendet, garantiert threadsicher.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|
GetClock_RealTimeMS
Error GetClock_RealTimeMS( uint64_t & curTimeMS )
Gibt die aktuelle reelle (zivile) Zeit im Unix-Zeitformat im Millisekundenbereich zurück.
Diese Methode gibt den Begriff der aktuellen Echtzeit der lokalen Plattform zurück, ausgedrückt als Unix-Zeitwert, der auf Millisekunden skaliert wird. Die zugrunde liegende Uhr tickt garantiert mindestens eine ganze Sekunde (Werte von 1.000.000), aber auf einigen Plattformen tickt sie möglicherweise schneller.
Wenn die zugrunde liegende Plattform in Echtzeit verfolgen kann, das System jedoch derzeit nicht synchronisiert ist, gibt GetClock_RealTimeMS() den Fehler WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED zurück.
Auf Plattformen, auf denen kein Echtzeit-Tracking möglich ist, fehlt die Methode GetClock_RealTimeMS(). Dies kann zu einem Linkfehler für jede Anwendung führen, die darauf verweist. Alternativ können solche Plattformen eine Implementierung von GetClock_RealTimeMS() bereitstellen, die immer den Fehler WEAVE_SYSTEM_ERROR_NOT_SUPPORTED zurückgibt.
Diese Funktion ist auf jeder Plattform, die Threading verwendet, garantiert threadsicher.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|
SetClock_RealTime
Error SetClock_RealTime( uint64_t newCurTime )
Legt das Konzept der Plattform für die aktuelle reale (zivile) Zeit fest.
Anwendungen können diese Funktion aufrufen, um das Konzept der lokalen Plattform für die aktuelle Echtzeit festzulegen. Die neue aktuelle Zeit wird als Unix-Zeitwert ausgedrückt, der auf Mikrosekunden skaliert ist.
Nach der Einstellung verfolgt die zugrunde liegende Plattformuhr garantiert Echtzeit mit einer Genauigkeit von mindestens ganzen Sekunden.
Einige Plattformen können einschränken, welche Anwendungen oder Prozesse in Echtzeit festgelegt werden können. Wenn dem Aufrufer keine Änderung der Echtzeit gestattet ist, gibt die Funktion SetClock_RealTime() den Fehler WEAVE_SYSTEM_ERROR_ACCESS_DENIED zurück.
Auf Plattformen, auf denen kein Echtzeit-Tracking möglich ist oder die keine Echtzeiteinstellung bieten, fehlt die Funktion SetClock_RealTime(). Dies kann zu einem Linkfehler für jede Anwendung führen, die darauf verweist. Alternativ können solche Plattformen eine Implementierung von SetClock_RealTime() bereitstellen, die immer den Fehler WEAVE_SYSTEM_ERROR_NOT_SUPPORTED zurückgibt.
Diese Funktion ist auf jeder Plattform, die Threading verwendet, garantiert threadsicher.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|