hilink.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  1. /*
  2. * Copyright (c) Huawei Technologies Co., Ltd. 2018-2021. All rights reserved.
  3. * Description: HiLink主流程框架集成头文件
  4. * Create: 2018-06-22
  5. */
  6. #ifndef _HILINK_H_
  7. #define _HILINK_H_
  8. #ifdef __cplusplus
  9. #if __cplusplus
  10. extern "C" {
  11. #endif
  12. #endif
  13. /*
  14. * HiLink SDK属性结构体,开发者可以通过HILINK_GetSdkAttr查看当前系统的属性值,通过HILINK_SetSdkAttr设置新的属性值;
  15. * 注意: 1) 普通设备形态和网桥设备形态的主线程任务栈大小,开发者根据产品形态,仅需设置对应产品形态的属性值即可;
  16. * 2) 使用HiLink SDK升级架构时,需要设置升级检查任务的栈大小和升级任务的栈大小
  17. * 3) 如果开发者未注册软重启接口rebootSoftware和硬重启接口rebootHardware,使用HiLink SDK默认实现接口(硬重启);
  18. */
  19. typedef struct {
  20. unsigned long monitorTaskStackSize; /* 监控任务栈大小,开发者根据具体情况调整,默认为1024字节 */
  21. unsigned long deviceMainTaskStackSize; /* 普通设备形态,HiLink SDK运行主任务栈大小,开发者根据具体情况调整 */
  22. unsigned long bridgeMainTaskStackSize; /* 网桥设备形态,HiLink SDK运行主任务栈大小,开发者根据具体情况调整 */
  23. unsigned long otaCheckTaskStackSize; /* HiLink OTA检查升级版本任务栈大小,开发者根据具体情况调整 */
  24. unsigned long otaUpdateTaskStackSize; /* HiLink OTA升级任务栈大小,开发者根据具体情况调整 */
  25. int (*rebootSoftware)(void); /* 异常场景软重启接口,不影响硬件状态,如果用户注册,首先使用此接口 */
  26. int (*rebootHardware)(void); /* 异常场景硬重启接口,影响硬件状态,如果用户没有注册软重启,使用此接口重启 */
  27. } HILINK_SdkAttr;
  28. /*
  29. * HiLink SDK入口函数
  30. * 返回0表示成功,返回-1表示失败
  31. */
  32. int hilink_main(void);
  33. #ifdef NETCFG
  34. int hilink_stop(void);
  35. #endif
  36. /* 获取当前设备状态,如配网状态、连接云端、在线、离线等 */
  37. int hilink_get_devstatus(void);
  38. /*
  39. * 开发者直接调用该接口完成设备恢复出厂设置
  40. * 返回0表示恢复出厂成功,返回-1表示恢复出厂失败
  41. * 该接口会设置恢复出厂标志,设置成功后会清理掉ssid账号信息,并重启模组
  42. */
  43. int hilink_restore_factory_settings(void);
  44. /*
  45. * 获取存储在Flash的用户配置信息
  46. * 参数len表示用户需要获取的配置信息长度
  47. * 参数config表示用户获取的配置信息缓存
  48. * 返回0表示获取成功,返回-1表示获取失败
  49. * config的内存分配和初始化由调用者完成;用户可获取的配置信息最大长度为32字节
  50. * 注意:1、需要在hilink_main初始化之后使用
  51. * 2、如果用户存储的是字符串,请用户保证存储的字符串长度不超过31字节,保证预留字符串结束符
  52. */
  53. int HilinkGetUserConfig(unsigned short len, char *config);
  54. /*
  55. * 设置用户配置信息到flash
  56. * 参数config表示用户配置信息
  57. * 参数len表示用户配置信息长度
  58. * 返回0表示设置成功,返回-1表示设置失败
  59. * 信息写入为覆盖更新,每次写入前会清空旧的数据;用户可存储的配置信息最大长度为32字节
  60. * 注意:1、需要在hilink_main初始化之后使用
  61. * 2、如果用户存储的是字符串,请用户保证存储的字符串长度不超过31字节,保证预留字符串结束符
  62. */
  63. int HilinkSetUserConfig(const char *config, unsigned short len);
  64. typedef struct {
  65. unsigned short year;
  66. unsigned char month;
  67. unsigned char day;
  68. unsigned char hour;
  69. unsigned char min;
  70. unsigned char sec;
  71. unsigned short ms;
  72. /* bit0置位表示星期一, 以此类推, 星期日为bit6置位, bit7无意义 */
  73. unsigned char w_day;
  74. } stHILINK_TIME_INFO, *pstHILINK_TIME_INFO;
  75. /* 时区字符串最大长度 */
  76. #define TIME_ZONE_STR_MAX_LEN 64
  77. /*
  78. * 时间同步模块获取本地日期信息
  79. * 返回0表示成功,返回非0表示失败
  80. */
  81. int hilink_get_local_time_info(pstHILINK_TIME_INFO p_time_info);
  82. /*
  83. * 时间同步模块获取当前UTC时间和时区信息
  84. * 返回0表示成功,返回非0表示失败
  85. */
  86. int hilink_get_utc_time_ms(unsigned long long *p_time_ms, char *time_zone, unsigned int len);
  87. /*
  88. * 时间同步模块获取当前UTC日期信息
  89. * 返回0表示成功,返回非0表示失败
  90. */
  91. int hilink_get_utc_time_info(pstHILINK_TIME_INFO p_time_info);
  92. /*
  93. * 时间同步模块转换ms为日期
  94. * 返回0表示成功,返回非0表示失败
  95. */
  96. int hilink_convert_time(unsigned long long time_ms, pstHILINK_TIME_INFO p_time_info);
  97. /*
  98. * 设备离线时,如果在App上删除了设备,设备再次上线时云端会给设备下发Errcode=5或Errcode=6错误码。
  99. * 该接口用于使能SDK处理云端下发的Errcode=5或Errcode=6错误码。
  100. * enable为0表示SDK不处理云端下发的Errcode=5或Errcode=6错误码,此时SDK不会清除设备端注册信息,
  101. * 需要用户手动硬件恢复出厂设置,设备才能重新进行配网状态。
  102. * enable为非0表示SDK处理云端下发的Errcode=5或Errcode=6错误码,此时SDK会清除设备端注册信息,重新进行配网状态
  103. * 默认enable为1
  104. */
  105. void HILINK_EnableProcessDelErrCode(int enable);
  106. /*
  107. * 获取SoftAp配网PIN码
  108. * 返回值为8位数字PIN码,返回-1表示使用HiLink SDK的默认PIN码
  109. * 该接口需设备开发者实现
  110. */
  111. int HiLinkGetPinCode(void);
  112. /*
  113. * 设置配网信息
  114. * 入参数据为json格式字符串,具体内容字段如下:
  115. * {
  116. * "ssid": "HUAWEI-Router", //路由器SSID字段,必选
  117. * "password": "m12345678", //路由器密码字段,必选
  118. * "devId": "f0356deb-4f18-42a3-b205-d2878b4adeae", //注册信息-设备ID字段,必选
  119. * "psk": "69a4d3d1ac0022775dd5df0a5f7329cf", //注册信息-预制秘钥字段(转换十六进制字符串),必选
  120. * "code": "cD9EZsJn", //注册信息-激活码字段,必选
  121. * "cloudPrimaryUrl": "whiomplatform.hwcloudtest.cn", //主域名字段(主备域名),必选
  122. * "cloudStandbyUrl": "whiomplatform.hwcloudtest.cn", //备份域名字段(主备域名),必选
  123. * "cloudUrl": "whiomplatform.hwcloudtest.cn", //域名字段(兼容方案),可选
  124. * "WifiBgnSwitch": 1, //WiFi工作模式字段,可选
  125. * "timeZoneDisplay": "GMT+08:00", //时区信息,可选
  126. * "timeZoneId": "Asia/Shanghai" //时区ID,可选
  127. * }
  128. * 返回0表示设置成功,其他表示设置失败(-2表示HiLink未处于接收配网数据状态)
  129. */
  130. int HILINK_SetNetConfigInfo(const char *info);
  131. /*
  132. * 获取配网信息回调
  133. * 入参数据为json格式字符串,具体内容字段如下:
  134. * {
  135. * "ssid": "HUAWEI-Router", //路由器SSID字段
  136. * "password": "m12345678", //路由器密码字段
  137. * }
  138. * 该接口需设备开发者实现
  139. */
  140. void HILINK_GetNetConfigInfo(const char *info);
  141. /*
  142. * HiLink SDK外部诊断信息记录接口
  143. * 该接口已经对外提供给第三方厂商使用,为了前向兼容,暂不按最新编码规范整改
  144. */
  145. void hilink_diagnosis_record_ex(int errCode);
  146. /*
  147. * 上报report能力属性状态,该接口为同步接口
  148. * 服务字段状态发生改变主动上报到云平台(连接云平台时)或者HiLink网关(连接HiLink网关时)
  149. * svcId表示服务ID
  150. * payload表示json格式数据
  151. * len表示payload长度
  152. * taskId表示调用该接口的线程的id
  153. * 返回0表示服务状态上报成功,返回-1表示服务状态上报失败
  154. * 该接口已经对外提供给第三方厂商使用,为了前向兼容,暂不按最新编码规范整改
  155. */
  156. int hilink_report_char_state(const char *svcId, const char *payload, unsigned int len, int taskId);
  157. /*
  158. * 上报服务状态,该接口为异步接口
  159. * 服务字段状态发生改变主动上报到云平台(连接云平台时)或者HiLink网关(连接HiLink网关时)
  160. * svcId表示服务ID
  161. * payload为json格式数据
  162. * len表示payload长度
  163. * 返回0表示服务状态上报成功,返回-1表示服务状态上报失败
  164. * 该接口已经对外提供给第三方厂商使用,为了前向兼容,暂不按最新编码规范整改
  165. */
  166. int hilink_upload_char_state(const char *svcId, const char *payload, unsigned int len);
  167. /* 设置HiLink SDK属性,返回0表示设置成功,否则,设置失败 */
  168. int HILINK_SetSdkAttr(HILINK_SdkAttr sdkAttr);
  169. /* 查询HiLink SDK属性 */
  170. HILINK_SdkAttr *HILINK_GetSdkAttr(void);
  171. /*
  172. * 厂家需要实现此接口实现license的写入,写入flash位置或者写入文件由厂家决定。
  173. * 厂家需要保证备份机制,防止突然断电导致license信息丢失,如果license信息丢失,将
  174. * 无法继续绑定设备,设备将不能再使用。
  175. * 执行成功返回0,执行失败返回-1
  176. */
  177. int HILINK_WriteLicense(const unsigned char *license, unsigned int len);
  178. /*
  179. * 厂家需要实现此接口实现license读取,读取flash位置或者写入文件由厂家决定。
  180. * 执行成功返回0,执行失败返回-1
  181. */
  182. int HILINK_ReadLicense(unsigned char *license, unsigned int len);
  183. /*
  184. * 查询设备是否已被注册
  185. * 返回非0,已注册;返回0,未注册;
  186. */
  187. int HILINK_IsRegister(void);
  188. /*
  189. * 设置HiLink SDK配置信息保存路径,仅linux和android版本适用
  190. * path为路径信息,绝对路径长度不超过127;
  191. * 返回0,设置成功;返回非0,设置失败。
  192. * 注意: 非linux和android系统无此接口实现
  193. */
  194. int HILINK_SetConfigInfoPath(const char *path);
  195. /*
  196. * 查询HiLink SDK配置信息保存路径,仅linux和android版本适用
  197. * path为保存路径的缓冲区;len为缓冲区长度;
  198. * 返回0,获取成功;返回非0,获取失败。
  199. * 注意: 非linux和android系统无此接口实现
  200. */
  201. int HILINK_GetConfigInfoPath(char *path, unsigned int len);
  202. /*
  203. * 查询当前设备敏感性标识。
  204. * 返回0为非敏感设备,返回1为敏感设备
  205. */
  206. int HILINK_IsSensitiveDevice(void);
  207. /* 厂商调用该接口获取匿名结构体 */
  208. const void *HILINK_GetVoiceContext(void);
  209. /*
  210. * 设备处于待用户识别状态时通知用户: 表现为持续蜂鸣或闪灯2s.
  211. * 参数enable表示识别状态,1为开始蜂鸣或闪灯,0为结束蜂鸣或闪灯.
  212. * 注意: 函数由设备开发者或厂商实现,仅在hi3861模组使用.
  213. */
  214. void HILINK_SetNanIdentifyStatus(int enable);
  215. /*
  216. * 设置WIFI安全距离的功率
  217. * 参数power:表示安全距离对应的发射通道功率,该值不能低于-70db;
  218. * 需要保证空口功率小于等于-65dBm,根据真实设备来调整.
  219. * 返回值:0表示设置成功,-1表示设置失败.
  220. * 注意: 函数由设备开发者或厂商调用,仅在hi3861模组使用.
  221. */
  222. int HILINK_SetSafeDistancePower(char power);
  223. /*
  224. * 设置是否使能PKI特性
  225. * 参数enable:表示使能还是不使能,传1表示使能,传0表示不使能
  226. * 注意: (1)函数由设备开发者或厂商调用,仅在支持PKI特性的模组使用
  227. * (2)仅限新品类产品使用,已经商用的产品的新版本不能开启
  228. * (3)开启该特性时,务必确保产线有相应的测试流程
  229. */
  230. void HILINK_EnablePkiVerify(int enable);
  231. /*
  232. * 产测模式下使能预置PKI证书模式, 使能后才能通过AT命令写入证书
  233. * 注意: 函数由设备开发者或厂商调用,仅在hi3861模组使用.
  234. */
  235. int HILINK_EnableFactoryPkiMode(void);
  236. /*
  237. * 获取设备的子型号,长度固定两个字节
  238. * subProdId为保存子型号的缓冲区,len为缓冲区的长度
  239. * 如果产品定义有子型号,则填入两字节子型号,并以'\0'结束, 返回0
  240. * 没有定义子型号,则返回-1
  241. * 该接口需设备开发者实现
  242. */
  243. int HILINK_GetSubProdId(char *subProdId, int len);
  244. /*
  245. * 获取设备表面的最强点信号发射功率强度,最强点位置的确定以及功率测试方
  246. * 法,参照hilink认证wifi靠近发现功率设置及测试方法指导文档,power为出参
  247. * ,单位dbm,返回设备表面的最强信号强度值,如果厂商不想使用wifi靠近发现功
  248. * 能,接口直接返-1,sdk就不做wifi靠近发现的初始化,如果需要使用wifi靠近
  249. * 发现,则接口返回0,power返回对应的功率值,power的有效值必须<=20dbm,如
  250. * 果接口返回0,但power大于20,则也不做wifi靠近发现的初始化,功能不可用
  251. */
  252. int HILINK_GetDevSurfacePower(char *power);
  253. /*
  254. * 如果使用双备份功能,则分别设置云端注册信息备份存储地址、时间信息备份存储地址、wifi账号密码备份存储地址
  255. * 返回0表示设置成功,-1表示设置失败
  256. * 注意:1) 三种信息地址可分别存储,传入参数必须大于等于0,如果参数传入0,表示双备份中该参数对应的信息不进行备份保存;
  257. * 每个参数存储地址按照4k对齐(hi3861除外),不能与现有数据区存在重叠。
  258. * 2) hi3861模组注册信息至少分配2k存储空间,时间管理信息至少分配3k存储空间;wifi信息至少分配1k存储空间;
  259. * 其余模组按照4k大小来分配。
  260. * 3) ESP32、MTK7682模组wifi账号信息由系统保存,不进行备份,wifiInfoAddr必须直接传入0
  261. * 4) ESP8266模组wifi账号信息由系统保存,注册信息采用系统自带的双备份功能,因此这两个参数必须直接传入0
  262. * 5) LPB130模组wifi账号信息由系统保存,该参数必须直接传入0,在该函数中传入的各个参数地址为相对于0x000D4000的偏移地址。
  263. * 6) RTL8711AM为桥设备,不具有时间管理功能,timeInfoAddr必须直接传入0。
  264. */
  265. int HILINK_SetBakAddr(unsigned long regInfoAddr, unsigned long timeInfoAddr, unsigned long wifiInfoAddr);
  266. /*
  267. * 设置HiLink SDK主任务调度时间间隔,默认50ms
  268. * 如果设置失败返回-1,成功返回0
  269. * 该函数由设备开发者或厂商调用
  270. * interval: HiLink SDK主任务调度时间间隔,单位为毫秒,取值范围[5,100]
  271. * 注意:Hi3681L模组(支持低功耗)interval无取值范围限制
  272. */
  273. int HILINK_SetScheduleInterval(unsigned long interval);
  274. /*
  275. * 设置HiLink SDK守护任务调度时间间隔,默认1000ms
  276. * 如果设置失败返回-1,成功返回0
  277. * 该函数由设备开发者或厂商调用
  278. * interval: HiLink SDK守护任务调度时间间隔,单位为毫秒
  279. */
  280. int HILINK_SetMonitorScheduleInterval(unsigned long interval);
  281. /*
  282. * 设置HiLink SDK配网超时时间,单位为秒
  283. * 该函数由设备开发者或厂商调用
  284. * 注意:户外设备默认超时时间为2分钟,其余设备默认10分钟
  285. */
  286. void HILINK_SetNetConfigTimeout(unsigned long netConfigTimeout);
  287. /*
  288. * 设置HiLink SDK 复位
  289. * 该函数由设备开发者或厂商调用
  290. */
  291. void HILINK_Reset(void);
  292. #ifdef __cplusplus
  293. #if __cplusplus
  294. }
  295. #endif
  296. #endif
  297. #endif /* _HILINK_H_ */