TuyaOS
tuya_svc_lan.h
浏览该文件的文档.
1
11#ifndef __TUYA_SVC_LAN_H__
12#define __TUYA_SVC_LAN_H__
13
14#include <stdint.h>
15#include "tuya_cloud_types.h"
16#include "ty_cJSON.h"
17
18#ifdef __cplusplus
19extern "C" {
20#endif
21
22// LAN protocol frame type
23#define FRM_TP_CFG_WF 0x01 // only used for ap 3.0 network config
24#define FRM_TP_ACTV 0x02 // discard
25#define FRM_TP_BIND_DEV 0x03 // discard
26#define FRM_TP_UNBIND_DEV 0x06 // discard
27#define FRM_TP_CMD 0x07 //
28#define FRM_TP_STAT_REPORT 0x08 //
29#define FRM_TP_HB 0x09 //
30#define FRM_QUERY_STAT 0x0a //
31#define FRM_SSID_QUERY 0x0b // discard
32#define FRM_USER_BIND_REQ 0x0c // {"token","yyyyyyyyyyyyyy"}
33#define FRM_TP_NEW_CMD 0x0d //
34#define FRM_ADD_SUB_DEV_CMD 0x0e //
35#define FRM_CFG_WIFI_INFO 0x0f // {"ssid":"xxxx","passwd":"yyyyy"}
36#define FRM_QUERY_STAT_NEW 0x10 //
37#define FRM_SCENE_EXEC 0x11 //
38#define FRM_LAN_QUERY_DP 0x12 //
39
40#define FRM_SECURITY_TYPE3 0x03
41#define FRM_SECURITY_TYPE4 0x04
42#define FRM_SECURITY_TYPE5 0x05
43
44#define FR_TYPE_AP_ENCRYPTION 0x11
45#define FR_TYPE_ENCRYPTION 0x13
46#define FR_TYPE_BOARDCAST_LPV34 0x23
47#define FRM_AP_CFG_WF_V40 0x14
48
49#define WIFI_ERR_APP_TO_DEV 0x15 // aka WIFI_ERR_DEV_TO_APP
50#define FRM_LAN_EXT_STREAM 0x40
51#define FRM_LAN_EXT_BEFORE_ACTIVATE 0x42
52
53
54#pragma pack(1)
58typedef struct {
59 UINT_T head; // 0x55aa
60 uint8_t version;/*version:hight 4bit, reserved: low 4bit*/
61 uint8_t reserved;
62 UINT_T fr_num; // frame sequence number
63 UINT_T fr_type; // frame type
64 UINT_T len; // data length
65 BYTE_T data[0]; // the data
67
71typedef struct {
72 UINT_T crc; // CRC of data
73 UINT_T tail; // 0xaa55
75
79typedef struct {
80 UINT_T head; // 0x55aa
81 UINT_T fr_num; // frame sequence number
82 UINT_T fr_type; // frame type
83 UINT_T len; // data length
84 UINT_T ret_code;// return code
85 BYTE_T data[0]; // the data
87#pragma pack()
88
89#define LPV35_FRAME_HEAD_SIZE 4
90#define LPV35_FRAME_VERSION_SIZE 1
91#define LPV35_FRAME_RESERVE_SIZE 1
92#define LPV35_FRAME_SEQUENCE_SIZE 4
93#define LPV35_FRAME_TYPE_SIZE 4
94#define LPV35_FRAME_DATALEN_SIZE 4
95#define LPV35_FRAME_NONCE_SIZE 12
96#define LPV35_FRAME_TAG_SIZE 16
97#define LPV35_FRAME_TAIL_SIZE 4
98
99#define LPV35_FRAME_MINI_SIZE (LPV35_FRAME_HEAD_SIZE + LPV35_FRAME_VERSION_SIZE + LPV35_FRAME_RESERVE_SIZE + \
100 LPV35_FRAME_SEQUENCE_SIZE + LPV35_FRAME_TYPE_SIZE + LPV35_FRAME_DATALEN_SIZE + LPV35_FRAME_NONCE_SIZE + \
101 LPV35_FRAME_TAG_SIZE + LPV35_FRAME_TAIL_SIZE)
102#pragma pack(1)
103typedef struct {
104 uint8_t version: 4;
105 uint8_t reserved: 4;
106 uint8_t reserved2;
107 uint32_t sequence;
108 uint32_t type;
109 uint32_t length;
111
113
114typedef struct {
115 uint32_t ret_code;
116 uint8_t data[0];
118#pragma pack()
119
120typedef struct {
121 uint32_t sequence;
122 uint32_t type;
123 uint8_t* data;
124 uint32_t data_len;
126
130typedef enum {
131 CFG_UDP_DISCOVERY_FORCE, // send upd discovery even if clients exceed(BOOL_T)
132 CFG_UDP_EXT_UPDATE, // add/update new key/value(ty_cJSON)
133 CFG_UDP_EXT_DELETE, // delete key/value(ty_cJSON)
134 CFG_SET_CLT_NUM, // set clinet number(UINT_T)
135 CFG_UDP_DISCOVERY_INTERVAL, // set udp discovery interval(UINT_T, unit:s, default:5)
136 CFG_REV_BUF_SIZE, // receive buffer size(UINT, default:512)
137 CFG_SET_LAN_CLOSED_CB, // set lan can be closed
138 CFG_DEFAULT_LINKAGE, // default lan linkage (netmgr_linkage_t)
139 CFG_HEART_BEAT_TIMEOUT, // set heart beat time out(default 30)
140 CFG_SEQ_ERR_THRESHOLD, // sequence error threshold(default 0)
141 CFG_MAX
142} Lan_Cfg_e;
143
149OPERATE_RET tuya_svc_lan_init(VOID);
150
156OPERATE_RET tuya_svc_lan_exit(VOID);
157
163OPERATE_RET tuya_svc_lan_disable(VOID);
164
170OPERATE_RET tuya_svc_lan_enable(VOID);
171
180OPERATE_RET tuya_svc_lan_dp_report(IN CONST VOID *data, IN CONST UINT_T len);
181
192OPERATE_RET tuya_svc_lan_data_report(IN CONST UINT_T fr_type, IN CONST UINT_T ret_code,
193 IN CONST BYTE_T *data, IN CONST UINT_T len);
194
201
208
217OPERATE_RET tuya_svc_lan_cfg(IN CONST Lan_Cfg_e cfg, IN CONST VOID * data);
218
227typedef OPERATE_RET(*lan_cmd_handler_cb)(IN CONST BYTE_T *data, OUT BYTE_T **out);
228
237OPERATE_RET tuya_svc_lan_register_cb(IN UINT_T frame_type, IN lan_cmd_handler_cb handler);
238
246OPERATE_RET tuya_svc_lan_unregister_cb(IN UINT_T frame_type);
247
258OPERATE_RET tuya_svc_lan_decrypt_data(IN BYTE_T *data, IN CONST INT_T len,
259 IN CONST BYTE_T *key, OUT CHAR_T **out_data);
260
267
275typedef OPERATE_RET(*lan_ext_protocol_handler_cb)(IN ty_cJSON *root_json);
276
285OPERATE_RET tuya_svc_lan_ext_proto_reg(CONST CHAR_T *ext_lan_pro, lan_ext_protocol_handler_cb handler);
286
294OPERATE_RET tuya_svc_lan_ext_proto_unreg(CONST CHAR_T *ext_lan_pro);
295
302
308OPERATE_RET tuya_svc_lan_ext_proto_data_report(IN CONST VOID *data, IN CONST UINT_T len);
309
315typedef BOOL_T(*lan_canbe_closed)(VOID);
316
323
324typedef struct {
325 INT_T socket;
326 UINT_T frame_num;
327 UINT_T frame_type;
328 UINT_T frame_len;
330
331OPERATE_RET tuya_svc_lan_pro_cntl_get_ext_cmd_param(LAN_EXT_CMD_PARAM_S *ext_cmd_param);
332
333OPERATE_RET tuya_svc_lan_data_com_send(IN CONST INT_T socket, IN CONST UINT_T fr_num, IN CONST UINT_T fr_type,
334 IN CONST UINT_T ret_code, IN CONST BYTE_T *data,IN CONST UINT_T len);
335
336#ifdef __cplusplus
337}
338#endif
339#endif //__TUYA_SVC_LAN_H__
340
Definition: tuya_svc_lan.h:324
LAN protocol frame head format (from app)
Definition: tuya_svc_lan.h:58
LAN protocol frame head format (from device)
Definition: tuya_svc_lan.h:79
LAN protocol frame tail format (from device)
Definition: tuya_svc_lan.h:71
Definition: tuya_svc_lan.h:103
Definition: tuya_svc_lan.h:120
Definition: tuya_svc_lan.h:114
Definition: ty_cJSON.h:45
OPERATE_RET tuya_svc_lan_ext_proto_data_report(IN CONST VOID *data, IN CONST UINT_T len)
extend lan protocol data report
OPERATE_RET tuya_svc_lan_init(VOID)
Init and start LAN service
OPERATE_RET tuya_svc_lan_dp_report(IN CONST VOID *data, IN CONST UINT_T len)
LAN dp report
OPERATE_RET tuya_svc_lan_ext_proto_reg(CONST CHAR_T *ext_lan_pro, lan_ext_protocol_handler_cb handler)
Register extend lan protocol
UINT_T tuya_svc_lan_get_client_num(VOID)
get lan client number
OPERATE_RET tuya_svc_lan_data_report(IN CONST UINT_T fr_type, IN CONST UINT_T ret_code, IN CONST BYTE_T *data, IN CONST UINT_T len)
distribute data to all connections
OPERATE_RET tuya_svc_lan_decrypt_data(IN BYTE_T *data, IN CONST INT_T len, IN CONST BYTE_T *key, OUT CHAR_T **out_data)
Decrypt LAN data
OPERATE_RET tuya_svc_lan_cfg(IN CONST Lan_Cfg_e cfg, IN CONST VOID *data)
lan configure
OPERATE_RET tuya_svc_lan_disable(VOID)
Disable LAN service
BOOL_T tuya_svc_lan_canbe_closed(VOID)
check lan can be closed
INT_T tuya_svc_lan_get_valid_connections(VOID)
get count of vaild connections
OPERATE_RET tuya_svc_lan_ext_proto_uninit(VOID)
uninit extend lan protocol
OPERATE_RET tuya_svc_lan_exit(VOID)
Stop and uninit LAN service
OPERATE_RET tuya_svc_lan_ext_proto_unreg(CONST CHAR_T *ext_lan_pro)
Unregister extend lan protocol
OPERATE_RET(* lan_ext_protocol_handler_cb)(IN ty_cJSON *root_json)
Callback to handle lan protocol data
Definition: tuya_svc_lan.h:275
OPERATE_RET tuya_svc_lan_enable(VOID)
Enable LAN service
OPERATE_RET tuya_svc_lan_disconnect_all(VOID)
disconnect all connections
OPERATE_RET(* lan_cmd_handler_cb)(IN CONST BYTE_T *data, OUT BYTE_T **out)
lan cmd extersion
Definition: tuya_svc_lan.h:227
Lan_Cfg_e
Definition of LAN configuration
Definition: tuya_svc_lan.h:130
OPERATE_RET tuya_svc_lan_unregister_cb(IN UINT_T frame_type)
unregister callback
BOOL_T(* lan_canbe_closed)(VOID)
check lan canbe closed
Definition: tuya_svc_lan.h:315
OPERATE_RET tuya_svc_lan_register_cb(IN UINT_T frame_type, IN lan_cmd_handler_cb handler)
register callback