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
[in] aDelegate
Eine nicht initialisierte Delegierungsstruktur für LwIP-Event-Handler
Rückgabewerte
WEAVE_SYSTEM_NO_ERROR
Bei Erfolg.
WEAVE_SYSTEM_ERROR_BAD_ARGS
Wenn der in aDelegate enthaltene Funktionszeiger NULL ist

CancelTimer

void CancelTimer(
  TimerCompleteFunct aOnComplete,
  void *aAppState
)

Diese Methode bricht einen One-Shot-Timer ab, der zuvor bis StartTimer() gestartet wurde.

Details
Parameter
[in] aOnComplete
Ein Zeiger auf die Callback-Funktion, die beim Aufrufen von StartTimer() verwendet wird.
[in] aAppState
Ein Zeiger auf das Anwendungsstatusobjekt, das beim Aufrufen von StartTimer() verwendet wird.

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
[in] aEvent
Das plattformspezifische Ereignisobjekt, das zur Verarbeitung weitergeleitet werden soll.
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
[in,out] aTarget
Ein Verweis auf das Ebenenobjekt, auf das das Ereignis ausgerichtet ist.
[in] aEventType
Der zu verarbeitende Ereignis-/Nachrichtentyp.
[in] aArgument
Das mit dem Ereignis bzw. der Nachricht verknüpfte Argument.
Rückgabewerte
WEAVE_SYSTEM_NO_ERROR
Bei Erfolg.
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Wenn der Status des InetLayer-Objekts falsch ist.
WEAVE_SYSTEM_ERROR_UNEXPECTED_EVENT
Wenn der Ereignistyp nicht erkannt wurde.

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
[in] aSetSize
Der Rückgabewert des Auswahlaufrufs.
[in] aReadSet
Ein Zeiger auf die Gruppe von gelesenen Dateideskriptoren.
[in] aWriteSet
Ein Zeiger auf die Gruppe von Schreibdeskriptoren.
[in] aExceptionSet
Ein Zeiger auf die Gruppe von Dateideskriptoren mit Fehlern.

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
[in,out] aTarget
Ein Zeiger auf das Layer-Objekt des Weave System, von dem die Übermittlungsanfrage stammt.
[in] aEventType
Die Art des Ereignisses, das gepostet werden soll.
[in,out] aArgument
Das Argument, das mit dem zu postenden Ereignis verknüpft ist.
Rückgabewerte
WEAVE_SYSTEM_NO_ERROR
Bei Erfolg.
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Wenn der Status des Layer-Objekts falsch ist.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Wenn die Ereigniswarteschlange bereits voll ist.
other
Es wurden plattformspezifische Fehler generiert, die den Grund für den Fehler angeben.

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
[out] aSetSize
Der Bereich der Dateideskriptoren im Dateideskriptorsatz.
[in] aReadSet
Ein Zeiger auf die Gruppe lesbarer Dateideskriptoren.
[in] aWriteSet
Ein Zeiger auf den Satz beschreibbarer Dateideskriptoren.
[in] aExceptionSet
Ein Zeiger auf die Gruppe von Dateideskriptoren mit Fehlern.
[in] aSleepTime
Ein Verweis auf die maximale Ruhezeit.

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
[in] aComplete
Ein Zeiger auf eine Callback-Funktion, die aufgerufen werden soll, wenn dieser Timer ausgelöst wird.
[in] aAppState
Ein Zeiger auf ein Anwendungsstatusobjekt, das als Argument an die Callback-Funktion übergeben wird.
Rückgabewerte
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Wenn SystemLayer nicht initialisiert wurde.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Wenn SystemLayer keinen neuen Timer zuweisen kann.
WEAVE_SYSTEM_NO_ERROR
Bei Erfolg.

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
[in] aPlatformData
Die festzulegenden kundenspezifischen Plattformdaten.

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
[in] aMilliseconds
Ablaufzeit in Millisekunden.
[in] aComplete
Ein Zeiger auf die Funktion, die nach Ablauf des Timers aufgerufen wird.
[in] aAppState
Ein Zeiger auf das Anwendungsstatusobjekt, das bei Ablauf des Timers verwendet wird.
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
[out] curTime
Die aktuelle Zeit, ausgedrückt als Unix-Zeit in Mikrosekunden.
Rückgabewerte
WEAVE_SYSTEM_NO_ERROR
Wenn die Methode erfolgreich war.
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Ob die Plattform in Echtzeit verfolgen kann, aber derzeit nicht synchronisiert ist.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Ob die Plattform kein Echtzeit-Tracking ermöglichen kann

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
[out] curTime
Die aktuelle Zeit, ausgedrückt als Unix-Zeit in Millisekunden.
Rückgabewerte
WEAVE_SYSTEM_NO_ERROR
Wenn die Methode erfolgreich war.
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Ob die Plattform in Echtzeit verfolgen kann, aber derzeit nicht synchronisiert ist.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Ob die Plattform kein Echtzeit-Tracking ermöglichen kann

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
[in] newCurTime
Die neue aktuelle Zeit, ausgedrückt als Unix-Zeit in Mikrosekunden.
Rückgabewerte
WEAVE_SYSTEM_NO_ERROR
Wenn die Methode erfolgreich war.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Ob die Plattform kein Echtzeit-Tracking ermöglichen kann
#WEAVE_SYSTEM_ERROR_ACCESS_DENIED
Wenn die aufrufende Anwendung nicht über die Berechtigung zum Festlegen der aktuellen Uhrzeit verfügt.