nl::Weave::System::Layer

#include <src/system/SystemLayer.h>

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

Podsumowanie

W przypadku usługi WEAVE_SYSTEM_CONFIG_USE_SOCKETS powiadomienia o gotowości zdarzenia są obsługiwane przez tradycyjną implementację ankiet/wyboru w adaptacji platformy.

W przypadku WEAVE_SYSTEM_CONFIG_USE_LWIP powiadomienia o gotowości zdarzenia są obsługiwane przez zdarzenia / wiadomości oraz punkty zaczepienia platformy i systemu dla systemu zdarzeń/wiadomości.

Konstruktory 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
Spowoduje to dodanie delegowanego modułu obsługi zdarzeń do warstwy systemowej w celu rozszerzenia jego możliwości obsługi zdarzeń LwIP.
CancelTimer(TimerCompleteFunct aOnComplete, void *aAppState)
void
Ta metoda anuluje jednorazowy minutnik, który rozpoczął się wcześniej do StartTimer().
DispatchEvent(Event aEvent)
Error
Powoduje to wysłanie określonego zdarzenia do obsługi przez tę instancję.
DispatchEvents(void)
Error
Jest to kod składniowy związany z punktem zaczepienia na danej platformie, który wywołuje pętlę zdarzeń, oczekując na kolejkę obsługującą tę instancję, pobierając zdarzenia z tej kolejki i wysyłając je do obsługi.
GetPlatformData(void) const
void *
Spowoduje to zwrócenie wszystkich danych platformy specyficznych dla klienta, które zostały przypisane do instancji, jeśli zostały wcześniej ustawione.
HandleEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
Error
Implementuje faktyczne wysyłanie i obsługę zdarzenia warstwy systemu Weave.
HandlePlatformTimer(void)
Error
Obsłuż zdarzenie 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 połączenia.
Init(void *aContext)
Error
NewTimer(Timer *& aTimerPtr)
Error
PostEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
Error
Spowoduje to wysłanie zdarzenia lub komunikatu określonego typu z podanym argumentem do kolejki zdarzeń tej instancji.
PrepareSelect(int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime)
void
Przygotuj zestawy deskryptorów plików, których będzie używać select().
ScheduleWork(TimerCompleteFunct aComplete, void *aAppState)
Error
Planuje jak najszybsze uruchomienie funkcji o podpisie TimerCompleteFunct w wątku Weave.
SetPlatformData(void *aPlatformData)
void
Powoduje to ustawienie w instancji określonych danych platformy specyficznych dla klienta, które mogą być później pobierane przez platformę klienta.
Shutdown(void)
Error
StartTimer(uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState)
Error
Ta metoda uruchamia minutnik jednorazowy.
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 1 bajt w potoku wybudzania.

Publiczne funkcje statyczne

GetClock_Monotonic(void)
uint64_t
Zwraca czas systemu monotonnego w mikrosekundach.
GetClock_MonotonicHiRes(void)
uint64_t
Zwraca (potencjalnie) monotonny czas o wysokiej rozdzielczości wyrażony w mikrosekundach.
GetClock_MonotonicMS(void)
uint64_t
Zwraca systemowy czas monotonny 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 czas rzeczywisty (cywilny) w milisekundowym formacie czasu uniksowego.
SetClock_RealTime(uint64_t newCurTime)
Error
Określa przez platformę pojęcie bieżącego 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
)

Spowoduje to dodanie delegowanego modułu obsługi zdarzeń do warstwy systemowej w celu rozszerzenia jego możliwości obsługi zdarzeń LwIP.

Szczegóły
Parametry
[in] aDelegate
Niezainicjowana struktura przedstawiciela modułu obsługi zdarzeń LwIP
Zwracane wartości
WEAVE_SYSTEM_NO_ERROR
Powodzenie.
WEAVE_SYSTEM_ERROR_BAD_ARGS
Jeśli wskaźnik funkcji znajdujący się w obiekcie aDelegate ma wartość NULL

CancelTimer

void CancelTimer(
  TimerCompleteFunct aOnComplete,
  void *aAppState
)

Ta metoda anuluje jednorazowy minutnik, który rozpoczął się wcześniej do StartTimer().

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

DispatchEvent

Error DispatchEvent(
  Event aEvent
)

Powoduje to wysłanie określonego zdarzenia do obsługi przez tę instancję.

Rozdzielanie typu i argumentów zdarzenia ze zdarzenia jest obsługiwane przez specjalny punkt zaczepienia platformy, który powinien następnie wywoływać metodę Layer::HandleEvent jako faktyczną metodę wysyłania.

