Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。

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) 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
これは、イベントループに影響を及ぼし、このインスタンスを処理するキューで待機してからそのキューからイベントを 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 イベントを処理する機能を拡張できます。

詳細
パラメータ
[in] aDelegate
初期化されていない LwIP イベント ハンドラ デリゲート構造
戻り値
WEAVE_SYSTEM_NO_ERROR
成功
WEAVE_SYSTEM_ERROR_BAD_ARGS
aDelegate に含まれる関数ポインタが NULL の場合

キャンセル タイマー

void CancelTimer(
  TimerCompleteFunct aOnComplete,
  void *aAppState
)

このメソッドは、StartTimer() までに開始されたワンショット タイマーをキャンセルします。

詳細
パラメータ
[in] aOnComplete
StartTimer() の呼び出しで使用されるコールバック関数へのポインタ。
[in] aAppState
StartTimer() の呼び出しで使用されるアプリケーションの状態オブジェクトへのポインタ。

DispatchEvent(ディスパッチ イベント)

Error DispatchEvent(
  Event aEvent
)

これにより、このインスタンスが処理するために指定されたイベントがディスパッチされます。

イベントからの型と引数のマーシャリング解除は、プラットフォーム固有のフックによって処理されます。これにより、実際のディスパッチのために Layer::HandleEvent にコールバックする必要があります。

詳細
パラメータ
[in] aEvent
処理のためにディスパッチするプラットフォーム固有のイベント オブジェクト。
戻り値
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 イベントの実際のディスパッチと処理を実装します。

詳細
パラメータ
[in,out] aTarget
イベントの対象となっているレイヤ オブジェクトへの参照。
[in] aEventType
処理するイベント / メッセージのタイプ。
[in] aArgument
イベント / メッセージに関連付けられた引数。
戻り値
WEAVE_SYSTEM_NO_ERROR
成功
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
InetLayer オブジェクトの状態が正しくない場合。
WEAVE_SYSTEM_ERROR_UNEXPECTED_EVENT
イベントタイプを認識できない場合。

ハンドル プラットフォーム タイマー

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 処理関数を呼び出します。

詳細
パラメータ
[in] aSetSize
select 呼び出しの戻り値。
[in] aReadSet
読み取りファイル記述子のセットへのポインタ。
[in] aWriteSet
書き込みファイル記述子のセットへのポインタ。
[in] aExceptionSet
エラーのあるファイル記述子のセットへのポインタ。

init

Error Init(
  void *aContext
)

レイヤ

 Layer(
  void
)

新しいタイマー

Error NewTimer(
  Timer *& aTimerPtr
)

イベント後

Error PostEvent(
  Object & aTarget,
  EventType aEventType,
  uintptr_t aArgument
)

これにより、指定された引数を使用して、指定されたタイプのイベント / メッセージがこのインスタンスのプラットフォーム固有のイベントキューに送信されます。

詳細
パラメータ
[in,out] aTarget
ポスト リクエストを行う Weave System Layer オブジェクトへのポインタ。
[in] aEventType
投稿するイベントのタイプ。
[in,out] aArgument
投稿するイベントに関連付けられた引数。
戻り値
WEAVE_SYSTEM_NO_ERROR
成功
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Layer オブジェクトの状態が正しくない場合。
WEAVE_SYSTEM_ERROR_NO_MEMORY
イベントキューがすでに満員になっている場合
other
失敗した理由を示す、プラットフォーム固有のエラーが生成されました。

PrepareSelect(準備)

void PrepareSelect(
  int & aSetSize,
  fd_set *aReadSet,
  fd_set *aWriteSet,
  fd_set *aExceptionSet,
  struct timeval & aSleepTime
)

select() が動作するためのファイル記述子のセットを準備します。

詳細
パラメータ
[out] aSetSize
ファイル記述子セット内のファイル記述子の範囲。
[in] aReadSet
読み取り可能なファイル記述子のセットへのポインタ。
[in] aWriteSet
書き込み可能なファイル記述子のセットへのポインタ。
[in] aExceptionSet
エラーのあるファイル記述子のセットへのポインタ。
[in] aSleepTime
最大スリープ時間への参照。

スケジュール設定

Error ScheduleWork(
  TimerCompleteFunct aComplete,
  void *aAppState
)

TimerCompleteFunct とシグネチャが同一の関数を、Weave スレッドでできるだけ早く実行するようスケジュール設定します。

詳細
パラメータ
[in] aComplete
このタイマーが発生したときに呼び出されるコールバック関数へのポインタ。
[in] aAppState
コールバック関数に引数として渡されるアプリケーション状態オブジェクトへのポインタ。
戻り値
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
SystemLayer が初期化されていない場合。
WEAVE_SYSTEM_ERROR_NO_MEMORY
SystemLayer が新しいタイマーを割り当てることができない場合。
WEAVE_SYSTEM_NO_ERROR
成功

SetPlatformData

void SetPlatformData(
  void *aPlatformData
)

これにより、指定されたクライアント固有のプラットフォーム データがインスタンスに設定され、後でクライアント プラットフォームによって取得されます。

詳細
パラメータ
[in] aPlatformData
設定するクライアント固有のプラットフォーム データ。

シャットダウン

Error Shutdown(
  void
)

タイマーの開始

Error StartTimer(
  uint32_t aMilliseconds,
  TimerCompleteFunct aComplete,
  void *aAppState
)

このメソッドは、ワンショット タイマーを開始します。

詳細
パラメータ
[in] aMilliseconds
有効期限(ミリ秒単位)。
[in] aComplete
タイマーが期限切れになったときに呼び出される関数へのポインタ。
[in] 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() の実装を提供する場合もあります。

この関数は、スレッド化を採用しているプラットフォームでスレッドセーフであることが保証されています。

詳細
パラメータ
[out] curTime
現在の時刻。マイクロ秒単位の Unix 時間で表されます。
戻り値
WEAVE_SYSTEM_NO_ERROR
メソッドが成功した場合。
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
プラットフォームがリアルタイムで追跡できるが、現在は同期されていない場合。
#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() メソッドが存在しないと、それを参照するアプリケーションにリンクエラーが発生することがあります。その代わりに、このようなプラットフォームは常にエラー WEAVE_SYSTEM_ERROR_NOT_SUPPORTED を返す GetClock_RealTimeMS() の実装を提供する場合もあります。

この関数は、スレッド化を採用しているプラットフォームでスレッドセーフであることが保証されています。

詳細
パラメータ
[out] curTime
現在の時刻。ミリ秒単位の Unix 時間で表されます。
戻り値
WEAVE_SYSTEM_NO_ERROR
メソッドが成功した場合。
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
プラットフォームがリアルタイムで追跡できるが、現在は同期されていない場合。
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
プラットフォームがリアルタイムでトラッキングできない場合。

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() の実装を提供できます。

この関数は、スレッド化を採用しているプラットフォームでスレッドセーフであることが保証されています。

詳細
パラメータ
[in] newCurTime
新しい現在の時刻。マイクロ秒単位の Unix 時間で表されます。
戻り値
WEAVE_SYSTEM_NO_ERROR
メソッドが成功した場合。
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
プラットフォームがリアルタイムでトラッキングできない場合。
#WEAVE_SYSTEM_ERROR_ACCESS_DENIED
呼び出し元のアプリケーションに現在の時刻を設定する権限がない場合。