nl::
  #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) | typedef Error(* | 
| TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError) | typedef void(* | 
| 公開函式 | |
|---|---|
| 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 錯誤。
在任何採用執行緒的平台上,此函式一定能確保執行緒安全。
| 詳細資料 | |||||||
|---|---|---|---|---|---|---|---|
| 參數 | 
 | ||||||
| 傳回值 | 
 | ||||||