123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340 |
- /*
- * Copyright (c) Huawei Technologies Co., Ltd. 2018-2021. All rights reserved.
- * Description: HiLink主流程框架集成头文件
- * Create: 2018-06-22
- */
- #ifndef _HILINK_H_
- #define _HILINK_H_
- #ifdef __cplusplus
- #if __cplusplus
- extern "C" {
- #endif
- #endif
- /*
- * HiLink SDK属性结构体,开发者可以通过HILINK_GetSdkAttr查看当前系统的属性值,通过HILINK_SetSdkAttr设置新的属性值;
- * 注意: 1) 普通设备形态和网桥设备形态的主线程任务栈大小,开发者根据产品形态,仅需设置对应产品形态的属性值即可;
- * 2) 使用HiLink SDK升级架构时,需要设置升级检查任务的栈大小和升级任务的栈大小
- * 3) 如果开发者未注册软重启接口rebootSoftware和硬重启接口rebootHardware,使用HiLink SDK默认实现接口(硬重启);
- */
- typedef struct {
- unsigned long monitorTaskStackSize; /* 监控任务栈大小,开发者根据具体情况调整,默认为1024字节 */
- unsigned long deviceMainTaskStackSize; /* 普通设备形态,HiLink SDK运行主任务栈大小,开发者根据具体情况调整 */
- unsigned long bridgeMainTaskStackSize; /* 网桥设备形态,HiLink SDK运行主任务栈大小,开发者根据具体情况调整 */
- unsigned long otaCheckTaskStackSize; /* HiLink OTA检查升级版本任务栈大小,开发者根据具体情况调整 */
- unsigned long otaUpdateTaskStackSize; /* HiLink OTA升级任务栈大小,开发者根据具体情况调整 */
- int (*rebootSoftware)(void); /* 异常场景软重启接口,不影响硬件状态,如果用户注册,首先使用此接口 */
- int (*rebootHardware)(void); /* 异常场景硬重启接口,影响硬件状态,如果用户没有注册软重启,使用此接口重启 */
- } HILINK_SdkAttr;
- /*
- * HiLink SDK入口函数
- * 返回0表示成功,返回-1表示失败
- */
- int hilink_main(void);
- #ifdef NETCFG
- int hilink_stop(void);
- #endif
- /* 获取当前设备状态,如配网状态、连接云端、在线、离线等 */
- int hilink_get_devstatus(void);
- /*
- * 开发者直接调用该接口完成设备恢复出厂设置
- * 返回0表示恢复出厂成功,返回-1表示恢复出厂失败
- * 该接口会设置恢复出厂标志,设置成功后会清理掉ssid账号信息,并重启模组
- */
- int hilink_restore_factory_settings(void);
- /*
- * 获取存储在Flash的用户配置信息
- * 参数len表示用户需要获取的配置信息长度
- * 参数config表示用户获取的配置信息缓存
- * 返回0表示获取成功,返回-1表示获取失败
- * config的内存分配和初始化由调用者完成;用户可获取的配置信息最大长度为32字节
- * 注意:1、需要在hilink_main初始化之后使用
- * 2、如果用户存储的是字符串,请用户保证存储的字符串长度不超过31字节,保证预留字符串结束符
- */
- int HilinkGetUserConfig(unsigned short len, char *config);
- /*
- * 设置用户配置信息到flash
- * 参数config表示用户配置信息
- * 参数len表示用户配置信息长度
- * 返回0表示设置成功,返回-1表示设置失败
- * 信息写入为覆盖更新,每次写入前会清空旧的数据;用户可存储的配置信息最大长度为32字节
- * 注意:1、需要在hilink_main初始化之后使用
- * 2、如果用户存储的是字符串,请用户保证存储的字符串长度不超过31字节,保证预留字符串结束符
- */
- int HilinkSetUserConfig(const char *config, unsigned short len);
- typedef struct {
- unsigned short year;
- unsigned char month;
- unsigned char day;
- unsigned char hour;
- unsigned char min;
- unsigned char sec;
- unsigned short ms;
- /* bit0置位表示星期一, 以此类推, 星期日为bit6置位, bit7无意义 */
- unsigned char w_day;
- } stHILINK_TIME_INFO, *pstHILINK_TIME_INFO;
- /* 时区字符串最大长度 */
- #define TIME_ZONE_STR_MAX_LEN 64
- /*
- * 时间同步模块获取本地日期信息
- * 返回0表示成功,返回非0表示失败
- */
- int hilink_get_local_time_info(pstHILINK_TIME_INFO p_time_info);
- /*
- * 时间同步模块获取当前UTC时间和时区信息
- * 返回0表示成功,返回非0表示失败
- */
- int hilink_get_utc_time_ms(unsigned long long *p_time_ms, char *time_zone, unsigned int len);
- /*
- * 时间同步模块获取当前UTC日期信息
- * 返回0表示成功,返回非0表示失败
- */
- int hilink_get_utc_time_info(pstHILINK_TIME_INFO p_time_info);
- /*
- * 时间同步模块转换ms为日期
- * 返回0表示成功,返回非0表示失败
- */
- int hilink_convert_time(unsigned long long time_ms, pstHILINK_TIME_INFO p_time_info);
- /*
- * 设备离线时,如果在App上删除了设备,设备再次上线时云端会给设备下发Errcode=5或Errcode=6错误码。
- * 该接口用于使能SDK处理云端下发的Errcode=5或Errcode=6错误码。
- * enable为0表示SDK不处理云端下发的Errcode=5或Errcode=6错误码,此时SDK不会清除设备端注册信息,
- * 需要用户手动硬件恢复出厂设置,设备才能重新进行配网状态。
- * enable为非0表示SDK处理云端下发的Errcode=5或Errcode=6错误码,此时SDK会清除设备端注册信息,重新进行配网状态
- * 默认enable为1
- */
- void HILINK_EnableProcessDelErrCode(int enable);
- /*
- * 获取SoftAp配网PIN码
- * 返回值为8位数字PIN码,返回-1表示使用HiLink SDK的默认PIN码
- * 该接口需设备开发者实现
- */
- int HiLinkGetPinCode(void);
- /*
- * 设置配网信息
- * 入参数据为json格式字符串,具体内容字段如下:
- * {
- * "ssid": "HUAWEI-Router", //路由器SSID字段,必选
- * "password": "m12345678", //路由器密码字段,必选
- * "devId": "f0356deb-4f18-42a3-b205-d2878b4adeae", //注册信息-设备ID字段,必选
- * "psk": "69a4d3d1ac0022775dd5df0a5f7329cf", //注册信息-预制秘钥字段(转换十六进制字符串),必选
- * "code": "cD9EZsJn", //注册信息-激活码字段,必选
- * "cloudPrimaryUrl": "whiomplatform.hwcloudtest.cn", //主域名字段(主备域名),必选
- * "cloudStandbyUrl": "whiomplatform.hwcloudtest.cn", //备份域名字段(主备域名),必选
- * "cloudUrl": "whiomplatform.hwcloudtest.cn", //域名字段(兼容方案),可选
- * "WifiBgnSwitch": 1, //WiFi工作模式字段,可选
- * "timeZoneDisplay": "GMT+08:00", //时区信息,可选
- * "timeZoneId": "Asia/Shanghai" //时区ID,可选
- * }
- * 返回0表示设置成功,其他表示设置失败(-2表示HiLink未处于接收配网数据状态)
- */
- int HILINK_SetNetConfigInfo(const char *info);
- /*
- * 获取配网信息回调
- * 入参数据为json格式字符串,具体内容字段如下:
- * {
- * "ssid": "HUAWEI-Router", //路由器SSID字段
- * "password": "m12345678", //路由器密码字段
- * }
- * 该接口需设备开发者实现
- */
- void HILINK_GetNetConfigInfo(const char *info);
- /*
- * HiLink SDK外部诊断信息记录接口
- * 该接口已经对外提供给第三方厂商使用,为了前向兼容,暂不按最新编码规范整改
- */
- void hilink_diagnosis_record_ex(int errCode);
- /*
- * 上报report能力属性状态,该接口为同步接口
- * 服务字段状态发生改变主动上报到云平台(连接云平台时)或者HiLink网关(连接HiLink网关时)
- * svcId表示服务ID
- * payload表示json格式数据
- * len表示payload长度
- * taskId表示调用该接口的线程的id
- * 返回0表示服务状态上报成功,返回-1表示服务状态上报失败
- * 该接口已经对外提供给第三方厂商使用,为了前向兼容,暂不按最新编码规范整改
- */
- int hilink_report_char_state(const char *svcId, const char *payload, unsigned int len, int taskId);
- /*
- * 上报服务状态,该接口为异步接口
- * 服务字段状态发生改变主动上报到云平台(连接云平台时)或者HiLink网关(连接HiLink网关时)
- * svcId表示服务ID
- * payload为json格式数据
- * len表示payload长度
- * 返回0表示服务状态上报成功,返回-1表示服务状态上报失败
- * 该接口已经对外提供给第三方厂商使用,为了前向兼容,暂不按最新编码规范整改
- */
- int hilink_upload_char_state(const char *svcId, const char *payload, unsigned int len);
- /* 设置HiLink SDK属性,返回0表示设置成功,否则,设置失败 */
- int HILINK_SetSdkAttr(HILINK_SdkAttr sdkAttr);
- /* 查询HiLink SDK属性 */
- HILINK_SdkAttr *HILINK_GetSdkAttr(void);
- /*
- * 厂家需要实现此接口实现license的写入,写入flash位置或者写入文件由厂家决定。
- * 厂家需要保证备份机制,防止突然断电导致license信息丢失,如果license信息丢失,将
- * 无法继续绑定设备,设备将不能再使用。
- * 执行成功返回0,执行失败返回-1
- */
- int HILINK_WriteLicense(const unsigned char *license, unsigned int len);
- /*
- * 厂家需要实现此接口实现license读取,读取flash位置或者写入文件由厂家决定。
- * 执行成功返回0,执行失败返回-1
- */
- int HILINK_ReadLicense(unsigned char *license, unsigned int len);
- /*
- * 查询设备是否已被注册
- * 返回非0,已注册;返回0,未注册;
- */
- int HILINK_IsRegister(void);
- /*
- * 设置HiLink SDK配置信息保存路径,仅linux和android版本适用
- * path为路径信息,绝对路径长度不超过127;
- * 返回0,设置成功;返回非0,设置失败。
- * 注意: 非linux和android系统无此接口实现
- */
- int HILINK_SetConfigInfoPath(const char *path);
- /*
- * 查询HiLink SDK配置信息保存路径,仅linux和android版本适用
- * path为保存路径的缓冲区;len为缓冲区长度;
- * 返回0,获取成功;返回非0,获取失败。
- * 注意: 非linux和android系统无此接口实现
- */
- int HILINK_GetConfigInfoPath(char *path, unsigned int len);
- /*
- * 查询当前设备敏感性标识。
- * 返回0为非敏感设备,返回1为敏感设备
- */
- int HILINK_IsSensitiveDevice(void);
- /* 厂商调用该接口获取匿名结构体 */
- const void *HILINK_GetVoiceContext(void);
- /*
- * 设备处于待用户识别状态时通知用户: 表现为持续蜂鸣或闪灯2s.
- * 参数enable表示识别状态,1为开始蜂鸣或闪灯,0为结束蜂鸣或闪灯.
- * 注意: 函数由设备开发者或厂商实现,仅在hi3861模组使用.
- */
- void HILINK_SetNanIdentifyStatus(int enable);
- /*
- * 设置WIFI安全距离的功率
- * 参数power:表示安全距离对应的发射通道功率,该值不能低于-70db;
- * 需要保证空口功率小于等于-65dBm,根据真实设备来调整.
- * 返回值:0表示设置成功,-1表示设置失败.
- * 注意: 函数由设备开发者或厂商调用,仅在hi3861模组使用.
- */
- int HILINK_SetSafeDistancePower(char power);
- /*
- * 设置是否使能PKI特性
- * 参数enable:表示使能还是不使能,传1表示使能,传0表示不使能
- * 注意: (1)函数由设备开发者或厂商调用,仅在支持PKI特性的模组使用
- * (2)仅限新品类产品使用,已经商用的产品的新版本不能开启
- * (3)开启该特性时,务必确保产线有相应的测试流程
- */
- void HILINK_EnablePkiVerify(int enable);
- /*
- * 产测模式下使能预置PKI证书模式, 使能后才能通过AT命令写入证书
- * 注意: 函数由设备开发者或厂商调用,仅在hi3861模组使用.
- */
- int HILINK_EnableFactoryPkiMode(void);
- /*
- * 获取设备的子型号,长度固定两个字节
- * subProdId为保存子型号的缓冲区,len为缓冲区的长度
- * 如果产品定义有子型号,则填入两字节子型号,并以'\0'结束, 返回0
- * 没有定义子型号,则返回-1
- * 该接口需设备开发者实现
- */
- int HILINK_GetSubProdId(char *subProdId, int len);
- /*
- * 获取设备表面的最强点信号发射功率强度,最强点位置的确定以及功率测试方
- * 法,参照hilink认证wifi靠近发现功率设置及测试方法指导文档,power为出参
- * ,单位dbm,返回设备表面的最强信号强度值,如果厂商不想使用wifi靠近发现功
- * 能,接口直接返-1,sdk就不做wifi靠近发现的初始化,如果需要使用wifi靠近
- * 发现,则接口返回0,power返回对应的功率值,power的有效值必须<=20dbm,如
- * 果接口返回0,但power大于20,则也不做wifi靠近发现的初始化,功能不可用
- */
- int HILINK_GetDevSurfacePower(char *power);
- /*
- * 如果使用双备份功能,则分别设置云端注册信息备份存储地址、时间信息备份存储地址、wifi账号密码备份存储地址
- * 返回0表示设置成功,-1表示设置失败
- * 注意:1) 三种信息地址可分别存储,传入参数必须大于等于0,如果参数传入0,表示双备份中该参数对应的信息不进行备份保存;
- * 每个参数存储地址按照4k对齐(hi3861除外),不能与现有数据区存在重叠。
- * 2) hi3861模组注册信息至少分配2k存储空间,时间管理信息至少分配3k存储空间;wifi信息至少分配1k存储空间;
- * 其余模组按照4k大小来分配。
- * 3) ESP32、MTK7682模组wifi账号信息由系统保存,不进行备份,wifiInfoAddr必须直接传入0
- * 4) ESP8266模组wifi账号信息由系统保存,注册信息采用系统自带的双备份功能,因此这两个参数必须直接传入0
- * 5) LPB130模组wifi账号信息由系统保存,该参数必须直接传入0,在该函数中传入的各个参数地址为相对于0x000D4000的偏移地址。
- * 6) RTL8711AM为桥设备,不具有时间管理功能,timeInfoAddr必须直接传入0。
- */
- int HILINK_SetBakAddr(unsigned long regInfoAddr, unsigned long timeInfoAddr, unsigned long wifiInfoAddr);
- /*
- * 设置HiLink SDK主任务调度时间间隔,默认50ms
- * 如果设置失败返回-1,成功返回0
- * 该函数由设备开发者或厂商调用
- * interval: HiLink SDK主任务调度时间间隔,单位为毫秒,取值范围[5,100]
- * 注意:Hi3681L模组(支持低功耗)interval无取值范围限制
- */
- int HILINK_SetScheduleInterval(unsigned long interval);
- /*
- * 设置HiLink SDK守护任务调度时间间隔,默认1000ms
- * 如果设置失败返回-1,成功返回0
- * 该函数由设备开发者或厂商调用
- * interval: HiLink SDK守护任务调度时间间隔,单位为毫秒
- */
- int HILINK_SetMonitorScheduleInterval(unsigned long interval);
- /*
- * 设置HiLink SDK配网超时时间,单位为秒
- * 该函数由设备开发者或厂商调用
- * 注意:户外设备默认超时时间为2分钟,其余设备默认10分钟
- */
- void HILINK_SetNetConfigTimeout(unsigned long netConfigTimeout);
- /*
- * 设置HiLink SDK 复位
- * 该函数由设备开发者或厂商调用
- */
- void HILINK_Reset(void);
- #ifdef __cplusplus
- #if __cplusplus
- }
- #endif
- #endif
- #endif /* _HILINK_H_ */
|