341 lines
12 KiB
C
341 lines
12 KiB
C
/*
|
||
* 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_ */
|