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

WeaveCircularTLVBuffernl::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

该值用于表示不含标记(即

一个匿名元素)。

@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() 函数,或者由与读取器对象关联的 GetNextBuffer() 函数返回的其他 Weave 或平台特定错误。

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。