nl::Weave::System::Platform::Layer

摘要

函数

DidInit(Layer & aLayer, void *aContext, Error aStatus)
NL_DLL_EXPORT void
这是特定于平台的 Weave 系统 Layer 初始化后钩子。
DidShutdown(Layer & aLayer, void *aContext, Error aStatus)
NL_DLL_EXPORT void
这是特定于平台的 Weave System Layer 预关停钩子。
DispatchEvent(Layer & aLayer, void *aContext, Event aEvent)
NL_DLL_EXPORT Error
这是针对具体平台的事件 / 消息调度钩子。
DispatchEvents(Layer & aLayer, void *aContext)
NL_DLL_EXPORT Error
这是针对具体平台的事件 / 消息调度钩子。
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 时间格式的当前实际(民用)时间。
PostEvent(Layer & aLayer, void *aContext, Object & aTarget, EventType aType, uintptr_t aArgument)
NL_DLL_EXPORT Error
这是针对具体平台的事件 / 消息后置钩子。
SetClock_RealTime(uint64_t newCurTime)
Error
用于设置当前实际(民用)时间的平台专用函数。
StartTimer(Layer & aLayer, void *aContext, uint32_t aMilliseconds)
NL_DLL_EXPORT Error
这是针对具体平台的事件 / 消息调度钩子。
WillInit(Layer & aLayer, void *aContext)
NL_DLL_EXPORT Error
这是特定于平台的 Weave 系统预初始化钩子。
WillShutdown(Layer & aLayer, void *aContext)
NL_DLL_EXPORT Error
这是特定于平台的 Weave System Layer 预关停钩子。

函数

DidInit

NL_DLL_EXPORT void DidInit(
  Layer & aLayer,
  void *aContext,
  Error aStatus
)

这是特定于平台的 Weave 系统 Layer 初始化后钩子。

可通过断言预处理器定义 WEAVE_SYSTEM_CONFIG_PLATFORM_PROVIDES_XTOR_FUNCTIONS 覆盖此管理方式。

具体说明
参数
[in,out] aLayer
对正在初始化的 Weave 系统 Layer 实例的引用。
[in,out] aContext
传递给图层初始化方法 ::Init 的平台特定上下文数据。
[in] anError
通过 Weave System Layer ::Init 方法返回的总体状态。

DidShutdown

NL_DLL_EXPORT void DidShutdown(
  Layer & aLayer,
  void *aContext,
  Error aStatus
)

这是特定于平台的 Weave System Layer 预关停钩子。

可通过断言预处理器定义 WEAVE_SYSTEM_CONFIG_PLATFORM_PROVIDES_XTOR_FUNCTIONS 覆盖此管理方式。

具体说明
参数
[in,out] aLayer
对要关停的 Weave System Layer 实例的引用。
[in,out] aContext
传递给层初始化方法 ::Shutdown 的平台特定上下文数据。
[in] anError
通过 Weave System Layer ::Shutdown 方法返回的总体状态。
返回值
WEAVE_SYSTEM_NO_ERROR(如果成功的话);否则,是一个具体错误,会说明关闭失败的原因。返回“不成功”状态将取消关停。

DispatchEvent

NL_DLL_EXPORT Error DispatchEvent(
  Layer & aLayer,
  void *aContext,
  Event aEvent
)

这是针对具体平台的事件 / 消息调度钩子。

可通过断言预处理器定义 WEAVE_SYSTEM_CONFIG_PLATFORM_PROVIDES_EVENT_FUNCTIONS 来覆盖此行为。

这会将指定的事件分派给处理事件,将事件中的类型和参数解组,以便传递给 Weave 系统 Layer::HandleEvent,以便执行实际分派。

