| | |
| | | #include <stdint.h> |
| | | #include <time.h> |
| | | |
| | | #define DEVID_LEN 16 |
| | | #define DEVID_LEN 8 |
| | | #define TIME_LEN 32 |
| | | |
| | | typedef struct pack_info_s |
| | | { |
| | | char devid[DEVID_LEN]; /* device ID */ |
| | | 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, char *pack_buf, int size); |
| | | typedef int (* pack_proc_t)(pack_info_t *pack_info, uint8_t *pack_buf, int size); |
| | | |
| | | /* description: get device ID |
| | | * input args: |
| | |
| | | * $size : packet output buffer size |
| | | * return value: <0: failure >0: packet bytes |
| | | */ |
| | | extern int packet_segmented_pack(pack_info_t *pack_info, char *pack_buf, int size); |
| | | 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"} |
| | |
| | | * $size : packet output buffer size |
| | | * return value: <0: failure >0: packet bytes |
| | | */ |
| | | extern int packet_json_pack(pack_info_t *pack_info, char *pack_buf, int size); |
| | | 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_ ----- */ |