Szczegóły
Parametry
[in] aEvent
Obiekt zdarzenia na danej platformie do wysłania w celu obsługi.
Zwroty
WEAVE_SYSTEM_NO_ERROR w przypadku powodzenia; w przeciwnym razie pojawi się konkretny błąd wskazujący przyczynę niepowodzenia zainicjowania.

DispatchEvents

Error DispatchEvents(
  void
)

Jest to kod składniowy związany z punktem zaczepienia na danej platformie, który wywołuje pętlę zdarzeń, oczekując na kolejkę obsługującą tę instancję, pobierając zdarzenia z tej kolejki i wysyłając je do obsługi.

Szczegóły
Zwroty
WEAVE_SYSTEM_NO_ERROR po powodzeniu; w przeciwnym razie pojawi się konkretny błąd wskazujący przyczynę niepowodzenia zainicjowania.

GetPlatformData

void * GetPlatformData(
  void
) const 

Spowoduje to zwrócenie wszystkich danych platformy specyficznych dla klienta, które zostały przypisane do instancji, jeśli zostały wcześniej ustawione.

Szczegóły
Zwroty
dane platformy dotyczące konkretnego klienta, jeśli zostały już ustawione; w przeciwnym razie ma wartość NULL.

HandleEvent

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

Implementuje faktyczne wysyłanie i obsługę zdarzenia warstwy systemu Weave.

Szczegóły
Parametry
[in,out] aTarget
Odwołanie do obiektu warstwy, na który jest kierowane zdarzenie.
[in] aEventType
Typ zdarzenia / wiadomości do obsłużenia.
[in] aArgument
Argument powiązany ze zdarzeniem lub wiadomością.
Zwracane wartości
WEAVE_SYSTEM_NO_ERROR
Powodzenie.
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Jeśli stan obiektu InetLayer jest nieprawidłowy.
WEAVE_SYSTEM_ERROR_UNEXPECTED_EVENT
Jeśli nie udało się rozpoznać typu zdarzenia.

HandlePlatformTimer

Error HandlePlatformTimer(
  void
)

Obsłuż zdarzenie wygaśnięcia licznika czasu platformy.

Wywołuje funkcję nl::Weave::System::Timer::HandleExpirationTimers w celu obsługi wygasłych liczników. Zakładamy, ż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, kod błędu w przeciwnym razie

HandleSelectResult

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

Obsługa wejścia-wyjścia z wybranego połączenia.

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
Wartość zwrotna 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.

Init

Error Init(
  void *aContext
)

Warstwa

 Layer(
  void
)

NewTimer

Error NewTimer(
  Timer *& aTimerPtr
)

PostEvent

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

Spowoduje to wysłanie zdarzenia lub komunikatu określonego typu z podanym argumentem do kolejki zdarzeń tej instancji.

Szczegóły
Parametry
[in,out] aTarget
Wskaźnik do obiektu Warstwa systemu Weave wysyłającego żądanie posta.
[in] aEventType
Typ wydarzenia do opublikowania.
[in,out] aArgument
Argument powiązany z wydarzeniem do opublikowania.
Zwracane wartości
WEAVE_SYSTEM_NO_ERROR
Powodzenie.
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Stan obiektu Layer jest nieprawidłowy.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Jeśli kolejka zdarzeń jest już pełna.
other
Wygenerowano błędy dotyczące platformy, 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, których będzie używać select().

Szczegóły
Parametry
[out] aSetSize
Zakres deskryptorów plików w zestawie deskryptorów plików.
[in] aReadSet
Wskaźnik do zbioru możliwych do odczytania 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 o podpisie TimerCompleteFunct w wątku Weave.

Szczegóły
Parametry
[in] aComplete
Wskaźnik do funkcji wywołania zwrotnego, która ma zostać wywołana po uruchomieniu tego licznika.
[in] aAppState
Wskaźnik do obiektu stanu aplikacji, który ma być przekazywany jako argument do funkcji wywołania zwrotnego.
Zwracane wartości
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Jeśli moduł SystemLayer nie został zainicjowany.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Jeśli warstwy systemu nie można przydzielić nowego licznika czasu.
WEAVE_SYSTEM_NO_ERROR
Powodzenie.

SetPlatformData

void SetPlatformData(
  void *aPlatformData
)

Powoduje to ustawienie w instancji określonych danych platformy specyficznych dla klienta, które mogą być później pobierane przez platformę klienta.

Szczegóły
Parametry
[in] aPlatformData
Dane platformy związane z konkretnym klientem do ustawienia.

Wyłączono

