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)
|
typedefError(*
|
TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)
|
typedefvoid(*
|
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 |
|
||||
Zwracane wartości |
|
CancelTimer
void CancelTimer( TimerCompleteFunct aOnComplete, void *aAppState )
Ta metoda anuluje minutnik uruchamiany wcześniej do StartTimer()
.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
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 |
|
||
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 |
|
||||||
Zwracane wartości |
|
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 |
|
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 |
|
||||||||
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, z którymi będzie pracować select()
.
Szczegóły | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parametry |
|
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 |
|
||||||
Zwracane wartości |
|
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 |
|
Wyłączono
Error Shutdown( void )
StartTimer
Error StartTimer( uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState )
Ta metoda uruchamia samowyzwalacz.
Szczegóły | |||||||
---|---|---|---|---|---|---|---|
Parametry |
|
||||||
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 |
|
||||||
Zwracane wartości |
|
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 |
|
||||||
Zwracane wartości |
|
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 |
|
||||||
Zwracane wartości |
|