nl::Weave::System::Layer

#include <src/system/SystemLayer.h>

This provides access to timers according to the configured event handling model.

Podsumowanie

W przypadku WEAVE_SYSTEM_CONFIG_USE_SOCKETS powiadomienie o gotowości wydarzenia jest obsługiwane za pomocą tradycyjnej implementacji ankiety/wyboru w adaptacji platformy.

W przypadku WEAVE_SYSTEM_CONFIG_USE_LWIP powiadomienie o gotowości zdarzenia jest obsługiwane przez zdarzenia / wiadomości oraz właściwe dla platformy i systemu punkty zaczepienia systemu zdarzeń/wiadomości.

Konstruktorzy i niszczyciele

Layer(void)

Typy publiczne

EventHandler)(Object &aTarget, EventType aEventType, uintptr_t aArgument) typedef
Error(*
TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError) typedef
void(*

Funkcje publiczne

AddEventHandlerDelegate(LwIPEventHandlerDelegate & aDelegate)
Error
Powoduje to dodanie delegata modułu obsługi zdarzeń do warstwy systemowej, aby zwiększyć jego możliwości obsługi zdarzeń LwIP.
CancelTimer(TimerCompleteFunct aOnComplete, void *aAppState)
void
Ta metoda anuluje minutnik uruchamiany wcześniej do StartTimer().
DispatchEvent(Event aEvent)
Error
Wysyła określone zdarzenie do obsługi przez tę instancję.
DispatchEvents(void)
Error
Jest to składniowy kod obejmujący haczyk na platformie, który wykonuje pętlę zdarzeń, czeka na kolejkę obsługującą daną instancję, pobiera zdarzenia z kolejki i wysyła je do obsługi.
GetPlatformData(void) const
void *
Spowoduje to zwrócenie wszystkich przypisanych do instancji danych platformy specyficznych dla klienta, jeśli została wcześniej ustawiona.
HandleEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
Error
Powoduje to zaimplementowanie faktycznej wysyłki i obsługi zdarzenia warstwy systemu Weave.
HandlePlatformTimer(void)
Error
Obsługa zdarzenia wygaśnięcia licznika czasu platformy.
HandleSelectResult(int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet)
void
Obsługa wejścia/wyjścia z wybranego wywołania.
Init(void *aContext)
Error
NewTimer(Timer *& aTimerPtr)
Error
PostEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
Error
Powoduje to opublikowanie zdarzenia lub komunikatu określonego typu z podanym argumentem do kolejki zdarzeń na platformie instancji.
PrepareSelect(int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime)
void
Przygotuj zestawy deskryptorów plików, z którymi będzie pracować select().
ScheduleWork(TimerCompleteFunct aComplete, void *aAppState)
Error
Planuje jak najszybsze uruchomienie funkcji z podpisem identycznym z elementem TimerCompleteFunct w wątku Weave.
SetPlatformData(void *aPlatformData)
void
Spowoduje to ustawienie instancji danych platformy specyficznych dla klienta, aby mogły je później pobrać przez platformę klienta.
Shutdown(void)
Error
StartTimer(uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState)
Error
Ta metoda uruchamia samowyzwalacz.
State(void) const
LayerState
Zwraca bieżący stan obiektu warstwy.
WakeSelect(void)
void
Wybudź wątek wejścia-wyjścia, który monitoruje deskryptory plików za pomocą funkcji select(), zapisując pojedynczy bajt do potoku wybudzania.

Publiczne funkcje statyczne

GetClock_Monotonic(void)
uint64_t
Zwraca monotoniczny czas układowy w jednostkach mikrosekund.
GetClock_MonotonicHiRes(void)
uint64_t
Zwraca (potencjalnie) monotoniczny czas układowy o wysokiej rozdzielczości w jednostkach mikrosekundowych.
GetClock_MonotonicMS(void)
uint64_t
Zwraca monotoniczny czas systemowy w milisekundach.
GetClock_RealTime(uint64_t & curTime)
Error
Zwraca bieżący czas rzeczywisty (cywilny) w mikrosekundowym formacie czasu uniksowego.
GetClock_RealTimeMS(uint64_t & curTimeMS)
Error
Zwraca bieżący rzeczywisty (cywilny) czas uniksowy w milisekundach.
SetClock_RealTime(uint64_t newCurTime)
Error
Określa na platformie definicję czasu rzeczywistego (cywilnego).

Typy publiczne

EventHandler

Error(* EventHandler)(Object &aTarget, EventType aEventType, uintptr_t aArgument)

TimerCompleteFunct

void(* TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)

Funkcje publiczne

AddEventHandlerDelegate

Error AddEventHandlerDelegate(
  LwIPEventHandlerDelegate & aDelegate
)

Powoduje to dodanie delegata modułu obsługi zdarzeń do warstwy systemowej, aby zwiększyć jego możliwości obsługi zdarzeń LwIP.

Szczegóły
Parametry
[in] aDelegate
Struktura delegata modułu obsługi zdarzeń LwIP niezainicjowana
Zwracane wartości
WEAVE_SYSTEM_NO_ERROR
Na sukces.
WEAVE_SYSTEM_ERROR_BAD_ARGS
Jeśli wskaźnik funkcji podany w delegacie ma wartość NULL

CancelTimer

void CancelTimer(
  TimerCompleteFunct aOnComplete,
  void *aAppState
)

Ta metoda anuluje minutnik uruchamiany wcześniej do StartTimer().

Szczegóły
Parametry
[in] aOnComplete
Wskaźnik funkcji wywołania zwrotnego używanej podczas wywoływania funkcji StartTimer().
[in] aAppState
Wskaźnik do obiektu stanu aplikacji używanego w wywoływaniu funkcji StartTimer().

DispatchEvent

Error DispatchEvent(
  Event aEvent
)

Wysyła określone zdarzenie do obsługi przez tę instancję.

Odstraszanie typu i argumentów ze zdarzenia jest obsługiwane przez zaczep na konkretnej platformie, który powinien następnie wywoływać metodę Layer::HandleEvent w celu faktycznego wysłania danych.

Szczegóły
Parametry
[in] aEvent
Obiekt zdarzenia na platformie do wysłania do obsługi.
Zwroty
WEAVE_SYSTEM_NO_ERROR w przypadku powodzenia. W przeciwnym razie jest to określony błąd wskazujący przyczynę niepowodzenia zainicjowania.

DispatchEvents

Error DispatchEvents(
  void
)

Jest to składniowy kod obejmujący haczyk na platformie, który wykonuje pętlę zdarzeń, czeka na kolejkę obsługującą daną instancję, pobiera zdarzenia z kolejki i wysyła je do obsługi.

Szczegóły
Zwroty
WEAVE_SYSTEM_NO_ERROR w przypadku powodzenia; w innym przypadku określony błąd wskazujący przyczynę niepowodzenia zainicjowania.

GetPlatformData

void * GetPlatformData(
  void
) const 

Spowoduje to zwrócenie wszystkich przypisanych do instancji danych platformy specyficznych dla klienta, jeśli została wcześniej ustawiona.

Szczegóły
Zwroty
Dane platformy dotyczące klienta, jeśli zostały wcześniej ustawione. W przeciwnym razie zawiera wartość NULL.

HandleEvent

Error HandleEvent(
  Object & aTarget,
  EventType aEventType,
  uintptr_t aArgument
)

Powoduje to zaimplementowanie faktycznej wysyłki i obsługi zdarzenia warstwy systemu Weave.

Szczegóły
Parametry
[in,out] aTarget
Odwołanie do obiektu warstwy, na który jest kierowane zdarzenie.
[in] aEventType
Typ obsługiwanego zdarzenia lub wiadomości.
[in] aArgument
Argument powiązany ze zdarzeniem lub wiadomością.
Zwracane wartości
WEAVE_SYSTEM_NO_ERROR
Na sukces.
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Jeśli stan obiektu InetLayer jest nieprawidłowy.
WEAVE_SYSTEM_ERROR_UNEXPECTED_EVENT
Jeśli typ wydarzenia nie został rozpoznany.

HandlePlatformTimer

Error HandlePlatformTimer(
  void
)

Obsługa zdarzenia wygaśnięcia licznika czasu platformy.

Wywołania nl::Weave::System::Timer::HandleExpirationTimers do obsługi wszystkich wygasłych minutników. Przyjmujemy, że ten interfejs API jest wywoływany tylko w wątku, do którego należy obiekt Layer systemu Weave.

Szczegóły
Zwroty
WEAVE_SYSTEM_NO_ERROR w przypadku powodzenia. W przeciwnym razie kod błędu.

HandleSelectResult

void HandleSelectResult(
  int aSetSize,
  fd_set *aReadSet,
  fd_set *aWriteSet,
  fd_set *aExceptionSet
)

Obsługa wejścia/wyjścia z wybranego wywołania.

Ta metoda rejestruje oczekujące zdarzenie wejścia-wyjścia w każdym aktywnym punkcie końcowym, a następnie wywołuje odpowiednie funkcje obsługi wejścia-wyjścia dla tych punktów końcowych.

Szczegóły
Parametry
[in] aSetSize
Zwracana wartość wybranego wywołania.
[in] aReadSet
Wskaźnik do zbioru deskryptorów plików do odczytu.
[in] aWriteSet
Wskaźnik do zbioru deskryptorów plików zapisu.
[in] aExceptionSet
Wskaźnik do zbioru deskryptorów plików z błędami.

Zainicjuj

Error Init(
  void *aContext
)

Warstwa

 Layer(
  void
)

NewTimer

Error NewTimer(
  Timer *& aTimerPtr
)

PostEvent

Error PostEvent(
  Object & aTarget,
  EventType aEventType,
  uintptr_t aArgument
)

Powoduje to opublikowanie zdarzenia lub komunikatu określonego typu z podanym argumentem do kolejki zdarzeń na platformie instancji.

Szczegóły
Parametry
[in,out] aTarget
Wskaźnik do obiektu Layer systemu Weave wysyłającego żądanie publikacji.
[in] aEventType
Typ wydarzenia do opublikowania.
[in,out] aArgument
Argument powiązany ze zdarzeniem do opublikowania.
Zwracane wartości
WEAVE_SYSTEM_NO_ERROR
Na sukces.
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Jeśli stan obiektu Warstwa jest nieprawidłowy.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Jeśli kolejka zdarzeń jest już pełna.
other
Wygenerowane błędy związane z daną platformą, które wskazują przyczynę niepowodzenia.

PrepareSelect

void PrepareSelect(
  int & aSetSize,
  fd_set *aReadSet,
  fd_set *aWriteSet,
  fd_set *aExceptionSet,
  struct timeval & aSleepTime
)

Przygotuj zestawy deskryptorów plików, z którymi będzie pracować select().

Szczegóły
Parametry
[out] aSetSize
Zakres deskryptorów plików w zestawie deskryptorów plików.
[in] aReadSet
Wskaźnik do zbioru czytelnych deskryptorów plików.
[in] aWriteSet
Wskaźnik do zbioru deskryptorów plików dostępnych do zapisu.
[in] aExceptionSet
Wskaźnik do zbioru deskryptorów plików z błędami.
[in] aSleepTime
Odniesienie do maksymalnego czasu snu.

ScheduleWork

Error ScheduleWork(
  TimerCompleteFunct aComplete,
  void *aAppState
)

Planuje jak najszybsze uruchomienie funkcji z podpisem identycznym z elementem TimerCompleteFunct w wątku Weave.

Szczegóły
Parametry
[in] aComplete
Wskaźnik funkcji wywołania zwrotnego, która ma być wywołana po uruchomieniu tego licznika czasu.
[in] aAppState
Wskaźnik do obiektu stanu aplikacji, który ma być przekazany do funkcji wywołania zwrotnego jako argument.
Zwracane wartości
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Jeśli warstwę systemowa nie została zainicjowana.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Jeśli w warstwie systemowej nie można przydzielić nowego licznika czasu.
WEAVE_SYSTEM_NO_ERROR
Na sukces.

SetPlatformData

void SetPlatformData(
  void *aPlatformData
)

Spowoduje to ustawienie instancji danych platformy specyficznych dla klienta, aby mogły je później pobrać przez platformę klienta.

Szczegóły
Parametry
[in] aPlatformData
Dane platformy klienta do ustawienia.

Wyłączono

Error Shutdown(
  void
)

StartTimer

Error StartTimer(
  uint32_t aMilliseconds,
  TimerCompleteFunct aComplete,
  void *aAppState
)

Ta metoda uruchamia samowyzwalacz.

Szczegóły
Parametry
[in] aMilliseconds
Czas ważności w milisekundach.
[in] aComplete
Wskaźnik do funkcji wywoływanej po wygaśnięciu licznika czasu.
[in] aAppState
Wskaźnik do obiektu stanu aplikacji używanego po wygaśnięciu licznika czasu.
Zwroty
WEAVE_SYSTEM_NO_ERROR.
Zwroty
WEAVE_SYSTEM_ERROR_NO_MEMORY Jeśli nie można przydzielić licznika czasu.
Zwroty
Inna wartość wskazująca, że nie udało się uruchomić licznika czasu.

Stan

LayerState State(
  void
) const 

Zwraca bieżący stan obiektu warstwy.

WakeSelect

void WakeSelect(
  void
)

Wybudź wątek wejścia-wyjścia, który monitoruje deskryptory plików za pomocą funkcji select(), zapisując pojedynczy bajt do potoku wybudzania.

Uwaga: jeśli interfejs WakeSelect() jest wywoływany z przedziału HandleSelectResult(), to zapisywanie danych do potoku wybudzania można pominąć, ponieważ wątek wejścia-wyjścia jest już aktywny. Poza tym nie obchodzimy się z tym, czy ten zapis się nie powiedzie. Jedynym prawdopodobnym błędem jest zapełnienie potoku. W takim przypadku wybrany wątek i tak zostanie wybudzony.

Publiczne funkcje statyczne

GetClock_Monotonic

uint64_t GetClock_Monotonic(
  void
)

Zwraca monotoniczny czas układowy w jednostkach mikrosekund.

Ta funkcja zwraca czas w mikrosekundach, który upłynął od dowolnej epoki zdefiniowanej przez platformę. Zwrócona wartość na pewno stale rośnie (tj. nigdy nie zawija się) pomiędzy kolejnymi restartami systemu. Dodatkowo podstawowe źródło czasu będzie działać bez przerwy we wszystkich trybach uśpienia systemu, które nie wymagają ponownego uruchomienia po wybudzeniu.

Niektóre platformy mogą ustawić zwracanie wartości, która służy do pomiaru czasu od uruchomienia systemu, jednak aplikacje nie mogą na tej podstawie korzystać. Dodatkowo epoka dla funkcji GetClock_Monotonic() nie musi być taka sama jak w przypadku pozostałych funkcji GetClock.... Dlatego obliczenia czasu względnego mogą być wykonywane tylko dla wartości zwracanych przez tę samą funkcję.

Gwarantujemy, że ta funkcja jest bezpieczna w wątkach na każdej platformie, która obsługuje wątki.

Szczegóły
Zwroty
Czas, który upłynął w mikrosekundach od dowolnej epoki zdefiniowanej na platformie.

GetClock_MonotonicHiRes

uint64_t GetClock_MonotonicHiRes(
  void
)

Zwraca (potencjalnie) monotoniczny czas układowy o wysokiej rozdzielczości w jednostkach mikrosekundowych.

Ta funkcja zwraca czas w mikrosekundach, który upłynął od dowolnej epoki zdefiniowanej przez platformę. Zwrócona wartość na pewno stale rośnie (tj. nigdy nie zawija się) pomiędzy kolejnymi restartami systemu. Podstawowy licznik czasu nie musi jednak włączać się bez przerwy w stanach głębokiego uśpienia systemu.

Niektóre platformy mogą zaimplementować funkcję GetClock_MonotonicHiRes() za pomocą licznika czasu o wysokiej rozdzielczości, który ma większą precyzję niż GetClock_Monotonic() i który nie podlega stopniowej korygowaniu zegara (przesuwania). Systemy bez takiego licznika czasu mogą po prostu zwracać tę samą wartość co funkcja GetClock_Monotonic().

Epoka czasu zwracana przez funkcję GetClock_MonotonicHiRes() nie musi być taka sama jak w przypadku innych funkcji GetClock..., w tym GetClock_Monotonic().

Gwarantujemy, że ta funkcja jest bezpieczna w wątkach na każdej platformie, która obsługuje wątki.

Szczegóły
Zwroty
Czas, który upłynął w mikrosekundach od dowolnej epoki zdefiniowanej na platformie.

GetClock_MonotonicMS

uint64_t GetClock_MonotonicMS(
  void
)

Zwraca monotoniczny czas systemowy w milisekundach.

Ta funkcja zwraca czas w milisekundach, który upłynął od dowolnej epoki zdefiniowanej na platformie. Zwrócona wartość na pewno stale rośnie (tj. nigdy nie zawija się) pomiędzy kolejnymi restartami systemu. Dodatkowo podstawowe źródło czasu będzie działać bez przerwy we wszystkich trybach uśpienia systemu, które nie wymagają ponownego uruchomienia po wybudzeniu.

Niektóre platformy mogą ustawić zwracanie wartości, która służy do pomiaru czasu od uruchomienia systemu, jednak aplikacje nie mogą na tej podstawie korzystać. Dodatkowo epoka dla funkcji GetClock_Monotonic() nie musi być taka sama jak w przypadku pozostałych funkcji GetClock.... Dlatego obliczenia czasu względnego mogą być wykonywane tylko dla wartości zwracanych przez tę samą funkcję.

Gwarantujemy, że ta funkcja jest bezpieczna w wątkach na każdej platformie, która obsługuje wątki.

Szczegóły
Zwroty
Czas, który upłynął w milisekundach od dowolnej epoki zdefiniowanej na platformie.

GetClock_RealTime

Error GetClock_RealTime(
  uint64_t & curTime
)

Zwraca bieżący czas rzeczywisty (cywilny) w mikrosekundowym formacie czasu uniksowego.

Ta metoda zwraca pojęcie bieżącego czasu rzeczywistego przez platformę lokalną, wyrażone jako wartość czasu uniksowa przeskalowana do mikrosekund. Gwarantujemy, że ten czas będzie ustawiony co najmniej przez całe sekundy (wartość to 1 000 000), ale na niektórych platformach może działać szybciej.

Jeśli platforma obsługuje śledzenie w czasie rzeczywistym, ale system nie jest zsynchronizowany, funkcja GetClock_RealTime() zwróci błąd WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED.

Na platformach, które nie są w stanie śledzić danych w czasie rzeczywistym, metoda GetClock_RealTime() może być niedostępna, co powoduje błąd linku w przypadku każdej aplikacji, która się do niej odwołuje. Platformy te mogą też udostępniać implementację funkcji GetClock_RealTime(), która zawsze zwraca błąd WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.

Gwarantujemy, że ta funkcja jest bezpieczna w wątkach na każdej platformie, która obsługuje wątki.

Szczegóły
Parametry
[out] curTime
Bieżący czas, wyrażony jako czas uniksowy przeskalowany do mikrosekund.
Zwracane wartości
WEAVE_SYSTEM_NO_ERROR
Jeśli to się uda,
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Jeśli platforma może śledzić dane w czasie rzeczywistym, ale obecnie nie jest zsynchronizowana.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Czy platforma nie jest w stanie śledzić danych w czasie rzeczywistym

GetClock_RealTimeMS

Error GetClock_RealTimeMS(
  uint64_t & curTimeMS
)

Zwraca bieżący rzeczywisty (cywilny) czas uniksowy w milisekundach.

Zwraca ona przez platformę lokalną bieżący czas rzeczywisty wyrażony jako wartość czasu uniksową w milisekundach. Gwarantujemy, że ten czas będzie ustawiony co najmniej przez całe sekundy (wartość to 1 000 000), ale na niektórych platformach może działać szybciej.

Jeśli platforma obsługuje śledzenie w czasie rzeczywistym, ale system nie jest zsynchronizowany, funkcja GetClock_RealTimeMS() zwróci błąd WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED.

Na platformach, które nie są w stanie śledzić danych w czasie rzeczywistym, metoda GetClock_RealTimeMS() może być niedostępna, co powoduje błąd linku w przypadku każdej aplikacji, która się do niej odwołuje. Platformy te mogą też udostępniać implementację funkcji GetClock_RealTimeMS(), która zawsze zwraca błąd WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.

Gwarantujemy, że ta funkcja jest bezpieczna w wątkach na każdej platformie, która obsługuje wątki.

Szczegóły
Parametry
[out] curTime
Bieżący czas, wyrażony jako czas uniksowy ze skalą w milisekundach.
Zwracane wartości
WEAVE_SYSTEM_NO_ERROR
Jeśli to się uda,
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Jeśli platforma może śledzić dane w czasie rzeczywistym, ale obecnie nie jest zsynchronizowana.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Czy platforma nie jest w stanie śledzić danych w czasie rzeczywistym

SetClock_RealTime

Error SetClock_RealTime(
  uint64_t newCurTime
)

Określa na platformie definicję czasu rzeczywistego (cywilnego).

Aplikacje mogą wywoływać tę funkcję, aby na platformie lokalnej określić obecny czas rzeczywisty. Nowy bieżący czas jest wyrażony jako wartość czasu uniksowa przeskalowana do mikrosekund.

Po ustawieniu zegar bazowy na platformie gwarantuje śledzenie w czasie rzeczywistym z dokładnością wynoszącą co najmniej całe sekundy.

Niektóre platformy mogą ograniczać możliwość ustawiania aplikacji lub procesów w czasie rzeczywistym. Jeśli wywołujący nie ma uprawnień do zmiany w czasie rzeczywistym, funkcja SetClock_RealTime() zwróci błąd WEAVE_SYSTEM_ERROR_ACCESS_DENIED.

Na platformach, które nie są w stanie śledzić danych w czasie rzeczywistym lub nie mają możliwości ustawienia czasu rzeczywistego, funkcja SetClock_RealTime() może być niedostępna, co powoduje błąd linku w każdej aplikacji, która do niej się odnosi. Platformy te mogą też udostępniać implementację funkcji SetClock_RealTime(), która zawsze zwraca błąd WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.

Gwarantujemy, że ta funkcja jest bezpieczna w wątkach na każdej platformie, która obsługuje wątki.

Szczegóły
Parametry
[in] newCurTime
Nowy bieżący czas, wyrażony jako czas uniksowy przeskalowany do mikrosekund.
Zwracane wartości
WEAVE_SYSTEM_NO_ERROR
Jeśli to się uda,
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Czy platforma nie jest w stanie śledzić danych w czasie rzeczywistym
#WEAVE_SYSTEM_ERROR_ACCESS_DENIED
Jeśli aplikacja wywołująca nie ma uprawnień do ustawienia bieżącej godziny.