123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- /*
- * Copyright (c) Huawei Technologies Co., Ltd. 2020-2021. All rights reserved.
- * Description: 蓝牙SDK API头文件
- */
- #ifndef HILINK_BT_API_H
- #define HILINK_BT_API_H
- #include "ble_cfg_net_api.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- /* 广播最大长度 */
- #define ADV_VALUE_MAX_LEN 31
- /* 销毁蓝牙协议栈标志 */
- #define BLE_DEINIT_FALG 0x1234ABCD
- typedef enum {
- HILINK_BT_SDK_STATUS_SVC_RUNNING = 0, /* 正常运行 */
- HILINK_BT_SDK_STATUS_DEINIT, /* 注销 */
- HILINK_BT_SDK_STATUS_NAME_SET_ABNORM, /* 蓝牙名称设置异常 */
- HILINK_BT_SDK_STATUS_DISCOVER_MODE_SET_ABNORM, /* 蓝牙可发现模式设置异常 */
- HILINK_BT_SDK_STATUS_REG_APP_ABNORM, /* 注册BLE应用异常 */
- HILINK_BT_SDK_STATUS_SVC_CREATE_ABNORM, /* 服务创建异常 */
- HILINK_BT_SDK_STATUS_CHAR_ADD_ABNORM, /* 属性添加异常 */
- HILINK_BT_SDK_STATUS_DESC_ADD_ABNORM, /* 描述添加异常 */
- HILINK_BT_SDK_STATUS_SVC_START_ABNORM, /* 服务启动异常 */
- HILINK_BT_SDK_STATUS_ADV_PARA_SET_ABNORM, /* 广播参数设置异常 */
- HILINK_BT_SDK_STATUS_ADV_DATA_SET_ABNORM, /* 广播数据设置异常 */
- HILINK_BT_SDK_STATUS_ADV_START_ABNORM, /* 广播启动异常 */
- } HILINK_BT_SdkStatus;
- /* GATTS char属性取值 */
- typedef enum {
- HILINK_BT_CHAR_PROP_WRITE = 0x08,
- HILINK_BT_CHAR_PROP_READ = 0x02,
- HILINK_BT_CHAR_PROP_NOTIFY = 0x10,
- HILINK_BT_CHAR_PROP_INDICATE = 0x20
- } HILINK_BT_CharProperty;
- /* GATTS char权限取值 */
- typedef enum {
- HILINK_BT_CHAR_PERM_READ = 0x01,
- HILINK_BT_CHAR_PERM_READ_ENCRYPTED = 0x02,
- HILINK_BT_CHAR_PERM_READ_ENCRYPTED_MITM = 0x04,
- HILINK_BT_CHAR_PERM_WRITE = 0x10,
- HILINK_BT_CHAR_PERM_WRITE_ENCRYPTED = 0x20,
- HILINK_BT_CHAR_PERM_WRITE_ENCRYPTED_MITM = 0x40,
- HILINK_BT_CHAR_PERM_WRITE_SIGNED = 0x80,
- HILINK_BT_CHAR_PERM_WRITE_SIGNED_MITM = 0x100,
- } HILINK_BT_CharPermission;
- /* GATTS desc属性取值 */
- typedef enum {
- HILINK_BT_DESC_PERM_WRITE = 0x01,
- HILINK_BT_DESC_PERM_READ = 0x02
- } HILINK_BT_DescPermission;
- /* 属性值类型: 整型和属性 */
- typedef enum {
- HILINK_BT_CMD_DATA_TYPE_INT,
- HILINK_BT_CMD_DATA_TYPE_STR,
- } HILINK_BT_CmdDataType;
- /* hilink蓝牙应用层数据编码类型 */
- typedef enum {
- HILINK_BT_CMD_DATA_MODE_TLV = 0x00, /* TLV格式: 降低报文占用的空间 */
- HILINK_BT_CMD_DATA_MODE_JSON = 0x01 /* JSON格式: 扩展性更好,默认格式 */
- } HILINK_BT_CmdDataMode;
- /* 发送蓝牙SDK状态回调函数类型 */
- typedef void (*HILINK_BT_SdkEventCallBack)(HILINK_BT_SdkStatus event, const void *param);
- /* 发送蓝牙数据回调函数类型 */
- typedef int (*HILINK_BT_SendBtDataCallback)(const unsigned char *buf, unsigned int len);
- /* 自定义gatt服务读事件回调 */
- typedef int (*HILINK_BT_GattReadCallback)(unsigned char *out, unsigned int *outLen);
- /* 自定义gatt服务写事件回调 */
- typedef int (*HILINK_BT_GattWriteCallback)(const unsigned char *in, unsigned int inLen);
- /* 获取蓝牙mac地址的回调函数 */
- typedef int (*HILINK_BT_GetBtMacCallBack)(const unsigned char *buf, unsigned int len);
- /* 产品信息定义结构体 */
- typedef struct {
- char *manuName;
- char *devName;
- char *productId;
- char *sn;
- char *mac;
- char *subProductId;
- } HILINK_BT_DevInfo;
- /* 产品功能命令定义结构体 */
- typedef struct {
- unsigned char attrIdx;
- char *attr;
- HILINK_BT_CmdDataType dataType;
- int (*putFunc)(const void *data, unsigned int len);
- int (*getFunc)(void *buf, unsigned int *bufLen, unsigned int len);
- } HILINK_BT_AttrInfo;
- /* 产品功能定义结构体 */
- typedef struct {
- unsigned char svcIdx;
- char *service;
- int (*putFunc)(const void *svc, const unsigned char *in, unsigned int inLen,
- unsigned char **out, unsigned int *outLen);
- int (*getFunc)(const void *svc, const unsigned char *in, unsigned int inLen,
- unsigned char **out, unsigned int *outLen);
- unsigned char attrNum;
- HILINK_BT_AttrInfo *attrInfo;
- } HILINK_BT_SvcInfo;
- /* 产品Profile定义结构体 */
- typedef struct {
- unsigned int svcNum;
- HILINK_BT_SvcInfo *svcInfo;
- } HILINK_BT_Profile;
- /* 蓝牙gatt character描述 */
- typedef struct {
- char *descUuid;
- /* gatt属性描述读写权限:取值由HILINK_BT_DescPermission类型的成员或运算得出 */
- unsigned int descPermission;
- } HILINK_BT_GattProfileDesc;
- /* 蓝牙gatt character */
- typedef struct {
- char *charUuid;
- /* gatt char权限:取值由HILINK_BT_CharPermission类型的成员或运算得出 */
- unsigned int charPermission;
- /* gatt char属性:取值由HILINK_BT_CharProperty类型的成员或运算得出 */
- unsigned int charProperty;
- HILINK_BT_GattReadCallback readFunc;
- HILINK_BT_GattWriteCallback writeFunc;
- HILINK_BT_GattProfileDesc *desc;
- unsigned char descNum;
- } HILINK_BT_GattProfileChar;
- /* 蓝牙gatt 服务 */
- typedef struct {
- char *svcUuid;
- int isPrimary;
- HILINK_BT_GattProfileChar *character;
- unsigned char charNum;
- } HILINK_BT_GattProfileSvc;
- /* 厂商自定义蓝牙gatt服务列表 */
- typedef struct {
- HILINK_BT_GattProfileSvc *service;
- unsigned char serviceNum;
- } HILINK_BT_GattServiceList;
- /* 配置保存回调结构体 */
- typedef struct {
- int (*createItem)(const char *name, unsigned int size);
- int (*readItem)(const char *name, unsigned char *buf, unsigned int len);
- int (*writeItem)(const char *name, const unsigned char *buf, unsigned int len);
- int (*deleteItem)(const char *name);
- } HILINK_BT_ConfigInterface;
- /* 获取广播数据结构体 */
- typedef struct {
- unsigned int advSvcDataLen;
- unsigned char advSvcData[ADV_VALUE_MAX_LEN];
- unsigned int advRspDataLen;
- unsigned char advRspData[ADV_VALUE_MAX_LEN];
- } HILINK_BT_AdvertiseData;
- /* 设置应用层编码模式 */
- int HILINK_BT_SetEncodeMode(HILINK_BT_CmdDataMode mode);
- /* 查询应用层编码模式 */
- HILINK_BT_CmdDataMode HILINK_BT_GetEncodeMode(void);
- /* 初始化启动HiLink Bluetooth SDK */
- int HILINK_BT_Init(const HILINK_BT_Profile *profile);
- /* 启动HiLink BT SDK处理,调用HiLink协议栈 */
- int HILINK_BT_Process(void);
- /*
- * 结束HiLink Bluetooth SDK
- * flag为0:只销毁控制和调度线程,flag为1销毁蓝牙协议栈,该函数不可重入
- */
- int HILINK_BT_DeInit(unsigned int flag);
- /* 添加HiLink服务信息service信息 */
- int HILINK_BT_AddHiLilnkService(const HILINK_BT_SvcInfo *serviceArray, unsigned int serviceNum);
- /* 通知服务状态 */
- int HILINK_BT_ReportServiceState(const void *service, const void *buf, unsigned int len);
- /* 通知属性状态 */
- int HILINK_BT_ReportAttrState(const void *svc, const void *attr, const void *buf, unsigned int len);
- /* 处理蓝牙数据 */
- int HILINK_BT_ProcessBtData(const unsigned char *buf, unsigned int len);
- /* 注册蓝牙数据发送接口 */
- int HILINK_BT_RegisterBtDataSendCallback(HILINK_BT_SendBtDataCallback callback);
- /* 查询蓝牙数据发送接口 */
- HILINK_BT_SendBtDataCallback HILINK_BT_GetBtDataSendCallback(void);
- /* 初始化发送蓝牙mac地址的函数 */
- int HILINK_BT_BtMacSendInit(HILINK_BT_GetBtMacCallBack callback);
- /* 查询蓝牙mac地址的发送接口 */
- HILINK_BT_GetBtMacCallBack HILINK_BT_GetBtMacSendCallback(void);
- /* 设置蓝牙SDK事件处理函数 */
- int HILINK_BT_SetSdkEventCallback(HILINK_BT_SdkEventCallBack callback);
- /*
- * 设置BLE最大连接数量
- * 入参connNum的范围为[1,10]
- * 最大连接数上限为10,超过10个按10个执行
- * 最小连接数为1,小于1按1个执行
- * 若不调用该接口,默认最大连接数为1
- */
- void HILINK_BT_SetMaxConnNum(int connNum);
- /* 查询蓝牙SDK最大连接数量 */
- int HILINK_BT_GetMaxConnNum(void);
- /* 添加蓝牙SDK自定义gatt服务 */
- int HILINK_BT_SetGattProfile(HILINK_BT_GattServiceList *gattServiceList);
- /* 注册配置保存回调函数到HiLink Bluetooth SDK,若不调用该函数,则默认使用HiLink Bluetooth SDK保存配置实现 */
- int HILINK_BT_RegisterConfigInterface(const HILINK_BT_ConfigInterface *interface);
- /* 启动广播 */
- int HILINK_BT_StartAdvertise(void);
- /* 停止广播 */
- int HILINK_BT_StopAdvertise(void);
- /* 上报蓝牙反馈数据 */
- int HILINK_BT_IndicateSvcCharData(const char *svcUuid, const char *charUuid, const char *buf, unsigned int len);
- /*
- * 获取设备表面的最强点信号发射功率强度,最强点位置的确定以及功率测试方
- * 法,参照hilink认证蓝牙靠近发现功率设置及测试方法指导文档,power为出参
- * ,单位dbm,返回设备表面的最强信号强度值,如果厂商不想使用蓝牙靠近发现功
- * 能,接口直接返-1,如果需要使用蓝牙靠近发现,则接口返回0,如需及时生效,需
- * 调用HILINK_BT_StartAdvertise()方法启动广播
- */
- int HILINK_BT_GetDevSurfacePower(char *power);
- /*
- * 获取设备的子型号,长度固定两个字节
- * subProdId为保存子型号的缓冲区,len为缓冲区的长度
- * 如果产品定义有子型号,则填入两字节子型号,并以'\0'结束, 返回0
- * 没有定义子型号,则返回-1
- * 该接口需设备开发者实现
- * 与hilink sdk相同定义,双模组模式只需一份,已提供给第三方厂家,暂不按编程规范整改
- */
- int HILINK_GetSubProdId(char *subProdId, int len);
- /*
- * 获取设备SN
- * 与hilink sdk相同定义,双模组模式只需一份,已提供给第三方厂家,暂不按编程规范整改
- */
- void HilinkGetDeviceSn(unsigned int len, char *sn);
- /* 获取蓝牙SDK设备相关信息 */
- HILINK_BT_DevInfo *HILINK_BT_GetDevInfo(void);
- /* 获取靠近发现中广播数据 */
- int HILINK_BT_GetAdvertiseData(HILINK_BT_AdvertiseData *advertiseData);
- /* 获取BLE厂商注册的回调函数 */
- BLE_CfgNetCb *GetBleCfgNetCallback(void);
- /* 断开蓝牙连接时,释放通道占用资源 */
- void HILINK_BT_DisconnectFreeResource(void);
- /*
- * 厂家设置linux系统读写文件的路径,路径长度不能超过33个字节,包含结束符
- * 要求存储路径是非易失性的,版本升级不影响该路径文件
- */
- void HILINK_BT_SetConfigDirPath(const char *configDirPath);
- #ifdef __cplusplus
- }
- #endif
- #endif
|