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() 函数或者与读取器对象关联的 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。