nl::Weave::TLV

以 Weave TLV 格式編碼的資料如何運作。

摘要

Weave TLV 是一種適用於簡易結構化資料的通用編碼方法。它與常用的 JSON 序列化格式共用許多屬性,且線路上會更加密集。

列舉

@71 列舉
@73 列舉
@74{
  AnonymousTag = kSpecialTagMarker | 0x00000000FFFFFFFFULL
}
列舉
@75 列舉
TLVCommonProfiles{
  kProfileIdNotSpecified = 0xFFFFFFFF
}
列舉
TLVElementType 列舉
TLVFieldSize 列舉
TLVTagControl 列舉
TLVTagFields 列舉
TLVType 列舉
用於識別 TLV 元素類型的列舉項目。

變數

kWeaveTLVCopyChunkSize = 16
const size_t
將讀取器物件中的 TLV 元素複製到寫入者。
sTagSizes = { 0, 1, 2, 4, 2, 4, 6, 8 }[]
const uint8_t

函式

CommonTag(uint32_t tagNum)
uint64_t
產生常見設定檔 TLV 標記的 API 表示法。
ContextTag(uint8_t tagNum)
uint64_t
為內容相關 TLV 標記產生 API 表示法。
GetTLVFieldSize(uint8_t type)
TLVFieldSize
IsContextTag(uint64_t tag)
bool
如果提供的標記是內容專屬的標記,則傳回 true。
IsProfileTag(uint64_t tag)
bool
提供的標記會傳回 true。
IsSpecialTag(uint64_t tag)
bool
IsValidTLVType(uint8_t type)
bool
如果指定的 TLV 類型有效,則傳回 true。
ProfileIdFromTag(uint64_t tag)
uint32_t
TLV 標記傳回設定檔 ID。
ProfileNumFromTag(uint64_t tag)
uint16_t
TLV 標記傳回設定檔編號。
ProfileTag(uint32_t profileId, uint32_t tagNum)
uint64_t
從設定檔 ID 和標記編號產生設定檔專屬 TLV 標記的 API 表示法。
ProfileTag(uint16_t vendorId, uint16_t profileNum, uint32_t tagNum)
uint64_t
從供應商 ID、設定檔編號和代碼編號產生設定檔專屬 TLV 標記的 API 表示法。
TLVFieldSizeToBytes(TLVFieldSize fieldSize)
uint8_t
TLVTypeHasLength(uint8_t type)
bool
如果指定的 TLV 類型表示有相關聯的長度欄位,則傳回 true。
TLVTypeHasValue(uint8_t type)
bool
如果指定的 TLV 類型隱含相關聯的值欄位,則傳回 true。
TLVTypeIsContainer(uint8_t type)
bool
如果指定的 TLV 類型為容器,則傳回 true。
TLVTypeIsString(uint8_t type)
bool
如果指定的 TLV 類型是 UTF8 或位元組字串,則傳回 true。
TagNumFromTag(uint64_t tag)
uint32_t
傳回 TLV 標記中的標記編號。
VendorIdFromTag(uint64_t tag)
uint16_t
TLV 標記傳回供應商 ID。

類別

nl::Weave::TLV::CircularTLVReader
nl::Weave::TLV::CircularTLVWriter
nl::Weave::TLV::TLVReader

針對以 Weave TLV 格式編碼的資料,提供記憶體效率剖析器。

nl::Weave::TLV::TLVUpdater

提供整合的 Reader/Writer 介面,用於編輯/新增/刪除 TLV 編碼的元素。

nl::Weave::TLV::TLVWriter

提供高效率的編碼器,以 Weave TLV 格式寫入資料。

nl::Weave::TLV::WeaveCircularTLVBuffer

WeaveCircularTLVBuffer 可為 nl::Weave::TLV::TLVWriter 和 nl::Weave::TLVTLVReader 提供循環儲存空間。

命名空間

nl::Weave::TLV::Debug

