nl:: Weave:: 系統:: 圖層
#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 System Layer 事件。
|
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
將單一位元組寫入到直流管中,透過使用() 來監控監控描述元的 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
傳回目前實際的 (民用) 時間,以毫秒 (Unx) 時間格式表示。
|
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)
公開函式
新增事件處理常式委派
Error AddEventHandlerDelegate( LwIPEventHandlerDelegate & aDelegate )
這樣會將事件處理常式委派新增至系統層,以延長其處理 LwIP 事件的能力。
詳情 | |||||
---|---|---|---|---|---|
參數 |
|
||||
傳回值 |
|
取消計時器
void CancelTimer( TimerCompleteFunct aOnComplete, void *aAppState )
這個方法會取消一次一次性的畫面,從 StartTimer()
起提早開始。
詳情 | |||||
---|---|---|---|---|---|
參數 |
|
修補事件
Error DispatchEvent( Event aEvent )
這會分派指定事件以處理這個執行個體。
事件的類型和引數取消拆解時,由平台專用的掛鉤處理,然後才會傳回 Layer::HandlingEvent 做為實際分派。
詳情 | |||
---|---|---|---|
參數 |
|
||
傳回 |
WEAVE_SYSTEM_NO_ERROR 成功;否則,表示發生初始化失敗的特定錯誤。
|
修補事件
Error DispatchEvents( void )
這是適用於特定平台掛鉤的語法包裝函式,可影響事件迴圈、等待為這個執行個體提供服務的佇列、將佇列從該佇列中提取,然後再分派以處理。
詳情 | |
---|---|
傳回 |
WEAVE_SYSTEM_NO_ERROR 代表成功,否則會顯示特定錯誤,說明初始化失敗的原因。
|
取得平台資料
void * GetPlatformData( void ) const
這會傳回任何指派給執行個體的用戶端專屬平台資料 (如果先前已設定)。
詳情 | |
---|---|
傳回 |
用戶端專屬平台資料 (如果先前已設定),否則為 NULL。
|
處理事件
Error HandleEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
這樣可以執行分派和處理 Weave System Layer 事件。
詳情 | |||||||
---|---|---|---|---|---|---|---|
參數 |
|
||||||
傳回值 |
|
處理常式平台計時器
Error HandlePlatformTimer( void )
處理平台計時器到期事件。
呼叫 nl::Weave::System::Timer::HandlingInvalidTimers 來處理任何過期的計時器。我們假設這個 API 只會在擁有 Weave System Layer 物件的執行緒上呼叫。
詳情 | |
---|---|
傳回 |
WEAVE_SYSTEM_NO_ERROR 作業成功,否則傳回錯誤代碼。
|
帳號選取結果
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 (圖層)
Layer( void )
新計時器
Error NewTimer( Timer *& aTimerPtr )
後事件
Error PostEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
這會將指定類型的事件 / 訊息,使用所提供的引數張貼至這個執行個體的平台專屬事件佇列。
詳情 | |||||||||
---|---|---|---|---|---|---|---|---|---|
參數 |
|
||||||||
傳回值 |
|
準備選取
void PrepareSelect( int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime )
準備一組檔案描述元,讓 select()
能使用。
詳情 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
參數 |
|
排程工作
Error ScheduleWork( TimerCompleteFunct aComplete, void *aAppState )
排定簽章為 TimerCompleteFunct
的函式,以便迅速在 Weave 執行緒上執行。
詳情 | |||||||
---|---|---|---|---|---|---|---|
參數 |
|
||||||
傳回值 |
|
設定平台資料
void SetPlatformData( void *aPlatformData )
這會將指定的用戶端專屬平台資料設為執行個體,以供日後平台擷取。
詳情 | |||
---|---|---|---|
參數 |
|
停用
Error Shutdown( void )
開始計時器
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 )
將單一位元組寫入到直流管中,透過使用() 來監控監控描述元的 I/O 執行緒。
注意:如果在 HandleSelectResult()
中呼叫 WakeSelect()
,由於能略過 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 )
傳回單聲道系統時間,單位為毫秒。
這個函式會傳回一個時間,以毫秒為單位,從任意的平台定義的 Epoch 紀元時間起算。系統傳回的值保證會持續在系統重新啟動後增加 (亦即永遠不包裝)。此外,即使系統醒來時,基礎時間來源仍可在系統不固定的情況下重新啟動,並保證能夠持續運作。
雖然有些平台可能會選擇傳回用於評估系統啟動時間的值,但應用程式「不得」使用這個值。此外,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 )
傳回目前實際的 (民用) 時間,以毫秒 (Unx) 時間格式表示。
此方法會傳回目前平台的即時概念,以調整為毫秒的 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 錯誤。
無論在何種平台上,只要保證所有執行緒都具備這個函式,這個函式就能確保執行緒安全。
詳情 | |||||||
---|---|---|---|---|---|---|---|
參數 |
|
||||||
傳回值 |
|