nl:: Weave:: System:: Ebene
#include <src/system/SystemLayer.h>
This provides access to timers according to the configured event handling model.
Fazit
Für WEAVE_SYSTEM_CONFIG_USE_SOCKETS
wird die Benachrichtigung zur Ereignisbereitschaft über eine herkömmliche Umfrage/Auswahlimplementierung auf der Plattformanpassung verarbeitet.
Bei WEAVE_SYSTEM_CONFIG_USE_LWIP
wird die Benachrichtigung zur Ereignisbereitschaft über Ereignisse / Nachrichten und plattform- und systemspezifische Webhooks für das Ereignis-/Nachrichtensystem verarbeitet.
Konstrukteur und Zerstörer |
|
---|---|
Layer(void)
|
Öffentliche Typen |
|
---|---|
EventHandler)(Object &aTarget, EventType aEventType, uintptr_t aArgument)
|
TypdefError(*
|
TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)
|
Typdefvoid(*
|
Öffentliche Funktionen |
|
---|---|
AddEventHandlerDelegate(LwIPEventHandlerDelegate & aDelegate)
|
Error
Dadurch wird ein Ereignis-Handler-Delegat zur Systemschicht hinzugefügt, um die Fähigkeit zur Verarbeitung von LwIP-Ereignissen zu erweitern.
|
CancelTimer(TimerCompleteFunct aOnComplete, void *aAppState)
|
void
Diese Methode bricht einen Timer ab, der früher bis zum
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 für einen plattformspezifischen Webhook, der eine Ereignisschleife betrifft. Es wird auf eine Warteschlange gewartet, die diese Instanz betreut. Ereignisse werden dann von dieser Warteschlange abgerufen und dann zur Verarbeitung ausgelöst.
|
GetPlatformData(void) const
|
void *
Damit werden alle clientspezifischen Plattformdaten zurückgegeben, die der Instanz zugewiesen sind, falls sie zuvor festgelegt wurden.
|
HandleEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
|
Error
Damit wird die eigentliche Abfertigung und Verarbeitung des Weave System-Ereignisses implementiert.
|
HandlePlatformTimer(void)
|
Error
Verarbeiten Sie das Ereignis zum Ablaufen des Plattformtimers.
|
HandleSelectResult(int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet)
|
void
I/O für einen ausgewählten Anruf verarbeiten.
|
Init(void *aContext)
|
Error
|
NewTimer(Timer *& aTimerPtr)
|
Error
|
PostEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
|
Error
Dadurch wird ein Ereignis bzw. eine Nachricht des angegebenen Typs mit dem angegebenen Argument an 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 Beschreibungen für Dateien vor, mit denen
select() arbeiten kann. |
ScheduleWork(TimerCompleteFunct aComplete, void *aAppState)
|
Error
Plant eine Funktion mit einer Signatur, die mit
TimerCompleteFunct identisch ist, und wird so schnell wie möglich im Weave-Thread ausgeführt. |
SetPlatformData(void *aPlatformData)
|
void
Dadurch werden die angegebenen kundenspezifischen Plattformdaten auf die Instanz gesetzt, um sie später von der Clientplattform abzurufen.
|
Shutdown(void)
|
Error
|
StartTimer(uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState)
|
Error
Diese Methode startet einen Timer mit einer Aufnahme.
|
State(void) const
|
LayerState
Gibt den aktuellen Status des Ebenenobjekts zurück.
|
WakeSelect(void)
|
void
Beenden Sie den E/A-Thread, der die Dateideskriptoren überwacht, indem Sie select() verwenden, indem Sie ein einzelnes Byte in die Wakepipe schreiben.
|
Öffentliche statische Funktionen |
|
---|---|
GetClock_Monotonic(void)
|
uint64_t
Gibt die monotone Systemdauer in Mikrosekunden zurück.
|
GetClock_MonotonicHiRes(void)
|
uint64_t
Gibt (möglicherweise) eine hochauflösende monotonische Systemzeit in Einheiten von Mikrosekunden zurück.
|
GetClock_MonotonicMS(void)
|
uint64_t
Gibt die monotone Systemzeit in Millisekunden zurück.
|
GetClock_RealTime(uint64_t & curTime)
|
Error
Gibt die aktuelle echte (Zivilzeit) Uhrzeit im Unix-Mikrozeitformat zurück.
|
GetClock_RealTimeMS(uint64_t & curTimeMS)
|
Error
Gibt die aktuelle echte (Zivilzeit) Uhrzeit im Unix-Millisekundenformat zurück.
|
SetClock_RealTime(uint64_t newCurTime)
|
Error
Legt die Plattform der aktuellen aktuellen Zivilzeit fest
|
Öffentliche Typen
EventHandler
Error(* EventHandler)(Object &aTarget, EventType aEventType, uintptr_t aArgument)
Timer: vollständige Wiedergabe
void(* TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)
Öffentliche Funktionen
AddEventHandlerDelegate
Error AddEventHandlerDelegate( LwIPEventHandlerDelegate & aDelegate )
Dadurch wird ein Ereignis-Handler-Delegat zur Systemschicht hinzugefügt, um die Fähigkeit zur Verarbeitung von LwIP-Ereignissen zu erweitern.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
Timer abbrechen
void CancelTimer( TimerCompleteFunct aOnComplete, void *aAppState )
Diese Methode bricht einen Timer ab, der früher bis zum StartTimer()
gestartet wurde.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
Ereignis
Error DispatchEvent( Event aEvent )
Dadurch wird das angegebene Ereignis zur Verarbeitung durch diese Instanz ausgelöst.
Die Unmarshallung des Typs und der Argumente aus dem Ereignis wird von einem plattformspezifischen Webhook verarbeitet, der für die eigentliche Weiterleitung an Layer::HandleEvent zurückkehrt.
Details | |||
---|---|---|---|
Parameter |
|
||
Rückgabe |
WEAVE_SYSTEM_NO_ERROR bei Erfolg. Andernfalls ein bestimmter Fehler, der den Grund für die Initialisierung angibt.
|
Ereignisse
Error DispatchEvents( void )
Dies ist ein syntaktischer Wrapper für einen plattformspezifischen Webhook, der eine Ereignisschleife betrifft. Es wird auf eine Warteschlange gewartet, die diese Instanz betreut. Ereignisse werden dann von dieser Warteschlange abgerufen und dann zur Verarbeitung ausgelöst.
Details | |
---|---|
Rückgabe |
WEAVE_SYSTEM_NO_ERROR bei Erfolg. Andernfalls gibt es einen bestimmten Fehler, der den Grund für die Initialisierung angibt.
|
Plattformdaten abrufen
void * GetPlatformData( void ) const
Damit werden alle clientspezifischen Plattformdaten zurückgegeben, die der Instanz zugewiesen sind, falls sie zuvor festgelegt wurden.
Details | |
---|---|
Rückgabe |
Clientspezifische Plattformdaten, falls bereits festgelegt, andernfalls NULL.
|
HandleEvent
Error HandleEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
Damit wird die eigentliche Abfertigung und Verarbeitung des Weave System-Ereignisses implementiert.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|
HandlePlatformTimer
Error HandlePlatformTimer( void )
Verarbeiten Sie das Ereignis zum Ablaufen des Plattformtimers.
Rufe nl::Weave::System::Timer::HandleAbgelaufenTimers auf, um abgelaufene Timer zu verarbeiten. Es wird davon ausgegangen, dass diese API nur in dem Thread aufgerufen wird, der das Weave System Layer-Objekt besitzt.
Details | |
---|---|
Rückgabe |
WEAVE_SYSTEM_NO_ERROR bei Erfolg, Fehlercode andernfalls.
|
Alias-Ergebnis
void HandleSelectResult( int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet )
I/O für einen ausgewählten Anruf verarbeiten.
Bei dieser Methode wird das ausstehende E/A-Ereignis an jedem aktiven Endpunkt registriert und dann die entsprechenden E/A-Verarbeitungsfunktionen für diese Endpunkte aufgerufen.
Details | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parameter |
|
Init
Error Init( void *aContext )
Layer
Layer( void )
Neuer Timer
Error NewTimer( Timer *& aTimerPtr )
Postevent
Error PostEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
Dadurch wird ein Ereignis bzw. eine Nachricht des angegebenen Typs mit dem angegebenen Argument an die plattformspezifische Ereigniswarteschlange dieser Instanz gepostet.
Details | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||
Rückgabewerte |
|
Vorbereiten
void PrepareSelect( int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime )
Bereiten Sie die Beschreibungen für Dateien vor, mit denen select()
arbeiten kann.
Details | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
Planungsarbeit
Error ScheduleWork( TimerCompleteFunct aComplete, void *aAppState )
Plant eine Funktion mit einer Signatur, die mit TimerCompleteFunct
identisch ist, und wird so schnell wie möglich im Weave-Thread ausgeführt.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|
Daten der SetPlatform
void SetPlatformData( void *aPlatformData )
Dadurch werden die angegebenen kundenspezifischen Plattformdaten auf die Instanz gesetzt, um sie später von der Clientplattform abzurufen.
Details | |||
---|---|---|---|
Parameter |
|
Heruntergefahren
Error Shutdown( void )
StartTimer
Error StartTimer( uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState )
Diese Methode startet einen Timer mit einer Aufnahme.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabe |
WEAVE_SYSTEM_NO_ERROR erfolgreich.
|
||||||
Rückgabe |
WEAVE_SYSTEM_ERROR_NO_MEMORY Wenn der Timer nicht 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.
Ruhemodus
void WakeSelect( void )
Beenden Sie den E/A-Thread, der die Dateideskriptoren überwacht, indem Sie select() verwenden, indem Sie ein einzelnes Byte in die Wakepipe schreiben.
Hinweis: Wenn WakeSelect()
innerhalb von HandleSelectResult()
aufgerufen wird, kann das Schreiben in die Wakepipe übersprungen werden, da der E/A-Thread bereits wach ist.
Außerdem ist es uns nicht wichtig, wenn dieser Schreibvorgang höchstwahrscheinlich nicht erfolgreich ist, weil die Rohr voll ist. In diesem Fall wird der ausgewählte Aufrufthread aktiviert.
Öffentliche statische Funktionen
GetClock_Monotonic
uint64_t GetClock_Monotonic( void )
Gibt die monotone Systemdauer in Mikrosekunden zurück.
Diese Funktion gibt eine verstrichene Zeit in Mikrosekunden seit einer beliebigen, plattformdefinierten Epoche zurück. Der zurückgegebene Wert wird zwischen Neustarts des Systems garantiert immer erhöht (d.h. niemals umschlossen). Außerdem wird die zugrunde liegende Zeitquelle in allen System-Schlafmodi, die keinen Neustart erfordern, garantiert aktiviert.
Für einige Plattformen kann ein Wert zurückgegeben werden, der die Zeit seit dem Start des Systems misst. darauf dürfen jedoch keine Anwendungen verwendet werden. Außerdem muss die Epoche für GetClock_Monotonic() nicht dieselbe sein wie bei allen anderen GetClock...-Funktionen. Daher können relative Zeitberechnungen nur für Werte ausgeführt werden, die von derselben Funktion zurückgegeben werden.
Diese Funktion ist auf allen Plattformen, die Threading verwenden, threadsicher.
Details | |
---|---|
Rückgabe |
Verstrichene Zeit in Mikrosekunden seit einer beliebigen plattformdefinierten Epoche.
|
GetClock_MonotonicHiResTM
uint64_t GetClock_MonotonicHiRes( void )
Gibt (möglicherweise) eine hochauflösende monotonische Systemzeit in Einheiten von Mikrosekunden zurück.
Diese Funktion gibt eine verstrichene Zeit in Mikrosekunden seit einer beliebigen, plattformdefinierten Epoche zurück. Der zurückgegebene Wert wird zwischen Neustarts des Systems garantiert immer erhöht (d.h. niemals umschlossen). Der zugrunde liegende Timer ist jedoch nicht erforderlich, um während des Tiefschlafzustands fortlaufend zu reagieren.
Einige Plattformen können GetClock_MonotonicHiRes() mit einem hochauflösenden Timer implementieren, der in der Regel eine höhere Genauigkeit als GetClock_Monotonic() aufweist. Er unterliegt keinen schrittweisen Anpassungen (Uhranpassung). Systeme ohne einen solchen Timer können denselben Wert wie GetClock_Monotonic() zurückgeben.
Die Epoche, für die GetClock_MonotonicHiRes() zurückgegeben wird, muss nicht identisch mit der Dauer der anderen GetClock...-Funktionen sein, einschließlich GetClock_Monotonic().
Diese Funktion ist auf allen Plattformen, die Threading verwenden, threadsicher.
Details | |
---|---|
Rückgabe |
Verstrichene Zeit in Mikrosekunden seit einer beliebigen plattformdefinierten Epoche.
|
GetClock_MonotonicMS
uint64_t GetClock_MonotonicMS( void )
Gibt die 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 wird zwischen Neustarts des Systems garantiert immer erhöht (d.h. niemals umschlossen). Außerdem wird die zugrunde liegende Zeitquelle in allen System-Schlafmodi, die keinen Neustart erfordern, garantiert aktiviert.
Für einige Plattformen kann ein Wert zurückgegeben werden, der die Zeit seit dem Start des Systems misst. darauf dürfen jedoch keine Anwendungen verwendet werden. Außerdem muss die Epoche für GetClock_Monotonic() nicht dieselbe sein wie bei allen anderen GetClock...-Funktionen. Daher können relative Zeitberechnungen nur für Werte ausgeführt werden, die von derselben Funktion zurückgegeben werden.
Diese Funktion ist auf allen Plattformen, die Threading verwenden, threadsicher.
Details | |
---|---|
Rückgabe |
Verstrichene Zeit in Millisekunden seit einer beliebigen plattformdefinierten Epoche.
|
GetClock_RealTime-Programm
Error GetClock_RealTime( uint64_t & curTime )
Gibt die aktuelle echte (Zivilzeit) Uhrzeit im Unix-Mikrozeitformat zurück.
Diese Methode gibt den lokalen Wert der aktuellen Plattform in Echtzeit zurück, ausgedrückt als Unix-Zeitwert in Mikrosekunden. Die zugrunde liegende Uhr wird garantiert mit einer Geschwindigkeit von mindestens ganzen Sekunden (Werte von 1.000.000) aktiviert, aber auf einigen Plattformen ist sie möglicherweise schneller.
Wenn die zugrunde liegende Plattform in Echtzeit erfasst werden kann, das System aber nicht synchronisiert ist, gibt GetClock_RealTime() den Fehler WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED zurück.
Auf Plattformen, die kein Echtzeit-Tracking ermöglichen, ist die Methode GetClock_RealTime() möglicherweise nicht vorhanden. Das führt zu einem Linkfehler für jede Anwendung, 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 allen Plattformen, die Threading verwenden, threadsicher.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|
GetClock_RealTimeMS
Error GetClock_RealTimeMS( uint64_t & curTimeMS )
Gibt die aktuelle echte (Zivilzeit) Uhrzeit im Unix-Millisekundenformat zurück.
Diese Methode gibt den lokalen Wert der aktuellen Plattform als Unix-Zeitwert in Millisekunden zurück. Die zugrunde liegende Uhr wird garantiert mit einer Geschwindigkeit von mindestens ganzen Sekunden (Werte von 1.000.000) aktiviert, aber auf einigen Plattformen ist sie möglicherweise schneller.
Wenn die zugrunde liegende Plattform in Echtzeit erfasst werden kann, das System aber nicht synchronisiert ist, gibt GetClock_RealTimeMS() den Fehler WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED zurück.
Auf Plattformen, die kein Echtzeit-Tracking ermöglichen, ist die Methode GetClock_RealTimeMS() möglicherweise nicht vorhanden. Das führt zu einem Linkfehler für jede Anwendung, 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 allen Plattformen, die Threading verwenden, threadsicher.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|
Satzuhrzeit
Error SetClock_RealTime( uint64_t newCurTime )
Legt die Plattform der aktuellen aktuellen Zivilzeit fest
Anwendungen können diese Funktion aufrufen, um die Lokalisierung der aktuellen Plattform in Echtzeit festzulegen. Die neue aktuelle Uhrzeit wird als Unix-Zeitwert ausgedrückt, der auf Mikrosekunden skaliert ist.
Nach der Einstellung wird die zugrunde liegende Plattformuhr in Echtzeit mit einer Genauigkeit von mindestens ganzen Sekunden verfolgt.
Einige Plattformen schränken möglicherweise ein, welche Anwendungen oder Prozesse in Echtzeit festgelegt werden können. Wenn der Aufrufer nicht zum Ändern in Echtzeit berechtigt ist, gibt die Funktion SetClock_RealTime() den Fehler WEAVE_SYSTEM_ERROR_ACCESS_DENIED zurück.
Auf Plattformen, die kein Echtzeit-Tracking anbieten oder keine Möglichkeit bieten, Echtzeit in Echtzeit festzulegen, ist die Funktion SetClock_RealTime() möglicherweise nicht vorhanden. Das führt zu einem Linkfehler für jede App, 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 allen Plattformen, die Threading verwenden, threadsicher.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|