具体说明
参数
[in,out] aLayer
对调度事件 / 消息的层实例的引用。
[in,out] aContext
传递给图层初始化方法 ::Init 的平台特定上下文数据。
[in] anEvent
要分派以进行处理的平台特定事件对象。
返回值
#WEAVE_SYSTEM_ERROR_BAD_ARGS
如果 #aLayer 或事件目标为 NULL。
#WEAVE_SYSTEM_ERROR_UNEXPECTED_EVENT
事件类型无法识别。
#WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
如果 Weave 系统 Layer 对象的状态不符合预期,
WEAVE_SYSTEM_NO_ERROR
成功时。

DispatchEvents

NL_DLL_EXPORT Error DispatchEvents(
  Layer & aLayer,
  void *aContext
)

这是针对具体平台的事件 / 消息调度钩子。

可通过断言预处理器定义 WEAVE_SYSTEM_CONFIG_PLATFORM_PROVIDES_EVENT_FUNCTIONS 来覆盖此行为。

这会影响事件循环,即等待为此实例提供服务的队列,从该队列中拉取事件,然后分派它们进行处理。

具体说明
参数
[in,out] aLayer
对调度事件 / 消息的层实例的引用。
[in,out] aContext
传递给图层初始化方法 ::Init 的平台特定上下文数据。
返回值
#WEAVE_SYSTEM_ERROR_BAD_ARGS
如果 #aLayer 或 #aContext 为 NULL。
#WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
如果 Weave 系统 Layer 对象的状态不符合预期,
#WEAVE_SYSTEM_ERROR_UNEXPECTED_EVENT
事件类型无法识别时。
WEAVE_SYSTEM_NO_ERROR
成功时。

GetClock_Monotonic

uint64_t GetClock_Monotonic(
  void
)

用于获取单调系统时间(以微秒为单位)的平台专用函数。

此函数应返回自平台定义的任意纪元以来的经过时间(以微秒为单位)。平台实现必须返回一个在系统重新启动之间不断增加(即从不换行)的值。此外,在任何不需要在唤醒时重启的系统休眠模式中,底层时间源都需要持续计时。

此函数返回的时间纪元必须与其他任何 GetClock... 函数(包括 GetClock_MonotonicMS())的时间相同。

在任何采用线程处理的平台上,此函数都是线程安全的。

具体说明
返回值
自平台定义的任意纪元以来经过的时间(以微秒为单位)。

GetClock_MonotonicHiRes

uint64_t GetClock_MonotonicHiRes(
  void
)

针对具体平台的函数,用于获取高分辨率单调系统时间(以微秒为单位)。

此函数应返回自平台定义的任意纪元以来的经过时间(以微秒为单位)。GetClock_MonotonicHiRes() 返回的值必须不断增加(即永不换行)。不过,底层计时器不需要在系统深度睡眠状态下连续计时。

建议平台使用不受时钟逐步调整(旋转)影响的高分辨率计时器实现 GetClock_MonotonicHiRes()。在没有此类计时器的平台上,GetClock_MonotonicHiRes() 可以返回与 GetClock_Monotonic() 相同的值。

此函数返回的时间的纪元不需要与任何其他 GetClock... 函数相同。

在任何采用线程处理的平台上,此函数都是线程安全的。

具体说明
返回值
自平台定义的任意纪元以来经过的时间(以微秒为单位)。

GetClock_MonotonicMS

uint64_t GetClock_MonotonicMS(
  void
)

针对具体平台的函数,用于获取单调系统时间(以毫秒为单位)。

此函数应返回自平台定义的任意时间以来经过的时间(以毫秒为单位)。平台实现必须返回一个在系统重新启动之间不断增加(即从不换行)的值。此外,在任何不需要在唤醒时重启的系统休眠模式中,底层时间源都需要持续计时。

此函数返回的时间周期必须与其他任何 GetClock... 函数(包括 GetClock_Monotonic())的时间周期相同。

在任何采用线程处理的平台上,此函数都是线程安全的。

具体说明
返回值
自平台定义的任意纪元以来经过的时间(以毫秒为单位)。

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 时间值。

如需详细了解预期行为,请参阅 GetClock_RealTime() 的文档。

