nl:: Weave:: System:: Layer
#include <src/system/SystemLayer.h>
This provides access to timers according to the configured event handling model.
Zusammenfassung
Für WEAVE_SYSTEM_CONFIG_USE_SOCKETS
wird die Benachrichtigung zur Ereignisbereitschaft über die traditionelle Abfrage-/Auswahl-Implementierung in der Plattformanpassung verarbeitet.
Bei WEAVE_SYSTEM_CONFIG_USE_LWIP
wird die Benachrichtigung zur Ereignisbereitschaft über Ereignisse / Nachrichten sowie 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)
|
typedefError(*
|
TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)
|
typedefvoid(*
|
Öffentliche Funktionen |
|
---|---|
AddEventHandlerDelegate(LwIPEventHandlerDelegate & aDelegate)
|
Error
Dadurch wird der Systemebene ein Ereignis-Handler-Delegate hinzugefügt, um die Fähigkeit zur Verarbeitung von LwIP-Ereignissen zu erweitern.
|
CancelTimer(TimerCompleteFunct aOnComplete, void *aAppState)
|
void
Mit dieser Methode wird ein Timer mit einer Aufnahme abgebrochen, der bis zum
StartTimer() früher gestartet wurde. |
DispatchEvent(Event aEvent)
|
Error
Dadurch wird das angegebene Ereignis zur Verarbeitung durch diese Instanz gesendet.
|
DispatchEvents(void)
|
Error
Dies ist ein syntaktischer Wrapper um einen plattformspezifischen Hook, der eine Ereignisschleife wirkt. Er wartet auf eine Warteschlange, die diese Instanz bedient, zieht Ereignisse aus dieser Warteschlange und sendet sie dann zur Verarbeitung.
|
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
Dies implementiert die tatsächliche Weiterleitung und Verarbeitung eines Weave System-Layer-Ereignisses.
|
HandlePlatformTimer(void)
|
Error
Das Ereignis zum Ablauf des Plattform-Timers verarbeiten.
|
HandleSelectResult(int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet)
|
void
Verarbeiten Sie E/A über einen ausgewählten Aufruf.
|
Init(void *aContext)
|
Error
|
NewTimer(Timer *& aTimerPtr)
|
Error
|
PostEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
|
Error
Dadurch wird ein Ereignis oder eine Nachricht des angegebenen Typs mit dem angegebenen Argument an die plattformspezifische Ereigniswarteschlange dieser Instanz gesendet.
|
PrepareSelect(int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime)
|
void
Bereiten Sie die Dateideskriptoren vor, mit denen
select() arbeiten soll. |
ScheduleWork(TimerCompleteFunct aComplete, void *aAppState)
|
Error
Plant eine Funktion mit einer Signatur, die mit
TimerCompleteFunct identisch ist, 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 Timer mit einer Aufnahme gestartet.
|
State(void) const
|
LayerState
Gibt den aktuellen Status des Ebenenobjekts zurück.
|
WakeSelect(void)
|
void
Beenden Sie den E/A-Thread, der die Dateideskriptoren mit select() überwacht, indem Sie ein einzelnes Byte in die Wake-Pipe schreiben.
|
Öffentliche statische Funktionen |
|
---|---|
GetClock_Monotonic(void)
|
uint64_t
Gibt eine monotone Systemzeit in Mikrosekundeneinheiten zurück.
|
GetClock_MonotonicHiRes(void)
|
uint64_t
Gibt eine (möglicherweise) hochauflösende monotone Systemzeit in Mikrosekundeneinheiten zurück.
|
GetClock_MonotonicMS(void)
|
uint64_t
Gibt eine monotone Systemzeit in Millisekundeneinheiten zurück.
|
GetClock_RealTime(uint64_t & curTime)
|
Error
Gibt die aktuelle reelle (zivile) Zeit im Unix-Zeitformat Mikrosekunden zurück.
|
GetClock_RealTimeMS(uint64_t & curTimeMS)
|
Error
Gibt die aktuelle reelle (zivile) Zeit im Unix-Zeitformat von Millisekunden zurück.
|
SetClock_RealTime(uint64_t newCurTime)
|
Error
Legt das Konzept der Plattform für die aktuelle reale (Bürger-)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 Fähigkeit zur Verarbeitung von LwIP-Ereignissen zu erweitern.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
CancelTimer
void CancelTimer( TimerCompleteFunct aOnComplete, void *aAppState )
Mit dieser Methode wird ein Timer mit einer Aufnahme abgebrochen, der bis zum StartTimer()
früher gestartet wurde.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
DispatchEvent
Error DispatchEvent( Event aEvent )
Dadurch wird das angegebene Ereignis zur Verarbeitung durch diese Instanz gesendet.
Das Unmarshalling des Typs und der Argumente des Ereignisses erfolgt über einen plattformspezifischen Hook, der dann für die tatsächliche Weiterleitung 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 wirkt. Er wartet auf eine Warteschlange, die diese Instanz bedient, zieht Ereignisse aus dieser Warteschlange und sendet sie dann zur Verarbeitung.
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 |
Clientspezifische Plattformdaten, falls zuvor festgelegt wurden; andernfalls NULL.
|
HandleEvent
Error HandleEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
Dies implementiert die tatsächliche Weiterleitung und Verarbeitung eines Weave System-Layer-Ereignisses.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|
HandlePlatformTimer
Error HandlePlatformTimer( void )
Das Ereignis zum Ablauf des Plattform-Timers verarbeiten.
Ruft nl::Weave::System::Timer::HandleAbgelaufenTimers auf, um abgelaufene Timer zu verarbeiten. Es wird angenommen, dass diese API nur dann aufgerufen wird, wenn sie sich auf dem Thread befindet, der das Weave System-Layer-Objekt besitzt.
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 )
Verarbeiten Sie E/A über einen ausgewählten Aufruf.
Diese Methode registriert das ausstehende E/A-Ereignis in jedem aktiven Endpunkt und ruft dann die entsprechenden E/A-Verarbeitungsfunktionen für diese Endpunkte auf.
Details | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parameter |
|
Init
Error Init( void *aContext )
Layer
Layer( void )
NewTimer
Error NewTimer( Timer *& aTimerPtr )
PostEvent
Error PostEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
Dadurch wird ein Ereignis oder eine Nachricht des angegebenen Typs mit dem angegebenen Argument an die plattformspezifische Ereigniswarteschlange dieser Instanz gesendet.
Details | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||
Rückgabewerte |
|
PrepareSelect
void PrepareSelect( int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime )
Bereiten Sie die Dateideskriptoren vor, mit denen select()
arbeiten soll.
Details | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
ScheduleWork
Error ScheduleWork( TimerCompleteFunct aComplete, void *aAppState )
Plant eine Funktion mit einer Signatur, die mit TimerCompleteFunct
identisch ist, 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 Timer mit einer Aufnahme 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 )
Beenden Sie den E/A-Thread, der die Dateideskriptoren mit select() überwacht, 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 für uns egal, wenn dieser Schreibvorgang fehlschlägt, da der einzige angemessen wahrscheinliche 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 Mikrosekundeneinheiten zurück.
Diese Funktion gibt eine verstrichene Zeit in Mikrosekunden seit einer beliebigen, plattformdefinierten Epoche zurück. Der zurückgegebene Wert wird zwischen Systemneustarts immer ansteigen (d.h., er wird nie umgebrochen). Außerdem tickt die zugrunde liegende Zeitquelle in allen Schlafmodi des Systems, die nach dem Aufwachen keinen Neustart erfordern, kontinuierlich.
Obwohl einige Plattformen einen Wert zurückgeben, der die Zeit seit dem Start des Systems misst, dürfen sich Anwendungen nicht darauf verlassen. Außerdem muss die Epoche für GetClock_Monotonic() nicht dieselbe sein wie die für andere GetClock...-Funktionen. 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 Thread-sicher.
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 Mikrosekundeneinheiten zurück.
Diese Funktion gibt eine verstrichene Zeit in Mikrosekunden seit einer beliebigen, plattformdefinierten Epoche zurück. Der zurückgegebene Wert wird zwischen Systemneustarts immer ansteigen (d.h., er wird nie umgebrochen). Der zugrunde liegende Timer muss jedoch nicht kontinuierlich ticken, wenn sich das System im Ruhemodus befindet.
Auf einigen Plattformen wird GetClock_MonotonicHiRes() mit einem hochauflösenden Timer implementiert, der eine höhere Präzision als GetClock_Monotonic() hat und nicht schrittweisen Anpassungen der Uhr (Slewing) 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 anderer GetClock...-Funktionen übereinstimmen, einschließlich GetClock_Monotonic().
Diese Funktion ist auf jeder Plattform, die Threading verwendet, garantiert Thread-sicher.
Details | |
---|---|
Rückgabe |
Verstrichene Zeit in Mikrosekunden seit einer beliebigen, plattformdefinierten Epoche.
|
GetClock_MonotonicMS
uint64_t GetClock_MonotonicMS( void )
Gibt eine monotone Systemzeit in Millisekundeneinheiten zurück.
Diese Funktion gibt eine verstrichene Zeit in Millisekunden seit einer beliebigen, plattformdefinierten Epoche zurück. Der zurückgegebene Wert wird zwischen Systemneustarts immer ansteigen (d.h., er wird nie umgebrochen). Außerdem tickt die zugrunde liegende Zeitquelle in allen Schlafmodi des Systems, die nach dem Aufwachen keinen Neustart erfordern, kontinuierlich.
Obwohl einige Plattformen einen Wert zurückgeben, der die Zeit seit dem Start des Systems misst, dürfen sich Anwendungen nicht darauf verlassen. Außerdem muss die Epoche für GetClock_Monotonic() nicht dieselbe sein wie die für andere GetClock...-Funktionen. 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 Thread-sicher.
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 Unix-Zeitformat Mikrosekunden zurück.
Diese Methode gibt das Konzept der lokalen Plattform für die aktuelle Echtzeit zurück, ausgedrückt als Unix-Zeitwert, skaliert auf Mikrosekunden. Die zugrunde liegende Uhr läuft mit einer Taktung von mindestens ganzen Sekunden (Werte von 1.000.000), kann jedoch auf einigen Plattformen schneller ticken.
Wenn die zugrunde liegende Plattform Echtzeit-Tracking kann, das System jedoch derzeit nicht synchronisiert ist, gibt GetClock_RealTime() den Fehler WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED zurück.
Auf Plattformen, die kein Echtzeit-Tracking unterstützen, fehlt die Methode GetClock_RealTime() möglicherweise. Dies führt bei jeder Anwendung, die auf sie verweist, zu einem Verknüpfungsfehler. 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 Thread-sicher.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|
GetClock_RealTimeMS
Error GetClock_RealTimeMS( uint64_t & curTimeMS )
Gibt die aktuelle reelle (zivile) Zeit im Unix-Zeitformat von Millisekunden zurück.
Diese Methode gibt das Konzept der lokalen Plattform für die aktuelle Echtzeit zurück, ausgedrückt als Unix-Zeitwert, skaliert auf Millisekunden. Die zugrunde liegende Uhr läuft mit einer Taktung von mindestens ganzen Sekunden (Werte von 1.000.000), kann jedoch auf einigen Plattformen schneller ticken.
Wenn die zugrunde liegende Plattform Echtzeit-Tracking durchführen kann, das System jedoch derzeit nicht synchronisiert ist, gibt GetClock_RealTimeMS() den Fehler WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED zurück.
Auf Plattformen, die kein Echtzeit-Tracking unterstützen, fehlt die GetClock_RealTimeMS()-Methode möglicherweise nicht. Dies führt bei jeder Anwendung, die auf sie verweist, zu einem Linkfehler. 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 Thread-sicher.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|
SetClock_RealTime
Error SetClock_RealTime( uint64_t newCurTime )
Legt das Konzept der Plattform für die aktuelle reale (Bürger-)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 wird.
Einmal eingestellt, verfolgt die zugrunde liegende Plattformuhr garantiert Echtzeit mit einem Detaillierungsgrad von mindestens ganzen Sekunden.
Bei einigen Plattformen ist es möglich, dass die Echtzeitfestlegung von Anwendungen oder Prozessen eingeschränkt ist. Wenn für den Aufrufer keine Echtzeitänderung zulässig ist, gibt die Funktion SetClock_RealTime() den Fehler WEAVE_SYSTEM_ERROR_ACCESS_DENIED zurück.
Auf Plattformen, die kein Echtzeit-Tracking ermöglichen oder keine Echtzeit-Einstellung bieten, fehlt die Funktion SetClock_RealTime() möglicherweise. Dies führt zu einem Linkfehler für jede Anwendung, 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 Thread-sicher.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|