NL::编织::简介::时间::时间同步节点

概括

遗产

:从继承NL ::纺织品::概况::时间:: _ TimeSyncNodeBase

构造函数和析构函数

TimeSyncNode (void)
mBootTimeForNextAutoDiscovery_usec
timesync_t
mIsAutoSyncEnabled
bool
用于自动同步功能的状态。
mIsUrgentDiscoveryPending
bool
mNominalDiscoveryPeriod_msec
int32_t
mShortestDiscoveryPeriod_msec
int32_t
mSyncPeriod_msec
int32_t
mActiveContact
通信上下文。
mExchangeContext
mUnadjTimestampLastSent_usec
timesync_t
EnterState_Discover (void)
void
这些状态转换函数是内部的,不能返回错误代码,因为之前的状态无法处理它们。
EnterState_ServiceSync_1 (void)
void
EnterState_ServiceSync_2 (void)
void
EnterState_Sync_1 (void)
void
EnterState_Sync_2 (void)
void

公共类型

ClientState枚举
该时间同步客户端的当前状态
CommState枚举
与某个联系人的通信状态。
ContributorFilter )(void *const aApp, Contact aContact[], const int aSize)类型定义
void(*
回调发生在我们根据响应计算时间校正之前。
OnSyncRequestReceivedHandler )(void *const aApp, const WeaveMessageInfo *aMsgInfo, const uint8_t aLikelyhood, const bool aIsTimeCoordinator)类型定义
bool(*
回调指示我们刚刚收到一个时间同步请求。
ResponseStatus枚举
存储对某个联系人的响应的状态。
ServerState {
kServerState_UnreliableAfterBoot ,
kServerState_Idle
}
枚举
此时间同步服务器的当前状态
SyncFailedHandler )(void *const aApp, const WEAVE_ERROR aErrorCode)类型定义
void(*
当认为同步失败时会发生回调,包括自动同步。
SyncSucceededHandler )(void *const aApp, const timesync_t aOffsetUsec, const bool aIsReliable, const bool aIsServer, const uint8_t aNumContributor)类型定义
bool(*
回调发生在同步被认为成功之后,包括自动同步,但在应用结果之前。
TimeChangeNotificationHandler )(void *const aApp, const uint64_t aNodeId, const IPAddress &aNodeAddr)类型定义
void(*
回调以指示我们刚刚收到时间更改通知。

公共属性

FilterTimeCorrectionContributor
OnSyncFailed
OnSyncRequestReceived
如果未设置,则默认实现始终返回 true
OnSyncSucceeded
如果未设置,则默认行为将获取所有结果,除了非常小的服务器更正
OnTimeChangeNotificationReceived
mEncryptionType
uint8_t
本地通信的加密方法
mKeyId
uint16_t
用于本地通信的密钥 ID

受保护的属性

mApp
void *
指向更高层数据的指针
mClientState
mConnectionToService
用于与服务对话的 TCP 连接。
mContacts [WEAVE_CONFIG_TIME_CLIENT_MAX_NUM_CONTACTS]
联系各地发现信息学。
mIsAlwaysFresh
bool
mIsInCallback
bool
如果我们在回调到更高层,则为 true
mLastLikelihoodSent
int8_t
mNumContributorInLastLocalSync
uint8_t
mRole
TimeSyncRole
该节点的实际作用。
mServerState
mServiceContact
mTimestampLastCorrectionFromServerOrNtp_usec
timesync_t
注意它必须是启动时间,因为我们需要对睡眠时间进行补偿
mTimestampLastLocalSync_usec
timesync_t
注意它必须是启动时间,因为我们需要补偿睡眠时间

公共职能

Abort (void)
强制引擎返回空闲状态,中止正在执行的任何操作。
DisableAutoSync (void)
void
禁用自动同步。
EnableAutoSync (const int32_t aSyncPeriod_msec, const int32_t aNominalDiscoveryPeriod_msec, const int32_t aShortestDiscoveryPeriod_msec)
启用自动同步。
GetCapacityOfContactList (void) const
int
此引擎配置为存储的最大联系人数量的简单 getter
GetClientState (void) const
客户端状态的简单吸气剂
GetNextLikelihood (void) const
int8_t
提取持久性的可能性。
GetServerState (void) const
服务器状态的简单吸气剂
InitClient (void *const aApp, WeaveExchangeManager *aExchangeMgr, const uint8_t aEncryptionType, const uint16_t aKeyId, const int8_t aInitialLikelyhood)
初始化这个客户端。
InitCoordinator ( nl::Weave::WeaveExchangeManager *aExchangeMgr, const uint8_t aEncryptionType, const uint16_t aKeyId, const int32_t aSyncPeriod_msec, const int32_t aNominalDiscoveryPeriod_msec, const int32_t aShortestDiscoveryPeriod_msec)
初始化这个协调器。
InitServer (void *const aApp, WeaveExchangeManager *const aExchangeMgr, const bool aIsAlwaysFresh)
如果打算成为时间同步服务器,则必须在对象构造后调用 Server 角色的 initialize 作为第一个函数。
MulticastTimeChangeNotification (const uint8_t aEncryptionType, const uint16_t aKeyId) const
void
由高层调用以多播时间更改通知。
RegisterCorrectionFromServerOrNtp (void)
void
由更高层调用以指示我们刚刚完成了与任何服务器或通过某些可靠方式(如 NTP)的时间同步。
RegisterLocalSyncOperation (const uint8_t aNumContributor)
void
由更高层调用以表明我们刚刚完成了与其他本地 Coordinator 的一轮时间同步。
Shutdown (void)
停止服务,无论它扮演什么角色。
Sync (const bool aForceDiscoverAgain)
使用现有联系人进行同步。
SyncWithNodes (const int16_t aNumNode, const ServingNode aNodes[])
使用给定的联系人列表进行同步。
SyncWithService ( WeaveConnection *const aConnection)
使用给定的 TCP 连接和关联的加密和密钥 ID 进行同步。

受保护的功能

AbortOnError (const WEAVE_ERROR aCode)
void
如果 aCode 不是 WEAVE_NO_ERROR,则内部中止
AutoSyncNow (void)
void
启动自动同步会话的内部函数
CallbackForSyncCompletion (const bool aIsSuccessful, bool aShouldUpdate, const bool aIsCorrectionReliable, const bool aIsFromServer, const uint8_t aNumContributor, const timesync_t aSystemTimestamp_usec, const timesync_t aDiffTime_usec)
诱导回调到应用层。
ClearState (void)
void
DestroyCommContext (void)
bool
关闭编织ExchangeContext
EndLocalSyncAndTryCalculateTimeFix (void)
void
EndServiceSyncAndTryCalculateTimeFix (void)
void
FindReplaceableContact (const uint64_t aNodeId, const IPAddress & aNodeAddr, bool aIsTimeChangeNotification)
返回槽存储联系人信息
GetClientStateName (void) const
const char *const
GetNextIdleContact (void)
获取下一个有效且空闲的联系人以与之交谈
GetNumNotYetCompletedContacts (void)
int16_t
获取有效联系人的数量,但我们还没有与他们交谈。
GetNumReliableResponses (void)
int16_t
获取到目前为止收集的“可靠”响应的数量。
InitState (const TimeSyncRole aRole, void *const aApp, WeaveExchangeManager *const aExchangeMgr)
InvalidateAllContacts (void)
void
使所有本地联系人无效
InvalidateServiceContact (void)
void
使与服务的联系无效
RegisterCommError ( Contact *const aContact)
void
在某个联系人上注册通信错误,并在需要时缩短自动发现周期 aContact 可以为 NULL 表示我们没有人可以交谈,因此只需缩短自动发现周期
SendSyncRequest (bool *const rIsMessageSent, Contact *const aContact)
向联系人发送单播同步请求。
SetAllCompletedContactsToIdle (void)
int16_t
再次将所有完成的联系人重置为空闲状态,但不要触摸响应。
SetAllValidContactsToIdleAndInvalidateResponse (void)
int16_t
将所有有效的本地联系人设置为空闲状态并清除响应。
SetClientState (const ClientState state)
void
SetupUnicastCommContext ( Contact *const aContact)
为单播通信创建新的 Weave Exchange
StoreNotifyingContact (const uint64_t aNodeId, const IPAddress & aNodeAddr)
void
存储刚刚向我们发送时间更改通知的节点的联系信息
UpdateMulticastSyncResponse (const uint64_t aNodeId, const IPAddress & aNodeAddr, const TimeSyncResponse & aResponse)
void
处理从多播请求返回的响应
UpdateUnicastSyncResponse (const TimeSyncResponse & aResponse)
void
处理从单播请求返回的响应
_InitClient (const uint8_t aEncryptionType, const uint16_t aKeyId, const int8_t aInitialLikelyhood)
初始化客户端的角色。
_InitServer (const bool aIsAlwaysFresh)
初始化服务器角色。
_ShutdownClient (void)
停止回调中不可用的客户端。
_ShutdownCoordinator (void)
停止回调中不可用的协调器。
_ShutdownServer (void)
停止在回调中不可用的服务器。

受保护的静态函数

HandleAutoDiscoveryTimeout ( System::Layer *aSystemLayer, void *aAppState, System::Error aError)
void
HandleAutoSyncTimeout ( System::Layer *aSystemLayer, void *aAppState, System::Error aError)
void
HandleMulticastResponseTimeout ( System::Layer *aSystemLayer, void *aAppState, System::Error aError)
void
HandleMulticastSyncResponse ( ExchangeContext *ec, const IPPacketInfo *pktInfo, const WeaveMessageInfo *msgInfo, uint32_t profileId, uint8_t msgType, PacketBuffer *payload)
void
HandleSyncRequest ( ExchangeContext *ec, const IPPacketInfo *pktInfo, const WeaveMessageInfo *msgInfo, uint32_t profileId, uint8_t msgType, PacketBuffer *payload)
void
当时间同步请求到达时,来自 Weave Exchange 的回调
HandleTimeChangeNotification ( ExchangeContext *ec, const IPPacketInfo *pktInfo, const WeaveMessageInfo *msgInfo, uint32_t profileId, uint8_t msgType, PacketBuffer *payload)
void
HandleUnicastResponseTimeout ( ExchangeContext *const ec)
void
HandleUnicastSyncResponse ( ExchangeContext *ec, const IPPacketInfo *pktInfo, const WeaveMessageInfo *msgInfo, uint32_t profileId, uint8_t msgType, PacketBuffer *payload)
void
HandleUnreliableAfterBootTimer ( System::Layer *aSystemLayer, void *aAppState, System::Error aError)
void
当我们通过不可靠的引导屏障后从编织计时器回调
IsOperationalState ( ClientState aState)
bool
确定给定状态是否可操作。
_OnSyncSucceeded (void *const aApp, const nl::Weave::Profiles::Time::timesync_t aOffsetUsec, const bool aIsReliable, const bool aIsServer, const uint8_t aNumContributor)
bool

mBootTimeForNextAutoDiscovery_usec

timesync_t mBootTimeForNextAutoDiscovery_usec

启用自动同步

bool mIsAutoSyncEnabled

用于自动同步功能的状态。

紧急发现待定

bool mIsUrgentDiscoveryPending

mNominalDiscoveryPeriod_msec

int32_t mNominalDiscoveryPeriod_msec

mShortestDiscoveryPeriod_msec

int32_t mShortestDiscoveryPeriod_msec

mSyncPeriod_msec

int32_t mSyncPeriod_msec

移动联系人

Contact * mActiveContact

通信上下文。

交换上下文

ExchangeContext * mExchangeContext

mUnadjTimestampLastSent_usec

timesync_t mUnadjTimestampLastSent_usec

EnterState_Discover

void EnterState_Discover(
  void
)

这些状态转换函数是内部的,不能返回错误代码,因为之前的状态无法处理它们。

任何失败都将最终导致另一个状态转换(可能是超时),如果即使计时器失败,我们也没有技巧,可能会挂在一些错误的状态

EnterState_ServiceSync_1

void EnterState_ServiceSync_1(
  void
)

EnterState_ServiceSync_2

void EnterState_ServiceSync_2(
  void
)

EnterState_Sync_1

void EnterState_Sync_1(
  void
)

EnterState_Sync_2

void EnterState_Sync_2(
  void
)

公共类型

客户端状态

 ClientState

该时间同步客户端的当前状态

通讯状态

 CommState

通信的状态,以一定的接触。

这是公众,因为公共

贡献者过滤器

void(* ContributorFilter)(void *const aApp, Contact aContact[], const int aSize)

回调发生在我们根据响应计算时间校正之前。

应用层可以将 aContact[i].mResponseStatus 改写为 kResponseStatus_Invalid,这样在计算中就会忽略响应

细节
参数
[in] aApp
指向应用层数据的指针,在 Init 中设置。
[in] aContact
联系人和响应状态数组
[in] aSize
aContact 数组中的记录数

OnSyncRequestReceivedHandler

bool(* OnSyncRequestReceivedHandler)(void *const aApp, const WeaveMessageInfo *aMsgInfo, const uint8_t aLikelyhood, const bool aIsTimeCoordinator)

回调指示我们刚刚收到一个时间同步请求。

细节
参数
[in] aApp
指向应用层数据的指针,在 Init 中设置。
[in] aMsgInfo
WeaveMessageInfo包含关于接收到的时间同步请求,包括有关发送者的信息的信息。
[in] aLikelyhood
发起者要求的响应可能性
[in] aIsTimeCoordinator
如果始发节点是时间同步协调器,则为 true
退货
false,引擎应忽略此请求

响应状态

 ResponseStatus

存储对某个联系人的响应的状态。

这是公众,因为公共

服务器状态

 ServerState

此时间同步服务器的当前状态

特性
kServerState_Idle

服务器已准备好以正常设置响应请求

kServerState_UnreliableAfterBoot

为服务器保留的通过其他方式同步其系统时间的时间,仅当调用 Init 时 aIsAlwaysFresh 为真时才有意义

同步失败处理程序

void(* SyncFailedHandler)(void *const aApp, const WEAVE_ERROR aErrorCode)

当认为同步失败时会发生回调,包括自动同步。

请注意,如果调用 Abort 停止同步,则不会发生回调

细节
参数
[in] aApp
指向应用层数据的指针,在 Init 中设置。
[in] aErrorCode
失败的原因

同步成功处理程序

bool(* SyncSucceededHandler)(void *const aApp, const timesync_t aOffsetUsec, const bool aIsReliable, const bool aIsServer, const uint8_t aNumContributor)

回调发生在同步被认为成功之后,包括自动同步,但在应用结果之前。

请注意,成功并不意味着我们有适用的结果。如果没有收到响应,aNumContributor 将被设置为 0。应用层可以将 aContact[i].mResponseStatus 覆盖为 kResponseStatus_Invalid,以便在计算中忽略响应

细节
参数
[in] aApp
指向应用层数据的指针,在 Init 中设置。
[in] aOffsetUsec
使用修正量c
[in] aIsReliable
是内置逻辑认为可靠的校正
[in] aIsServer
更正是否来自服务器
[in] aNumContributor
促成此更正的节点数。 0 表示同步操作没有结果。
退货
如果此偏移量应用于调整系统时间,则为 true。如果 aNumContributor 为 0,则返回值将被忽略。

TimeChangeNotificationHandler

void(* TimeChangeNotificationHandler)(void *const aApp, const uint64_t aNodeId, const IPAddress &aNodeAddr)

回调以指示我们刚刚收到时间更改通知。

如果启用自动同步模式,将在此回调后不久自动安排时间同步。否则应用层可以选择调用 Sync 系列函数来直接启动同步操作,不受正常的 not-available-in-call-back 规则限制。但是,必须注意的是,这个特殊的回调仍然在 Weave 交换层的回调堆栈之上。

细节
参数
[in] aApp
指向应用层数据的指针,在 Init 中设置。
[in] aNodeId
请求节点 ID
[in] aNodeAddr
请求节点地址

公共属性

FilterTimeCorrectionContributor

ContributorFilter FilterTimeCorrectionContributor

同步失败

SyncFailedHandler OnSyncFailed

接收到同步请求

OnSyncRequestReceivedHandler OnSyncRequestReceived

如果未设置,则默认实现始终返回 true

同步成功

SyncSucceededHandler OnSyncSucceeded

如果未设置,则默认行为将获取所有结果,除了非常小的服务器更正

OnTimeChangeNotificationReceived

TimeChangeNotificationHandler OnTimeChangeNotificationReceived

加密类型

uint8_t mEncryptionType

本地通信的加密方法

密钥标识

uint16_t mKeyId

用于本地通信的密钥 ID

受保护的属性

移动应用

void * mApp

指向更高层数据的指针

客户端状态

ClientState mClientState

连接到服务

WeaveConnection * mConnectionToService

用于与服务通信的 TCP 连接。

联系人

Contact mContacts[WEAVE_CONFIG_TIME_CLIENT_MAX_NUM_CONTACTS]

联系各地发现信息学。

mIsAlwaysFresh

bool mIsAlwaysFresh

回调函数

bool mIsInCallback

如果我们在回调到更高层,则为 true

已发送的最后可能性

int8_t mLastLikelihoodSent

mNumContributorInLastLocalSync

uint8_t mNumContributorInLastLocalSync

角色

TimeSyncRole mRole

此节点的实际角色。

服务器状态

ServerState mServerState

移动服务联系人

Contact mServiceContact

mTimestampLastCorrectionFromServerOrNtp_usec

timesync_t mTimestampLastCorrectionFromServerOrNtp_usec

注意它必须是启动时间,因为我们需要补偿睡眠时间

mTimestampLastLocalSync_usec

timesync_t mTimestampLastLocalSync_usec

注意它必须是启动时间,因为我们需要对睡眠时间进行补偿

公共职能

中止

WEAVE_ERROR Abort(
  void
)

强制引擎返回空闲状态,中止正在执行的任何操作。

注意不会调用同步成功或失败。所有 Weave Exchange 都将关闭。 TCP 连接不会被进一步触及。如果我们已经处于空闲状态,则没有操作。在回调中不可用。

细节
退货
WEAVE_NO_ERROR 成功

禁用自动同步

void DisableAutoSync(
  void
)

禁用自动同步。

仅在空闲状态下可用。在回调中不可用。

启用自动同步

WEAVE_ERROR EnableAutoSync(
  const int32_t aSyncPeriod_msec,
  const int32_t aNominalDiscoveryPeriod_msec,
  const int32_t aShortestDiscoveryPeriod_msec
)

启用自动同步。

仅在空闲状态下可用。发现立即发生。在回调中不可用。

细节
参数
[in] aSyncPeriod_msec
同步之间毫秒的数
[in] aNominalDiscoveryPeriod_msec
如果未观察到通信错误,则发现之间的毫秒数
[in] aShortestDiscoveryPeriod_msec
如果观察到通信错误,则发现之间的最短时间(以毫秒为单位)
退货
WEAVE_NO_ERROR 成功

GetCapacityOfContactList

int GetCapacityOfContactList(
  void
) const 

此引擎配置为存储的最大联系人数量的简单 getter

获取客户端状态

ClientState GetClientState(
  void
) const 

客户端状态的简单吸气剂

获取下一个可能性

int8_t GetNextLikelihood(
  void
) const 

提取持久性的可能性。

结果只有在同步操作完成后,在 OnSyncSucceeded 和 OnSyncFailed 的回调中才有效。否则它是暂时的,可能是当前的可能性而不是下一个要使用的可能性。

细节
退货
在下一个请求中使用响应的可能性

获取服务器状态

ServerState GetServerState(
  void
) const 

简单的getter服务器状态

初始化客户端

WEAVE_ERROR InitClient(
  void *const aApp,
  WeaveExchangeManager *aExchangeMgr,
  const uint8_t aEncryptionType,
  const uint16_t aKeyId,
  const int8_t aInitialLikelyhood
)

初始化这个客户端。

在回调中不可用

细节
参数
[in] aApp
指向更高层数据的指针,用于对更高层的回调。
[in] aExchangeMgr
指向系统范围 Weave Exchange Manager 对象的指针
[in] aRole
可以是 kTimeSyncRole_Client 或 kTimeSyncRole_Coordinator
[in] aEncryptionType
用于请求和响应的加密类型
[in] aKeyId
用于请求和响应的密钥 ID
[in] aInitialLikelyhood
用于发现阶段的初始可能性
退货
WEAVE_NO_ERROR 成功

初始化协调器

WEAVE_ERROR InitCoordinator(
  nl::Weave::WeaveExchangeManager *aExchangeMgr,
  const uint8_t aEncryptionType,
  const uint16_t aKeyId,
  const int32_t aSyncPeriod_msec,
  const int32_t aNominalDiscoveryPeriod_msec,
  const int32_t aShortestDiscoveryPeriod_msec
)

初始化这个协调。

细节
参数
[in] aExchangeMgr
指向系统范围 Weave Exchange Manager 对象的指针
[in] aEncryptionType
用于请求和响应的加密类型
[in] aKeyId
用于请求和响应的密钥 ID
[in] aSyncPeriod_msec
同步之间的毫秒数
[in] aNominalDiscoveryPeriod_msec
发现之间的最短时间,以毫秒为单位,如果没有观察到通信错误
[in] aShortestDiscoveryPeriod_msec
如果观察到通信错误,则发现之间的最小毫秒数
退货
WEAVE_NO_ERROR 成功

初始化服务器

WEAVE_ERROR InitServer(
  void *const aApp,
  WeaveExchangeManager *const aExchangeMgr,
  const bool aIsAlwaysFresh
)

如果打算成为时间同步服务器,则必须在对象构造后调用 Server 角色的 initialize 作为第一个函数。

在回调中不可用

细节
参数
[in] aApp
指向更高层数据的指针,用于对更高层的回调。
[in] aExchangeMgr
指向系统范围 Weave Exchange Manager 对象的指针
[in] aIsAlwaysFresh
可以设置为 true 以指示服务器始终同步,但初始不可靠时间除外。 Coordinator 应设置为 false。
退货
WEAVE_NO_ERROR 成功

多播时间更改通知

void MulticastTimeChangeNotification(
  const uint8_t aEncryptionType,
  const uint16_t aKeyId
) const 

由高层调用以多播时间更改通知。

在回调中不可用。

细节
参数
[in] aEncryptionType
用于此通知的加密类型
[in] aKeyId
用于此通知的密钥 ID

RegisterCorrectionFromServerOrNtp

void RegisterCorrectionFromServerOrNtp(
  void
)

由更高层调用以表明我们刚刚完成了与任何服务器或通过某种可靠方式(如 NTP)的时间同步。

注册本地同步操作

void RegisterLocalSyncOperation(
  const uint8_t aNumContributor
)

由更高层调用以表明我们刚刚完成了与其他本地协调器的一轮时间同步。

细节
参数
[in] aNumContributor
促成此时间同步的协调员数量

关掉

WEAVE_ERROR Shutdown(
  void
)

停止服务,无论它扮演什么角色。

必须调用此函数以正确回收分配的资源,然后才能再次调用任何 init 函数。在回调中不可用。

细节
退货
WEAVE_NO_ERROR 成功

同步

WEAVE_ERROR Sync(
  const bool aForceDiscoverAgain
)

使用现有联系人进行同步。

如果没有可用的有效联系人,同步操作可能会失败。将 aForceDiscoverAgain 设置为 true 以立即强制发现。仅在空闲状态下可用。在回调中不可用。

细节
参数
[in] aForceDiscoverAgain
如果应刷新所有现有联系人并执行发现操作,则为 true
退货
WEAVE_NO_ERROR 成功

与节点同步

WEAVE_ERROR SyncWithNodes(
  const int16_t aNumNode,
  const ServingNode aNodes[]
)

使用给定的联系人列表进行同步。

现有的联系人列表将被刷新。仅在空闲状态下可用。在回调中不可用。

细节
参数
[in] aNumNode
数组 aNodes 中的联系人数量
[in] aNodes
联系人记录数组
退货
WEAVE_NO_ERROR 成功

与服务同步

WEAVE_ERROR SyncWithService(
  WeaveConnection *const aConnection
)

使用给定的 TCP 连接和关联的加密和密钥 ID 进行同步。

同步完成后,调用者必须拥有 TCP 连接的所有权。 TCP 连接不会覆盖回调,因为将创建一个新的 Weave Exchange,并且在该上下文之上设置的回调仅在空闲状态下可用。在回调中不可用。

细节
参数
[in] aConnection
指向 Weave 连接的指针
退货
WEAVE_NO_ERROR 成功

时间同步节点

 TimeSyncNode(
  void
)

受保护的功能

中止错误

void AbortOnError(
  const WEAVE_ERROR aCode
)

如果 aCode 不是 WEAVE_NO_ERROR,则内部中止

立即自动同步

void AutoSyncNow(
  void
)

启动自动同步会话的内部函数

同步完成回调

WEAVE_ERROR CallbackForSyncCompletion(
  const bool aIsSuccessful,
  bool aShouldUpdate,
  const bool aIsCorrectionReliable,
  const bool aIsFromServer,
  const uint8_t aNumContributor,
  const timesync_t aSystemTimestamp_usec,
  const timesync_t aDiffTime_usec
)

诱导回调到应用层。

将 aIsSuccessful 设置为 false 以引发错误回调

清除状态

void ClearState(
  void
)

销毁通信上下文

bool DestroyCommContext(
  void
)

关闭编织ExchangeContext

EndLocalSyncAndTryCalculateTimeFix

void EndLocalSyncAndTryCalculateTimeFix(
  void
)

EndServiceSyncAndTryCalculateTimeFix

void EndServiceSyncAndTryCalculateTimeFix(
  void
)

查找可替换联系人

Contact * FindReplaceableContact(
  const uint64_t aNodeId,
  const IPAddress & aNodeAddr,
  bool aIsTimeChangeNotification
)

返回一个槽来存储联系信息

获取客户端状态名称

const char *const GetClientStateName(
  void
) const 

获取下一个空闲联系人

Contact * GetNextIdleContact(
  void
)

获取下一个有效且空闲的联系人以与之交谈

GetNumNotYetCompletedContacts

int16_t GetNumNotYetCompletedContacts(
  void
)

获取有效联系人的数量,但我们还没有与他们交谈。

GetNumReliableResponses

int16_t GetNumReliableResponses(
  void
)

获取到目前为止收集的“可靠”响应的数量。

调用以确定我们是否收集了足够数量的响应

初始化状态

WEAVE_ERROR InitState(
  const TimeSyncRole aRole,
  void *const aApp,
  WeaveExchangeManager *const aExchangeMgr
)

InvalidateAllContacts

void InvalidateAllContacts(
  void
)

使所有本地联系人无效

无效的服务联系

void InvalidateServiceContact(
  void
)

使与服务的联系无效

注册通讯错误

void RegisterCommError(
  Contact *const aContact
)

在某个联系人上注册通信错误,并在需要时缩短自动发现周期 aContact 可以为 NULL 表示我们没有人可以交谈,因此只需缩短自动发现周期

发送同步请求

WEAVE_ERROR SendSyncRequest(
  bool *const rIsMessageSent,
  Contact *const aContact
)

向联系人发送单播同步请求。

*rIsMessageSent 将设置为指示消息是否已发出。不返回地址不可达等通信错误,因此调用者应检查返回码和*rIsMessageSent。

将所有已完成的联系人设置为空闲

int16_t SetAllCompletedContactsToIdle(
  void
)

再次将所有完成的联系人重置为空闲状态,但不要触摸响应。

这在与同一节点的两轮通信之间调用

SetAllValidContactsToIdleAndInvalidateResponse

int16_t SetAllValidContactsToIdleAndInvalidateResponse(
  void
)

将所有有效的本地联系人设置为空闲状态并清除响应。

这是在我们开始一一联系他们之前调用的

设置客户端状态

void SetClientState(
  const ClientState state
)

设置单播通信上下文

WEAVE_ERROR SetupUnicastCommContext(
  Contact *const aContact
)

为单播通信创建新的 Weave Exchange

商店通知联系人

void StoreNotifyingContact(
  const uint64_t aNodeId,
  const IPAddress & aNodeAddr
)

存储刚刚向我们发送时间更改通知的节点的联系信息

更新多播同步响应

void UpdateMulticastSyncResponse(
  const uint64_t aNodeId,
  const IPAddress & aNodeAddr,
  const TimeSyncResponse & aResponse
)

处理从多播请求返回的响应

更新单播同步响应

void UpdateUnicastSyncResponse(
  const TimeSyncResponse & aResponse
)

处理从单播请求返回的响应

_InitClient

WEAVE_ERROR _InitClient(
  const uint8_t aEncryptionType,
  const uint16_t aKeyId,
  const int8_t aInitialLikelyhood
)

为 Client 角色初始化。

旨在由 Init 系列公共函数在内部使用。必须在返回前设置 mClientState。在回调中不可用

细节
参数
[in] aEncryptionType
用于请求和响应的加密类型
[in] aKeyId
用于请求和响应的密钥 ID
[in] aInitialLikelyhood
用于发现阶段的初始可能性
退货
WEAVE_NO_ERROR 成功

_初始化服务器

WEAVE_ERROR _InitServer(
  const bool aIsAlwaysFresh
)

为服务器角色初始化。

旨在由 Init 系列公共函数在内部使用。返回之前必须设置mClientState。在回调中不可用

细节
参数
[in] aIsAlwaysFresh
可以设置为 true 以指示服务器始终同步,但初始不可靠时间除外。 Coordinator 应设置为 false。
退货
WEAVE_NO_ERROR 成功

_ShutdownClient

WEAVE_ERROR _ShutdownClient(
  void
)

停止回调中不可用的客户端。

细节
退货
WEAVE_NO_ERROR 成功

_ShutdownCoordinator

WEAVE_ERROR _ShutdownCoordinator(
  void
)

停止回调中不可用的协调器。

细节
退货
WEAVE_NO_ERROR 成功

_关闭服务器

WEAVE_ERROR _ShutdownServer(
  void
)

停止在回调中不可用的服务器。

细节
退货
WEAVE_NO_ERROR 成功

受保护的静态函数

HandleAutoDiscoveryTimeout

void HandleAutoDiscoveryTimeout(
  System::Layer *aSystemLayer,
  void *aAppState,
  System::Error aError
)

处理自动同步超时

void HandleAutoSyncTimeout(
  System::Layer *aSystemLayer,
  void *aAppState,
  System::Error aError
)

处理多播响应超时

void HandleMulticastResponseTimeout(
  System::Layer *aSystemLayer,
  void *aAppState,
  System::Error aError
)

处理多播同步响应

void HandleMulticastSyncResponse(
  ExchangeContext *ec,
  const IPPacketInfo *pktInfo,
  const WeaveMessageInfo *msgInfo,
  uint32_t profileId,
  uint8_t msgType,
  PacketBuffer *payload
)

处理同步请求

void HandleSyncRequest(
  ExchangeContext *ec,
  const IPPacketInfo *pktInfo,
  const WeaveMessageInfo *msgInfo,
  uint32_t profileId,
  uint8_t msgType,
  PacketBuffer *payload
)

当时间同步请求到达时来自 Weave Exchange 的回调

处理时间变更通知

void HandleTimeChangeNotification(
  ExchangeContext *ec,
  const IPPacketInfo *pktInfo,
  const WeaveMessageInfo *msgInfo,
  uint32_t profileId,
  uint8_t msgType,
  PacketBuffer *payload
)

处理单播响应超时

void HandleUnicastResponseTimeout(
  ExchangeContext *const ec
)

处理单播同步响应

void HandleUnicastSyncResponse(
  ExchangeContext *ec,
  const IPPacketInfo *pktInfo,
  const WeaveMessageInfo *msgInfo,
  uint32_t profileId,
  uint8_t msgType,
  PacketBuffer *payload
)

HandleUnreliableAfterBootTimer

void HandleUnreliableAfterBootTimer(
  System::Layer *aSystemLayer,
  void *aAppState,
  System::Error aError
)

当我们通过不可靠的引导屏障后从编织计时器回调

操作状态

bool IsOperationalState(
  ClientState aState
)

确定给定状态是否可操作。

判断ClientState是否表示操作状态的便捷方法,即客户端已经完成初始化,不在关机过程中。

细节
参数
[in] aState
要评估的状态
退货
如果在初始化完成之后和关闭开始之前状态下降,则为 true,否则为 false。

_OnSyncSucceeded

bool _OnSyncSucceeded(
  void *const aApp,
  const nl::Weave::Profiles::Time::timesync_t aOffsetUsec,
  const bool aIsReliable,
  const bool aIsServer,
  const uint8_t aNumContributor
)