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
通过将单个字节写入唤醒管道来唤醒使用 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)
计时器完成播放
void(* TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)
公共函数
添加事件处理函数
Error AddEventHandlerDelegate( LwIPEventHandlerDelegate & aDelegate )
这将事件处理程序代理添加到系统层以扩展其处理 LwIP 事件的能力。
详情 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
|
取消计时器
void CancelTimer( TimerCompleteFunct aOnComplete, void *aAppState )
此方法会取消之前通过 StartTimer()
启动的单次计时器。
详情 | |||||
---|---|---|---|---|---|
参数 |
|
DispatchEvent 类
Error DispatchEvent( Event aEvent )
此操作会分派指定的事件,以供此实例处理。
对事件类型和参数进行取消编组由特定于平台的钩子处理,然后钩子应回调至实际调度的 Layer::HandleEvent。
详情 | |||
---|---|---|---|
参数 |
|
||
返回值 |
成功时为 WEAVE_SYSTEM_NO_ERROR;否则为指明初始化失败的原因的特定错误。
|
DispatchEvent 类
Error DispatchEvents( void )
这是针对特定于平台的钩子(影响事件循环、等待为该实例提供服务的队列、从该队列中拉取事件,然后将它们分派给处理操作)影响的语法封装容器。
详情 | |
---|---|
返回值 |
如果成功,则返回 WEAVE_SYSTEM_NO_ERROR;否则,会指明初始化失败的原因。
|
GetPlatformData
void * GetPlatformData( void ) const
这样可以返回分配给实例的所有客户端专用平台数据(如果之前已设置)。
详情 | |
---|---|
返回值 |
特定于客户端的平台数据(如果之前已设置);否则为 NULL。
|
HandleEvent
Error HandleEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
这会实现 Weave System Layer 事件的实际调度和处理。
详情 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
|
HandlePlatform 计时器
Error HandlePlatformTimer( void )
处理平台计时器失效事件。
调用 nl::Weave::System::计时器::HandleExpired 计时器 以处理任何已过期的计时器。假设仅在拥有 Weave System Layer 对象的线程上调用此 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 )
新计时器
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
这将返回层对象的当前状态。
唤醒选择器
void WakeSelect( void )
通过将单个字节写入唤醒管道来唤醒使用 select() 监控文件描述符的 I/O 线程。
注意:如果从 HandleSelectResult()
中调用 WakeSelect()
,则可以跳过对唤醒管道的写入操作,因为 I/O 线程已经唤醒。
此外,我们不在乎此写入是否失败,因为唯一合理的失败可能是管道已满,在这种情况下,选定的调用线程一定会被唤醒。
公共静态函数
GetClock_单调
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 时间值。底层时钟保证能够以至少整秒(1000000 的值)的频率执行抖动,但在某些平台上也可能会以更快的速度执行。
如果底层平台能够实时跟踪,但系统当前未同步,则 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 时间值)。底层时钟保证能够以至少整秒(1000000 的值)的频率执行抖动,但在某些平台上也可能会以更快的速度执行。
如果底层平台能够实时跟踪,但系统当前未同步,则 GetClock_RealTimeMS() 将返回 WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED 错误。
在无法实时跟踪的平台上,GetClock_RealTimeMS() 方法可能不存在,从而导致引用它的任何应用发生链接错误。或者,此类平台可以提供 GetClock_RealTimeMS() 的实现,该实现始终返回错误 WEAVE_SYSTEM_ERROR_NOT_SUPPORTED。
该函数一定会在使用线程的任何平台上进行线程安全。
详情 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
|
设置时钟
Error SetClock_RealTime( uint64_t newCurTime )
设置平台的实际(民用)时间概念。
应用可以调用此函数来设置当前实时的本地平台概念。新的当前时间表示为以微秒为单位的 Unix 时间值。
设置后,可以保证底层平台时钟以至少整秒的粒度跟踪实时。
有些平台可能会限制哪些应用或进程可以实时设置。如果不允许调用方实时更改,SetClock_RealTime() 函数将返回错误 WEAVE_SYSTEM_ERROR_ACCESS_DENIED。
在无法实时跟踪或不提供实时设置的平台上,SetClock_RealTime() 函数可能不存在,从而导致引用它的任何应用出现链接错误。或者,此类平台可以提供 SetClock_RealTime() 的实现,该实现始终返回错误 WEAVE_SYSTEM_ERROR_NOT_SUPPORTED。
该函数一定会在使用线程的任何平台上进行线程安全。
详情 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
|