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
これは、イベントループに影響を及ぼし、このインスタンスを処理するキューで待機してからそのキューからイベントを pull して処理のためにディスパッチするプラットフォーム固有のフックに対する構文ラッパーです。
|
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
select() を使用してウェイクパイプに 1 バイトを書き込んで、ファイル記述子をモニタリングする 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)
タイマー完了機能
void(* TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)
パブリック関数
AddEventHandlerDelegate
Error AddEventHandlerDelegate( LwIPEventHandlerDelegate & aDelegate )
これにより、システムレイヤにイベント ハンドラ デリゲートが追加され、LwIP イベントを処理する機能を拡張できます。
詳細 | |||||
---|---|---|---|---|---|
パラメータ |
|
||||
戻り値 |
|
キャンセル タイマー
void CancelTimer( TimerCompleteFunct aOnComplete, void *aAppState )
このメソッドは、StartTimer()
までに開始されたワンショット タイマーをキャンセルします。
詳細 | |||||
---|---|---|---|---|---|
パラメータ |
|
DispatchEvent(ディスパッチ イベント)
Error DispatchEvent( Event aEvent )
これにより、このインスタンスが処理するために指定されたイベントがディスパッチされます。
イベントからの型と引数のマーシャリング解除は、プラットフォーム固有のフックによって処理されます。これにより、実際のディスパッチのために Layer::HandleEvent にコールバックする必要があります。
詳細 | |||
---|---|---|---|
パラメータ |
|
||
戻り値 |
WEAVE_SYSTEM_NO_ERROR(成功しなかった場合)。それ以外の場合は、初期化の失敗の理由を示す特定のエラー。
|
DispatchEvents(ディスパッチ イベント)
Error DispatchEvents( void )
これは、イベントループに影響を及ぼし、このインスタンスを処理するキューで待機してからそのキューからイベントを pull して処理のためにディスパッチするプラットフォーム固有のフックに対する構文ラッパーです。
詳細 | |
---|---|
戻り値 |
成功の場合は WEAVE_SYSTEM_NO_ERROR。それ以外の場合は、初期化の失敗の理由を示す特定のエラー。
|
GetPlatformData
void * GetPlatformData( void ) const
これにより、インスタンスに割り当てられたクライアント固有のプラットフォーム データ(以前に設定されていた場合)が返されます。
詳細 | |
---|---|
戻り値 |
クライアント固有のプラットフォーム データ(すでに設定されている場合)、それ以外の場合は NULL。
|
イベント
Error HandleEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
Weave System の Layer イベントの実際のディスパッチと処理を実装します。
詳細 | |||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
||||||
戻り値 |
|
ハンドル プラットフォーム タイマー
Error HandlePlatformTimer( void )
プラットフォーム タイマーの有効期限イベントを処理する。
nl::Weave::System::タイマー::HandleExpired タイマー s を呼び出して、期限切れタイマーを処理します。この API は、Weave System Layer オブジェクトを所有するスレッドでのみ呼び出されることを前提としています。
詳細 | |
---|---|
戻り値 |
成功した場合は 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 )
新しいタイマー
Error NewTimer( Timer *& aTimerPtr )
イベント後
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()
が動作するためのファイル記述子のセットを準備します。
詳細 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
スケジュール設定
Error ScheduleWork( TimerCompleteFunct aComplete, void *aAppState )
TimerCompleteFunct
とシグネチャが同一の関数を、Weave スレッドでできるだけ早く実行するようスケジュール設定します。
詳細 | |||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
||||||
戻り値 |
|
SetPlatformData
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 )
select() を使用してウェイクパイプに 1 バイトを書き込んで、ファイル記述子をモニタリングする I/O スレッドをウェイクアップします。
注: HandleSelectResult()
内から WakeSelect()
が呼び出されている場合、I/O スレッドがすでに起動しているため、wakeup パイプへの書き込みはスキップできます。さらに、書き込みが失敗します。パイプがいっぱいであるため、選択中の呼び出しスレッドが復帰するため、この書き込みが失敗しても問題にはなりません。
静的パブリック関数
GetClock_Monotonic
uint64_t GetClock_Monotonic( void )
単調なシステム時間をマイクロ秒単位で返します。
この関数は、プラットフォームで定義された任意のエポックからの経過時間をマイクロ秒単位で返します。返される値は、システムの再起動後も継続的に増加する(つまり、常にラップされることがない)ことが保証されます。さらに、基になるタイムソースは、復帰時に再起動を必要としないシステムのスリープモード中に継続的にティックすることが保証されています。
一部のプラットフォームでは、システムの起動からの経過時間を測定する値が返されますが、アプリケーションはこの値に依存しないでください。また、GetClock_Monotonic() のエポックは、他の GetClock... 関数の場合と同じである必要はありません。したがって、相対時間の計算は、同じ関数によって返された値に対してのみ実行できます。
この関数は、スレッド化を採用しているプラットフォームでスレッドセーフであることが保証されています。
詳細 | |
---|---|
戻り値 |
プラットフォームで定義された任意のエポックからの経過時間(マイクロ秒単位)。
|
GetClock_MonotonicHiRes(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() メソッドが存在しないと、それを参照するすべてのアプリケーションでリンクエラーが発生することがあります。その代わり、このようなプラットフォームは常にエラー WEAVE_SYSTEM_ERROR_NOT_SUPPORTED を返す GetClock_RealTime() の実装を提供する場合もあります。
この関数は、スレッド化を採用しているプラットフォームでスレッドセーフであることが保証されています。
詳細 | |||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
||||||
戻り値 |
|
GetClock_RealTimeMS
Error GetClock_RealTimeMS( uint64_t & curTimeMS )
現在の実時間(実時間)をミリ秒の Unix 時間形式で返します。
このメソッドは、現在のリアルタイムのローカル プラットフォーム概念を、ミリ秒単位の Unix 時間値で返します。基盤となるクロックは少なくとも数秒間(1,000,000 の値)の速度でティックすることが保証されていますが、プラットフォームによっては速く切り替わることもあります。
基盤となるプラットフォームはリアルタイムで追跡することはできるものの、システムがまだ同期していない場合、GetClock_RealTimeMS() はエラー WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED を返します。
リアルタイムでトラッキングできないプラットフォームでは、GetClock_RealTimeMS() メソッドが存在しないと、それを参照するアプリケーションにリンクエラーが発生することがあります。その代わりに、このようなプラットフォームは常にエラー WEAVE_SYSTEM_ERROR_NOT_SUPPORTED を返す GetClock_RealTimeMS() の実装を提供する場合もあります。
この関数は、スレッド化を採用しているプラットフォームでスレッドセーフであることが保証されています。
詳細 | |||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
||||||
戻り値 |
|
SetClock_RealTime
Error SetClock_RealTime( uint64_t newCurTime )
現在の実際の時刻を表すプラットフォームの時刻を設定します。
アプリケーションでこの関数を呼び出すと、ローカル プラットフォームの現在の時刻を設定できます。新しい現在の時刻は、マイクロ秒単位の Unix 時間値で表されます。
設定された基礎クロックは、少なくとも数秒間の粒度でリアルタイムにトラッキングされます。
プラットフォームによっては、リアルタイムで設定できるアプリケーションやプロセスが制限されることがあります。呼び出し元にリアルタイムでの変更が許可されていない場合、SetClock_RealTime() 関数は、エラー WEAVE_SYSTEM_ERROR_ACCESS_DENIED を返します。
リアルタイムでトラッキングできないプラットフォームや、リアルタイムで設定できないプラットフォームでは、SetClock_RealTime() 関数が存在しないと、それを参照しているアプリケーションでリンクエラーが発生することがあります。または、こうしたプラットフォームで、常にエラー WEAVE_SYSTEM_ERROR_NOT_SUPPORTED を返す SetClock_RealTime() の実装を提供できます。
この関数は、スレッド化を採用しているプラットフォームでスレッドセーフであることが保証されています。
詳細 | |||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
||||||
戻り値 |
|