Error Shutdown(
  void
)

StartTimer

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

Ta metoda uruchamia minutnik jednorazowy.

Szczegóły
Parametry
[in] aMilliseconds
Czas ważności w milisekundach.
[in] aComplete
Wskaźnik do funkcji wywoływanej po zakończeniu odliczania.
[in] aAppState
Wskaźnik do obiektu stanu aplikacji używanego po wygaśnięciu licznika czasu.
Zwroty
WEAVE_SYSTEM_NO_ERROR Po powodzeniu.
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 1 bajt w potoku wybudzania.

Uwaga: jeśli funkcja WakeSelect() jest wywoływana z poziomu HandleSelectResult(), to pisanie w pionie wybudzania może zostać pominięte, ponieważ wątek wejścia-wyjścia jest już aktywny. Ponadto nie obchodzimy się z tym, że ten zapis się nie uda, ponieważ jedyną prawdopodobną awarią jest brak zapełnienia potoku. W takim przypadku wybrany wątek i tak się wybudzi.

Publiczne funkcje statyczne

GetClock_Monotonic

uint64_t GetClock_Monotonic(
  void
)

Zwraca czas systemu monotonnego w mikrosekundach.

Ta funkcja zwraca czas, który upłynął w mikrosekundach od dowolnej epoki zdefiniowanej przez platformę. Zwracana wartość będzie coraz większa (czyli nigdy nie będzie zawijana) między restartami systemu. Dodatkowo odpowiednie źródło czasu będzie działać nieprzerwanie we wszystkich trybach uśpienia systemu, które nie wymagają ponownego uruchomienia po wybudzeniu.

Niektóre platformy mogą zwracać wartość, która mierzy czas od uruchomienia systemu, jednak aplikacje nie mogą na tym polegać. Dodatkowo epoka dla funkcji GetClock_Monotonic() nie musi być taka sama jak w przypadku innych funkcji GetClock... Dlatego czas względny można obliczać tylko dla wartości zwracanych przez tę samą funkcję.

Ta funkcja gwarantuje, że będzie można korzystać z wątków na każdej platformie, która je obsługuje.

Szczegóły
Zwroty
Czas, który upłynął w mikrosekundach od dowolnego okresu zdefiniowanego przez platformę.

GetClock_MonotonicHiRes

uint64_t GetClock_MonotonicHiRes(
  void
)

Zwraca (potencjalnie) monotonny czas o wysokiej rozdzielczości wyrażony w mikrosekundach.

Ta funkcja zwraca czas, który upłynął w mikrosekundach od dowolnej epoki zdefiniowanej przez platformę. Zwracana wartość będzie coraz większa (czyli nigdy nie będzie zawijana) między restartami systemu. Jednak bazowy licznik czasu nie musi być stale włączony w stanie głębokiego uśpienia systemu.

Niektóre platformy mogą implementować funkcję GetClock_MonotonicHiRes(), korzystając z licznika czasu o wysokiej rozdzielczości o większej dokładności niż GetClock_Monotonic() i który nie podlega stopniowej korektie zegara (czyli obrotowej). Systemy bez takiego licznika czasu mogą zwracać taką samą wartość jak 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().

Ta funkcja gwarantuje, że będzie można korzystać z wątków na każdej platformie, która je obsługuje.

Szczegóły
Zwroty
Czas, który upłynął w mikrosekundach od dowolnego okresu zdefiniowanego przez platformę.

GetClock_MonotonicMS

uint64_t GetClock_MonotonicMS(
  void
)

Zwraca systemowy czas monotonny w milisekundach.

Ta funkcja zwraca w milisekundach czas, który upłynął od dowolnej epoki zdefiniowanej przez platformę. Zwracana wartość będzie coraz większa (czyli nigdy nie będzie zawijana) między restartami systemu. Dodatkowo odpowiednie źródło czasu będzie działać nieprzerwanie we wszystkich trybach uśpienia systemu, które nie wymagają ponownego uruchomienia po wybudzeniu.

Niektóre platformy mogą zwracać wartość, która mierzy czas od uruchomienia systemu, jednak aplikacje nie mogą na tym polegać. Dodatkowo epoka dla funkcji GetClock_Monotonic() nie musi być taka sama jak w przypadku innych funkcji GetClock... Dlatego czas względny można obliczać tylko dla wartości zwracanych przez tę samą funkcję.

Ta funkcja gwarantuje, że będzie można korzystać z wątków na każdej platformie, która je obsługuje.

