• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  * Description: HiLink产品适配头文件(此文件为DEMO,需集成方适配修改)
15  */
16 #ifndef HILINK_DEVICE_H
17 #define HILINK_DEVICE_H
18 
19 #include "hilink.h"
20 
21 #ifdef __cplusplus
22 #if __cplusplus
23 extern "C" {
24 #endif
25 #endif
26 
27 typedef struct {
28     char sn[40];            /* 设备唯一标识,比如sn号,有效字符长度范围[0,40),为空时使用MAC地址作为SN */
29     char prodId[5];         /* 设备产品ID,有效字符长度为4 */
30     char subProdId[3];      /* 设备子型号,有效字符长度为0或2 */
31     char model[32];         /* 设备型号,长度范围[0,32) */
32     char devTypeId[4];      /* 设备类型ID,有效字符长度为3 */
33     char devTypeName[32];   /* 设备类型英文名称,长度范围[0,32) */
34     char manuId[4];         /* 设备制造商ID,有效字符长度为3 */
35     char manuName[32];      /* 设备制造商英文名称,长度范围[0,32) */
36     char fwv[64];           /* 设备固件版本,长度范围[0,64) */
37     char hwv[64];           /* 设备硬件版本,长度范围[0,64) */
38     char swv[64];           /* 设备软件版本,长度范围[0,64) */
39 } HILINK_DevInfo;
40 
41 typedef struct {
42     char svcType[32];  /* 服务类型,字符长度范围(0, 32) */
43     char svcId[64];    /* 服务ID,字符长度范围(0, 64) */
44 } HILINK_SvcInfo;
45 
46 enum HILINK_StateMachine {
47     /* 设备与云端连接断开(版本向前兼容) */
48     HILINK_M2M_CLOUD_OFFLINE = 0,
49     /* 设备连接云端成功,处于正常工作态(版本向前兼容) */
50     HILINK_M2M_CLOUD_ONLINE,
51     /* 设备与云端连接长时间断开(版本向前兼容) */
52     HILINK_M2M_LONG_OFFLINE,
53     /* 设备与云端连接长时间断开后进行重启(版本向前兼容) */
54     HILINK_M2M_LONG_OFFLINE_REBOOT,
55     /* HiLink线程未启动 */
56     HILINK_UNINITIALIZED,
57     /* 设备处于配网模式 */
58     HILINK_LINK_UNDER_AUTO_CONFIG,
59     /* 设备处于10分钟超时状态 */
60     HILINK_LINK_CONFIG_TIMEOUT,
61     /* 设备正在连接路由器 */
62     HILINK_LINK_CONNECTTING_WIFI,
63     /* 设备已经连上路由器 */
64     HILINK_LINK_CONNECTED_WIFI,
65     /* 设备正在连接云端 */
66     HILINK_M2M_CONNECTTING_CLOUD,
67     /* 设备与路由器的连接断开 */
68     HILINK_LINK_DISCONNECT,
69     /* 设备被注册 */
70     HILINK_DEVICE_REGISTERED,
71     /* 设备被解绑 */
72     HILINK_DEVICE_UNREGISTER,
73     /* 设备复位标记置位 */
74     HILINK_REVOKE_FLAG_SET,
75     /* 设备协商注册信息失败 */
76     HILINK_NEGO_REG_INFO_FAIL,
77     /* 设备与路由器的连接失败 */
78     HILINK_LINK_CONNECTED_FAIL,
79     /* 打开中枢模式成功 */
80     HILINK_OPEN_CENTRAL_MODE_OK,
81     /* 打开中枢模式失败 */
82     HILINK_OPEN_CENTRAL_MODE_FAILE,
83     /* 本地端口创建成功 */
84     HILINK_CREATE_CENTRAL_PORT_OK,
85     /* 设备恢复交房标记 */
86     HILINK_RECOVER_HANDOVER,
87     /* 设备交房标记 */
88     HILINK_HANDOVER,
89     /* 设备已初始化 */
90     HILINK_INITIALIZED,
91     /* 直连云模式切成中枢模式 */
92     HILINK_CLOUD_TO_CENTRAL,
93     /* 设备信息完全清除,包括前装跟后装信息 */
94     HILINK_DEVICE_CLEAN,
95     /* 共部署设备被设置为单品模式 */
96     HILINK_DEVICE_MODE,
97     /* 设备TLS链路重连事件 */
98     HILINK_TLS_LINK_RECONNECTED,
99 };
100 
101 typedef int (*HILINK_GetAcKeyFunc)(unsigned char *acKey, unsigned int acLen);
102 
103 /*
104  * 功能:注册获取ACkeyV2函数,key文件在开发者平台获取
105  * 参数:HILINK_GetAcKeyFun 入参
106  * 备注,SDK优先使用ACkeyV2,HILINK_GetAutoAc逐渐日落。
107  */
108 void HILINK_RegisterGetAcV2Func(HILINK_GetAcKeyFunc func);
109 
110 /*
111  * 功能:获取设备信息
112  * 参数:devinfo 出入参,待填充的设备信息
113  * 返回:获取成功返回 0,否则返-1
114  * 注意:(1) sn不填充时将使用设备mac地址作为sn。
115  *       (2) 如果产品定义有子型号则需要填充subProdId。
116  *       (3) 所有需要填充的字段都需要以'\0'结束。
117  *       (4) softap配网时devTypeName与manuName用来拼接ssid,两个字段长度和尽量不超过10字节,否则会截断。
118  */
119 int HILINK_GetDevInfo(HILINK_DevInfo *devinfo);
120 
121 /*
122  * 功能:获取设备服务信息
123  * 参数:(1) svcInfo 出入参,待填充的设备服务信息结构体指针数组。
124  *       (2) size 入参,svcInfo结构体指针数组大小。
125  * 返回:获取成功返回服务数量,否则返-1。
126  * 注意:所有需要填充的字段都需要以'\0'结束。
127  */
128 int HILINK_GetSvcInfo(HILINK_SvcInfo *svcInfo[], unsigned int size);
129 
130 /* 获取AC 参数接口函数 */
131 unsigned char *HILINK_GetAutoAc(void);
132 
133 /*
134  * 修改服务当前字段值
135  * svcId为服务的ID,payload为接收到需要修改的Json格式的字段与其值,len为payload的长度。
136  * 返回0表示该次控制为同步上报,由HILINK SDK上报。
137  * 返回-111表示该次控制为异步上报,修改成功后设备必须调用HILINK_ReportCharState主动上报。
138  * 其余返回值均为错误值,HILINK SDK不会上报任何信息。
139  */
140 int HILINK_PutCharState(const char *svcId, const char *payload, unsigned int len);
141 
142 /*
143  * 功能:单设备多服务批控接口
144  * 参数:payload为Json格式的报文内容(数组格式),len为payload的长度,例如:
145  * [
146  *   {"sid": "switch", "data":{"on": 1}},
147  *   {"sid": "brightness","data": {"brightness": 20}}
148  * ]
149  * 返回值:0表示服务状态值修改成功,不需要底层设备主动上报,由HiLink SDK上报。
150  *         -101表示获得报文不符合要求。
151  *         -111表示服务状态值正在修改中。
152  * 注意:(1) 此函数由设备厂商实现。
153  *       (2) 厂商需通过HILINK_EnableBatchControl(bool flag)接口打开或关闭批量控制功能,默认关闭。
154  */
155 int HILINK_ControlCharState(const char *payload, unsigned int len);
156 
157 /*
158  * 获取服务字段值
159  * svcId表示服务ID。厂商实现该函数时,需要对svcId进行判断。
160  * in表示接收到的Json格式的字段与其值。
161  * inLen表示接收到的in的长度。
162  * out表示保存服务字段值内容的指针,内存由厂商开辟,使用完成后,由Hilink Device SDK释放,需要以'\0'结尾,并保证内容符合json格式。
163  * outLen表示读取到的payload的长度。
164  * 返回0表示服务状态字段值获取成功,返回非0表示获取服务状态字段值不成功。
165  */
166 int HILINK_GetCharState(const char *svcId, const char *in, unsigned int inLen, char **out, unsigned int *outLen);
167 
168 /*
169  * 获取SoftAp配网PIN码
170  * 返回值为8位数字PIN码, 返回-1表示使用HiLink SDK的默认PIN码。
171  * 该接口需设备开发者实现。
172  * 安全认证要求,PIN码不能由sn、mac等设备固定信息生成。
173  */
174 int HILINK_GetPinCode(void);
175 
176 /*
177  * 通知设备的状态
178  * status表示设备当前的状态
179  * 注意: (1) 此函数由设备厂商根据产品业务选择性实现。
180  *      (2) 禁止在HILINK_NotifyDevStatus接口内回调HiLink SDK的对外接口。
181  */
182 void HILINK_NotifyDevStatus(int status);
183 
184  /*
185  * 功能:实现模组重启前的设备操作
186  * 参数:flag 入参,触发重启的类型
187  *          0表示HiLink SDK 线程看门狗触发模组重启。
188  *          1表示APP删除设备触发模组重启。
189  *          2表示设备长时间离线无法恢复而重启。
190             3表示网关定时重启。
191  * 返回值:0表示处理成功, 系统可以重启,使用硬重启。
192  *         1表示处理成功, 系统可以重启,如果通过HILINK_SetSdkAttr()注册了软重启(sdkAttr.rebootSoftware),使用软重启。
193  *         负值表示处理失败,系统不能重启。
194  * 注意:(1) 此函数由设备厂商实现。
195  *       (2) 若APP删除设备触发模组重启时,设备操作完务必返回0,否则会导致删除设备异常。
196  *       (3) 设备长时间离线无法恢复而重启,应对用户无感,不可影响用户体验,否则不可以重启。
197  */
198 int HILINK_ProcessBeforeRestart(int flag);
199 
200 #ifdef __cplusplus
201 #if __cplusplus
202 }
203 #endif
204 #endif
205 
206 #endif /* HILINK_DEVICE_H */