• 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_H
17 #define HILINK_H
18 
19 #include <stdarg.h>
20 #include <stdbool.h>
21 
22 #ifdef __cplusplus
23 #if __cplusplus
24 extern "C" {
25 #endif
26 #endif
27 
28 /*
29  * 功能: HiLink SDK属性结构体,开发者可以通过HILINK_GetSdkAttr查看当前系统的属性值,通过HILINK_SetSdkAttr设置新的属性值;
30  * 注意: (1) 普通设备形态和网桥设备形态的主线程任务栈大小,开发者根据产品形态,仅需设置对应产品形态的属性值即可;
31  *       (2) 使用HiLink SDK升级架构时,需要设置升级检查任务的栈大小和升级任务的栈大小
32  *       (3) 如果开发者未注册软重启接口rebootSoftware和硬重启接口rebootHardware,使用HiLink SDK默认实现接口(硬重启);
33  */
34 typedef struct {
35     unsigned long monitorTaskStackSize;    /* 监控任务栈大小,开发者根据具体情况调整,默认为1024字节 */
36     unsigned long deviceMainTaskStackSize; /* 普通设备形态,HiLink SDK运行主任务栈大小,开发者根据具体情况调整 */
37     unsigned long bridgeMainTaskStackSize; /* 网桥设备形态,HiLink SDK运行主任务栈大小,开发者根据具体情况调整 */
38     unsigned long otaCheckTaskStackSize;   /* HiLink OTA检查升级版本任务栈大小,开发者根据具体情况调整 */
39     unsigned long otaUpdateTaskStackSize;  /* HiLink OTA升级任务栈大小,开发者根据具体情况调整 */
40     int (*rebootSoftware)(void);           /* 异常场景软重启接口,不影响硬件状态,如果用户注册,首先使用此接口 */
41     int (*rebootHardware)(void);           /* 异常场景硬重启接口,影响硬件状态,如果用户没有注册软重启,使用此接口重启 */
42 } HILINK_SdkAttr;
43 
44 /* HiLink SDK支持的配网模式 */
45 enum HILINK_NetConfigMode {
46     HILINK_NETCONFIG_NONE, /* 不用配网, 通过网线等手段连接到网络 */
47     HILINK_NETCONFIG_WIFI, /* HiLink SDK提供的WiFi自动配网 */
48     HILINK_NETCONFIG_OTHER, /* 其他配网模式, APP发送WiFi的信息, 集成方收到WiFi信息数据后, 设置到HiLink SDK */
49     HILINK_NETCONFIG_BOTH, /* 其他配网模式和WiFi配网组合 */
50     HILINK_NETCONFIG_REGISTER_ONLY, /* HiLink SDK SoftAp配网仅接收注册信息 */
51     HILINK_NETCONFIG_NO_SOFTAP_REGISTER_ONLY, /* 不启动SoftAp, PIN码配网仅接收注册信息(通过网线/4G/5G等接入网络) */
52     HILINK_NETCONFIG_NAN_SOFTAP, /* WiFi感知超短距配网和SoftAp组合 */
53     HILINK_NETCONFIG_BUTT /* 非法配网模式 */
54 };
55 
56 typedef enum {
57     SETUP_TYPE_NORMAL = 0, /* 后装安装方式 */
58     SETUP_TYPE_CENTRAL = 1, /* 前装安装方式 */
59     SETUP_TYPE_AILIFE = SETUP_TYPE_NORMAL, /* 智慧生活APP安装方式 */
60     SETUP_TYPE_AIINSTALL = SETUP_TYPE_CENTRAL, /* 装维易APP安装方式 */
61     SETUP_TYPE_UNKNOW = 2, /* 无效安装方式 */
62     SETUP_TYPE_UNREGISTER = 3, /* 未注册回调 */
63 } SetupType;
64 
65 typedef struct {
66     int (*MlogProcFunc)(const char* format, va_list args);
67 
68     /*
69      * 功能:日志重定向
70      * 参数:logLevel,日志等级,详细信息参考hilink_log_manage.h
71      *       func,函数名
72      *       line,函数行号
73      *       format,格式化字符串
74      *       args,格式化字符串可变参数列表
75      * 注意:进行日志重定向要保留函数名和行号信息,推荐以{[{tag}]{level}:{func}() {line}, {msg}}进行输出
76      *       例如"[HiLink]INFO:HILINK_RegisterBaseCallback() 45, something"
77      *       日志重定向依然受当前HiLink日志等级的约束,详细参考hilink_log_manage.h
78      *       重定向后原有的串口打印不再生效
79      */
80     void (*LogVprint)(int logLevel, const char *func, unsigned int line, const char* format, va_list args);
81 
82     /**
83      * @brief 记录tracelog日志,适配按模块统计计数并流控的能力, 按字符串打印
84      *
85      * @param srcModule [IN] 记录跟踪日志的源模块
86      * @param dstModule [IN] 记录跟踪日志的目的模块
87      * @param msgType   [IN] 记录跟踪消息类型
88      * @param format    [IN] 格式化字符串
89      * @param args      [IN] 格式化字符串可变参数列表
90      * @attention 消息打印字符串长度超过单条最大长度时截断处理
91     */
92     void (*traceMsgPrint)(const char *srcModule, const char *dstModule,
93         const char *msgType, const char *format, va_list args);
94 
95     /**
96      * @brief 记录tracelog日志,适配按模块统计计数并流控的能力, 按字符串打印
97      *
98      * @param moduleId  [IN] 打印日志模块id
99      * @param srcModule [IN] 记录跟踪日志的源模块
100      * @param dstModule [IN] 记录跟踪日志的目的模块
101      * @param msgType   [IN] 记录跟踪消息类型
102      * @param content   [IN] 记录跟踪日志数据内容
103     */
104     void (*traceMsgPrintEx)(int moduleId, const char *srcModule, const char *dstModule,
105         const char *msgType, const char *content);
106 } HiLinkBaseCallback;
107 
108 /*
109  * 功能:注册基础功能回调函数
110  * 参数:cb,回调函数结构体指针
111  *       cbSize,回调函数结构体大小sizeof(HiLinkBaseCallback)
112  * 返回:0,成功
113  *       小于0,失败
114  */
115 int HILINK_RegisterBaseCallback(const HiLinkBaseCallback *cb, unsigned int cbSize);
116 
117 /*
118  * 功能: HiLink SDK入口函数
119  * 返回: 0表示成功,返回-1表示失败
120  */
121 int HILINK_Main(void);
122 
123 /* HiLink SDK 复位接口 */
124 void HILINK_Reset(void);
125 
126 /*
127  * 功能: 设置HiLink SDK属性
128  * 返回: 0表示设置成功,其他设置失败
129  */
130 int HILINK_SetSdkAttr(HILINK_SdkAttr sdkAttr);
131 
132 /* 查询HiLink SDK属性 */
133 HILINK_SdkAttr *HILINK_GetSdkAttr(void);
134 
135 /*
136  * 功能: HiLink SDK恢复出厂设置接口
137  * 返回: 0表示恢复出厂成功,返回-1表示恢复出厂失败
138  * 注意: (1) 设置成功后会清理掉ssid账号信息,并重启模组进入待配网状态
139  *       (2) 在设备未注册场景调用此接口恢复出厂, HiLink SDK会调用HILINK_NotifyDevStatus接口通知设备解绑状态
140  *       (3) 禁止在HILINK_NotifyDevStatus接口内回调 HiLink SDK对外接口
141  */
142 int HILINK_RestoreFactorySettings(void);
143 
144 /* 获取当前设备状态,如配网状态、连接云端、在线、离线等,具体见HiLinkStateMachine */
145 int HILINK_GetDevStatus(void);
146 
147 /* 获取当前设备集成的HiLink SDK的版本号 */
148 const char *HILINK_GetSdkVersion(void);
149 
150 /*
151  * 功能:主动上报服务属性状态
152  * 参数:(1) svcId 入参,服务ID
153  *       (2) payload 入参,json格式服务属性数据
154  *       (3) len 入参,payload长度
155  * 返回:返回0表示服务状态上报成功,返回-1表示服务状态上报失败
156  * 注意:(1) 该接口有同步与异步两种使用方式,对于事件类上报推荐使用同步上报
157  *       (2) 同步上报:payload不为NULL且len不为0时,调用该接口时,HiLink SDK会立即上报该payload
158  *       (3) 异步上报:payload为NULL或len为0时,调用该接口后,HiLink SDK会记录下该svcId,
159  *           并稍后(约200ms)调用HILINK_GetCharState接口获取服务属性并上报
160  */
161 int HILINK_ReportCharState(const char *svcId, const char *payload, unsigned int len);
162 
163 /*
164  * 功能:查询设备是否已被注册
165  * 返回:返回非0,已注册;返回0,未注册;
166  */
167 int HILINK_IsRegister(void);
168 
169 /*
170  * 获取当前设备组网状态
171  * 返回1表示中枢组网状态,返回2表示云组网状态,返回0表示异常状态
172  */
173 int HILINK_GetNetworkingMode(void);
174 
175 /*
176  * 获取当前设备注册状态
177  * 返回1表示中枢注册状态,返回2表示云注册状态,返回0表示未注册状态
178  */
179 int HILINK_GetRegisterStatus(void);
180 
181 /*
182  * 功能:设置HiLink SDK主任务调度时间间隔,默认为50ms
183  * 参数: interval HiLink SDK主任务调度时间间隔,单位为毫秒,取值范围[5,100]
184  * 返回:设置失败返回-1,成功返回0
185  * 注意:Hi3681L模组(支持低功耗)interval无取值范围限制
186  */
187 int HILINK_SetScheduleInterval(unsigned long interval);
188 
189 /*
190  * 功能:设置HiLink SDK守护任务调度时间间隔,默认1000ms
191  * 参数: interval HiLink SDK守护任务调度时间间隔,单位为毫秒
192  * 返回:设置失败返回-1,成功返回0
193  */
194 int HILINK_SetMonitorScheduleInterval(unsigned long interval);
195 
196 /* 设置产品配网模式, 注意: 需要在启动HILINK_Main之前调用本接口设置配网模式 */
197 int HILINK_SetNetConfigMode(enum HILINK_NetConfigMode netConfigMode);
198 
199 /* 查询当前产品的配网模式, 返回值为当前产品的配网模式 */
200 enum HILINK_NetConfigMode HILINK_GetNetConfigMode(void);
201 
202 /*
203  * 功能: 设置HiLink SDK配网超时时间,单位为秒
204  * 注意: 户外设备默认超时时间为2分钟,其余设备默认10分钟
205  */
206 void HILINK_SetNetConfigTimeout(unsigned long netConfigTimeout);
207 
208 /**
209  * @brief 设置设备在OTA升级完成重启到重新上线的时间,默认为120s
210  *
211  * @param bootTime [IN] 设置的时间
212  * @return 0表示成功,其他表示失败
213  * @attention 允许设置的最大时间bootTime最大为600
214  */
215 int HILINK_SetOtaBootTime(unsigned int bootTime);
216 
217 /*
218  * 功能: 设置HiLink SDK打开Kitframework认证,默认为关闭状态
219  * 注意: 该函数由设备开发者或厂商在HILINK_Main函数之前调用一次,不可动态调用
220  */
221 void HILINK_EnableKitframework(void);
222 
223 /*
224  * 功能: 设置HiLink SDK打开组播控制功能,默认为关闭状态
225  * 注意: 该函数由设备开发者或厂商在HILINK_Main函数之前调用;当前仅支持灯类WiFi产品使用,安全敏感设备请勿使用
226  *      组播控制将通过HILINK_ControlCharState接口传递至产品侧
227  */
228 void HILINK_EnableGroupCtrl(void);
229 
230 /*
231  * @brief 设置单设备多服务批控(type = 4),默认关闭
232  * @attention 批控使能打开后最终调用HILINK_ControlCharState,0表示关闭,1表示开启
233  */
234 void HILINK_EnableBatchControl(bool flag);
235 
236 /*
237  * 设备离线时,如果在App上删除了设备,设备再次上线时云端会给设备下发Errcode=5或Errcode=6错误码。
238  * 该接口用于使能SDK处理云端下发的Errcode=5或Errcode=6错误码。
239  * enable为0表示SDK不处理云端下发的Errcode=5或Errcode=6错误码,此时SDK不会清除设备端注册信息,
240  * 需要用户手动硬件恢复出厂设置,设备才能重新进行配网状态。
241  * enable为非0表示SDK处理云端下发的Errcode=5或Errcode=6错误码,此时SDK会清除设备端注册信息,重新进行配网状态
242  * 默认enable为1
243  */
244 void HILINK_EnableProcessDelErrCode(int enable);
245 
246 /*
247  * 开发者直接调用该接口完成设备解绑后装信息并恢复交房设置
248  * type 0:普通解绑 1:其它场景
249  * 返回0表示成功,其他错误码异常
250  */
251 void HILINK_UnbindDevice(int type);
252 
253 /*
254 * 设置设备安装方式
255 * type:0表示后装安装方式,1表示前装安装方式
256 * 正常返回0,异常返回其他错误码
257 */
258 int HILINK_SetDeviceInstallType(int type);
259 
260 /*
261  * 获取设备是否带前装标识
262  * 返回0:不带前装标识,1:带前装标识
263 */
264 SetupType HILINK_GetDevSetupType(void);
265 
266 /**
267  * @brief 使能devId继承功能
268  * WiFi单品如需支持故障更换,需要使能,默认不使能。
269  * @param[in] <isEnbale> 是否使能
270  */
271 void HILINK_EnableDevIdInherit(bool isEnbale);
272 
273 /**
274  * @brief 网络状态发生变化时系统调用此接口
275  *
276  * @param status [IN]
277  *             true - 网络可用
278  *             false - 网络不可用
279  * @return void
280  */
281 void HILINK_NotifyNetworkAvailable(bool status);
282 
283 /* hilink wifi配网模式入口函数 */
284 int hilink_entry(void *param);
285 
286 #ifdef __cplusplus
287 #if __cplusplus
288 }
289 #endif
290 #endif
291 
292 #endif /* HILINK_H */
293