/********************************************************************************
|
* 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 <guowenxue@gmail.com>
|
* ChangeLog: 1, Release initial version on "18/04/22 16:24:40"
|
*
|
********************************************************************************/
|
|
|
#ifndef _PACKET_H_
|
#define _PACKET_H_
|
|
#include <stdint.h>
|
#include <time.h>
|
|
#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_ ----- */
|