nl:: Weave:: System:: Layer
#include <src/system/SystemLayer.h>
This provides access to timers according to the configured event handling model.
摘要
對 WEAVE_SYSTEM_CONFIG_USE_SOCKETS
來說,系統會透過調整平台的傳統輪詢/選取實作處理事件完備性通知。
如果是 WEAVE_SYSTEM_CONFIG_USE_LWIP
,系統會透過事件 / 訊息,以及事件/訊息系統的平台與系統專用掛鉤處理事件完備性通知。
建構函式和解構函式 |
|
---|---|
Layer(void)
|
公開類型 |
|
---|---|
EventHandler)(Object &aTarget, EventType aEventType, uintptr_t aArgument)
|
typedefError(*
|
TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)
|
typedefvoid(*
|
公開函式 |
|
---|---|
AddEventHandlerDelegate(LwIPEventHandlerDelegate & aDelegate)
|
Error
這會將事件處理常式委派新增至系統層,擴展其處理 LwIP 事件的能力。
|
CancelTimer(TimerCompleteFunct aOnComplete, void *aAppState)
|
void
這個方法會取消早開始到
StartTimer() 的一次性計時器。 |
DispatchEvent(Event aEvent)
|
Error
這會分派指定事件,以供此執行個體處理。
|
DispatchEvents(void)
|
Error
這是在平台專屬掛鉤周圍的語法包裝函式,會影響事件迴圈、等待執行個體在服務佇列中、從該佇列中提取事件,然後將其派出進行處理。
|
GetPlatformData(void) const
|
void *
此方法會傳回指派給執行個體的任何用戶端專屬平台資料 (如果先前已設定過)。
|
HandleEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
|
Error
這會實作 Weave 系統圖層事件的實際調度和處理。
|
HandlePlatformTimer(void)
|
Error
處理平台計時器到期事件。
|
HandleSelectResult(int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet)
|
void
透過特定呼叫處理 I/O。
|
Init(void *aContext)
|
Error
|
NewTimer(Timer *& aTimerPtr)
|
Error
|
PostEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
|
Error
這會將具有指定類型的事件 / 訊息張貼至這個執行個體的平台專屬事件佇列,並加上提供的引數。
|
PrepareSelect(int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime)
|
void
準備可供
select() 使用的檔案描述元集。 |
ScheduleWork(TimerCompleteFunct aComplete, void *aAppState)
|
Error
排定簽名與
TimerCompleteFunct 相同的函式,以便在 Weave 執行緒上盡快執行。 |
SetPlatformData(void *aPlatformData)
|
void
這會將指定的用戶端平台資料設為執行個體,以供用戶端平台稍後擷取。
|
Shutdown(void)
|
Error
|
StartTimer(uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState)
|
Error
這個方法會啟動一次性計時器。
|
State(void) const
|
LayerState
這會傳回圖層物件的目前狀態。
|
WakeSelect(void)
|
void
使用 select() 將單一位元組寫入 Wake 管道,藉此喚醒使用 select() 監控檔案描述元的 I/O 執行緒。
|
公開的靜態函式 |
|
---|---|
GetClock_Monotonic(void)
|
uint64_t
傳回單調系統時間 (以微秒為單位)。
|
GetClock_MonotonicHiRes(void)
|
uint64_t
傳回 (可能) 的高解析度單調系統時間,以微秒為單位。
|
GetClock_MonotonicMS(void)
|
uint64_t
傳回單調系統時間 (以毫秒為單位)。
|
GetClock_RealTime(uint64_t & curTime)
|
Error
以微秒 Unix 時間格式傳回目前的實際 (民用) 時間。
|
GetClock_RealTimeMS(uint64_t & curTimeMS)
|
Error
以毫秒的 Unix 時間格式傳回目前的實際 (民用) 時間。
|
SetClock_RealTime(uint64_t newCurTime)
|
Error
設定平台的目前實際 (民用) 時間概念。
|
公開類型
EventHandler
Error(* EventHandler)(Object &aTarget, EventType aEventType, uintptr_t aArgument)
TimerCompleteFunct
void(* TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)
公開函式
AddEventHandlerDelegate
Error AddEventHandlerDelegate( LwIPEventHandlerDelegate & aDelegate )
這會將事件處理常式委派新增至系統層,以擴展其處理 LwIP 事件的能力。
詳細資料 | |||||
---|---|---|---|---|---|
參數 |
|
||||
傳回值 |
|
CancelTimer
void CancelTimer( TimerCompleteFunct aOnComplete, void *aAppState )
這個方法會取消早開始到 StartTimer()
的一次性計時器。
詳細資料 | |||||
---|---|---|---|---|---|
參數 |
|
DispatchEvent
Error DispatchEvent( Event aEvent )
這會分派指定事件,以供此執行個體處理。
事件的類型和引數解構作業是由平台專屬的掛鉤處理,該掛鉤應會呼叫 Layer::HandleEvent,以便實際調度。
詳細資料 | |||
---|---|---|---|
參數 |
|
||
傳回 |
WEAVE_SYSTEM_NO_ERROR 成功;否則會顯示特定錯誤,指出初始化失敗的原因。
|
DispatchEvents
Error DispatchEvents( void )
這是在平台專屬掛鉤周圍的語法包裝函式,會影響事件迴圈、等待執行個體在服務佇列中、從該佇列中提取事件,然後將其派出進行處理。
詳細資料 | |
---|---|
傳回 |
WEAVE_SYSTEM_NO_ERROR 成功;否則會顯示特定錯誤,指出初始化失敗的原因。
|
GetPlatformData
void * GetPlatformData( void ) const
此方法會傳回指派給執行個體的任何用戶端專屬平台資料 (如果先前已設定過)。
詳細資料 | |
---|---|
傳回 |
用戶端專屬平台資料 (如果先前已設定);否則為 NULL。
|
HandleEvent
Error HandleEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
這會實作 Weave 系統圖層事件的實際調度和處理。
詳細資料 | |||||||
---|---|---|---|---|---|---|---|
參數 |
|
||||||
傳回值 |
|
HandlePlatformTimer
Error HandlePlatformTimer( void )
處理平台計時器到期事件。
呼叫 nl::Weave::System::Timer::HandleExpiredTimers 來處理任何已過期的計時器。系統會假設只有在擁有 Weave 系統圖層物件的執行緒上,才會呼叫這個 API。
詳細資料 | |
---|---|
傳回 |
成功時傳回 WEAVE_SYSTEM_NO_ERROR,否則傳回錯誤代碼。
|
HandleSelectResult
void HandleSelectResult( int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet )
透過特定呼叫處理 I/O。
這個方法會在每個有效端點中註冊待處理的 I/O 事件,然後針對這些端點叫用對應的 I/O 處理函式。
詳細資料 | |||||||||
---|---|---|---|---|---|---|---|---|---|
參數 |
|
Init
Error Init( void *aContext )
圖層
Layer( void )
NewTimer
Error NewTimer( Timer *& aTimerPtr )
PostEvent
Error PostEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
這會將具有指定類型的事件 / 訊息張貼至這個執行個體的平台專屬事件佇列,並加上提供的引數。
詳細資料 | |||||||||
---|---|---|---|---|---|---|---|---|---|
參數 |
|
||||||||
傳回值 |
|
PrepareSelect
void PrepareSelect( int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime )
準備可供 select()
使用的檔案描述元集。
詳細資料 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
參數 |
|
ScheduleWork
Error ScheduleWork( TimerCompleteFunct aComplete, void *aAppState )
排定簽名與 TimerCompleteFunct
相同的函式,以便在 Weave 執行緒上盡快執行。
詳細資料 | |||||||
---|---|---|---|---|---|---|---|
參數 |
|
||||||
傳回值 |
|
SetPlatformData
void SetPlatformData( void *aPlatformData )
這會將指定的用戶端平台資料設為執行個體,以供用戶端平台稍後擷取。
詳細資料 | |||
---|---|---|---|
參數 |
|
關閉
Error Shutdown( void )
StartTimer
Error StartTimer( uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState )
這個方法會啟動一次性計時器。
詳細資料 | |||||||
---|---|---|---|---|---|---|---|
參數 |
|
||||||
傳回 |
WEAVE_SYSTEM_NO_ERROR 成功時。
|
||||||
傳回 |
WEAVE_SYSTEM_ERROR_NO_MEMORY 如果無法分配計時器。
|
||||||
傳回 |
其他值,表示無法啟動計時器。
|
州
LayerState State( void ) const
這會傳回圖層物件的目前狀態。
WakeSelect
void WakeSelect( void )
使用 select() 將單一位元組寫入 Wake 管道,藉此喚醒使用 select() 監控檔案描述元的 I/O 執行緒。
注意:如果是從 HandleSelectResult()
中呼叫 WakeSelect()
,則可以略過寫入 W/O 執行緒,因為 I/O 執行緒已喚醒。
此外,我們不介意這個寫入作業是否失敗,因為只有在合理可能失敗的情況下,管道空間已滿;在這種情況下,所選呼叫執行緒仍會喚醒。
公開的靜態函式
GetClock_Monotonic
uint64_t GetClock_Monotonic( void )
傳回單調系統時間 (以微秒為單位)。
這個函式會傳回經過時間 (以微秒為單位),因為平台定義的任意時間。系統重新啟動後,傳回的值保證不會經過自動換行。此外,在任何系統睡眠模式期間,凡是不會在醒來後重新啟動的系統睡眠模式,基礎時間來源保證仍會保持不變。
雖然部分平台可能會選擇傳回用來測量系統啟動後時間的值,但應用程式「不」必須傳回這個值。此外,GetClock_Monotonic() 的週期「不必」與任何其他 GetClock... 函式一樣。因此,只有相同函式傳回的值才能計算相對時間。
在任何採用執行緒的平台上,此函式一定能確保執行緒安全。
詳細資料 | |
---|---|
傳回 |
從平台定義任意訓練週期以來經過的時間 (以微秒為單位)。
|
GetClock_MonotonicHiRes
uint64_t GetClock_MonotonicHiRes( void )
傳回 (可能) 的高解析度單調系統時間,以微秒為單位。
這個函式會傳回經過時間 (以微秒為單位),因為平台定義的任意時間。系統重新啟動後,傳回的值保證不會經過自動換行。不過,系統「不需要」在系統處於熟睡狀態時持續遵守基礎計時器。
部分平台可能會使用高解析度計時器 (比 GetClock_Monotonic()) 更精準的 GetClock_MonotonicHiRes(),而且不會循序漸進地調整時鐘 (滑動)。如果系統沒有這類計時器,可能只會傳回與 GetClock_Monotonic() 的值相同。
GetClock_MonotonicHiRes() 所傳回的時間週期不必與所有其他 GetClock... 函式 (包括 GetClock_Monotonic()) 相同。
在任何採用執行緒的平台上,此函式一定能確保執行緒安全。
詳細資料 | |
---|---|
傳回 |
從平台定義任意訓練週期以來經過的時間 (以微秒為單位)。
|
GetClock_MonotonicMS
uint64_t GetClock_MonotonicMS( void )
傳回單調系統時間 (以毫秒為單位)。
這個函式會傳回從平台定義任意訓練週期以來的經過時間 (以毫秒為單位)。系統重新啟動後,傳回的值保證不會經過自動換行。此外,在任何系統睡眠模式期間,凡是不會在醒來後重新啟動的系統睡眠模式,基礎時間來源保證仍會保持不變。
雖然部分平台可能會選擇傳回用來測量系統啟動後時間的值,但應用程式「不」必須傳回這個值。此外,GetClock_Monotonic() 的週期「不必」與任何其他 GetClock... 函式一樣。因此,只有相同函式傳回的值才能計算相對時間。
在任何採用執行緒的平台上,此函式一定能確保執行緒安全。
詳細資料 | |
---|---|
傳回 |
從任意平台定義週期以來經過的時間 (以毫秒為單位)。
|
GetClock_RealTime
Error GetClock_RealTime( uint64_t & curTime )
以微秒 Unix 時間格式傳回目前的實際 (民用) 時間。
這個方法會傳回當地平台的目前即時概念,以縮放至微秒的 Unix 時間值表示。基礎時鐘保證會以至少秒的速率 (值是 1,000,000) 來測量,但是在某些平台上,它的移動速度可能比較快。
如果基礎平台能夠即時追蹤,但系統目前沒有同步,GetClock_RealTime() 會傳回 WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED 錯誤。
在無法即時追蹤的平台上,GetClock_RealTime() 方法可能缺少,對於參照該方法的應用程式,也會產生連結錯誤。或者,這類平台可能會提供 GetClock_RealTime() 的實作方式,其一律會傳回 WEAVE_SYSTEM_ERROR_NOT_SUPPORTED 錯誤。
在任何採用執行緒的平台上,此函式一定能確保執行緒安全。
詳細資料 | |||||||
---|---|---|---|---|---|---|---|
參數 |
|
||||||
傳回值 |
|
GetClock_RealTimeMS
Error GetClock_RealTimeMS( uint64_t & curTimeMS )
以毫秒的 Unix 時間格式傳回目前的實際 (民用) 時間。
這個方法會傳回本機平台的目前即時概念 (以縮放至毫秒的 Unix 時間值表示)。基礎時鐘保證會以至少秒的速率 (值是 1,000,000) 來測量,但是在某些平台上,可能會跳動速度更快。
如果基礎平台能夠即時追蹤,但系統目前沒有同步,GetClock_RealTimeMS() 會傳回 WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED 錯誤。
在無法即時追蹤的平台上,GetClock_RealTimeMS() 方法可能會缺少,對於參照該方法的應用程式,也會產生連結錯誤。或者,這類平台可能會提供 GetClock_RealTimeMS() ,其實作一律會傳回 WEAVE_SYSTEM_ERROR_NOT_SUPPORTED 錯誤。
在任何採用執行緒的平台上,此函式一定能確保執行緒安全。
詳細資料 | |||||||
---|---|---|---|---|---|---|---|
參數 |
|
||||||
傳回值 |
|
SetClock_RealTime
Error SetClock_RealTime( uint64_t newCurTime )
設定平台的目前實際 (民用) 時間概念。
應用程式可以呼叫此函式,設定本機平台的目前即時概念。新的目前時間會以 Unix 時間值表示,調幅為微秒。
設定後,基礎平台時鐘即可保證即時追蹤精細程度至少為一秒的即時資訊。
某些平台可能會限制可即時設定的應用程式或程序。如果呼叫端不允許即時變更,SetClock_RealTime() 函式將傳回錯誤 WEAVE_SYSTEM_ERROR_ACCESS_DENIED。
在無法即時追蹤的平台上,或不提供即時設定功能的平台上,可能缺少 SetClock_RealTime() 函式,因此在參照該函式的應用程式也會發生連結錯誤。或者,這類平台可能會提供 SetClock_RealTime() 的實作方式,其一律會傳回 WEAVE_SYSTEM_ERROR_NOT_SUPPORTED 錯誤。
在任何採用執行緒的平台上,此函式一定能確保執行緒安全。
詳細資料 | |||||||
---|---|---|---|---|---|---|---|
參數 |
|
||||||
傳回值 |
|