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

摘要

函数

DidInit(Layer & aLayer, void *aContext, Error aStatus)
NL_DLL_EXPORT void
这是一个特定于平台的 Weave System 初始化后钩子。
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 System Layer 预初始化钩子。
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 System 初始化后钩子。

通过断言预处理器定义 WEAVE_SYSTEM_CONFIG_PLATFORM_PROVIDES_XTOR_FUNCTIONS,可以将其替换。

详细信息
参数
[in,out] aLayer
对正在初始化的 Weave System 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 System 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 System 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 System 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 System 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 System Layer 预初始化钩子。

通过断言预处理器定义 WEAVE_SYSTEM_CONFIG_PLATFORM_PROVIDES_XTOR_FUNCTIONS,可以将其替换。

详细信息
参数
[in,out] aLayer
对正在初始化的 Weave System 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 System Layer 实例的指针。
[in,out] aContext
向图层初始化方法 ::Shutdown 传递的特定于平台的上下文数据。
返回值
WEAVE_SYSTEM_NO_ERROR(如果成功);或者指明关闭失败原因的具体错误。返回不成功状态将中止关闭。