nl::Weave::Profiles::Time::TimeSyncNode

摘要

繼承

沿用自: nl::Weave::Profiles::Time::_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) typedef
void(*
回呼會在我們計算回應時間修正前發生
OnSyncRequestReceivedHandler)(void *const aApp, const WeaveMessageInfo *aMsgInfo, const uint8_t aLikelyhood, const bool aIsTimeCoordinator) typedef
bool(*
用於指出我們才剛收到時間同步要求的回呼。
ResponseStatus 列舉
針對特定聯絡人的已儲存回應狀態。
ServerState{
  kServerState_UnreliableAfterBoot,
  kServerState_Idle
}
列舉
這個時間同步伺服器的目前狀態
SyncFailedHandler)(void *const aApp, const WEAVE_ERROR aErrorCode) typedef
void(*
回呼會在同步處理失敗時進行,包括自動同步。
SyncSucceededHandler)(void *const aApp, const timesync_t aOffsetUsec, const bool aIsReliable, const bool aIsServer, const uint8_t aNumContributor) typedef
bool(*
回呼會在系統成功執行後進行,包括自動同步,但會在套用結果前執行。
TimeChangeNotificationHandler)(void *const aApp, const uint64_t aNodeId, const IPAddress &aNodeAddr) typedef
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
適用於用戶端狀態的簡單 getter
GetNextLikelihood(void) const
int8_t
以及擷取永久性
GetServerState(void) const
執行伺服器狀態的簡單 getter
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)
如果意圖是時間同步伺服器,則在建構物件後,必須呼叫伺服器角色初始化的第一個函式。
MulticastTimeChangeNotification(const uint8_t aEncryptionType, const uint16_t aKeyId) const
void
較高層呼叫了多點傳播時間變更通知。
RegisterCorrectionFromServerOrNtp(void)
void
較高層呼叫了,代表我們剛完成與任何伺服器進行循環同步,或透過一些可靠方法 (例如 NTP) 完成作業。
RegisterLocalSyncOperation(const uint8_t aNumContributor)
void
較高層呼叫,表示我們剛剛與其他當地協調人員完成一輪同步作業。
Shutdown(void)
停止服務。
Sync(const bool aForceDiscoverAgain)
同步處理。
SyncWithNodes(const int16_t aNumNode, const ServingNode aNodes[])
指定聯絡人清單進行同步處理。
SyncWithService(WeaveConnection *const aConnection)
執行同步處理。

受保護的函式

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
關閉 Weave 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
在特定聯絡人中登錄通訊錯誤;如果需要聯絡人可以為空值,表示我們沒有聯絡對象可以縮短自動探索期間,因此可以縮短自動探索期,因此可以縮短自動探索期
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
Weave 計時器在啟動阻隔後不再可靠時,收到回呼
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

mIsAutoSyncEnabled

bool mIsAutoSyncEnabled

自動同步功能使用的狀態。

mIsUrgentDiscoveryPending

bool mIsUrgentDiscoveryPending

mNominalDiscoveryPeriod_msec

int32_t mNominalDiscoveryPeriod_msec

mShortestDiscoveryPeriod_msec

int32_t mShortestDiscoveryPeriod_msec

mSyncPeriod_msec

int32_t mSyncPeriod_msec

mActiveContact

Contact * mActiveContact

溝通情境

mExchangeContext

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

 ClientState

這個時間同步用戶端的目前狀態

CommState

 CommState

特定聯絡人的溝通狀態。

這是公開資訊,因為聯絡人為公開資料

ContributorFilter

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

 ResponseStatus

針對特定聯絡人的已儲存回應狀態。

這是公開資訊,因為聯絡人為公開資料

ServerState

 ServerState

這個時間同步伺服器的目前狀態

屬性
kServerState_Idle

伺服器準備好以正常設定回應要求

kServerState_UnreliableAfterBoot

保留給伺服器以其他時間同步系統時間的時間,只有在呼叫 Init 時 aIs 一律 Fresh 為 true 時才有意義

SyncFailedHandler

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

回呼會在同步處理失敗時進行,包括自動同步。

請注意,如果呼叫 Abort 停止同步處理,則不會發生回呼

詳細說明
參數
[in] aApp
指向在 Init 中設定的應用程式層資料指標。
[in] aErrorCode
失敗的原因

SyncSucceededHandler

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
使用 inc 時
[in] aIsReliable
是內建邏輯認定的
[in] aIsServer
是否來自伺服器
[in] aNumContributor
造成這項修正的節點數量。0 表示同步處理作業沒有相符的結果。
傳回
如果此偏移值應用於調整系統時間,則為 true。如果 aNumContributor 為 0,將略過傳回值。

TimeChangeNotificationHandler

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

的回呼,用於表示我們剛剛收到了時間變更通知。

如果自動同步模式已啟用,此回呼後不久後就會自動排定時間同步處理作業。否則,應用程式層可選擇呼叫 Sync 系列函式,直接啟動不受一般無法使用的回呼規則限制的同步處理作業。不過,必須注意此特殊回呼仍位於 Weave 交換層的回呼堆疊頂端。

