EDP KIT from OneNet
Embed:
(wiki syntax)
Show/hide line numbers
EdpKit.h
00001 #ifndef __EDP_KIT_H__ 00002 #define __EDP_KIT_H__ 00003 00004 #ifdef EDPKIT_EXPORTS 00005 #define EDPKIT_DLL __declspec(dllexport) 00006 #else 00007 #define EDPKIT_DLL 00008 #endif 00009 00010 #include "Common.h" 00011 #include "cJSON.h" 00012 #include "time.h" 00013 /* 00014 * history 00015 * 2015-06-01 v1.0.1 wululu fix bug: malloc for string, MUST memset to 0 00016 * 2015-07-10 v1.1.0 wusongwei add UnpackCmdReq() and PacketCmdResp() 00017 * 2015-07-13 v1.1.1 wululu 增加封装json的接口, windows版本dll 00018 * 2015-07-13 v1.1.2 wululu 支持double和string类型的打包函数和解包函数 00019 * 2015-07-15 v1.1.3 wusongwei 添加SAVEACK响应 00020 * 2015-07-20 v1.1.4 wusongwei 添加/修改SAVEDATA消息的打包/解包函数 00021 */ 00022 00023 #ifdef __cplusplus 00024 extern "C" { 00025 #endif 00026 00027 /*---------------------------------------------------------------------------*/ 00028 #define MOSQ_MSB(A) (uint8)((A & 0xFF00) >> 8) 00029 #define MOSQ_LSB(A) (uint8)(A & 0x00FF) 00030 #define BUFFER_SIZE (0x100) 00031 #define PROTOCOL_NAME "EDP" 00032 #define PROTOCOL_VERSION 1 00033 /*----------------------------错误码-----------------------------------------*/ 00034 #define ERR_UNPACK_CONNRESP_REMAIN -1000 00035 #define ERR_UNPACK_CONNRESP_FLAG -1001 00036 #define ERR_UNPACK_CONNRESP_RTN -1002 00037 #define ERR_UNPACK_PUSHD_REMAIN -1010 00038 #define ERR_UNPACK_PUSHD_DEVID -1011 00039 #define ERR_UNPACK_PUSHD_DATA -1012 00040 #define ERR_UNPACK_SAVED_REMAIN -1020 00041 #define ERR_UNPACK_SAVED_TANSFLAG -1021 00042 #define ERR_UNPACK_SAVED_DEVID -1022 00043 #define ERR_UNPACK_SAVED_DATAFLAG -1023 00044 #define ERR_UNPACK_SAVED_JSON -1024 00045 #define ERR_UNPACK_SAVED_PARSEJSON -1025 00046 #define ERR_UNPACK_SAVED_BIN_DESC -1026 00047 #define ERR_UNPACK_SAVED_PARSEDESC -1027 00048 #define ERR_UNPACK_SAVED_BINLEN -1028 00049 #define ERR_UNPACK_SAVED_BINDATA -1029 00050 #define ERR_UNPACK_PING_REMAIN -1030 00051 #define ERR_UNPACK_CMDREQ -1031 00052 #define ERR_UNPACK_ENCRYPT_RESP -1032 00053 #define ERR_UNPACK_SAVEDATA_ACK -1033 00054 00055 /*----------------------------消息类型---------------------------------------*/ 00056 /* 连接请求 */ 00057 #define CONNREQ 0x10 00058 /* 连接响应 */ 00059 #define CONNRESP 0x20 00060 /* 转发(透传)数据 */ 00061 #define PUSHDATA 0x30 00062 /* 存储(转发)数据 */ 00063 #define SAVEDATA 0x80 00064 /* 存储确认 */ 00065 #define SAVEACK 0x90 00066 /* 命令请求 */ 00067 #define CMDREQ 0xA0 00068 /* 命令响应 */ 00069 #define CMDRESP 0xB0 00070 /* 心跳请求 */ 00071 #define PINGREQ 0xC0 00072 /* 心跳响应 */ 00073 #define PINGRESP 0xD0 00074 /* 加密请求 */ 00075 #define ENCRYPTREQ 0xE0 00076 /* 加密响应 */ 00077 #define ENCRYPTRESP 0xF0 00078 00079 #ifndef NULL 00080 #define NULL (void*)0 00081 #endif 00082 00083 /* SAVEDATA消息支持的格式类型 */ 00084 typedef enum { 00085 kTypeFullJson = 0x01, 00086 kTypeBin = 0x02, 00087 kTypeSimpleJsonWithoutTime = 0x03, 00088 kTypeSimpleJsonWithTime = 0x04, 00089 kTypeString = 0x05 00090 }SaveDataType; 00091 00092 /*-------------发送buffer, 接收buffer, EDP包结构定义-------------------------*/ 00093 EDPKIT_DLL 00094 typedef struct Buffer 00095 { 00096 uint8* _data; /* buffer数据 */ 00097 uint32 _write_pos; /* buffer写入位置 */ 00098 uint32 _read_pos; /* buffer读取位置 */ 00099 uint32 _capacity; /* buffer容量 */ 00100 }Buffer, SendBuffer, RecvBuffer, EdpPacket; 00101 /*-----------------------------操作Buffer的接口------------------------------*/ 00102 /* 00103 * 函数名: NewBuffer 00104 * 功能: 生成Buffer 00105 * 说明: 一般情况下, NewBuffer和DeleteBuffer应该成对出现 00106 * 参数: 无 00107 * 返回值: 类型 (Buffer*) 00108 * 返回值非空 生成Buffer成功, 返回这个Buffer的指针 00109 * 返回值为空 生成Buffer失败, 内存不够 00110 */ 00111 EDPKIT_DLL Buffer* NewBuffer(); 00112 /* 00113 * 函数名: DeleteBuffer 00114 * 功能: 销毁Buffer 00115 * 说明: 一般情况下, NewBuffer和DeleteBuffer应该成对出现 00116 * 参数: buf 一个Buffer的指针的指针 00117 * 返回值: 无 00118 */ 00119 EDPKIT_DLL void DeleteBuffer(Buffer** buf); 00120 /* 00121 * 函数名: CheckCapacity 00122 * 功能: 检查Buffer是否能够写入长度为len的字节流, 00123 * 如果Buffer的容量不够, 自动成倍扩展Buffer的容量(不影响Buffer数据) 00124 * 参数: buf 需要写入Buffer的指针 00125 * len 期望写入的长度 00126 * 返回值: 类型 (int32) 00127 * <0 失败, 内存不够 00128 * =0 成功 00129 */ 00130 EDPKIT_DLL int32 CheckCapacity(Buffer* buf, uint32 len); 00131 00132 /*------------------------读取EDP包数据的接口-------------------------------*/ 00133 /* 00134 * 函数名: ReadByte 00135 * 功能: 按EDP协议, 从Buffer(包)中读取一个字节数据 00136 * 参数: pkg EDP包 00137 * val 数据(一个字节) 00138 * 返回值: 类型 (int32) 00139 * <0 失败, pkg中无数据 00140 * =0 成功 00141 */ 00142 EDPKIT_DLL int32 ReadByte(EdpPacket* pkg, uint8* val); 00143 /* 00144 * 函数名: ReadBytes 00145 * 功能: 按EDP协议, 从Buffer(包)中读取count个字节数据 00146 * 说明: val是malloc出来的, 需要客户端自己free 00147 * 参数: pkg EDP包 00148 * val 数据(count个字节) 00149 * count 字节数 00150 * 返回值: 类型 (int32) 00151 * <0 失败, pkg中无数据 00152 * =0 成功 00153 */ 00154 EDPKIT_DLL int32 ReadBytes(EdpPacket* pkg, uint8** val, uint32 count); 00155 /* 00156 * 函数名: ReadUint16 00157 * 功能: 按EDP协议, 从Buffer(包)中读取uint16值 00158 * 参数: pkg EDP包 00159 * val uint16值 00160 * 返回值: 类型 (int32) 00161 * <0 失败, pkg中无数据 00162 * =0 成功 00163 */ 00164 EDPKIT_DLL int32 ReadUint16(EdpPacket* pkg, uint16* val); 00165 /* 00166 * 函数名: ReadUint32 00167 * 功能: 按EDP协议, 从Buffer(包)中读取uint32值 00168 * 参数: pkg EDP包 00169 * val uint32值 00170 * 返回值: 类型 (int32) 00171 * <0 失败, pkg中无数据 00172 * =0 成功 00173 */ 00174 EDPKIT_DLL int32 ReadUint32(EdpPacket* pkg, uint32* val); 00175 /* 00176 * 函数名: ReadStr 00177 * 功能: 按EDP协议, 从Buffer(包)中读取字符串, 以\0结尾 00178 * 参数: pkg EDP包 00179 * val 字符串 00180 * 说明: val是malloc出来的, 需要客户端自己free 00181 * 返回值: 类型 (int32) 00182 * <0 失败, pkg中无数据 00183 * =0 成功 00184 */ 00185 EDPKIT_DLL int32 ReadStr(EdpPacket* pkg, char** val); 00186 /* 00187 * 函数名: ReadRemainlen 00188 * 功能: 按EDP协议, 从Buffer(包)中remainlen 00189 * 说明: remainlen是EDP协议中的概念, 是一个EDP包身的长度 00190 * 参数: pkg EDP包 00191 * len_val remainlen 00192 * 返回值: 类型 (int32) 00193 * <0 失败, pkg中无数据 00194 * =0 成功 00195 */ 00196 EDPKIT_DLL int32 ReadRemainlen(EdpPacket* pkg, uint32* len_val); 00197 00198 /*------------------------数据写入EDP包的接口-------------------------------*/ 00199 /* 00200 * 说明: 目前不支持一个包即在写入又在读取, 因此, 只有对于_read_pos为0的包才能被写入 00201 */ 00202 /* 00203 * 函数名: WriteByte 00204 * 功能: 按EDP协议, 将一个字节数据写入Buffer(包)中 00205 * 参数: pkg EDP包 00206 * byte 数据(一个字节) 00207 * 返回值: 类型 (int32) 00208 * <0 失败, pkg中无数据 00209 * =0 成功 00210 */ 00211 EDPKIT_DLL int32 WriteByte(Buffer* buf, uint8 byte); 00212 /* 00213 * 函数名: WriteBytes 00214 * 功能: 按EDP协议, 将count个字节数据写入Buffer(包)中 00215 * 参数: pkg EDP包 00216 * bytes 数据 00217 * count 字节数 00218 * 返回值: 类型 (int32) 00219 * <0 失败, pkg中无数据 00220 * =0 成功 00221 */ 00222 EDPKIT_DLL int32 WriteBytes(Buffer* buf, const void* bytes, uint32 count); 00223 /* 00224 * 函数名: WriteUint16 00225 * 功能: 按EDP协议, 将uint16写入Buffer(包)中 00226 * 参数: pkg EDP包 00227 * val uint16数据 00228 * 返回值: 类型 (int32) 00229 * <0 失败, pkg中无数据 00230 * =0 成功 00231 */ 00232 EDPKIT_DLL int32 WriteUint16(Buffer* buf, uint16 val); 00233 /* 00234 * 函数名: WriteUint32 00235 * 功能: 按EDP协议, 将uint32写入Buffer(包)中 00236 * 参数: pkg EDP包 00237 * val uint32数据 00238 * 返回值: 类型 (int32) 00239 * <0 失败, pkg中无数据 00240 * =0 成功 00241 */ 00242 EDPKIT_DLL int32 WriteUint32(Buffer* buf, uint32 val); 00243 /* 00244 * 函数名: WriteStr 00245 * 功能: 按EDP协议, 将字符串写入Buffer(包)中 00246 * 参数: pkg EDP包 00247 * val 字符串 00248 * 返回值: 类型 (int32) 00249 * <0 失败, pkg中无数据 00250 * =0 成功 00251 */ 00252 EDPKIT_DLL int32 WriteStr(Buffer* buf, const char *str); 00253 /* 00254 * 函数名: WriteRemainlen 00255 * 功能: 按EDP协议, 将remainlen写入Buffer(包)中 00256 * 说明: remainlen是EDP协议中的概念, 是一个EDP包身的长度 00257 * 参数: pkg EDP包 00258 * len_val remainlen 00259 * 返回值: 类型 (int32) 00260 * <0 失败, pkg中无数据 00261 * =0 成功 00262 */ 00263 EDPKIT_DLL int32 WriteRemainlen(Buffer* buf, uint32 len_val); 00264 /* 00265 * 函数名: IsPkgComplete 00266 * 功能: 判断接收到的Buffer, 是否为一个完整的EDP包 00267 * 参数: buf 接收到的Buffer(二进制流) 00268 * 返回值: 类型 (int32) 00269 * =0 数据还未收完, 需要继续接收 00270 * >0 成功 00271 * <0 数据错误, 不符合EDP协议 00272 */ 00273 EDPKIT_DLL int32 IsPkgComplete(RecvBuffer* buf); 00274 00275 /*-----------------------------客户端操作的接口------------------------------*/ 00276 /* 00277 * 函数名: GetEdpPacket 00278 * 功能: 将接收到的二进制流, 分解成一个一个的EDP包 00279 * 说明: 返回的EDP包使用后, 需要删除 00280 * 相关函数:EdpPacketType, Unpack***类函数 00281 * 参数: buf 接收缓存 00282 * 返回值: 类型 (EdpPacket*) 00283 * 非空 EDP协议包 00284 * 为空 无完整的EDP协议包 00285 */ 00286 EDPKIT_DLL EdpPacket* GetEdpPacket(RecvBuffer* buf); 00287 00288 /* 00289 * 函数名: EdpPacketType 00290 * 功能: 获取一个EDP包的消息类型, 客户程序根据消息类型做不同的处理 00291 * 相关函数:Unpack***类函数 00292 * 参数: pkg EDP协议包 00293 * 返回值: 类型 (uint8) 00294 * 值 消息类型(详细参见本h的消息类型定义) 00295 */ 00296 /* 例子: 00297 * ... 00298 * int8 mtype = EdpPacketType(pkg); 00299 * switch(mtype) 00300 * { 00301 * case CONNRESP: 00302 * UnpackConnectResp(pkg); 00303 * break; 00304 * case PUSHDATA: 00305 * UnpackPushdata(pkg, src_devid, data, data_len); 00306 * break; 00307 * case SAVEDATA: 00308 * UnpackSavedata(pkg, src_devid, flag, data); 00309 * break; 00310 * case PINGRESP: 00311 * UnpackPingResp(pkg); 00312 * break; 00313 * ... 00314 * } 00315 */ 00316 EDPKIT_DLL uint8 EdpPacketType(EdpPacket* pkg); 00317 00318 /* 00319 * 函数名: PacketConnect1 00320 * 功能: 打包 由设备到设备云的EDP协议包, 连接设备云的请求(登录认证方式1) 00321 * 说明: 返回的EDP包发送给设备云后, 需要客户程序删除该包 00322 * 设备云会回复连接响应给设备 00323 * 相关函数:UnpackConnectResp 00324 * 参数: devid 设备ID, 申请设备时平台返回的ID 00325 * auth_key 鉴权信息(api-key), 在平台申请的可以操作该设备的api-key字符串 00326 * 返回值: 类型 (EdpPacket*) 00327 * 非空 EDP协议包 00328 * 为空 EDP协议包生成失败 00329 */ 00330 EDPKIT_DLL EdpPacket* PacketConnect1(const char* devid, const char* auth_key); 00331 00332 /* 00333 * 函数名: PacketConnect2 00334 * 功能: 打包 由设备到设备云的EDP协议包, 连接设备云的请求(登录认证方式2) 00335 * 说明: 返回的EDP包发送给设备云后, 需要客户程序删除该包 00336 * 设备云会回复连接响应给设备 00337 * 相关函数:UnpackConnectResp 00338 * 参数: userid 用户ID, 在平台注册账号时平台返回的用户ID 00339 * auth_info 鉴权信息, 在平台申请设备时填写设备的auth_info属性 00340 * (json对象字符串), 该属性需要具备唯一性 00341 * 返回值: 类型 (EdpPacket*) 00342 * 非空 EDP协议包 00343 * 为空 EDP协议包生成失败 00344 */ 00345 EDPKIT_DLL EdpPacket* PacketConnect2(const char* userid, const char* auth_info); 00346 00347 /* 00348 * 函数名: UnpackConnectResp 00349 * 功能: 解包 由设备云到设备的EDP协议包, 连接响应 00350 * 说明: 接收设备云发来的数据, 通过函数GetEdpPacket和EdpPacketType判断出是连接响应后, 00351 * 将整个响应EDP包作为参数, 由该函数进行解析 00352 * 相关函数:PacketConnect1, PacketConnect2, GetEdpPacket, EdpPacketType 00353 * 参数: pkg EDP包, 必须是连接响应包 00354 * 返回值: 类型 (int32) 00355 * =0 连接成功 00356 * >0 连接失败, 具体失败原因见<OneNet接入方案与接口.docx> 00357 * <0 解析失败, 具体失败原因见本h文件的错误码 00358 */ 00359 EDPKIT_DLL int32 UnpackConnectResp(EdpPacket* pkg); 00360 00361 /* 00362 * 函数名: PacketPushdata 00363 * 功能: 打包 设备到设备云的EDP协议包, 设备与设备之间转发数据 00364 * 说明: 返回的EDP包发送给设备云后, 需要删除这个包 00365 * 相关函数:UnpackPushdata 00366 * 参数: dst_devid 目的设备ID 00367 * data 数据 00368 * data_len 数据长度 00369 * 返回值: 类型 (EdpPacket*) 00370 * 非空 EDP协议包 00371 * 为空 EDP协议包生成失败 00372 */ 00373 EDPKIT_DLL EdpPacket* PacketPushdata(const char* dst_devid, 00374 const char* data, uint32 data_len); 00375 00376 /* 00377 * 函数名: UnpackPushdata 00378 * 功能: 解包 由设备云到设备的EDP协议包, 设备与设备之间转发数据 00379 * 说明: 接收设备云发来的数据, 通过函数GetEdpPacket和EdpPacketType判断出是pushdata后, 00380 * 将整个响应EDP包作为参数, 由该函数进行解析 00381 * 返回的源设备ID(src_devid)和数据(data)都需要客户端释放 00382 * 相关函数:PacketPushdata, GetEdpPacket, EdpPacketType 00383 * 参数: pkg EDP包, 必须是pushdata包 00384 * src_devid 源设备ID 00385 * data 数据 00386 * data_len 数据长度 00387 * 返回值: 类型 (int32) 00388 * =0 解析成功 00389 * <0 解析失败, 具体失败原因见本h文件的错误码 00390 */ 00391 EDPKIT_DLL int32 UnpackPushdata(EdpPacket* pkg, char** src_devid, 00392 char** data, uint32* data_len); 00393 00394 /* 00395 * 函数名: PacketSavedataJson 00396 * 功能: 打包 设备到设备云的EDP协议包, 存储数据(json格式数据) 00397 * 说明: 返回的EDP包发送给设备云后, 需要删除这个包 00398 * 相关函数:UnpackSavedata, UnpackSavedataJson 00399 * 参数: dst_devid 目的设备ID 00400 * json_obj json数据 00401 * type json的类型 00402 * 返回值: 类型 (EdpPacket*) 00403 * 非空 EDP协议包 00404 * 为空 EDP协议包生成失败 00405 */ 00406 EdpPacket* PacketSavedataJson(const char* dst_devid, cJSON* json_obj, int type); 00407 00408 /* 00409 * 函数名: PacketSavedataInt 00410 * 功能: 打包 设备到设备云的EDP协议包, 存储数据(json格式数据) 00411 * 说明: 该函数适用于数据点为int类型的数据流 00412 * 它把参数封装成EDP协议规定的cJSON对象, 00413 * type类型决定使用哪种JSON格式,具体格式说明见文档《设备终端接入协议2-EDP.docx》 00414 * 相关函数:UnPacketSavedataInt 00415 * 参数: type 采用的JSON数据类型,可选类型为:kTypeFullJson, 00416 * kTypeSimpleJsonWithoutTime, kTypeSimpleJsonWithTime 00417 * dst_devid 目的设备ID 00418 * ds_id 数据流ID 00419 * value int型数据点 00420 * at 如果设置为0,则采用系统当前时间,否则采用给定时间。 00421 * 如果type选择为kTypeSimpleJsonWithoutTime,由于这种类型的JSON格式不带时间, 00422 * 服务器端统一采用系统时间,此值将被忽略 00423 * token 当type为kTypeFullJson时,将根据EDP协议封装token字段, 00424 * 为其它类型时将被忽略。 00425 * 返回值: 类型 (EdpPacket*) 00426 * 非空 EDP协议包 00427 * 为空 EDP协议包生成失败 00428 */ 00429 EDPKIT_DLL EdpPacket* PacketSavedataInt(SaveDataType type, const char* dst_devid, 00430 const char* ds_id, int value, 00431 time_t at, const char* token); 00432 00433 /* 00434 * 函数名: PacketSavedataDouble 00435 * 功能: 打包 设备到设备云的EDP协议包, 存储数据(json格式数据) 00436 * 说明: 该函数适用于数据点为double类型的数据流 00437 * 它把参数封装成EDP协议规定的cJSON对象, 00438 * type类型决定使用哪种JSON格式,具体格式说明见文档《设备终端接入协议2-EDP.docx》 00439 * 相关函数:UnPacketSavedataDouble 00440 * 参数: type 采用的JSON数据类型,可选类型为:kTypeFullJson, 00441 * kTypeSimpleJsonWithoutTime, kTypeSimpleJsonWithTime 00442 * dst_devid 目的设备ID 00443 * ds_id 数据流ID 00444 * value double型数据点 00445 * at 如果设置为0,则采用系统当前时间,否则采用给定时间。 00446 * 如果type选择为kTypeSimpleJsonWithoutTime,由于这种类型的JSON格式不带时间, 00447 * 服务器端统一采用系统时间,此值将被忽略 00448 * token 当type为kTypeFullJson时,将根据EDP协议封装token字段, 00449 * 为其它类型时将被忽略。 00450 * 返回值: 类型 (EdpPacket*) 00451 * 非空 EDP协议包 00452 * 为空 EDP协议包生成失败 00453 */ 00454 EDPKIT_DLL EdpPacket* PacketSavedataDouble(SaveDataType type, const char* dst_devid, 00455 const char* ds_id, double value, 00456 time_t at, const char* token); 00457 00458 /* 00459 * 函数名: PacketSavedataString 00460 * 功能: 打包 设备到设备云的EDP协议包, 存储数据(json格式数据) 00461 * 说明: 该函数适用于数据点为char*类型的数据流 00462 * 它把参数封装成EDP协议规定的cJSON对象, 00463 * type类型决定使用哪种JSON格式,具体格式说明见文档《设备终端接入协议2-EDP.docx》 00464 * 相关函数:UnPacketSavedataString 00465 * 参数: type 采用的JSON数据类型,可选类型为:kTypeFullJson, 00466 * kTypeSimpleJsonWithoutTime, kTypeSimpleJsonWithTime 00467 * dst_devid 目的设备ID 00468 * ds_id 数据流ID 00469 * value char*型数据点 00470 * at 如果设置为0,则采用系统当前时间,否则采用给定时间。 00471 * 如果type选择为kTypeSimpleJsonWithoutTime,由于这种类型的JSON格式不带时间, 00472 * 服务器端统一采用系统时间,此值将被忽略 00473 * token 当type为kTypeFullJson时,将根据EDP协议封装token字段, 00474 * 为其它类型时将被忽略。 00475 * 返回值: 类型 (EdpPacket*) 00476 * 非空 EDP协议包 00477 * 为空 EDP协议包生成失败 00478 */ 00479 EDPKIT_DLL EdpPacket* PacketSavedataString(SaveDataType type, const char* dst_devid, 00480 const char* ds_id, const char* value, 00481 time_t at, const char* token); 00482 00483 /* 00484 * 函数名: UnpackSavedataInt 00485 * 功能: 解包 由设备云到设备的EDP协议包, 存储数据 00486 * 说明: 接收设备云发来的数据,将其中的数据流ID及值解析出来。 00487 * 00488 * 相关函数:PacketSavedataInt 00489 * 00490 * 参数: type 采用的JSON数据类型,可选类型为:kTypeFullJson, 00491 * kTypeSimpleJsonWithoutTime, kTypeSimpleJsonWithTime 00492 * pkg EDP包, 必须是savedata包 00493 * ds_id 获取数据流ID,使用完后必须释放 00494 * value 数据流对应的值 00495 * 返回值: 类型 (int32) 00496 * =0 解析成功 00497 * <0 解析失败, -1 type类型不合法,其它值见本h文件的错误码 00498 */ 00499 EDPKIT_DLL int32 UnpackSavedataInt(SaveDataType type, EdpPacket* pkg, 00500 char** ds_id, int* value); 00501 00502 /* 00503 * 函数名: UnpackSavedataDouble 00504 * 功能: 解包 由设备云到设备的EDP协议包, 存储数据 00505 * 说明: 接收设备云发来的数据,将其中的数据流ID及值解析出来。 00506 * 00507 * 相关函数:PacketSavedataDouble 00508 * 00509 * 参数: type 采用的JSON数据类型,可选类型为:kTypeFullJson, 00510 * kTypeSimpleJsonWithoutTime, kTypeSimpleJsonWithTime 00511 * pkg EDP包, 必须是savedata包 00512 * ds_id 获取数据流ID,使用完后必须释放 00513 * value 数据流对应的值 00514 * 返回值: 类型 (int32) 00515 * =0 解析成功 00516 * <0 解析失败, -1 type类型不合法,其它值见本h文件的错误码 00517 */ 00518 EDPKIT_DLL int32 UnpackSavedataDouble(SaveDataType type, EdpPacket* pkg, 00519 char** ds_id, double* value); 00520 00521 /* 00522 * 函数名: UnpackSavedataString 00523 * 功能: 解包 由设备云到设备的EDP协议包, 存储数据 00524 * 说明: 接收设备云发来的数据,将其中的数据流ID及值解析出来。 00525 * 00526 * 相关函数:PacketSavedataString 00527 * 00528 * 参数: type 采用的JSON数据类型,可选类型为:kTypeFullJson, 00529 * kTypeSimpleJsonWithoutTime, kTypeSimpleJsonWithTime 00530 * pkg EDP包, 必须是savedata包 00531 * ds_id 获取数据流ID,使用完后需要释放 00532 * value 数据流对应的值,使用完后需要释放 00533 * 返回值: 类型 (int32) 00534 * =0 解析成功 00535 * <0 解析失败, -1 type类型不合法,其它值见本h文件的错误码 00536 */ 00537 EDPKIT_DLL int32 UnpackSavedataString(SaveDataType type, EdpPacket* pkg, 00538 char** ds_id, char** value); 00539 00540 00541 /* 00542 * 函数名: UnpackSavedataAck 00543 * 功能: 解包 由设备云到设备的EDP协议包, 存贮(转发)消息的响应 00544 * 说明: 当存贮(转发)消息带token时,平台会响应一个SAVE_ACK消息, 00545 * 用作存储消息的确认。 00546 * 相关函数: PacketSavedataDoubleWithToken PacketSavedataStringWithToken 00547 * 参数: pkg EDP包, 必须是连接响应包 00548 * json_ack 获取响应的json字符串,使用完后需要释放 00549 * 返回值: 类型 (int32) 00550 * =0 心跳成功 00551 * <0 解析失败, 具体失败原因见本h文件的错误码 00552 */ 00553 EDPKIT_DLL int32 UnpackSavedataAck(EdpPacket* pkg, char** json_ack); 00554 00555 /* 00556 * 函数名: PacketSavedataSimpleString 00557 * 功能: 打包 设备到设备云的EDP协议包, 存储数据(以分号分隔的简单字符串形式) 00558 * 说明: 返回的EDP包发送给设备云后, 需要删除这个包 00559 * 相关函数:UnpackSavedataSimpleString 00560 * 参数: dst_devid 目的设备ID 00561 * input 以分号分隔的简单字符串形式, 00562 * 详见《设备终端接入协议2-EDP.docx》 00563 * 返回值: 类型 (EdpPacket*) 00564 * 非空 EDP协议包 00565 * 为空 EDP协议包生成失败 00566 */ 00567 EDPKIT_DLL EdpPacket* PacketSavedataSimpleString(const char* dst_devid, const char* input); 00568 00569 /* 00570 * 函数名: UnpackSavedataSimpleString 00571 * 功能: 解包 由设备云到设备的EDP协议包, 存储数据 00572 * 说明: 接收设备云发来的数据, 通过函数GetEdpPacket和EdpPacketType判断出是savedata后, 00573 * 将整个响应EDP包作为参数, 由该函数进行解析, 00574 * 获取源端发送来的以分号作为分隔符的字符串。 00575 * 相关函数: PacketSavedataSimpleString 00576 * 00577 * 参数: pkg EDP包, 必须是savedata包 00578 * output 存储发送来的字符串 00579 * 返回值: 类型 (int32) 00580 * =0 解析成功 00581 * <0 解析失败, 具体失败原因见本h文件的错误码 00582 */ 00583 EDPKIT_DLL int32 UnpackSavedataSimpleString(EdpPacket* pkg, char** output); 00584 00585 /* 00586 * 函数名: PacketSavedataBin 00587 * 功能: 打包 设备到设备云的EDP协议包, 存储数据(bin格式数据) 00588 * 说明: 返回的EDP包发送给设备云后, 需要删除这个包 00589 * 相关函数:UnpackSavedata, UnpackSavedataBin 00590 * 参数: dst_devid 目的设备ID 00591 * desc_obj 数据描述 json格式 00592 * bin_data 二进制数据 00593 * bin_len 二进制数据长度 00594 * 返回值: 类型 (EdpPacket*) 00595 * 非空 EDP协议包 00596 * 为空 EDP协议包生成失败 00597 */ 00598 EdpPacket* PacketSavedataBin(const char* dst_devid, 00599 cJSON* desc_obj, const uint8* bin_data, uint32 bin_len); 00600 /* 00601 * 函数名: PacketSavedataBinStr 00602 * 功能: 打包 设备到设备云的EDP协议包, 存储数据(bin格式数据) 00603 * 说明: 返回的EDP包发送给设备云后, 需要删除这个包 00604 * 相关函数:UnpackSavedata, UnpackSavedataBin 00605 * 参数: dst_devid 目的设备ID 00606 * desc_obj 数据描述 字符串格式 00607 * bin_data 二进制数据 00608 * bin_len 二进制数据长度 00609 * 返回值: 类型 (EdpPacket*) 00610 * 非空 EDP协议包 00611 * 为空 EDP协议包生成失败 00612 */ 00613 EDPKIT_DLL EdpPacket* PacketSavedataBinStr(const char* dst_devid, 00614 const char* desc_str, const uint8* bin_data, uint32 bin_len); 00615 00616 /* 00617 * 函数名: UnpackSavedata 00618 * 功能: 解包 由设备云到设备的EDP协议包, 存储数据 00619 * 说明: 接收设备云发来的数据, 通过函数GetEdpPacket和EdpPacketType判断出是savedata后, 00620 * 将整个响应EDP包作为参数, 由该函数进行解析 00621 * 然后再根据json和bin的标识(jb_flag), 调用相应的解析函数 00622 * 返回的源设备ID(src_devid)需要客户端释放 00623 * 相关函数:PacketSavedataJson, PacketSavedataBin, GetEdpPacket, 00624 * UnpackSavedataJson, UnpackSavedataBin 00625 * 参数: pkg EDP包, 必须是savedata包 00626 * src_devid 源设备ID 00627 * jb_flag json or bin数据, 1: json, 2: 二进制 00628 * 返回值: 类型 (int32) 00629 * =0 解析成功 00630 * <0 解析失败, 具体失败原因见本h文件的错误码 00631 */ 00632 EDPKIT_DLL int32 UnpackSavedata(EdpPacket* pkg, char** src_devid, uint8* jb_flag); 00633 00634 /* 00635 * 函数名: UnpackSavedataJson 00636 * 功能: 解包 由设备云到设备的EDP协议包, 存储数据(json格式数据) 00637 * 说明: 返回的json数据(json_obj)需要客户端释放 00638 * 相关函数:PacketSavedataJson, GetEdpPacket, EdpPacketType, UnpackSavedata 00639 * 参数: pkg EDP包, 必须是savedata包的json数据包 00640 * json_obj json数据 00641 * 返回值: 类型 (int32) 00642 * =0 解析成功 00643 * <0 解析失败, 具体失败原因见本h文件的错误码 00644 */ 00645 int32 UnpackSavedataJson(EdpPacket* pkg, cJSON** json_obj); 00646 00647 /* 00648 * 函数名: UnpackSavedataBin 00649 * 功能: 解包 由设备云到设备的EDP协议包, 存储数据(bin格式数据) 00650 * 说明: 返回的数据描述(desc_obj)和bin数据(bin_data)需要客户端释放 00651 * 相关函数:PacketSavedataBin, GetEdpPacket, EdpPacketType, UnpackSavedata 00652 * 参数: pkg EDP包, 必须是savedata包的bin数据包 00653 * desc_obj 数据描述 json格式 00654 * bin_data 二进制数据 00655 * bin_len 二进制数据长度 00656 * 返回值: 类型 (int32) 00657 * =0 解析成功 00658 * <0 解析失败, 具体失败原因见本h文件的错误码 00659 */ 00660 int32 UnpackSavedataBin(EdpPacket* pkg, cJSON** desc_obj, 00661 uint8** bin_data, uint32* bin_len); 00662 /* 00663 * 函数名: UnpackSavedataBinStr 00664 * 功能: 解包 由设备云到设备的EDP协议包, 存储数据(bin格式数据) 00665 * 说明: 返回的数据描述(desc_obj)和bin数据(bin_data)需要客户端释放 00666 * 相关函数:PacketSavedataBin, GetEdpPacket, EdpPacketType, UnpackSavedata 00667 * 参数: pkg EDP包, 必须是savedata包的bin数据包 00668 * desc_obj 数据描述 string格式 00669 * bin_data 二进制数据 00670 * bin_len 二进制数据长度 00671 * 返回值: 类型 (int32) 00672 * =0 解析成功 00673 * <0 解析失败, 具体失败原因见本h文件的错误码 00674 */ 00675 EDPKIT_DLL int32 UnpackSavedataBinStr(EdpPacket* pkg, char** desc_str, 00676 uint8** bin_data, uint32* bin_len); 00677 /* 00678 * 函数名: PacketCmdResp 00679 * 功能: 向接入机发送命令响应 00680 * 说明: 返回的EDP包发送给设备云后, 需要客户程序删除该包 00681 * 00682 * 相关函数:UnpackCmdReq 00683 * 参数: cmdid 命令id 00684 * cmdid_len 命令id长度 00685 * resp 响应的消息 00686 * resp_len 响应消息长度 00687 * 返回值: 类型 (EdpPacket*) 00688 * 非空 EDP协议包 00689 * 为空 EDP协议包生成失败 00690 */ 00691 EDPKIT_DLL EdpPacket* PacketCmdResp(const char* cmdid, uint16 cmdid_len, 00692 const char* resp, uint32 resp_len); 00693 00694 /* 00695 * 函数名: UnpackCmdReq 00696 * 功能: 解包 由设备云到设备的EDP协议包, 命令请求消息 00697 * 说明: 接收设备云发来的数据, 解析命令请求消息包 00698 * 获取的cmdid以及req需要在使用后释放。 00699 * 相关函数:PacketCmdResp 00700 * 参数: pkg EDP包 00701 * cmdid 获取命令id 00702 * cmdid_len cmdid的长度 00703 * req 用户命令的起始位置 00704 * req_len 用户命令的长度 00705 * 返回值: 类型 (int32) 00706 * =0 解析成功 00707 * <0 解析失败, 具体失败原因见本h文件的错误码 00708 */ 00709 EDPKIT_DLL int32 UnpackCmdReq(EdpPacket* pkg, char** cmdid, uint16* cmdid_len, 00710 char** req, uint32* req_len); 00711 00712 /* 00713 * 函数名: PacketPing 00714 * 功能: 打包 由设备到设备云的EDP协议包, 心跳 00715 * 说明: 返回的EDP包发送给设备云后, 需要客户程序删除该包 00716 * 设备云会回复心跳响应给设备 00717 * 相关函数:UnpackPingResp 00718 * 参数: 无 00719 * 返回值: 类型 (EdpPacket*) 00720 * 非空 EDP协议包 00721 * 为空 EDP协议包生成失败 00722 */ 00723 EDPKIT_DLL EdpPacket* PacketPing(void); 00724 00725 /* 00726 * 函数名: UnpackPingResp 00727 * 功能: 解包 由设备云到设备的EDP协议包, 心跳响应 00728 * 说明: 接收设备云发来的数据, 通过函数GetEdpPacket和EdpPacketType判断出是连接响应后, 00729 * 将整个响应EDP包作为参数, 由该函数进行解析 00730 * 相关函数:PacketPing, GetEdpPacket, EdpPacketType 00731 * 参数: pkg EDP包, 必须是连接响应包 00732 * 返回值: 类型 (int32) 00733 * =0 心跳成功 00734 * >0 心跳失败, 具体失败原因见<OneNet接入方案与接口.docx> 00735 * <0 解析失败, 具体失败原因见本h文件的错误码 00736 */ 00737 EDPKIT_DLL int32 UnpackPingResp(EdpPacket* pkg); 00738 00739 #ifdef __cplusplus 00740 } 00741 #endif 00742 00743 #endif /* __EDP_KIT_H__ */
Generated on Fri Jul 15 2022 20:43:41 by
1.7.2