這個命名空間包含用於偵錯和記錄 Weave TLV 的類型和介面。

nl::Weave::TLV::Utilities

此命名空間包含管理及使用 Weave TLV 的類型和公用程式介面。

列舉

71 次

 @71

73 次

 @73

74 次

 @74
屬性
AnonymousTag

這類值代表沒有標記 (即TLV

匿名元素)。

75 次

 @75

TLVCommonProfiles

 TLVCommonProfiles
屬性
kProfileIdNotSpecified

用於表示變數或成員中沒有設定檔 ID。

這與 WeaveProfiles.h 中定義的 kWeaveProfile_NotSpecified 相同

TLVElementType

 TLVElementType

TLVFieldSize

 TLVFieldSize

TLVTagControl

 TLVTagControl

TLVTagFields

 TLVTagFields

TLVType

 TLVType

用於識別 TLV 元素類型的列舉項目。

變數

kWeaveTLVCopyChunkSize

const size_t kWeaveTLVCopyChunkSize = 16

將讀取器物件中的 TLV 元素複製到寫入者。

CopyElement() 方法會對新的 TLV 元素進行編碼,其類型和值皆來自 TLVReader 物件。呼叫此方法時,提供的讀取器物件應位於來源 TLV 元素上。新編碼的元素將具有與輸入容器相同的類型和內容,但標記會設為指定的引數。如果提供的元素是 TLV 容器 (結構、陣列或路徑),系統就會複製容器的完整內容。

詳細資料
參數
[in] tag
要與容器編碼的 TLV 標記;如果容器應在沒有標記的情況下編碼,則為 AnonymousTag。請使用以下其中一種標記定義函式 (ProfileTag()ContextTag()CommonTag()) 建構標記值。
[in] reader
TLVReader 物件的參照,用於指定預先編碼的 TLV 元素,其類型和值應複製。
傳回值
WEAVE_NO_ERROR
方法是否成功。
WEAVE_ERROR_INCORRECT_STATE
如果提供的讀取器不在元素上,
WEAVE_ERROR_TLV_CONTAINER_OPEN
如果容器寫入器已在目前的寫入器上開啟,但尚未關閉。
WEAVE_ERROR_TLV_UNDERRUN
與所提供讀取器相關聯的基礎 TLV 編碼已提前結束。
WEAVE_ERROR_INVALID_TLV_ELEMENT
如果提供的讀取器遇到無效或不支援的 TLV 元素類型。
WEAVE_ERROR_INVALID_TLV_TAG
如果提供的讀取器在無效的情況下遇到 TLV 標記,或是提供的標記在寫入新容器時無效或不當。
WEAVE_ERROR_BUFFER_TOO_SMALL
如果寫入這個值,會超過寫入寫入者時指定的位元組數上限。
WEAVE_ERROR_NO_MEMORY
如果嘗試分配輸出緩衝區因記憶體不足而失敗。
other
所設 GetNewBuffer() 或 FinalizeBuffer() 函式傳回的其他 Weave 或平台特定錯誤,或與讀取器物件相關聯的 GetNextBuffer() 函式傳回。

sTagSizes

const uint8_t sTagSizes[] = { 0, 1, 2, 4, 2, 4, 6, 8 }

函式

CommonTag

uint64_t CommonTag(
  uint32_t tagNum
)

產生常見設定檔 TLV 標記的 API 表示法。

詳細資料
參數
[in] tagNum
指派給代碼的通用設定檔代碼編號。
傳回
代表標記的 64 位元整數。

ContextTag

uint64_t ContextTag(
  uint8_t tagNum
)

為內容相關 TLV 標記產生 API 表示法。

詳細資料
參數
[in] tagNum
指派給代碼的內容專屬代碼編號。
傳回
代表標記的 64 位元整數。

GetTLVFieldSize

TLVFieldSize GetTLVFieldSize(
  uint8_t type
)