詳細說明
參數
[in] aApp
指向在 Init 中設定的應用程式層資料指標。
[in] aNodeId
正在要求節點 ID
[in] aNodeAddr
正在要求節點位址

公開屬性

FilterTimeCorrectionContributor

ContributorFilter FilterTimeCorrectionContributor

OnSyncFailed

SyncFailedHandler OnSyncFailed

OnSyncRequestReceived

OnSyncRequestReceivedHandler OnSyncRequestReceived

如未設定,則預設實作一律會傳回 true

OnSyncSucceeded

SyncSucceededHandler OnSyncSucceeded

如果未設定,則預設行為會接收所有結果,但只有極小的伺服器校正

OnTimeChangeNotificationReceived

TimeChangeNotificationHandler OnTimeChangeNotificationReceived

mEncryptionType

uint8_t mEncryptionType

本機通訊的加密方法

mKeyId

uint16_t mKeyId

用於本機通訊的金鑰 ID

受保護的屬性

mApp

void * mApp

指向較高圖層資料的指標

mClientState

ClientState mClientState

mConnectionToService

WeaveConnection * mConnectionToService

用於與服務通訊的 TCP 連線。

mContacts

Contact mContacts[WEAVE_CONFIG_TIME_CLIENT_MAX_NUM_CONTACTS]

聯絡資訊:瞭解原因

mIsAlwaysFresh

bool mIsAlwaysFresh

mIsInCallback

bool mIsInCallback

如果讀取更高層的回呼,則為 true

mLastLikelihoodSent

int8_t mLastLikelihoodSent

mNumContributorInLastLocalSync

uint8_t mNumContributorInLastLocalSync

mRole

TimeSyncRole mRole

這個節點的實際角色。

mServerState

ServerState mServerState

mServiceContact

Contact mServiceContact

mTimestampLastCorrectionFromServerOrNtp_usec

timesync_t mTimestampLastCorrectionFromServerOrNtp_usec

不過請注意,我們必須花時間啟動睡眠時間

mTimestampLastLocalSync_usec

timesync_t mTimestampLastLocalSync_usec

不過請注意,我們必須花時間啟動睡眠時間

公用函式

取消

WEAVE_ERROR Abort(
  void
)

強制引擎恢復閒置狀態,以及取消所有正在執行的操作。

注意:系統不會呼叫任何成功或失敗。所有 Weave Exchanges 都會關閉。不會再涉及 TCP 連線。如果已經處於閒置狀態,則不會執行任何作業。回呼中無法使用。

詳細說明
傳回
成功時:WEAVE_NO_ERROR

DisableAutoSync

void DisableAutoSync(
  void
)

停用自動同步功能。

只能在閒置狀態中使用。無法在回呼中使用。

EnableAutoSync

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

GetClientState

ClientState GetClientState(
  void
) const 

適用於用戶端狀態的簡單 getter

GetNextLikelihood

int8_t GetNextLikelihood(
  void
) const 

以及擷取永久性

只有在同步處理作業完成後,在 OnSyncSucceeded 和 OnSyncFailed 中,結果才會有效。否則,這可能是暫時性的,而且可能是目前可能的可能性,而非使用下一個可能性。

詳細說明
傳回
接收回應的可能性

GetServerState

ServerState GetServerState(
  void
) const 

執行伺服器狀態的簡單 getter

InitClient

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

InitCoordinator

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

InitServer

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

如果意圖是時間同步伺服器,則在建構物件後,必須呼叫伺服器角色初始化的第一個函式。

無法在回呼中使用

詳細說明
參數
[in] aApp
指向較高圖層資料的指標,用於對較高圖層的回呼。
[in] aExchangeMgr
指向全系統 Weave Exchange Manager 物件的指標
[in] aIsAlwaysFresh
設為 true 表示系統一律會同步處理伺服器 (初始不可靠的時間除外)。 應將 Coordinator 的設為 false 。
傳回
成功時:WEAVE_NO_ERROR

MulticastTimeChangeNotification

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

較高層呼叫了多點傳播時間變更通知。

無法在回呼中使用。

詳細說明
參數
[in] aEncryptionType
這則通知使用的加密類型
[in] aKeyId
用於這則通知的金鑰 ID

RegisterCorrectionFromServerOrNtp

void RegisterCorrectionFromServerOrNtp(
  void
)

較高層呼叫了,代表我們剛完成與任何伺服器進行循環同步,或透過一些可靠方法 (例如 NTP) 完成作業。

RegisterLocalSyncOperation

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

SyncWithNodes

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

指定聯絡人清單進行同步處理。

現有的聯絡人清單將遭到清除。只有在閒置狀態時才能使用。無法在回呼中使用。

詳細說明
參數
[in] aNumNode
陣列 aNodes 中的聯絡人數量
[in] aNodes
聯絡記錄陣列
傳回
成功時:WEAVE_NO_ERROR

