RaspberrPi project source code
guowenxue
2024-05-27 2c971f2fcf6c6322a0ea584b2af4c3cef20d3d63
commit | author | age
29b331 1 /********************************************************************************
GW 2  *      Copyright:  (C) 2022 LingYun IoT System Studio
3  *                  All rights reserved.
4  *
5  *       Filename:  packet.h
6  *    Description:  This head file is packet API functions.
7  *
8  *        Version:  1.0.0(18/04/22)
9  *         Author:  Guo Wenxue <guowenxue@gmail.com>
10  *      ChangeLog:  1, Release initial version on "18/04/22 16:24:40"
11  *
12  ********************************************************************************/
13
14
15 #ifndef  _PACKET_H_
16 #define  _PACKET_H_
17
18 #include <stdint.h>
19 #include <time.h>
20
5b381c 21 #define DEVID_LEN          8
29b331 22 #define TIME_LEN           32
GW 23
24 typedef struct pack_info_s
25 {
5b381c 26     char          devid[DEVID_LEN+1];  /* device ID  */
29b331 27     struct tm     sample_time;       /* sample time  */
GW 28     float         temper;            /* sample temperature */
29 } pack_info_t;
30
31 /* packet function pointer type */
5b381c 32 typedef int (* pack_proc_t)(pack_info_t *pack_info, uint8_t *pack_buf, int size);
29b331 33
GW 34 /*  description: get device ID
35  *   input args:
36  *               $devid :  device ID string
37  *               $size  :  device ID output buffer size
38  *               $sn    :  serial number
39  * return value: <0: failure   0:ok
40  */
41 extern int get_devid(char *devid, int size, int sn);
42
43 /*  description: get current system in struct tm
44  *   input args:
45  *               $sample_time:  sample time in struct tm
46  * return value: <0: failure   0:ok
47  */
48 extern int get_time(struct tm *sample_time);
49
50 /*  description: package a string packet in format "devid|time|temper"
51  *   input args:
52  *               $pack_info:  packet data contains devid, time and temperature
53  *               $pack_buf :  packet output buffer
54  *               $size     :  packet output buffer size
55  * return value: <0: failure   >0: packet bytes
56  */
5b381c 57 extern int packet_segmented_pack(pack_info_t *pack_info, uint8_t *pack_buf, int size);
29b331 58
GW 59
60 /*  description: package a json string packet: {"devid":"xxx", "time":"xxx", "temperature":"xxx"}
61  *   input args:
62  *               $pack_info:  packet data contains devid, time and temperature
63  *               $pack_buf :  packet output buffer
64  *               $size     :  packet output buffer size
65  * return value: <0: failure   >0: packet bytes
66  */
5b381c 67 extern int packet_json_pack(pack_info_t *pack_info, uint8_t *pack_buf, int size);
29b331 68
GW 69
5b381c 70 /* TLV(Tag Length Value) PDU(Protocal Data Unit) format:
GW 71  *
72  * +-----------+-----------+------------+-------------+-------------+
73  * | Header(2B)|  Tag(1B)  | Length(2B) |  Value(nB)  |  CRC16(2B)  |
74  * +-----------+-----------+------------+-------------+-------------+
75  *
76  * Header(2B): 0xFE 0xED
77  *    Tag(1B): 0x01->temperature 0x02->Humidity 0x03->Noisy ...
78  * Length(2B): Data length
79  *  Value(nB): Data value
80  *  CRC16(2B): CRC from Header to Value
81  */
82
83 /* TLV Header */
84 #define TLV_HEADER          0xFEED
85
86 /* TLV bytes without payload: Header(2B)+Tag(1B)+Length(2B)+CRC16(2B) */
87 #define TLV_MINSIZE         7
88
89 /* TVL Tag definition */
90 enum
91 {
92     TAG_TEMPERATURE = 1,
93     TAG_HUMIDITY,
94     TAG_NOISY,
95 };
96
97 /*  description: package a TLV packet: 0xFD 0xFE
98  *   input args:
99  *               $pack_info:  packet data contains devid, time and temperature
100  *               $pack_buf :  packet output buffer
101  *               $size     :  packet output buffer size
102  * return value: <0: failure   >0: packet bytes
103  */
104
105 int packet_tlv_pack(pack_info_t *pack_info, uint8_t *pack_buf, int size);
106
29b331 107 #endif   /* ----- #ifndef _PACKET_H_  ----- */