IsContextTag

bool IsContextTag(
  uint64_t tag
)

如果提供的標記是內容專屬的標記,則傳回 true。

IsProfileTag

bool IsProfileTag(
  uint64_t tag
)

提供的標記會傳回 true。

IsSpecialTag

bool IsSpecialTag(
  uint64_t tag
)

IsValidTLVType

bool IsValidTLVType(
  uint8_t type
)

如果指定的 TLV 類型有效,則傳回 true。

詳細資料
傳回
如果指定的 TLV 類型有效,則為 true;否則為 false

ProfileIdFromTag

uint32_t ProfileIdFromTag(
  uint64_t tag
)

TLV 標記傳回設定檔 ID。

詳細資料
參數
[in] tag
設定檔專屬 TLV 標記的 API 表示法。
傳回
設定檔 ID。

ProfileNumFromTag

uint16_t ProfileNumFromTag(
  uint64_t tag
)

TLV 標記傳回設定檔編號。

詳細資料
參數
[in] tag
設定檔專屬 TLV 標記的 API 表示法。
傳回
相關聯的設定檔編號。

ProfileTag

uint64_t ProfileTag(
  uint32_t profileId,
  uint32_t tagNum
)

從設定檔 ID 和標記編號產生設定檔專屬 TLV 標記的 API 表示法。

詳細資料
參數
[in] profileId
定義代碼的設定檔 ID。
[in] tagNum
指派給代碼的設定檔專屬代碼編號。
傳回
代表標記的 64 位元整數。

ProfileTag

uint64_t ProfileTag(
  uint16_t vendorId,
  uint16_t profileNum,
  uint32_t tagNum
)

從供應商 ID、設定檔編號和代碼編號產生設定檔專屬 TLV 標記的 API 表示法。

詳細資料
參數
[in] vendorId
定義代碼的供應商 ID。
[in] profileNum
供應商為代碼定義所在的設定檔指派編號。
[in] tagNum
指派給代碼的設定檔專屬代碼編號。
傳回
代表標記的 64 位元整數。

TLVFieldSizeToBytes

uint8_t TLVFieldSizeToBytes(
  TLVFieldSize fieldSize
)

TLVTypeHasLength

bool TLVTypeHasLength(
  uint8_t type
)

如果指定的 TLV 類型表示有相關聯的長度欄位,則傳回 true。

詳細資料
傳回
如果指定的 TLV 類型表示有相關聯的長度欄位,則為 true;否則為 false

TLVTypeHasValue

bool TLVTypeHasValue(
  uint8_t type
)

如果指定的 TLV 類型隱含相關聯的值欄位,則傳回 true。

詳細資料
傳回
如果指定的 TLV 類型表示有相關聯的值欄位,則為 true;否則為 false

TLVTypeIsContainer

bool TLVTypeIsContainer(
  uint8_t type
)

如果指定的 TLV 類型為容器,則傳回 true。

詳細資料
傳回
如果指定的 TLV 類型為容器,則為 true;否則為 false

TLVTypeIsString

bool TLVTypeIsString(
  uint8_t type
)

如果指定的 TLV 類型是 UTF8 或位元組字串,則傳回 true。

詳細資料
傳回
如果指定的 TLV 類型為 UTF8 或位元組字串,則為 true;否則為 false

TagNumFromTag

uint32_t TagNumFromTag(
  uint64_t tag
)

傳回 TLV 標記中的標記編號。

詳細資料
參數
[in] tag
設定檔特定或情境專屬 TLV 標記的 API 表示法。
傳回
相關聯的代碼編號。
另請參閱:
IsProfileTag()IsContextTag()

VendorIdFromTag

uint16_t VendorIdFromTag(
  uint64_t tag
)

TLV 標記傳回供應商 ID。

詳細資料
參數
[in] tag
設定檔專屬 TLV 標記的 API 表示法。
傳回
相關的供應商 ID。