具体说明
参数
[out] curTime
当前时间,以 Unix 时间(精确到毫秒)表示。
返回值
WEAVE_SYSTEM_NO_ERROR
如果方法成功。
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
如果平台能够进行实时跟踪,但当前未同步。
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
如果平台无法实时跟踪。

PostEvent

NL_DLL_EXPORT Error PostEvent(
  Layer & aLayer,
  void *aContext,
  Object & aTarget,
  EventType aType,
  uintptr_t aArgument
)

这是针对具体平台的事件 / 消息后置钩子。

可通过断言预处理器定义 WEAVE_SYSTEM_CONFIG_PLATFORM_PROVIDES_EVENT_FUNCTIONS 来覆盖此行为。

这会将指定类型的事件 / 消息及提供的参数发布到该实例的平台特定事件 / 消息队列中。

具体说明
参数
[in,out] aLayer
指向事件 / 消息要发布到的层实例的指针。
[in,out] aContext
传递给图层初始化方法 ::Init 的平台特定上下文数据。
[in,out] aTarget
指向发出 POST 请求的 Weave 系统 Layer 对象的指针。
[in] aType
要发布的活动的类型。
[in,out] anArg
与要发布的事件相关联的参数。
返回值
如果成功,则为 WEAVE_SYSTEM_NO_ERROR;否则,是一个具体错误,会说明初始化失败的原因。

SetClock_RealTime

Error SetClock_RealTime(
  uint64_t newCurTime
)

用于设置当前实际(民用)时间的平台专用函数。

Weave 调用此函数来设置本地平台的当前实时时间概念。新的当前时间以经过调整到微秒的 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
如果调用应用没有设置当前时间的权限。

StartTimer

NL_DLL_EXPORT Error StartTimer(
  Layer & aLayer,
  void *aContext,
  uint32_t aMilliseconds
)

这是针对具体平台的事件 / 消息调度钩子。

可通过断言预处理器定义 WEAVE_SYSTEM_CONFIG_PLATFORM_PROVIDES_EVENT_FUNCTIONS 来覆盖此行为。

具体说明
参数
[in,out] aLayer
对调度事件 / 消息的层实例的引用。
[in,out] aContext
传递给图层初始化方法 ::Init 的平台特定上下文数据。
[in] aMilliseconds
为计时器设置的毫秒数。
返回值
WEAVE_SYSTEM_NO_ERROR
除非被替换,否则一律会成功。

WillInit

NL_DLL_EXPORT Error WillInit(
  Layer & aLayer,
  void *aContext
)

这是特定于平台的 Weave 系统预初始化钩子。

可通过断言预处理器定义 WEAVE_SYSTEM_CONFIG_PLATFORM_PROVIDES_XTOR_FUNCTIONS 覆盖此管理方式。

具体说明
参数
[in,out] aLayer
对正在初始化的 Weave 系统 Layer 实例的引用。
[in,out] aContext
传递给图层初始化方法 ::Init 的平台特定上下文数据。
返回值
如果成功,则为 WEAVE_SYSTEM_NO_ERROR;否则,是一个具体错误,会说明初始化失败的原因。返回不成功状态将取消初始化。

WillShutdown

NL_DLL_EXPORT Error WillShutdown(
  Layer & aLayer,
  void *aContext
)

这是特定于平台的 Weave System Layer 预关停钩子。

可通过断言预处理器定义 WEAVE_SYSTEM_CONFIG_PLATFORM_PROVIDES_XTOR_FUNCTIONS 覆盖此管理方式。

具体说明
参数
[in,out] aLayer
指向即将关停的 Weave 系统实例的指针。
[in,out] aContext
传递给层初始化方法 ::Shutdown 的平台特定上下文数据。
返回值
WEAVE_SYSTEM_NO_ERROR(如果成功的话);否则,是一个具体错误,会说明关闭失败的原因。返回“不成功”状态将取消关停。