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)
與指定的 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
關閉 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)
傳送 unicast 同步要求給聯絡人。
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 Timer 發出的回呼,當系統在啟動受到阻斷後,才傳送不準確的回呼
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 時,aIsAlwaysFresh 為 true 時才有意義

SyncFailedHandler

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

當系統判定同步處理失敗 (包括自動同步) 時,就會發生回呼。

請注意,如果呼叫取消同步處理來停止同步作業,就不會發生回呼

詳細資料
參數
[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
更正金額 (以 usec 表示)
[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 廣告交易平台都會停止服務。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,表示伺服器一律會進行同步處理,但初始不穩定時除外。應將協調者設為 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 連線和相關加密與金鑰 ID 之間的同步處理。

同步完成後,呼叫端必須取得 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 成功 設為 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
)

傳送 unicast 同步要求給聯絡人。

*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

_InitServer

WEAVE_ERROR _InitServer(
  const bool aIsAlwaysFresh
)

為伺服器角色初始化。

適合 Init 的公開函式系列在內部使用。必須在傳回前設定 mClientState。不適用於回呼

詳細資料
參數
[in] aIsAlwaysFresh
可設為 true,表示伺服器一律會進行同步處理,但初始不穩定時除外。應將協調者設為 false。
傳回
成功時 WEAVE_NO_ERROR

_ShutdownClient

WEAVE_ERROR _ShutdownClient(
  void
)

回呼中無法使用用戶端。

詳細資料
傳回
成功時 WEAVE_NO_ERROR

_ShutdownCoordinator

WEAVE_ERROR _ShutdownCoordinator(
  void
)

回呼中無法使用停止協調器。

詳細資料
傳回
成功時 WEAVE_NO_ERROR

_ShutdownServer

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 Timer 發出的回呼,當系統在啟動受到阻斷後,才傳送不準確的回呼

IsOperationalState

bool IsOperationalState(
  ClientState aState
)

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

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

詳細資料
參數
[in] aState
待評估的狀態
傳回
如果狀態在初始化完成後到關閉前的狀態為 true,則傳回 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
)