SyncWithService

WEAVE_ERROR SyncWithService(
  WeaveConnection *const aConnection
)

執行同步處理。

同步處理完成後,呼叫端必須取得 TCP 連線的擁有權。系統不會覆寫 TCP 連線的回呼,因為系統會建立新的 Weave Exchange,並在該結構定義上方設定回呼 (僅在閒置狀態時無法使用)。

詳細說明
參數
[in] aConnection
Weave 連線指標
傳回
成功時:WEAVE_NO_ERROR

TimeSyncNode

 TimeSyncNode(
  void
)

受保護的函式

AbortOnError

void AbortOnError(
  const WEAVE_ERROR aCode
)

如果 aCode 不是 WEAVE_NO_ERROR,內部取消作業

AutoSyncNow

void AutoSyncNow(
  void
)

用於啟動自動同步處理工作階段的內部函式

CallbackForSyncCompletion

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
)

將回呼引入應用程式層。

將 aIs successfully 設為 false 來觸發錯誤回呼

ClearState

void ClearState(
  void
)

DestroyCommContext

bool DestroyCommContext(
  void
)

關閉 Weave ExchangeContext

EndLocalSyncAndTryCalculateTimeFix

void EndLocalSyncAndTryCalculateTimeFix(
  void
)

EndServiceSyncAndTryCalculateTimeFix

void EndServiceSyncAndTryCalculateTimeFix(
  void
)

FindReplaceableContact

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

回傳運算單元以儲存聯絡資訊

GetClientStateName

const char *const GetClientStateName(
  void
) const 

GetNextIdleContact

Contact * GetNextIdleContact(
  void
)

取得下一個有效且閒置的聯絡人,

GetNumNotYetCompletedContacts

int16_t GetNumNotYetCompletedContacts(
  void
)

查詢有效,但我們尚未與他們聯絡的聯絡人。

GetNumReliableResponses

int16_t GetNumReliableResponses(
  void
)

收集到目前為止收集到的回應數量

判斷我們是否收集到足夠的回應數

InitState

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

InvalidateAllContacts

void InvalidateAllContacts(
  void
)

使所有本機聯絡人失效

InvalidateServiceContact

void InvalidateServiceContact(
  void
)

將聯絡人用於服務無效

RegisterCommError

void RegisterCommError(
  Contact *const aContact
)

在特定聯絡人中登錄通訊錯誤;如果需要聯絡人可以為空值,表示我們沒有聯絡對象可以縮短自動探索期間,因此可以縮短自動探索期,因此可以縮短自動探索期

SendSyncRequest

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

傳送單點傳播同步要求給聯絡人。

*rIsMessageSent 將設定為表示訊息是否已送出。無法傳回通訊地址等通訊錯誤,因此呼叫端需檢查傳回代碼和 *rIsMessageSent。

SetAllCompletedContactsToIdle

int16_t SetAllCompletedContactsToIdle(
  void
)

將所有已完成的聯絡人重設為閒置狀態,但不要碰到回應。

系統就會在兩次傳送至相同節點的

SetAllValidContactsToIdleAndInvalidateResponse

int16_t SetAllValidContactsToIdleAndInvalidateResponse(
  void
)

將所有有效的本機聯絡人設為閒置狀態,並清除回應。

我們會先逐一聯絡對方

SetClientState

void SetClientState(
  const ClientState state
)

SetupUnicastCommContext

WEAVE_ERROR SetupUnicastCommContext(
  Contact *const aContact
)

為單點傳播通訊建立新的 Weave Exchange

StoreNotifyingContact

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

儲存剛剛傳送時間變更通知的節點聯絡資訊

UpdateMulticastSyncResponse

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

處理多點傳送要求所傳回的回應

UpdateUnicastSyncResponse

void UpdateUnicastSyncResponse(
  const TimeSyncResponse & aResponse
)

處理單點傳播要求傳回的回應

_InitClient

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

初始化「用戶端」角色

設計供 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
)

HandleAutoSyncTimeout

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

HandleMulticastResponseTimeout

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

HandleMulticastSyncResponse

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

HandleSyncRequest

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

Weave Exchange 會在發生時間同步要求時回呼

HandleTimeChangeNotification

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

HandleUnicastResponseTimeout

void HandleUnicastResponseTimeout(
  ExchangeContext *const ec
)

HandleUnicastSyncResponse

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
)

Weave 計時器在啟動阻隔後不再可靠時,收到回呼

IsOperationalState

bool IsOperationalState(
  ClientState aState
)

判斷指定狀態是否正常運作。

判斷 ClientState 是否表示作業狀態的便利方法,即用戶端已完成初始化,且未處於關閉階段。

詳細說明
參數
[in] aState
待評估狀態
傳回
如果狀態在初始化完成後和關閉前狀態下降,則傳回 true,否則傳回 false。

_OnSyncSucceed

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