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)
|
typedefError(*
|
TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)
|
typedefvoid(*
|
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 |
|
||||
Zwracane wartości |
|
CancelTimer
void CancelTimer( TimerCompleteFunct aOnComplete, void *aAppState )
Ta metoda anuluje jednorazowy minutnik, który rozpoczął się wcześniej do StartTimer()
.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
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 |
|
||
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 |
|
||||||
Zwracane wartości |
|
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 |
|
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 |
|
||||||||
Zwracane wartości |
|
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 |
|
ScheduleWork
Error ScheduleWork( TimerCompleteFunct aComplete, void *aAppState )
Planuje jak najszybsze uruchomienie funkcji o podpisie TimerCompleteFunct
w wątku Weave.
Szczegóły | |||||||
---|---|---|---|---|---|---|---|
Parametry |
|
||||||
Zwracane wartości |
|
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 |
|
Wyłączono
Error Shutdown( void )
StartTimer
Error StartTimer( uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState )
Ta metoda uruchamia minutnik jednorazowy.
Szczegóły | |||||||
---|---|---|---|---|---|---|---|
Parametry |
|
||||||
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 |
|
||||||
Zwracane wartości |
|
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 |
|
||||||
Zwracane wartości |
|
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 |
|
||||||
Zwracane wartości |
|