/******************************************************************************** * Copyright: (C) 2022 LingYun IoT System Studio * All rights reserved. * * Filename: packet.h * Description: This head file is packet API functions. * * Version: 1.0.0(18/04/22) * Author: Guo Wenxue * ChangeLog: 1, Release initial version on "18/04/22 16:24:40" * ********************************************************************************/ #ifndef _PACKET_H_ #define _PACKET_H_ #include #include #define DEVID_LEN 8 #define TIME_LEN 32 typedef struct pack_info_s { char devid[DEVID_LEN+1]; /* device ID */ struct tm sample_time; /* sample time */ float temper; /* sample temperature */ } pack_info_t; /* packet function pointer type */ typedef int (* pack_proc_t)(pack_info_t *pack_info, uint8_t *pack_buf, int size); /* description: get device ID * input args: * $devid : device ID string * $size : device ID output buffer size * $sn : serial number * return value: <0: failure 0:ok */ extern int get_devid(char *devid, int size, int sn); /* description: get current system in struct tm * input args: * $sample_time: sample time in struct tm * return value: <0: failure 0:ok */ extern int get_time(struct tm *sample_time); /* description: package a string packet in format "devid|time|temper" * input args: * $pack_info: packet data contains devid, time and temperature * $pack_buf : packet output buffer * $size : packet output buffer size * return value: <0: failure >0: packet bytes */ extern int packet_segmented_pack(pack_info_t *pack_info, uint8_t *pack_buf, int size); /* description: package a json string packet: {"devid":"xxx", "time":"xxx", "temperature":"xxx"} * input args: * $pack_info: packet data contains devid, time and temperature * $pack_buf : packet output buffer * $size : packet output buffer size * return value: <0: failure >0: packet bytes */ extern int packet_json_pack(pack_info_t *pack_info, uint8_t *pack_buf, int size); /* TLV(Tag Length Value) PDU(Protocal Data Unit) format: * * +-----------+-----------+------------+-------------+-------------+ * | Header(2B)| Tag(1B) | Length(2B) | Value(nB) | CRC16(2B) | * +-----------+-----------+------------+-------------+-------------+ * * Header(2B): 0xFE 0xED * Tag(1B): 0x01->temperature 0x02->Humidity 0x03->Noisy ... * Length(2B): Data length * Value(nB): Data value * CRC16(2B): CRC from Header to Value */ /* TLV Header */ #define TLV_HEADER 0xFEED /* TLV bytes without payload: Header(2B)+Tag(1B)+Length(2B)+CRC16(2B) */ #define TLV_MINSIZE 7 /* TVL Tag definition */ enum { TAG_TEMPERATURE = 1, TAG_HUMIDITY, TAG_NOISY, }; /* description: package a TLV packet: 0xFD 0xFE * input args: * $pack_info: packet data contains devid, time and temperature * $pack_buf : packet output buffer * $size : packet output buffer size * return value: <0: failure >0: packet bytes */ int packet_tlv_pack(pack_info_t *pack_info, uint8_t *pack_buf, int size); #endif /* ----- #ifndef _PACKET_H_ ----- */