# newbit_tlv **Repository Path**: zigbeeiot/newbit_tlv ## Basic Information - **Project Name**: newbit_tlv - **Description**: 一个基于ASN.1的编码,在应用上则类似于Zigbee cluster libary的编码规则 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2021-07-28 - **Last Updated**: 2021-07-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # newbit_tlv 2021.6.30 1. OSAL 基于 https://gitee.com/newbitcode/newbit_osal_hdsc 项目 ### NEWBIT TLV 1.0 TLV是指Type-Length-Value, 用于IOT领域的数据传输,有完整的编解码,主要解决了IOT设备 内存和FLASH比较小,无法支持JASON, XML等通用的数据交换格式,或者支持后效率明显降低 等问题。NEWBIT TLV的核心思想是在IOT当中的任何数据,均可以表征为类型,长度,数据, 通过类型和长度对数据的约束条件,可以保证在收发双方都可以以通用的规则编解码数据,形 成数据数认的基本前本。 为了更好地服务于机器,还需要将数据的含义进行编码,将含义数字化,进行这样规定的内容 在这里称为数据字典,通信的双方根据相同的字典,将数据的意义和数据一起编码,在接收方 即可还原数据和并能知晓数据的意义。相同数据字典可以不断补充,只要不改变已有规定的意 义,则前后版本的兼容性仍然可以达到极佳。几乎不存在前后版本的兼容性问题。 字典里对每个意义的规定称为属性(attribute) 对所有的数据类型进行列举,在本协议中使用0-0xFF表示一种数据类型,下方是部分类型的定义 type code length 无效值 desc INT8 0x28 1 0x80 -127 ~ +127 INT16 0x29 2 0x8000 -32767 ~ +32767 INT24 0x2A 3 0x800000 INT32 0x2B 4 0x80000000 ATTR 0xF5 4 0xFFFFFFFF 例如: 某电池所用字典规定如下 atttribute code rw default type desc SOC 0X52 R -1 INT8 电量百分比,-1表示未初始化,0-100 VOL 0X53 R -1 INT16 电池电压,-1表示未初始化,0-8500, 单位mv CUR 0X54 R -1 INT32 放电电流,-1表示未初始化,0-3000000,单位ua TEMP 0X55 R -501 INT16 电池温度,-501表示未初始化,-400 ~ + 1000, 单位0.1度 这里采用类型于KEY-VALUE的规则,对所传输的信息进行编码, 例1, 传输信息为,电量30%, 电压7800mv, 数据编码如下 F5015228011EF5015302781E (共4个TLV) 例2, 传输信息为,电量30%, 电压7800mv,温度为+26.5度, 数据编码如下 F5015228011EF5015302781EF50155020901 (共6个TLV) 俩例中传输的信息不同,但基于NEWBIT TLV通信的双方均可以正常解析,在未来如果再增加电池等参数也是如此。 这相对于使用固定结构体来说,兼容性有保证,相对于JSON,XML来说,体积更小,且MCU上处理数据更快。 -------------------------------------------------------------------------------------------- ### 已经实现的功能 1. TLV单个结构编码解码,lm_tlv.c 2. 对属性的编码和解码, lm_tlv_attr.c 3. 使用树对不定结构数量的数据进行管理,并进行数据系列化(serialization), lm_tlv_tree.c 4. 基于公共字典,作数据的最常用的包头/校验等操作进行统一处理, tlv_app_pro.c