Szczegóły
Zwroty
Czas, który upłynął w milisekundach od dowolnego okresu zdefiniowanego przez platformę.

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 na platformie lokalnej, wyrażone jako wartość czasu uniksowego skalowana do mikrosekund. Gwarantuje to, że bazowy zegar będzie odliczać co najmniej pełne sekundy (wartości 1 000 000), ale na niektórych platformach może być ono szybsze.

Jeśli platforma bazowa może śledzić dane w czasie rzeczywistym, ale system nie jest obecnie zsynchronizowany, funkcja GetClock_RealTime() zwróci błąd WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED.

Na platformach, które nie mogą śledzić śledzenia w czasie rzeczywistym, może brakować metody GetClock_RealTime(), co spowoduje błąd linku w przypadku każdej aplikacji, która się do niej odwołuje. Takie platformy mogą też dostarczać implementację funkcji GetClock_RealTime(), która zawsze zwraca błąd WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.

Ta funkcja gwarantuje, że będzie można korzystać z wątków na każdej platformie, która je obsługuje.

Szczegóły
Parametry
[out] curTime
Bieżący czas wyrażony jako czas uniksowy w skali do mikrosekund.
Zwracane wartości
WEAVE_SYSTEM_NO_ERROR
Jeśli przy użyciu metody się udało:
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Czy platforma może śledzić ruch w czasie rzeczywistym, ale obecnie nie jest zsynchronizowana.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Czy platforma nie może śledzić ruchu w czasie rzeczywistym.

GetClock_RealTimeMS

Error GetClock_RealTimeMS(
  uint64_t & curTimeMS
)

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

Ta metoda zwraca pojęcie czasu rzeczywistego na platformie lokalnej, wyrażone jako wartość czasu uniksowego skalowana do milisekund. Gwarantuje to, że bazowy zegar będzie odliczać co najmniej pełne sekundy (wartości 1 000 000), ale na niektórych platformach może być ono szybsze.

Jeśli platforma bazowa może śledzić dane w czasie rzeczywistym, ale system nie jest obecnie zsynchronizowany, funkcja GetClock_RealTimeMS() zwróci błąd WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED.

Na platformach, które nie mogą śledzić ruchu w czasie rzeczywistym, może brakować metody GetClock_RealTimeMS(), co może powodować błąd linku w przypadku każdej aplikacji, która się do niej odwołuje. Takie platformy mogą też dostarczać implementację funkcji GetClock_RealTimeMS(), która zawsze zwraca błąd WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.

Ta funkcja gwarantuje, że będzie można korzystać z wątków na każdej platformie, która je obsługuje.

Szczegóły
Parametry
[out] curTime
Bieżący czas wyrażony jako czas systemu Unix skalowany do milisekund.
Zwracane wartości
WEAVE_SYSTEM_NO_ERROR
Jeśli przy użyciu metody się udało:
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Czy platforma może śledzić ruch w czasie rzeczywistym, ale obecnie nie jest zsynchronizowana.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Czy platforma nie może śledzić ruchu w czasie rzeczywistym.

SetClock_RealTime

Error SetClock_RealTime(
  uint64_t newCurTime
)

Określa przez platformę pojęcie bieżącego czasu rzeczywistego (cywilnego).

Aplikacje mogą wywołać tę funkcję, aby ustawić bieżący czas rzeczywisty określony przez platformę lokalną. Nowy bieżący czas jest wyrażony jako wartość czasu uniksowego skalowana do mikrosekund.

Po ustawieniu zegar platformy powinien śledzić czas w czasie rzeczywistym z dokładnością wynoszącą co najmniej pełne sekundy.

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

Na platformach, które nie obsługują śledzenia w czasie rzeczywistym lub nie umożliwiają ustawiania czasu rzeczywistego, może brakować funkcji SetClock_RealTime(). Może to spowodować błąd linku w przypadku każdej aplikacji, która się do niej odwołuje. Takie platformy mogą też dostarczać implementację funkcji SetClock_RealTime(), która zawsze zwraca błąd WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.

Ta funkcja gwarantuje, że będzie można korzystać z wątków na każdej platformie, która je obsługuje.

Szczegóły
Parametry
[in] newCurTime
Nowy bieżący czas wyrażony jako czas uniksowy w skali do mikrosekund.
Zwracane wartości
WEAVE_SYSTEM_NO_ERROR
Jeśli przy użyciu metody się udało:
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Czy platforma nie może śledzić ruchu w czasie rzeczywistym.
#WEAVE_SYSTEM_ERROR_ACCESS_DENIED
Jeśli aplikacja wywołująca nie ma uprawnień do ustawienia bieżącej godziny.