EDP KIT from OneNet

Committer:
ws1992108
Date:
Wed Apr 08 04:00:12 2020 +0000
Revision:
1:bfbe3a09a808
Parent:
0:79de700849c5
by ws

Who changed what in which revision?

UserRevisionLine numberNew contents of line
TaylorGy 0:79de700849c5 1 #ifndef __EDP_KIT_H__
TaylorGy 0:79de700849c5 2 #define __EDP_KIT_H__
TaylorGy 0:79de700849c5 3
TaylorGy 0:79de700849c5 4 #ifdef EDPKIT_EXPORTS
TaylorGy 0:79de700849c5 5 #define EDPKIT_DLL __declspec(dllexport)
TaylorGy 0:79de700849c5 6 #else
TaylorGy 0:79de700849c5 7 #define EDPKIT_DLL
TaylorGy 0:79de700849c5 8 #endif
TaylorGy 0:79de700849c5 9
TaylorGy 0:79de700849c5 10 #include "Common.h"
TaylorGy 0:79de700849c5 11 #include "cJSON.h"
TaylorGy 0:79de700849c5 12 #include "time.h"
TaylorGy 0:79de700849c5 13 /*
TaylorGy 0:79de700849c5 14 * history
TaylorGy 0:79de700849c5 15 * 2015-06-01 v1.0.1 wululu fix bug: malloc for string, MUST memset to 0
TaylorGy 0:79de700849c5 16 * 2015-07-10 v1.1.0 wusongwei add UnpackCmdReq() and PacketCmdResp()
TaylorGy 0:79de700849c5 17 * 2015-07-13 v1.1.1 wululu 增加封装json的接口, windows版本dll
TaylorGy 0:79de700849c5 18 * 2015-07-13 v1.1.2 wululu 支持double和string类型的打包函数和解包函数
TaylorGy 0:79de700849c5 19 * 2015-07-15 v1.1.3 wusongwei 添加SAVEACK响应
TaylorGy 0:79de700849c5 20 * 2015-07-20 v1.1.4 wusongwei 添加/修改SAVEDATA消息的打包/解包函数
TaylorGy 0:79de700849c5 21 */
TaylorGy 0:79de700849c5 22
TaylorGy 0:79de700849c5 23 #ifdef __cplusplus
TaylorGy 0:79de700849c5 24 extern "C" {
TaylorGy 0:79de700849c5 25 #endif
TaylorGy 0:79de700849c5 26
TaylorGy 0:79de700849c5 27 /*---------------------------------------------------------------------------*/
TaylorGy 0:79de700849c5 28 #define MOSQ_MSB(A) (uint8)((A & 0xFF00) >> 8)
TaylorGy 0:79de700849c5 29 #define MOSQ_LSB(A) (uint8)(A & 0x00FF)
TaylorGy 0:79de700849c5 30 #define BUFFER_SIZE (0x100)
TaylorGy 0:79de700849c5 31 #define PROTOCOL_NAME "EDP"
TaylorGy 0:79de700849c5 32 #define PROTOCOL_VERSION 1
TaylorGy 0:79de700849c5 33 /*----------------------------错误码-----------------------------------------*/
TaylorGy 0:79de700849c5 34 #define ERR_UNPACK_CONNRESP_REMAIN -1000
TaylorGy 0:79de700849c5 35 #define ERR_UNPACK_CONNRESP_FLAG -1001
TaylorGy 0:79de700849c5 36 #define ERR_UNPACK_CONNRESP_RTN -1002
TaylorGy 0:79de700849c5 37 #define ERR_UNPACK_PUSHD_REMAIN -1010
TaylorGy 0:79de700849c5 38 #define ERR_UNPACK_PUSHD_DEVID -1011
TaylorGy 0:79de700849c5 39 #define ERR_UNPACK_PUSHD_DATA -1012
TaylorGy 0:79de700849c5 40 #define ERR_UNPACK_SAVED_REMAIN -1020
TaylorGy 0:79de700849c5 41 #define ERR_UNPACK_SAVED_TANSFLAG -1021
TaylorGy 0:79de700849c5 42 #define ERR_UNPACK_SAVED_DEVID -1022
TaylorGy 0:79de700849c5 43 #define ERR_UNPACK_SAVED_DATAFLAG -1023
TaylorGy 0:79de700849c5 44 #define ERR_UNPACK_SAVED_JSON -1024
TaylorGy 0:79de700849c5 45 #define ERR_UNPACK_SAVED_PARSEJSON -1025
TaylorGy 0:79de700849c5 46 #define ERR_UNPACK_SAVED_BIN_DESC -1026
TaylorGy 0:79de700849c5 47 #define ERR_UNPACK_SAVED_PARSEDESC -1027
TaylorGy 0:79de700849c5 48 #define ERR_UNPACK_SAVED_BINLEN -1028
TaylorGy 0:79de700849c5 49 #define ERR_UNPACK_SAVED_BINDATA -1029
TaylorGy 0:79de700849c5 50 #define ERR_UNPACK_PING_REMAIN -1030
TaylorGy 0:79de700849c5 51 #define ERR_UNPACK_CMDREQ -1031
TaylorGy 0:79de700849c5 52 #define ERR_UNPACK_ENCRYPT_RESP -1032
TaylorGy 0:79de700849c5 53 #define ERR_UNPACK_SAVEDATA_ACK -1033
TaylorGy 0:79de700849c5 54
TaylorGy 0:79de700849c5 55 /*----------------------------消息类型---------------------------------------*/
TaylorGy 0:79de700849c5 56 /* 连接请求 */
TaylorGy 0:79de700849c5 57 #define CONNREQ 0x10
TaylorGy 0:79de700849c5 58 /* 连接响应 */
TaylorGy 0:79de700849c5 59 #define CONNRESP 0x20
TaylorGy 0:79de700849c5 60 /* 转发(透传)数据 */
TaylorGy 0:79de700849c5 61 #define PUSHDATA 0x30
TaylorGy 0:79de700849c5 62 /* 存储(转发)数据 */
TaylorGy 0:79de700849c5 63 #define SAVEDATA 0x80
TaylorGy 0:79de700849c5 64 /* 存储确认 */
TaylorGy 0:79de700849c5 65 #define SAVEACK 0x90
TaylorGy 0:79de700849c5 66 /* 命令请求 */
TaylorGy 0:79de700849c5 67 #define CMDREQ 0xA0
TaylorGy 0:79de700849c5 68 /* 命令响应 */
TaylorGy 0:79de700849c5 69 #define CMDRESP 0xB0
TaylorGy 0:79de700849c5 70 /* 心跳请求 */
TaylorGy 0:79de700849c5 71 #define PINGREQ 0xC0
TaylorGy 0:79de700849c5 72 /* 心跳响应 */
TaylorGy 0:79de700849c5 73 #define PINGRESP 0xD0
TaylorGy 0:79de700849c5 74 /* 加密请求 */
TaylorGy 0:79de700849c5 75 #define ENCRYPTREQ 0xE0
TaylorGy 0:79de700849c5 76 /* 加密响应 */
TaylorGy 0:79de700849c5 77 #define ENCRYPTRESP 0xF0
TaylorGy 0:79de700849c5 78
TaylorGy 0:79de700849c5 79 #ifndef NULL
TaylorGy 0:79de700849c5 80 #define NULL (void*)0
TaylorGy 0:79de700849c5 81 #endif
TaylorGy 0:79de700849c5 82
TaylorGy 0:79de700849c5 83 /* SAVEDATA消息支持的格式类型 */
TaylorGy 0:79de700849c5 84 typedef enum {
TaylorGy 0:79de700849c5 85 kTypeFullJson = 0x01,
TaylorGy 0:79de700849c5 86 kTypeBin = 0x02,
TaylorGy 0:79de700849c5 87 kTypeSimpleJsonWithoutTime = 0x03,
TaylorGy 0:79de700849c5 88 kTypeSimpleJsonWithTime = 0x04,
TaylorGy 0:79de700849c5 89 kTypeString = 0x05
TaylorGy 0:79de700849c5 90 }SaveDataType;
TaylorGy 0:79de700849c5 91
TaylorGy 0:79de700849c5 92 /*-------------发送buffer, 接收buffer, EDP包结构定义-------------------------*/
TaylorGy 0:79de700849c5 93 EDPKIT_DLL
TaylorGy 0:79de700849c5 94 typedef struct Buffer
TaylorGy 0:79de700849c5 95 {
TaylorGy 0:79de700849c5 96 uint8* _data; /* buffer数据 */
TaylorGy 0:79de700849c5 97 uint32 _write_pos; /* buffer写入位置 */
TaylorGy 0:79de700849c5 98 uint32 _read_pos; /* buffer读取位置 */
TaylorGy 0:79de700849c5 99 uint32 _capacity; /* buffer容量 */
TaylorGy 0:79de700849c5 100 }Buffer, SendBuffer, RecvBuffer, EdpPacket;
TaylorGy 0:79de700849c5 101 /*-----------------------------操作Buffer的接口------------------------------*/
TaylorGy 0:79de700849c5 102 /*
TaylorGy 0:79de700849c5 103 * 函数名: NewBuffer
TaylorGy 0:79de700849c5 104 * 功能: 生成Buffer
TaylorGy 0:79de700849c5 105 * 说明: 一般情况下, NewBuffer和DeleteBuffer应该成对出现
TaylorGy 0:79de700849c5 106 * 参数: 无
TaylorGy 0:79de700849c5 107 * 返回值: 类型 (Buffer*)
TaylorGy 0:79de700849c5 108 * 返回值非空 生成Buffer成功, 返回这个Buffer的指针
TaylorGy 0:79de700849c5 109 * 返回值为空 生成Buffer失败, 内存不够
TaylorGy 0:79de700849c5 110 */
TaylorGy 0:79de700849c5 111 EDPKIT_DLL Buffer* NewBuffer();
TaylorGy 0:79de700849c5 112 /*
TaylorGy 0:79de700849c5 113 * 函数名: DeleteBuffer
TaylorGy 0:79de700849c5 114 * 功能: 销毁Buffer
TaylorGy 0:79de700849c5 115 * 说明: 一般情况下, NewBuffer和DeleteBuffer应该成对出现
TaylorGy 0:79de700849c5 116 * 参数: buf 一个Buffer的指针的指针
TaylorGy 0:79de700849c5 117 * 返回值: 无
TaylorGy 0:79de700849c5 118 */
TaylorGy 0:79de700849c5 119 EDPKIT_DLL void DeleteBuffer(Buffer** buf);
TaylorGy 0:79de700849c5 120 /*
TaylorGy 0:79de700849c5 121 * 函数名: CheckCapacity
TaylorGy 0:79de700849c5 122 * 功能: 检查Buffer是否能够写入长度为len的字节流,
TaylorGy 0:79de700849c5 123 * 如果Buffer的容量不够, 自动成倍扩展Buffer的容量(不影响Buffer数据)
TaylorGy 0:79de700849c5 124 * 参数: buf 需要写入Buffer的指针
TaylorGy 0:79de700849c5 125 * len 期望写入的长度
TaylorGy 0:79de700849c5 126 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 127 * <0 失败, 内存不够
TaylorGy 0:79de700849c5 128 * =0 成功
TaylorGy 0:79de700849c5 129 */
TaylorGy 0:79de700849c5 130 EDPKIT_DLL int32 CheckCapacity(Buffer* buf, uint32 len);
TaylorGy 0:79de700849c5 131
TaylorGy 0:79de700849c5 132 /*------------------------读取EDP包数据的接口-------------------------------*/
TaylorGy 0:79de700849c5 133 /*
TaylorGy 0:79de700849c5 134 * 函数名: ReadByte
TaylorGy 0:79de700849c5 135 * 功能: 按EDP协议, 从Buffer(包)中读取一个字节数据
TaylorGy 0:79de700849c5 136 * 参数: pkg EDP包
TaylorGy 0:79de700849c5 137 * val 数据(一个字节)
TaylorGy 0:79de700849c5 138 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 139 * <0 失败, pkg中无数据
TaylorGy 0:79de700849c5 140 * =0 成功
TaylorGy 0:79de700849c5 141 */
TaylorGy 0:79de700849c5 142 EDPKIT_DLL int32 ReadByte(EdpPacket* pkg, uint8* val);
TaylorGy 0:79de700849c5 143 /*
TaylorGy 0:79de700849c5 144 * 函数名: ReadBytes
TaylorGy 0:79de700849c5 145 * 功能: 按EDP协议, 从Buffer(包)中读取count个字节数据
TaylorGy 0:79de700849c5 146 * 说明: val是malloc出来的, 需要客户端自己free
TaylorGy 0:79de700849c5 147 * 参数: pkg EDP包
TaylorGy 0:79de700849c5 148 * val 数据(count个字节)
TaylorGy 0:79de700849c5 149 * count 字节数
TaylorGy 0:79de700849c5 150 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 151 * <0 失败, pkg中无数据
TaylorGy 0:79de700849c5 152 * =0 成功
TaylorGy 0:79de700849c5 153 */
TaylorGy 0:79de700849c5 154 EDPKIT_DLL int32 ReadBytes(EdpPacket* pkg, uint8** val, uint32 count);
TaylorGy 0:79de700849c5 155 /*
TaylorGy 0:79de700849c5 156 * 函数名: ReadUint16
TaylorGy 0:79de700849c5 157 * 功能: 按EDP协议, 从Buffer(包)中读取uint16值
TaylorGy 0:79de700849c5 158 * 参数: pkg EDP包
TaylorGy 0:79de700849c5 159 * val uint16值
TaylorGy 0:79de700849c5 160 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 161 * <0 失败, pkg中无数据
TaylorGy 0:79de700849c5 162 * =0 成功
TaylorGy 0:79de700849c5 163 */
TaylorGy 0:79de700849c5 164 EDPKIT_DLL int32 ReadUint16(EdpPacket* pkg, uint16* val);
TaylorGy 0:79de700849c5 165 /*
TaylorGy 0:79de700849c5 166 * 函数名: ReadUint32
TaylorGy 0:79de700849c5 167 * 功能: 按EDP协议, 从Buffer(包)中读取uint32值
TaylorGy 0:79de700849c5 168 * 参数: pkg EDP包
TaylorGy 0:79de700849c5 169 * val uint32值
TaylorGy 0:79de700849c5 170 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 171 * <0 失败, pkg中无数据
TaylorGy 0:79de700849c5 172 * =0 成功
TaylorGy 0:79de700849c5 173 */
TaylorGy 0:79de700849c5 174 EDPKIT_DLL int32 ReadUint32(EdpPacket* pkg, uint32* val);
TaylorGy 0:79de700849c5 175 /*
TaylorGy 0:79de700849c5 176 * 函数名: ReadStr
TaylorGy 0:79de700849c5 177 * 功能: 按EDP协议, 从Buffer(包)中读取字符串, 以\0结尾
TaylorGy 0:79de700849c5 178 * 参数: pkg EDP包
TaylorGy 0:79de700849c5 179 * val 字符串
TaylorGy 0:79de700849c5 180 * 说明: val是malloc出来的, 需要客户端自己free
TaylorGy 0:79de700849c5 181 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 182 * <0 失败, pkg中无数据
TaylorGy 0:79de700849c5 183 * =0 成功
TaylorGy 0:79de700849c5 184 */
TaylorGy 0:79de700849c5 185 EDPKIT_DLL int32 ReadStr(EdpPacket* pkg, char** val);
TaylorGy 0:79de700849c5 186 /*
TaylorGy 0:79de700849c5 187 * 函数名: ReadRemainlen
TaylorGy 0:79de700849c5 188 * 功能: 按EDP协议, 从Buffer(包)中remainlen
TaylorGy 0:79de700849c5 189 * 说明: remainlen是EDP协议中的概念, 是一个EDP包身的长度
TaylorGy 0:79de700849c5 190 * 参数: pkg EDP包
TaylorGy 0:79de700849c5 191 * len_val remainlen
TaylorGy 0:79de700849c5 192 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 193 * <0 失败, pkg中无数据
TaylorGy 0:79de700849c5 194 * =0 成功
TaylorGy 0:79de700849c5 195 */
TaylorGy 0:79de700849c5 196 EDPKIT_DLL int32 ReadRemainlen(EdpPacket* pkg, uint32* len_val);
TaylorGy 0:79de700849c5 197
TaylorGy 0:79de700849c5 198 /*------------------------数据写入EDP包的接口-------------------------------*/
TaylorGy 0:79de700849c5 199 /*
TaylorGy 0:79de700849c5 200 * 说明: 目前不支持一个包即在写入又在读取, 因此, 只有对于_read_pos为0的包才能被写入
TaylorGy 0:79de700849c5 201 */
TaylorGy 0:79de700849c5 202 /*
TaylorGy 0:79de700849c5 203 * 函数名: WriteByte
TaylorGy 0:79de700849c5 204 * 功能: 按EDP协议, 将一个字节数据写入Buffer(包)中
TaylorGy 0:79de700849c5 205 * 参数: pkg EDP包
TaylorGy 0:79de700849c5 206 * byte 数据(一个字节)
TaylorGy 0:79de700849c5 207 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 208 * <0 失败, pkg中无数据
TaylorGy 0:79de700849c5 209 * =0 成功
TaylorGy 0:79de700849c5 210 */
TaylorGy 0:79de700849c5 211 EDPKIT_DLL int32 WriteByte(Buffer* buf, uint8 byte);
TaylorGy 0:79de700849c5 212 /*
TaylorGy 0:79de700849c5 213 * 函数名: WriteBytes
TaylorGy 0:79de700849c5 214 * 功能: 按EDP协议, 将count个字节数据写入Buffer(包)中
TaylorGy 0:79de700849c5 215 * 参数: pkg EDP包
TaylorGy 0:79de700849c5 216 * bytes 数据
TaylorGy 0:79de700849c5 217 * count 字节数
TaylorGy 0:79de700849c5 218 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 219 * <0 失败, pkg中无数据
TaylorGy 0:79de700849c5 220 * =0 成功
TaylorGy 0:79de700849c5 221 */
TaylorGy 0:79de700849c5 222 EDPKIT_DLL int32 WriteBytes(Buffer* buf, const void* bytes, uint32 count);
TaylorGy 0:79de700849c5 223 /*
TaylorGy 0:79de700849c5 224 * 函数名: WriteUint16
TaylorGy 0:79de700849c5 225 * 功能: 按EDP协议, 将uint16写入Buffer(包)中
TaylorGy 0:79de700849c5 226 * 参数: pkg EDP包
TaylorGy 0:79de700849c5 227 * val uint16数据
TaylorGy 0:79de700849c5 228 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 229 * <0 失败, pkg中无数据
TaylorGy 0:79de700849c5 230 * =0 成功
TaylorGy 0:79de700849c5 231 */
TaylorGy 0:79de700849c5 232 EDPKIT_DLL int32 WriteUint16(Buffer* buf, uint16 val);
TaylorGy 0:79de700849c5 233 /*
TaylorGy 0:79de700849c5 234 * 函数名: WriteUint32
TaylorGy 0:79de700849c5 235 * 功能: 按EDP协议, 将uint32写入Buffer(包)中
TaylorGy 0:79de700849c5 236 * 参数: pkg EDP包
TaylorGy 0:79de700849c5 237 * val uint32数据
TaylorGy 0:79de700849c5 238 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 239 * <0 失败, pkg中无数据
TaylorGy 0:79de700849c5 240 * =0 成功
TaylorGy 0:79de700849c5 241 */
TaylorGy 0:79de700849c5 242 EDPKIT_DLL int32 WriteUint32(Buffer* buf, uint32 val);
TaylorGy 0:79de700849c5 243 /*
TaylorGy 0:79de700849c5 244 * 函数名: WriteStr
TaylorGy 0:79de700849c5 245 * 功能: 按EDP协议, 将字符串写入Buffer(包)中
TaylorGy 0:79de700849c5 246 * 参数: pkg EDP包
TaylorGy 0:79de700849c5 247 * val 字符串
TaylorGy 0:79de700849c5 248 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 249 * <0 失败, pkg中无数据
TaylorGy 0:79de700849c5 250 * =0 成功
TaylorGy 0:79de700849c5 251 */
TaylorGy 0:79de700849c5 252 EDPKIT_DLL int32 WriteStr(Buffer* buf, const char *str);
TaylorGy 0:79de700849c5 253 /*
TaylorGy 0:79de700849c5 254 * 函数名: WriteRemainlen
TaylorGy 0:79de700849c5 255 * 功能: 按EDP协议, 将remainlen写入Buffer(包)中
TaylorGy 0:79de700849c5 256 * 说明: remainlen是EDP协议中的概念, 是一个EDP包身的长度
TaylorGy 0:79de700849c5 257 * 参数: pkg EDP包
TaylorGy 0:79de700849c5 258 * len_val remainlen
TaylorGy 0:79de700849c5 259 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 260 * <0 失败, pkg中无数据
TaylorGy 0:79de700849c5 261 * =0 成功
TaylorGy 0:79de700849c5 262 */
TaylorGy 0:79de700849c5 263 EDPKIT_DLL int32 WriteRemainlen(Buffer* buf, uint32 len_val);
TaylorGy 0:79de700849c5 264 /*
TaylorGy 0:79de700849c5 265 * 函数名: IsPkgComplete
TaylorGy 0:79de700849c5 266 * 功能: 判断接收到的Buffer, 是否为一个完整的EDP包
TaylorGy 0:79de700849c5 267 * 参数: buf 接收到的Buffer(二进制流)
TaylorGy 0:79de700849c5 268 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 269 * =0 数据还未收完, 需要继续接收
TaylorGy 0:79de700849c5 270 * >0 成功
TaylorGy 0:79de700849c5 271 * <0 数据错误, 不符合EDP协议
TaylorGy 0:79de700849c5 272 */
TaylorGy 0:79de700849c5 273 EDPKIT_DLL int32 IsPkgComplete(RecvBuffer* buf);
TaylorGy 0:79de700849c5 274
TaylorGy 0:79de700849c5 275 /*-----------------------------客户端操作的接口------------------------------*/
TaylorGy 0:79de700849c5 276 /*
TaylorGy 0:79de700849c5 277 * 函数名: GetEdpPacket
TaylorGy 0:79de700849c5 278 * 功能: 将接收到的二进制流, 分解成一个一个的EDP包
TaylorGy 0:79de700849c5 279 * 说明: 返回的EDP包使用后, 需要删除
TaylorGy 0:79de700849c5 280 * 相关函数:EdpPacketType, Unpack***类函数
TaylorGy 0:79de700849c5 281 * 参数: buf 接收缓存
TaylorGy 0:79de700849c5 282 * 返回值: 类型 (EdpPacket*)
TaylorGy 0:79de700849c5 283 * 非空 EDP协议包
TaylorGy 0:79de700849c5 284 * 为空 无完整的EDP协议包
TaylorGy 0:79de700849c5 285 */
TaylorGy 0:79de700849c5 286 EDPKIT_DLL EdpPacket* GetEdpPacket(RecvBuffer* buf);
TaylorGy 0:79de700849c5 287
TaylorGy 0:79de700849c5 288 /*
TaylorGy 0:79de700849c5 289 * 函数名: EdpPacketType
TaylorGy 0:79de700849c5 290 * 功能: 获取一个EDP包的消息类型, 客户程序根据消息类型做不同的处理
TaylorGy 0:79de700849c5 291 * 相关函数:Unpack***类函数
TaylorGy 0:79de700849c5 292 * 参数: pkg EDP协议包
TaylorGy 0:79de700849c5 293 * 返回值: 类型 (uint8)
TaylorGy 0:79de700849c5 294 * 值 消息类型(详细参见本h的消息类型定义)
TaylorGy 0:79de700849c5 295 */
TaylorGy 0:79de700849c5 296 /* 例子:
TaylorGy 0:79de700849c5 297 * ...
TaylorGy 0:79de700849c5 298 * int8 mtype = EdpPacketType(pkg);
TaylorGy 0:79de700849c5 299 * switch(mtype)
TaylorGy 0:79de700849c5 300 * {
TaylorGy 0:79de700849c5 301 * case CONNRESP:
TaylorGy 0:79de700849c5 302 * UnpackConnectResp(pkg);
TaylorGy 0:79de700849c5 303 * break;
TaylorGy 0:79de700849c5 304 * case PUSHDATA:
TaylorGy 0:79de700849c5 305 * UnpackPushdata(pkg, src_devid, data, data_len);
TaylorGy 0:79de700849c5 306 * break;
TaylorGy 0:79de700849c5 307 * case SAVEDATA:
TaylorGy 0:79de700849c5 308 * UnpackSavedata(pkg, src_devid, flag, data);
TaylorGy 0:79de700849c5 309 * break;
TaylorGy 0:79de700849c5 310 * case PINGRESP:
TaylorGy 0:79de700849c5 311 * UnpackPingResp(pkg);
TaylorGy 0:79de700849c5 312 * break;
TaylorGy 0:79de700849c5 313 * ...
TaylorGy 0:79de700849c5 314 * }
TaylorGy 0:79de700849c5 315 */
TaylorGy 0:79de700849c5 316 EDPKIT_DLL uint8 EdpPacketType(EdpPacket* pkg);
TaylorGy 0:79de700849c5 317
TaylorGy 0:79de700849c5 318 /*
TaylorGy 0:79de700849c5 319 * 函数名: PacketConnect1
TaylorGy 0:79de700849c5 320 * 功能: 打包 由设备到设备云的EDP协议包, 连接设备云的请求(登录认证方式1)
TaylorGy 0:79de700849c5 321 * 说明: 返回的EDP包发送给设备云后, 需要客户程序删除该包
TaylorGy 0:79de700849c5 322 * 设备云会回复连接响应给设备
TaylorGy 0:79de700849c5 323 * 相关函数:UnpackConnectResp
TaylorGy 0:79de700849c5 324 * 参数: devid 设备ID, 申请设备时平台返回的ID
TaylorGy 0:79de700849c5 325 * auth_key 鉴权信息(api-key), 在平台申请的可以操作该设备的api-key字符串
TaylorGy 0:79de700849c5 326 * 返回值: 类型 (EdpPacket*)
TaylorGy 0:79de700849c5 327 * 非空 EDP协议包
TaylorGy 0:79de700849c5 328 * 为空 EDP协议包生成失败
TaylorGy 0:79de700849c5 329 */
TaylorGy 0:79de700849c5 330 EDPKIT_DLL EdpPacket* PacketConnect1(const char* devid, const char* auth_key);
TaylorGy 0:79de700849c5 331
TaylorGy 0:79de700849c5 332 /*
TaylorGy 0:79de700849c5 333 * 函数名: PacketConnect2
TaylorGy 0:79de700849c5 334 * 功能: 打包 由设备到设备云的EDP协议包, 连接设备云的请求(登录认证方式2)
TaylorGy 0:79de700849c5 335 * 说明: 返回的EDP包发送给设备云后, 需要客户程序删除该包
TaylorGy 0:79de700849c5 336 * 设备云会回复连接响应给设备
TaylorGy 0:79de700849c5 337 * 相关函数:UnpackConnectResp
TaylorGy 0:79de700849c5 338 * 参数: userid 用户ID, 在平台注册账号时平台返回的用户ID
TaylorGy 0:79de700849c5 339 * auth_info 鉴权信息, 在平台申请设备时填写设备的auth_info属性
TaylorGy 0:79de700849c5 340 * (json对象字符串), 该属性需要具备唯一性
TaylorGy 0:79de700849c5 341 * 返回值: 类型 (EdpPacket*)
TaylorGy 0:79de700849c5 342 * 非空 EDP协议包
TaylorGy 0:79de700849c5 343 * 为空 EDP协议包生成失败
TaylorGy 0:79de700849c5 344 */
TaylorGy 0:79de700849c5 345 EDPKIT_DLL EdpPacket* PacketConnect2(const char* userid, const char* auth_info);
TaylorGy 0:79de700849c5 346
TaylorGy 0:79de700849c5 347 /*
TaylorGy 0:79de700849c5 348 * 函数名: UnpackConnectResp
TaylorGy 0:79de700849c5 349 * 功能: 解包 由设备云到设备的EDP协议包, 连接响应
TaylorGy 0:79de700849c5 350 * 说明: 接收设备云发来的数据, 通过函数GetEdpPacket和EdpPacketType判断出是连接响应后,
TaylorGy 0:79de700849c5 351 * 将整个响应EDP包作为参数, 由该函数进行解析
TaylorGy 0:79de700849c5 352 * 相关函数:PacketConnect1, PacketConnect2, GetEdpPacket, EdpPacketType
TaylorGy 0:79de700849c5 353 * 参数: pkg EDP包, 必须是连接响应包
TaylorGy 0:79de700849c5 354 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 355 * =0 连接成功
TaylorGy 0:79de700849c5 356 * >0 连接失败, 具体失败原因见<OneNet接入方案与接口.docx>
TaylorGy 0:79de700849c5 357 * <0 解析失败, 具体失败原因见本h文件的错误码
TaylorGy 0:79de700849c5 358 */
TaylorGy 0:79de700849c5 359 EDPKIT_DLL int32 UnpackConnectResp(EdpPacket* pkg);
TaylorGy 0:79de700849c5 360
TaylorGy 0:79de700849c5 361 /*
TaylorGy 0:79de700849c5 362 * 函数名: PacketPushdata
TaylorGy 0:79de700849c5 363 * 功能: 打包 设备到设备云的EDP协议包, 设备与设备之间转发数据
TaylorGy 0:79de700849c5 364 * 说明: 返回的EDP包发送给设备云后, 需要删除这个包
TaylorGy 0:79de700849c5 365 * 相关函数:UnpackPushdata
TaylorGy 0:79de700849c5 366 * 参数: dst_devid 目的设备ID
TaylorGy 0:79de700849c5 367 * data 数据
TaylorGy 0:79de700849c5 368 * data_len 数据长度
TaylorGy 0:79de700849c5 369 * 返回值: 类型 (EdpPacket*)
TaylorGy 0:79de700849c5 370 * 非空 EDP协议包
TaylorGy 0:79de700849c5 371 * 为空 EDP协议包生成失败
TaylorGy 0:79de700849c5 372 */
TaylorGy 0:79de700849c5 373 EDPKIT_DLL EdpPacket* PacketPushdata(const char* dst_devid,
TaylorGy 0:79de700849c5 374 const char* data, uint32 data_len);
TaylorGy 0:79de700849c5 375
TaylorGy 0:79de700849c5 376 /*
TaylorGy 0:79de700849c5 377 * 函数名: UnpackPushdata
TaylorGy 0:79de700849c5 378 * 功能: 解包 由设备云到设备的EDP协议包, 设备与设备之间转发数据
TaylorGy 0:79de700849c5 379 * 说明: 接收设备云发来的数据, 通过函数GetEdpPacket和EdpPacketType判断出是pushdata后,
TaylorGy 0:79de700849c5 380 * 将整个响应EDP包作为参数, 由该函数进行解析
TaylorGy 0:79de700849c5 381 * 返回的源设备ID(src_devid)和数据(data)都需要客户端释放
TaylorGy 0:79de700849c5 382 * 相关函数:PacketPushdata, GetEdpPacket, EdpPacketType
TaylorGy 0:79de700849c5 383 * 参数: pkg EDP包, 必须是pushdata包
TaylorGy 0:79de700849c5 384 * src_devid 源设备ID
TaylorGy 0:79de700849c5 385 * data 数据
TaylorGy 0:79de700849c5 386 * data_len 数据长度
TaylorGy 0:79de700849c5 387 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 388 * =0 解析成功
TaylorGy 0:79de700849c5 389 * <0 解析失败, 具体失败原因见本h文件的错误码
TaylorGy 0:79de700849c5 390 */
TaylorGy 0:79de700849c5 391 EDPKIT_DLL int32 UnpackPushdata(EdpPacket* pkg, char** src_devid,
TaylorGy 0:79de700849c5 392 char** data, uint32* data_len);
TaylorGy 0:79de700849c5 393
TaylorGy 0:79de700849c5 394 /*
TaylorGy 0:79de700849c5 395 * 函数名: PacketSavedataJson
TaylorGy 0:79de700849c5 396 * 功能: 打包 设备到设备云的EDP协议包, 存储数据(json格式数据)
TaylorGy 0:79de700849c5 397 * 说明: 返回的EDP包发送给设备云后, 需要删除这个包
TaylorGy 0:79de700849c5 398 * 相关函数:UnpackSavedata, UnpackSavedataJson
TaylorGy 0:79de700849c5 399 * 参数: dst_devid 目的设备ID
TaylorGy 0:79de700849c5 400 * json_obj json数据
TaylorGy 0:79de700849c5 401 * type json的类型
TaylorGy 0:79de700849c5 402 * 返回值: 类型 (EdpPacket*)
TaylorGy 0:79de700849c5 403 * 非空 EDP协议包
TaylorGy 0:79de700849c5 404 * 为空 EDP协议包生成失败
TaylorGy 0:79de700849c5 405 */
TaylorGy 0:79de700849c5 406 EdpPacket* PacketSavedataJson(const char* dst_devid, cJSON* json_obj, int type);
TaylorGy 0:79de700849c5 407
TaylorGy 0:79de700849c5 408 /*
TaylorGy 0:79de700849c5 409 * 函数名: PacketSavedataInt
TaylorGy 0:79de700849c5 410 * 功能: 打包 设备到设备云的EDP协议包, 存储数据(json格式数据)
TaylorGy 0:79de700849c5 411 * 说明: 该函数适用于数据点为int类型的数据流
TaylorGy 0:79de700849c5 412 * 它把参数封装成EDP协议规定的cJSON对象,
TaylorGy 0:79de700849c5 413 * type类型决定使用哪种JSON格式,具体格式说明见文档《设备终端接入协议2-EDP.docx》
TaylorGy 0:79de700849c5 414 * 相关函数:UnPacketSavedataInt
TaylorGy 0:79de700849c5 415 * 参数: type 采用的JSON数据类型,可选类型为:kTypeFullJson,
TaylorGy 0:79de700849c5 416 * kTypeSimpleJsonWithoutTime, kTypeSimpleJsonWithTime
TaylorGy 0:79de700849c5 417 * dst_devid 目的设备ID
TaylorGy 0:79de700849c5 418 * ds_id 数据流ID
TaylorGy 0:79de700849c5 419 * value int型数据点
TaylorGy 0:79de700849c5 420 * at 如果设置为0,则采用系统当前时间,否则采用给定时间。
TaylorGy 0:79de700849c5 421 * 如果type选择为kTypeSimpleJsonWithoutTime,由于这种类型的JSON格式不带时间,
TaylorGy 0:79de700849c5 422 * 服务器端统一采用系统时间,此值将被忽略
TaylorGy 0:79de700849c5 423 * token 当type为kTypeFullJson时,将根据EDP协议封装token字段,
TaylorGy 0:79de700849c5 424 * 为其它类型时将被忽略。
TaylorGy 0:79de700849c5 425 * 返回值: 类型 (EdpPacket*)
TaylorGy 0:79de700849c5 426 * 非空 EDP协议包
TaylorGy 0:79de700849c5 427 * 为空 EDP协议包生成失败
TaylorGy 0:79de700849c5 428 */
TaylorGy 0:79de700849c5 429 EDPKIT_DLL EdpPacket* PacketSavedataInt(SaveDataType type, const char* dst_devid,
TaylorGy 0:79de700849c5 430 const char* ds_id, int value,
TaylorGy 0:79de700849c5 431 time_t at, const char* token);
TaylorGy 0:79de700849c5 432
TaylorGy 0:79de700849c5 433 /*
TaylorGy 0:79de700849c5 434 * 函数名: PacketSavedataDouble
TaylorGy 0:79de700849c5 435 * 功能: 打包 设备到设备云的EDP协议包, 存储数据(json格式数据)
TaylorGy 0:79de700849c5 436 * 说明: 该函数适用于数据点为double类型的数据流
TaylorGy 0:79de700849c5 437 * 它把参数封装成EDP协议规定的cJSON对象,
TaylorGy 0:79de700849c5 438 * type类型决定使用哪种JSON格式,具体格式说明见文档《设备终端接入协议2-EDP.docx》
TaylorGy 0:79de700849c5 439 * 相关函数:UnPacketSavedataDouble
TaylorGy 0:79de700849c5 440 * 参数: type 采用的JSON数据类型,可选类型为:kTypeFullJson,
TaylorGy 0:79de700849c5 441 * kTypeSimpleJsonWithoutTime, kTypeSimpleJsonWithTime
TaylorGy 0:79de700849c5 442 * dst_devid 目的设备ID
TaylorGy 0:79de700849c5 443 * ds_id 数据流ID
TaylorGy 0:79de700849c5 444 * value double型数据点
TaylorGy 0:79de700849c5 445 * at 如果设置为0,则采用系统当前时间,否则采用给定时间。
TaylorGy 0:79de700849c5 446 * 如果type选择为kTypeSimpleJsonWithoutTime,由于这种类型的JSON格式不带时间,
TaylorGy 0:79de700849c5 447 * 服务器端统一采用系统时间,此值将被忽略
TaylorGy 0:79de700849c5 448 * token 当type为kTypeFullJson时,将根据EDP协议封装token字段,
TaylorGy 0:79de700849c5 449 * 为其它类型时将被忽略。
TaylorGy 0:79de700849c5 450 * 返回值: 类型 (EdpPacket*)
TaylorGy 0:79de700849c5 451 * 非空 EDP协议包
TaylorGy 0:79de700849c5 452 * 为空 EDP协议包生成失败
TaylorGy 0:79de700849c5 453 */
TaylorGy 0:79de700849c5 454 EDPKIT_DLL EdpPacket* PacketSavedataDouble(SaveDataType type, const char* dst_devid,
TaylorGy 0:79de700849c5 455 const char* ds_id, double value,
TaylorGy 0:79de700849c5 456 time_t at, const char* token);
TaylorGy 0:79de700849c5 457
TaylorGy 0:79de700849c5 458 /*
TaylorGy 0:79de700849c5 459 * 函数名: PacketSavedataString
TaylorGy 0:79de700849c5 460 * 功能: 打包 设备到设备云的EDP协议包, 存储数据(json格式数据)
TaylorGy 0:79de700849c5 461 * 说明: 该函数适用于数据点为char*类型的数据流
TaylorGy 0:79de700849c5 462 * 它把参数封装成EDP协议规定的cJSON对象,
TaylorGy 0:79de700849c5 463 * type类型决定使用哪种JSON格式,具体格式说明见文档《设备终端接入协议2-EDP.docx》
TaylorGy 0:79de700849c5 464 * 相关函数:UnPacketSavedataString
TaylorGy 0:79de700849c5 465 * 参数: type 采用的JSON数据类型,可选类型为:kTypeFullJson,
TaylorGy 0:79de700849c5 466 * kTypeSimpleJsonWithoutTime, kTypeSimpleJsonWithTime
TaylorGy 0:79de700849c5 467 * dst_devid 目的设备ID
TaylorGy 0:79de700849c5 468 * ds_id 数据流ID
TaylorGy 0:79de700849c5 469 * value char*型数据点
TaylorGy 0:79de700849c5 470 * at 如果设置为0,则采用系统当前时间,否则采用给定时间。
TaylorGy 0:79de700849c5 471 * 如果type选择为kTypeSimpleJsonWithoutTime,由于这种类型的JSON格式不带时间,
TaylorGy 0:79de700849c5 472 * 服务器端统一采用系统时间,此值将被忽略
TaylorGy 0:79de700849c5 473 * token 当type为kTypeFullJson时,将根据EDP协议封装token字段,
TaylorGy 0:79de700849c5 474 * 为其它类型时将被忽略。
TaylorGy 0:79de700849c5 475 * 返回值: 类型 (EdpPacket*)
TaylorGy 0:79de700849c5 476 * 非空 EDP协议包
TaylorGy 0:79de700849c5 477 * 为空 EDP协议包生成失败
TaylorGy 0:79de700849c5 478 */
TaylorGy 0:79de700849c5 479 EDPKIT_DLL EdpPacket* PacketSavedataString(SaveDataType type, const char* dst_devid,
TaylorGy 0:79de700849c5 480 const char* ds_id, const char* value,
TaylorGy 0:79de700849c5 481 time_t at, const char* token);
TaylorGy 0:79de700849c5 482
TaylorGy 0:79de700849c5 483 /*
TaylorGy 0:79de700849c5 484 * 函数名: UnpackSavedataInt
TaylorGy 0:79de700849c5 485 * 功能: 解包 由设备云到设备的EDP协议包, 存储数据
TaylorGy 0:79de700849c5 486 * 说明: 接收设备云发来的数据,将其中的数据流ID及值解析出来。
TaylorGy 0:79de700849c5 487 *
TaylorGy 0:79de700849c5 488 * 相关函数:PacketSavedataInt
TaylorGy 0:79de700849c5 489 *
TaylorGy 0:79de700849c5 490 * 参数: type 采用的JSON数据类型,可选类型为:kTypeFullJson,
TaylorGy 0:79de700849c5 491 * kTypeSimpleJsonWithoutTime, kTypeSimpleJsonWithTime
TaylorGy 0:79de700849c5 492 * pkg EDP包, 必须是savedata包
TaylorGy 0:79de700849c5 493 * ds_id 获取数据流ID,使用完后必须释放
TaylorGy 0:79de700849c5 494 * value 数据流对应的值
TaylorGy 0:79de700849c5 495 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 496 * =0 解析成功
TaylorGy 0:79de700849c5 497 * <0 解析失败, -1 type类型不合法,其它值见本h文件的错误码
TaylorGy 0:79de700849c5 498 */
TaylorGy 0:79de700849c5 499 EDPKIT_DLL int32 UnpackSavedataInt(SaveDataType type, EdpPacket* pkg,
TaylorGy 0:79de700849c5 500 char** ds_id, int* value);
TaylorGy 0:79de700849c5 501
TaylorGy 0:79de700849c5 502 /*
TaylorGy 0:79de700849c5 503 * 函数名: UnpackSavedataDouble
TaylorGy 0:79de700849c5 504 * 功能: 解包 由设备云到设备的EDP协议包, 存储数据
TaylorGy 0:79de700849c5 505 * 说明: 接收设备云发来的数据,将其中的数据流ID及值解析出来。
TaylorGy 0:79de700849c5 506 *
TaylorGy 0:79de700849c5 507 * 相关函数:PacketSavedataDouble
TaylorGy 0:79de700849c5 508 *
TaylorGy 0:79de700849c5 509 * 参数: type 采用的JSON数据类型,可选类型为:kTypeFullJson,
TaylorGy 0:79de700849c5 510 * kTypeSimpleJsonWithoutTime, kTypeSimpleJsonWithTime
TaylorGy 0:79de700849c5 511 * pkg EDP包, 必须是savedata包
TaylorGy 0:79de700849c5 512 * ds_id 获取数据流ID,使用完后必须释放
TaylorGy 0:79de700849c5 513 * value 数据流对应的值
TaylorGy 0:79de700849c5 514 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 515 * =0 解析成功
TaylorGy 0:79de700849c5 516 * <0 解析失败, -1 type类型不合法,其它值见本h文件的错误码
TaylorGy 0:79de700849c5 517 */
TaylorGy 0:79de700849c5 518 EDPKIT_DLL int32 UnpackSavedataDouble(SaveDataType type, EdpPacket* pkg,
TaylorGy 0:79de700849c5 519 char** ds_id, double* value);
TaylorGy 0:79de700849c5 520
TaylorGy 0:79de700849c5 521 /*
TaylorGy 0:79de700849c5 522 * 函数名: UnpackSavedataString
TaylorGy 0:79de700849c5 523 * 功能: 解包 由设备云到设备的EDP协议包, 存储数据
TaylorGy 0:79de700849c5 524 * 说明: 接收设备云发来的数据,将其中的数据流ID及值解析出来。
TaylorGy 0:79de700849c5 525 *
TaylorGy 0:79de700849c5 526 * 相关函数:PacketSavedataString
TaylorGy 0:79de700849c5 527 *
TaylorGy 0:79de700849c5 528 * 参数: type 采用的JSON数据类型,可选类型为:kTypeFullJson,
TaylorGy 0:79de700849c5 529 * kTypeSimpleJsonWithoutTime, kTypeSimpleJsonWithTime
TaylorGy 0:79de700849c5 530 * pkg EDP包, 必须是savedata包
TaylorGy 0:79de700849c5 531 * ds_id 获取数据流ID,使用完后需要释放
TaylorGy 0:79de700849c5 532 * value 数据流对应的值,使用完后需要释放
TaylorGy 0:79de700849c5 533 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 534 * =0 解析成功
TaylorGy 0:79de700849c5 535 * <0 解析失败, -1 type类型不合法,其它值见本h文件的错误码
TaylorGy 0:79de700849c5 536 */
TaylorGy 0:79de700849c5 537 EDPKIT_DLL int32 UnpackSavedataString(SaveDataType type, EdpPacket* pkg,
TaylorGy 0:79de700849c5 538 char** ds_id, char** value);
TaylorGy 0:79de700849c5 539
TaylorGy 0:79de700849c5 540
TaylorGy 0:79de700849c5 541 /*
TaylorGy 0:79de700849c5 542 * 函数名: UnpackSavedataAck
TaylorGy 0:79de700849c5 543 * 功能: 解包 由设备云到设备的EDP协议包, 存贮(转发)消息的响应
TaylorGy 0:79de700849c5 544 * 说明: 当存贮(转发)消息带token时,平台会响应一个SAVE_ACK消息,
TaylorGy 0:79de700849c5 545 * 用作存储消息的确认。
TaylorGy 0:79de700849c5 546 * 相关函数: PacketSavedataDoubleWithToken PacketSavedataStringWithToken
TaylorGy 0:79de700849c5 547 * 参数: pkg EDP包, 必须是连接响应包
TaylorGy 0:79de700849c5 548 * json_ack 获取响应的json字符串,使用完后需要释放
TaylorGy 0:79de700849c5 549 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 550 * =0 心跳成功
TaylorGy 0:79de700849c5 551 * <0 解析失败, 具体失败原因见本h文件的错误码
TaylorGy 0:79de700849c5 552 */
TaylorGy 0:79de700849c5 553 EDPKIT_DLL int32 UnpackSavedataAck(EdpPacket* pkg, char** json_ack);
TaylorGy 0:79de700849c5 554
TaylorGy 0:79de700849c5 555 /*
TaylorGy 0:79de700849c5 556 * 函数名: PacketSavedataSimpleString
TaylorGy 0:79de700849c5 557 * 功能: 打包 设备到设备云的EDP协议包, 存储数据(以分号分隔的简单字符串形式)
TaylorGy 0:79de700849c5 558 * 说明: 返回的EDP包发送给设备云后, 需要删除这个包
TaylorGy 0:79de700849c5 559 * 相关函数:UnpackSavedataSimpleString
TaylorGy 0:79de700849c5 560 * 参数: dst_devid 目的设备ID
TaylorGy 0:79de700849c5 561 * input 以分号分隔的简单字符串形式,
TaylorGy 0:79de700849c5 562 * 详见《设备终端接入协议2-EDP.docx》
TaylorGy 0:79de700849c5 563 * 返回值: 类型 (EdpPacket*)
TaylorGy 0:79de700849c5 564 * 非空 EDP协议包
TaylorGy 0:79de700849c5 565 * 为空 EDP协议包生成失败
TaylorGy 0:79de700849c5 566 */
TaylorGy 0:79de700849c5 567 EDPKIT_DLL EdpPacket* PacketSavedataSimpleString(const char* dst_devid, const char* input);
TaylorGy 0:79de700849c5 568
TaylorGy 0:79de700849c5 569 /*
TaylorGy 0:79de700849c5 570 * 函数名: UnpackSavedataSimpleString
TaylorGy 0:79de700849c5 571 * 功能: 解包 由设备云到设备的EDP协议包, 存储数据
TaylorGy 0:79de700849c5 572 * 说明: 接收设备云发来的数据, 通过函数GetEdpPacket和EdpPacketType判断出是savedata后,
TaylorGy 0:79de700849c5 573 * 将整个响应EDP包作为参数, 由该函数进行解析,
TaylorGy 0:79de700849c5 574 * 获取源端发送来的以分号作为分隔符的字符串。
TaylorGy 0:79de700849c5 575 * 相关函数: PacketSavedataSimpleString
TaylorGy 0:79de700849c5 576 *
TaylorGy 0:79de700849c5 577 * 参数: pkg EDP包, 必须是savedata包
TaylorGy 0:79de700849c5 578 * output 存储发送来的字符串
TaylorGy 0:79de700849c5 579 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 580 * =0 解析成功
TaylorGy 0:79de700849c5 581 * <0 解析失败, 具体失败原因见本h文件的错误码
TaylorGy 0:79de700849c5 582 */
TaylorGy 0:79de700849c5 583 EDPKIT_DLL int32 UnpackSavedataSimpleString(EdpPacket* pkg, char** output);
TaylorGy 0:79de700849c5 584
TaylorGy 0:79de700849c5 585 /*
TaylorGy 0:79de700849c5 586 * 函数名: PacketSavedataBin
TaylorGy 0:79de700849c5 587 * 功能: 打包 设备到设备云的EDP协议包, 存储数据(bin格式数据)
TaylorGy 0:79de700849c5 588 * 说明: 返回的EDP包发送给设备云后, 需要删除这个包
TaylorGy 0:79de700849c5 589 * 相关函数:UnpackSavedata, UnpackSavedataBin
TaylorGy 0:79de700849c5 590 * 参数: dst_devid 目的设备ID
TaylorGy 0:79de700849c5 591 * desc_obj 数据描述 json格式
TaylorGy 0:79de700849c5 592 * bin_data 二进制数据
TaylorGy 0:79de700849c5 593 * bin_len 二进制数据长度
TaylorGy 0:79de700849c5 594 * 返回值: 类型 (EdpPacket*)
TaylorGy 0:79de700849c5 595 * 非空 EDP协议包
TaylorGy 0:79de700849c5 596 * 为空 EDP协议包生成失败
TaylorGy 0:79de700849c5 597 */
TaylorGy 0:79de700849c5 598 EdpPacket* PacketSavedataBin(const char* dst_devid,
TaylorGy 0:79de700849c5 599 cJSON* desc_obj, const uint8* bin_data, uint32 bin_len);
TaylorGy 0:79de700849c5 600 /*
TaylorGy 0:79de700849c5 601 * 函数名: PacketSavedataBinStr
TaylorGy 0:79de700849c5 602 * 功能: 打包 设备到设备云的EDP协议包, 存储数据(bin格式数据)
TaylorGy 0:79de700849c5 603 * 说明: 返回的EDP包发送给设备云后, 需要删除这个包
TaylorGy 0:79de700849c5 604 * 相关函数:UnpackSavedata, UnpackSavedataBin
TaylorGy 0:79de700849c5 605 * 参数: dst_devid 目的设备ID
TaylorGy 0:79de700849c5 606 * desc_obj 数据描述 字符串格式
TaylorGy 0:79de700849c5 607 * bin_data 二进制数据
TaylorGy 0:79de700849c5 608 * bin_len 二进制数据长度
TaylorGy 0:79de700849c5 609 * 返回值: 类型 (EdpPacket*)
TaylorGy 0:79de700849c5 610 * 非空 EDP协议包
TaylorGy 0:79de700849c5 611 * 为空 EDP协议包生成失败
TaylorGy 0:79de700849c5 612 */
TaylorGy 0:79de700849c5 613 EDPKIT_DLL EdpPacket* PacketSavedataBinStr(const char* dst_devid,
TaylorGy 0:79de700849c5 614 const char* desc_str, const uint8* bin_data, uint32 bin_len);
TaylorGy 0:79de700849c5 615
TaylorGy 0:79de700849c5 616 /*
TaylorGy 0:79de700849c5 617 * 函数名: UnpackSavedata
TaylorGy 0:79de700849c5 618 * 功能: 解包 由设备云到设备的EDP协议包, 存储数据
TaylorGy 0:79de700849c5 619 * 说明: 接收设备云发来的数据, 通过函数GetEdpPacket和EdpPacketType判断出是savedata后,
TaylorGy 0:79de700849c5 620 * 将整个响应EDP包作为参数, 由该函数进行解析
TaylorGy 0:79de700849c5 621 * 然后再根据json和bin的标识(jb_flag), 调用相应的解析函数
TaylorGy 0:79de700849c5 622 * 返回的源设备ID(src_devid)需要客户端释放
TaylorGy 0:79de700849c5 623 * 相关函数:PacketSavedataJson, PacketSavedataBin, GetEdpPacket,
TaylorGy 0:79de700849c5 624 * UnpackSavedataJson, UnpackSavedataBin
TaylorGy 0:79de700849c5 625 * 参数: pkg EDP包, 必须是savedata包
TaylorGy 0:79de700849c5 626 * src_devid 源设备ID
TaylorGy 0:79de700849c5 627 * jb_flag json or bin数据, 1: json, 2: 二进制
TaylorGy 0:79de700849c5 628 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 629 * =0 解析成功
TaylorGy 0:79de700849c5 630 * <0 解析失败, 具体失败原因见本h文件的错误码
TaylorGy 0:79de700849c5 631 */
TaylorGy 0:79de700849c5 632 EDPKIT_DLL int32 UnpackSavedata(EdpPacket* pkg, char** src_devid, uint8* jb_flag);
TaylorGy 0:79de700849c5 633
TaylorGy 0:79de700849c5 634 /*
TaylorGy 0:79de700849c5 635 * 函数名: UnpackSavedataJson
TaylorGy 0:79de700849c5 636 * 功能: 解包 由设备云到设备的EDP协议包, 存储数据(json格式数据)
TaylorGy 0:79de700849c5 637 * 说明: 返回的json数据(json_obj)需要客户端释放
TaylorGy 0:79de700849c5 638 * 相关函数:PacketSavedataJson, GetEdpPacket, EdpPacketType, UnpackSavedata
TaylorGy 0:79de700849c5 639 * 参数: pkg EDP包, 必须是savedata包的json数据包
TaylorGy 0:79de700849c5 640 * json_obj json数据
TaylorGy 0:79de700849c5 641 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 642 * =0 解析成功
TaylorGy 0:79de700849c5 643 * <0 解析失败, 具体失败原因见本h文件的错误码
TaylorGy 0:79de700849c5 644 */
TaylorGy 0:79de700849c5 645 int32 UnpackSavedataJson(EdpPacket* pkg, cJSON** json_obj);
TaylorGy 0:79de700849c5 646
TaylorGy 0:79de700849c5 647 /*
TaylorGy 0:79de700849c5 648 * 函数名: UnpackSavedataBin
TaylorGy 0:79de700849c5 649 * 功能: 解包 由设备云到设备的EDP协议包, 存储数据(bin格式数据)
TaylorGy 0:79de700849c5 650 * 说明: 返回的数据描述(desc_obj)和bin数据(bin_data)需要客户端释放
TaylorGy 0:79de700849c5 651 * 相关函数:PacketSavedataBin, GetEdpPacket, EdpPacketType, UnpackSavedata
TaylorGy 0:79de700849c5 652 * 参数: pkg EDP包, 必须是savedata包的bin数据包
TaylorGy 0:79de700849c5 653 * desc_obj 数据描述 json格式
TaylorGy 0:79de700849c5 654 * bin_data 二进制数据
TaylorGy 0:79de700849c5 655 * bin_len 二进制数据长度
TaylorGy 0:79de700849c5 656 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 657 * =0 解析成功
TaylorGy 0:79de700849c5 658 * <0 解析失败, 具体失败原因见本h文件的错误码
TaylorGy 0:79de700849c5 659 */
TaylorGy 0:79de700849c5 660 int32 UnpackSavedataBin(EdpPacket* pkg, cJSON** desc_obj,
TaylorGy 0:79de700849c5 661 uint8** bin_data, uint32* bin_len);
TaylorGy 0:79de700849c5 662 /*
TaylorGy 0:79de700849c5 663 * 函数名: UnpackSavedataBinStr
TaylorGy 0:79de700849c5 664 * 功能: 解包 由设备云到设备的EDP协议包, 存储数据(bin格式数据)
TaylorGy 0:79de700849c5 665 * 说明: 返回的数据描述(desc_obj)和bin数据(bin_data)需要客户端释放
TaylorGy 0:79de700849c5 666 * 相关函数:PacketSavedataBin, GetEdpPacket, EdpPacketType, UnpackSavedata
TaylorGy 0:79de700849c5 667 * 参数: pkg EDP包, 必须是savedata包的bin数据包
TaylorGy 0:79de700849c5 668 * desc_obj 数据描述 string格式
TaylorGy 0:79de700849c5 669 * bin_data 二进制数据
TaylorGy 0:79de700849c5 670 * bin_len 二进制数据长度
TaylorGy 0:79de700849c5 671 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 672 * =0 解析成功
TaylorGy 0:79de700849c5 673 * <0 解析失败, 具体失败原因见本h文件的错误码
TaylorGy 0:79de700849c5 674 */
TaylorGy 0:79de700849c5 675 EDPKIT_DLL int32 UnpackSavedataBinStr(EdpPacket* pkg, char** desc_str,
TaylorGy 0:79de700849c5 676 uint8** bin_data, uint32* bin_len);
TaylorGy 0:79de700849c5 677 /*
TaylorGy 0:79de700849c5 678 * 函数名: PacketCmdResp
TaylorGy 0:79de700849c5 679 * 功能: 向接入机发送命令响应
TaylorGy 0:79de700849c5 680 * 说明: 返回的EDP包发送给设备云后, 需要客户程序删除该包
TaylorGy 0:79de700849c5 681 *
TaylorGy 0:79de700849c5 682 * 相关函数:UnpackCmdReq
TaylorGy 0:79de700849c5 683 * 参数: cmdid 命令id
TaylorGy 0:79de700849c5 684 * cmdid_len 命令id长度
TaylorGy 0:79de700849c5 685 * resp 响应的消息
TaylorGy 0:79de700849c5 686 * resp_len 响应消息长度
TaylorGy 0:79de700849c5 687 * 返回值: 类型 (EdpPacket*)
TaylorGy 0:79de700849c5 688 * 非空 EDP协议包
TaylorGy 0:79de700849c5 689 * 为空 EDP协议包生成失败
TaylorGy 0:79de700849c5 690 */
TaylorGy 0:79de700849c5 691 EDPKIT_DLL EdpPacket* PacketCmdResp(const char* cmdid, uint16 cmdid_len,
TaylorGy 0:79de700849c5 692 const char* resp, uint32 resp_len);
TaylorGy 0:79de700849c5 693
TaylorGy 0:79de700849c5 694 /*
TaylorGy 0:79de700849c5 695 * 函数名: UnpackCmdReq
TaylorGy 0:79de700849c5 696 * 功能: 解包 由设备云到设备的EDP协议包, 命令请求消息
TaylorGy 0:79de700849c5 697 * 说明: 接收设备云发来的数据, 解析命令请求消息包
TaylorGy 0:79de700849c5 698 * 获取的cmdid以及req需要在使用后释放。
TaylorGy 0:79de700849c5 699 * 相关函数:PacketCmdResp
TaylorGy 0:79de700849c5 700 * 参数: pkg EDP包
TaylorGy 0:79de700849c5 701 * cmdid 获取命令id
TaylorGy 0:79de700849c5 702 * cmdid_len cmdid的长度
TaylorGy 0:79de700849c5 703 * req 用户命令的起始位置
TaylorGy 0:79de700849c5 704 * req_len 用户命令的长度
TaylorGy 0:79de700849c5 705 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 706 * =0 解析成功
TaylorGy 0:79de700849c5 707 * <0 解析失败, 具体失败原因见本h文件的错误码
TaylorGy 0:79de700849c5 708 */
TaylorGy 0:79de700849c5 709 EDPKIT_DLL int32 UnpackCmdReq(EdpPacket* pkg, char** cmdid, uint16* cmdid_len,
TaylorGy 0:79de700849c5 710 char** req, uint32* req_len);
TaylorGy 0:79de700849c5 711
TaylorGy 0:79de700849c5 712 /*
TaylorGy 0:79de700849c5 713 * 函数名: PacketPing
TaylorGy 0:79de700849c5 714 * 功能: 打包 由设备到设备云的EDP协议包, 心跳
TaylorGy 0:79de700849c5 715 * 说明: 返回的EDP包发送给设备云后, 需要客户程序删除该包
TaylorGy 0:79de700849c5 716 * 设备云会回复心跳响应给设备
TaylorGy 0:79de700849c5 717 * 相关函数:UnpackPingResp
TaylorGy 0:79de700849c5 718 * 参数: 无
TaylorGy 0:79de700849c5 719 * 返回值: 类型 (EdpPacket*)
TaylorGy 0:79de700849c5 720 * 非空 EDP协议包
TaylorGy 0:79de700849c5 721 * 为空 EDP协议包生成失败
TaylorGy 0:79de700849c5 722 */
TaylorGy 0:79de700849c5 723 EDPKIT_DLL EdpPacket* PacketPing(void);
TaylorGy 0:79de700849c5 724
TaylorGy 0:79de700849c5 725 /*
TaylorGy 0:79de700849c5 726 * 函数名: UnpackPingResp
TaylorGy 0:79de700849c5 727 * 功能: 解包 由设备云到设备的EDP协议包, 心跳响应
TaylorGy 0:79de700849c5 728 * 说明: 接收设备云发来的数据, 通过函数GetEdpPacket和EdpPacketType判断出是连接响应后,
TaylorGy 0:79de700849c5 729 * 将整个响应EDP包作为参数, 由该函数进行解析
TaylorGy 0:79de700849c5 730 * 相关函数:PacketPing, GetEdpPacket, EdpPacketType
TaylorGy 0:79de700849c5 731 * 参数: pkg EDP包, 必须是连接响应包
TaylorGy 0:79de700849c5 732 * 返回值: 类型 (int32)
TaylorGy 0:79de700849c5 733 * =0 心跳成功
TaylorGy 0:79de700849c5 734 * >0 心跳失败, 具体失败原因见<OneNet接入方案与接口.docx>
TaylorGy 0:79de700849c5 735 * <0 解析失败, 具体失败原因见本h文件的错误码
TaylorGy 0:79de700849c5 736 */
TaylorGy 0:79de700849c5 737 EDPKIT_DLL int32 UnpackPingResp(EdpPacket* pkg);
TaylorGy 0:79de700849c5 738
TaylorGy 0:79de700849c5 739 #ifdef __cplusplus
TaylorGy 0:79de700849c5 740 }
TaylorGy 0:79de700849c5 741 #endif
TaylorGy 0:79de700849c5 742
TaylorGy 0:79de700849c5 743 #endif /* __EDP_KIT_H__ */