P7UWaterXinjiang4G/hardinterface/BLE_driver/inc/ble14531_driver.h

473 lines
12 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/************************************************************************************
* @Copyright (c) :(C)2021, Qindao ieslab Co., Ltd
* @FileName :ble_driver.h
* @Author :QDIES PLATFORM TEAM
* @Version :V1.1
* @Date :2021-7
* @Description :
************************************************************************************/
#ifndef __BLE_DRIVER_H
#define __BLE_DRIVER_H
#include "type.h"
#include <string.h>
#ifdef __cplusplus
extern "C"
{
#endif
/*---------------- 配置宏开关可根据MCU类型或主从模式使用情况进行选择 --------------------*/
//#define HDSC_HC32L13x 1 //华大13x系列
//#define HDSC_HC32L196 (!HDSC_HC32L13x)//华大196系列
#define BLE_CENTRAL_SLAVE_MOD 0 //驱动是否为主从模式都支持0从机1主从机
/*------------------------------------*/
#define BLE_POW_PORT (GpioPortE) //电源控制
#define BLE_POW_PIN (GpioPin4)
#define BLE_CON_PORT (GpioPortA) //连接状态指示
#define BLE_CON_PIN (GpioPin4)
#define BLE_CON_IRQ PORTA_IRQn
#define BLE_CON_PRIORITY IrqLevel2 //中断优先级
#define BLE_LOWPOWER_PORT (GpioPortA) //唤醒蓝牙
#define BLE_LOWPOWER_PIN (GpioPin2)
#define BLE_RXPORT_IRQ PORTA_IRQn
#define BLE_RXPORT_PRIORITY IrqLevel2 //中断优先级
#define BLE_CONorRX_IRQHandler PORTA_IRQHandler
//#define BLE_TX_IRQHandler PORTA_IRQHandler
#define BLE_CON_MSG 0xAA //蓝牙连接
#define BLE_DISCON_MSG 0xBB //蓝牙断开
#define BLE_CON_NOMSG 0X00
#define CENTRAL_MODE 0xAA //主机模式
#define SLAVE_MODE 0xBB //从机模式
#define MODE_ERROR 0x00 //主从切换失败
#define SCAN_END 0x00 //扫描结束或未开始
#define SCAN_ING 0xBB //扫描中
#define SACN_START_ORDER 0xAA //启动扫描
#define SACN_STOP_ORDER 0xBB //停止扫描
#define SCAN_START 0xCC //开始扫描
#define CON_START_ORDER 0xAA //建立连接
#define CON_STOP_ORDER 0xBB //断开连接
#define CON_END 0xAA //连接结束或未开始
#define CON_ING 0xBB //连接中
#define CON_START 0xCC //开始连接
#define CHK_KEY_WORD 0xAA //查询关键字
#define SET_KEY_WORD 0xBB //修改关键字
#define CLR_KEY_WORD 0xCC //取消关键字
#define CHK_WHITE_LIST 0xAA //查询白名单
#define SET_WHITE_LIST 0xBB //修改白名单
#define CLR_WHITE_LIST 0xCC //取消白名单
#define CHK_NAME_MAC 0xAA //查询蓝牙名称及MAC
#define SET_NAME_MAC 0xBB //修改蓝牙名称及MAC
#define CHK_BLE_SEC 0xAA //查询蓝牙加密配对
#define SET_BLE_SEC 0xBB //启用蓝牙加密配对
#define CLR_BLE_SEC 0xCC //取消蓝牙加密配对
#define CHK_BLE_PIN 0xAA //查询蓝牙配对密码
#define SET_BLE_PIN 0xBB //设置蓝牙配对密码
//任务完成情况
#define BLE_TASK_FAIL 0xA8
#define BLE_TASK_SUCCESS 0xA9
#define BLE_TASK_INIT 0xB0
#define BLE_NAME_MAX_LEN 12 //蓝牙名称的最大长度
//初始化状态机状态号BLE
enum BLE_MAIN_STA
{
S_BLE_IDLE = 0 ,
S_BLE_MAIN_INIT ,
S_BLE_MAIN_CENTRAL_SWITCH ,
S_BLE_MAIN_SCAN ,
S_BLE_MAIN_CONNECT ,
S_BLE_MAIN_NAME_MAC ,
S_BLE_MAIN_ADV_DATA ,
S_BLE_MAIN_ADV_PARAM ,
S_BLE_MAIN_KEY_WORD ,
S_BLE_MAIN_WHITE_LIST ,
S_BLE_MAIN_CHK_STATUS ,
S_BLE_MAIN_SEC_PIN ,
};
enum BLEINIT_STA
{
S_BLEINIT_POWER_ON = 1 , //模块送电
S_BLEINIT_POWER_WAIT ,
S_BLEINIT_POWER_DW , //开始断电复位
S_BLEINIT_POWER_DW_R ,
S_BLEINIT_ATS , //发送初始化AT指令
S_BLEINIT_ADV0_CTL , //关闭广播
S_BLEINIT_VER , //查询软件版本
S_BLEINIT_NAME , //查询广播名称
S_BLEINIT_NAME_SET , //设置广播名称
S_BLEINIT_MAC , //查询模块物理地址
S_BLEINIT_MAC_SET , //设置模块物理地址
S_BLEINIT_MAC_SAVE , //保存MAC
S_BLEINIT_MAC_RESET , //保存MAC后需复位
S_BLEINIT_TXPOW , //查询发射功率
S_BLEINIT_TXPOW_SET , //设置发射功率
S_BLEINIT_ADVPERIOD , //查询广播间隔时间
S_BLEINIT_ADVPERIOD_SET , //设置广播间隔时间
S_BLEINIT_CONPERIOD , //查询广播间隔时间
S_BLEINIT_CONPERIOD_SET , //设置广播间隔时间
S_BLEINIT_ADVMFID_SET , //设置广播数据
S_BLEINIT_ADV_CTL , //打开广播
S_BLEINIT_END
};
#if BLE_CENTRAL_SLAVE_MOD
//BLE主从模式切换状态
enum BLEMODESWITCH_STA
{
// S_BLE_SWITCH_IDLE = 0 ,
S_BLE_SWITCH_CENTRAL = 1 , //主机模式
S_BLE_SWITCH_CENTRAL_CHK , //先查询链接状态
S_BLE_SWITCH_CENTRAL_DISCON , //断开连接
S_BLE_SWITCH_ADV0 , //停止广播
S_BLE_SWITCH_STATUS , //查询当前主从模式
S_BLE_SWITCH_SET_CENTRAL , //切换主机模式
S_BLE_SWITCH_SLAVE ,
S_BLE_SWITCH_SLAVE_CHK , //先查询链接状态
S_BLE_SWITCH_SLAVE_DISCON , //断开连接
S_BLE_SWITCH_STATUS_SLAVE ,
S_BLE_SWITCH_SET_SLAVE , //切换从机模式
S_BLE_SWITCH_ADV1 , //开启广播
};
//BLE开始扫描状态
enum BLESCAN_STA
{
// S_BLE_SCAN_IDLE = 0 ,
S_BLE_SCAN_START = 1 ,
S_BLE_SCAN_DISCON , //断开连接
S_BLE_SCAN_ING , //启动扫描
S_BLE_SCAN_OVERTIME , //扫描超时
S_BLE_SCAN_STOP ,
S_BLE_SCAN_END ,
S_BLE_SCAN_END_OVERTIME ,
};
//BLE更新MAC白名单状态
enum BLEWHITELIST_STA
{
S_BLE_WHITE_LIST = 1 , //修改白名单
S_BLE_WHITE_LIST_R ,
S_BLE_WHITE_LIST_CLR , //取消白名单
S_BLE_WHITE_LIST_CLR_R ,
S_BLE_WHITE_LIST_CHK , //差白名单
S_BLE_WHITE_LIST_CHK_R ,
S_BLE_WHITE_LIST_SAVE , //保存
};
#endif
//BLE建立连接状态
enum BLECON_STA
{
S_BLE_CON_START = 1 ,
S_BLE_CON_STATE_CHEK ,
S_BLE_CON_DISCON , //断开连接
S_BLE_CON_DISCON_WAIT , //断开连接延时
S_BLE_CON_CLRBNDE ,
S_BLE_CON_RECON , //重新根据MAC连接
S_BLE_CON_RECON_R ,
S_BLE_CON_RECON_XIAODOU ,
S_BLE_CON_STOP , //断开连接
S_BLE_CON_END ,
};
//BLE修改蓝牙名称及MAC状态
enum BLECHANGEMAC_STA
{
S_BLE_MAC_SET_START = 1 ,
S_BLE_MAC_DISCON , //断开连接
S_BLE_MAC_ADV0 , //停止广播
S_BLE_MAC_NAME , //修改蓝牙名称
S_BLE_MAC_MAC , //修改MAC
S_BLE_MAC_SAVE , //修改完MAC要保存
S_BLE_MAC_RESET , //修改完成后复位
S_BLE_MAC_ADV1 ,
S_BLE_MAC_CHK_START ,
S_BLE_MAC_NAME_CHK ,
S_BLE_MAC_MAC_CHK ,
};
//BLE更新广播数据状态
enum BLEUPDATEADVDATA_STA
{
S_BLE_UPDATE_ADV_START = 1 ,
S_BLE_UPDATE_ADV , //更新广播数据
S_BLE_UPDATE_ADV_RD_MAC ,
};
//BLE更新广播参数状态
enum BLECHANGEADVPARA_STA
{
S_BLE_CHANGE_ADV_START = 1 ,
S_BLE_CHANGE_ADV0 , //停止广播
S_BLE_CHANGE_ADV_PARAM , //修改广播间隔
S_BLE_CHANGE_CON_PARAM , //修改连接间隔
S_BLE_CHANGE_TX_POWER , //修改发射功率
S_BLE_CHANGE_SCAN_TIMES , //修改扫描次数
S_BLE_CHANGE_SAVE , //修改完成后保存
S_BLE_CHANGE_ADV1 , //开启广播
};
//BLE更新关键字状态
enum BLECHANGEKEYWORD_STA
{
S_BLE_SET_KEY_WORD = 1 , //修改关键字
S_BLE_SET_KEY_WORD_R ,
S_BLE_CHK_KEY_WORD , //查询关键字
S_BLE_CHK_KEY_WORD_R ,
S_BLE_CLEAR_KEY_WORD , //取消关键字
S_BLE_CLEAR_KEY_WORD_R ,
S_BLE_KEY_WORD_SAVE , //保存
};
//BLE查询蓝牙主从模式及连接状态
enum BLECHKSTATUS_STA
{
S_BLE_CHK_STATUS = 1 , //查询主从模式及连接状态
S_BLE_CHK_STATUS_R ,
};
//BLE查询或设置加密配对状态
enum BLESEC_STA
{
S_BLE_CHK_SEC = 1 , //查询SEC
S_BLE_CHK_SEC_R ,
S_BLE_CHK_PIN , //查询PIN
S_BLE_SET_SEC_ADV0 ,
S_BLE_SET_SEC_ADV0_R ,
S_BLE_SET_PIN , //设置PIN
S_BLE_SET_PIN_R ,
S_BLE_SET_SEC , //设置SEC
S_BLE_SET_SEC_R ,
S_BLE_SET_SEC_ADV1 ,
S_BLE_CLR_SEC , //取消
S_BLE_CLR_SEC_R ,
S_BLE_SEC_RESET ,
S_BLE_SEC_SAVE , //保存
};
//AT指令通用状态子状态机状态
typedef enum{
// AT_REQUEST_IDLE = 0 ,
BLE_AT_REQUEST_SEND = 1 ,
BLE_AT_REQUEST_CHECK ,
BLE_AT_REQUEST_WT ,
}BLE_TYP_STATE_AT_REQUEST;
//模组AT指令编号
typedef enum {
AT_CODE_AT = 0 , //AT
AT_CODE_VER_CHK , //版本检查
AT_CODE_NAME_CHK , //广播名称查询
AT_CODE_NAME , //广播名称设置
AT_CODE_MAC_CHK , //查询MAC
AT_CODE_MAC , //设置MAC
AT_CODE_TXPOWER_CHK , //发射功率查询
AT_CODE_TXPOWER , //发射功率设置
AT_CODE_ADVPARAM_CHK , //广播间隔查询
AT_CODE_ADVPARAM , //广播间隔设置
AT_CODE_CONPARAM_CHK , //连接间隔查询
AT_CODE_CONPARAM , //连接间隔设置
AT_CODE_ADVMFID , //广播数据设置
AT_CODE_ADV0 , //关闭广播
AT_CODE_ADV1 , //打开广播
AT_CODE_DISCON , //断开所有连接
AT_CODE_SLAVE , //设置为从机模式
#if BLE_CENTRAL_SLAVE_MOD
AT_CODE_CENTRAL , //设置为主机模式
AT_CODE_SCAN , //扫描周围设备
AT_CODE_CONNECT , //连接指定设置
AT_CODE_STOP_SCAN , //停止扫描
AT_CODE_WHITE_LIST_SET , //设置MAC白名单
AT_CODE_WHITE_LIST_CLR , //取消MAC白名单
AT_CODE_WHITE_LIST_CHK , //查询MAC白名单
#endif
AT_CODE_SCAN_TIMES , //扫描次数
AT_CODE_KEY_CHK , //查询关键字
AT_CODE_KEY_SET , //修改关键字
AT_CODE_KEY_CLR , //取消关键字
AT_CODE_RESET , //蓝牙软复位
AT_CODE_SAVE , //蓝牙保存参数
AT_CODE_STATUS , //蓝牙查询主从模式及连接状态
AT_CODE_SEC_CHK , //查询蓝牙加密配对
AT_CODE_SEC_SET , //设置蓝牙加密配对
AT_CODE_SEC_CLR , //取消蓝牙加密配对
AT_CODE_PIN_CHK , //查询蓝牙配对密码
AT_CODE_PIN , //设置蓝牙配对密码
AT_CODE_CLRBNDE , //加密配对启用时,建立连接前需发送清除命令
AT_CODE_ALL
} BLE_TYP_AT_CMDCODE;
//AT指令等待应答时间
typedef enum { //使用100ms定时器
BLE_WT_0S = 0,
BLE_WT_halfS = 5,
BLE_WT_1S = 10,
BLE_WT_2S = 20,
BLE_WT_5S = 50,
} BLE_TYP_AT_WAIT_TIME;
//AT指令重试次数
typedef enum {
BLE_RETRY_0 = 0,
BLE_RETRY_1,
BLE_RETRY_2,
BLE_RETRY_3,
BLE_RETRY_4,
BLE_RETRY_5,
BLE_RETRY_15 = 15,
} BLE_TYP_AT_RETRY_COUNT;
//AT指令状态机执行结果
typedef enum {
ResultBusy = 0,
ResultOk,
ResultError,
ResultFail
} BLE_TYP_RESULT_CODE;
//连接状态
typedef enum {
BleNoCon = 0,
BleSlaveCon,
BleMasterCon
} TYP_CON_STATUS;
//供电状态状态
typedef enum {
BlePowerOk = 0,
BlePowerWrong, //故障,强制断电状态
BlePowerFactory //厂区模式期间断电状态
} TYP_POWER_STATUS;
//******************************* 结构体定义*************************************
typedef struct
{
unsigned char AtCode; //指令编号
unsigned char CaseAtNum; //应答处理编号
unsigned char ErrorLimit; //最大尝试出错次数
// unsigned char ExpectLen; //期待应答数据长度
char* pAtCmdStr; //指令内容指针
// char* pExpectData; //期待应答数据内容指针
unsigned short int WaitTime;//等待应答最大时间ms
} BLE_STRUCT_AT_CMD, *P_BLE_STRUCT_AT_CMD;
typedef union
{
struct
{
u8 at_err:1 ; //查询AT异常
u8 ver_err:1 ; //查询版本异常
u8 name_chk_err:1 ; //查询蓝牙名称异常
u8 name_set_err:1 ; //设置蓝牙名称异常
u8 mac_chk_err:1 ; //查询蓝牙MAC异常
u8 mac_set_err:1 ; //设置蓝牙MAC异常
};
mtype32_ err_byte;
} BLE_STATE_ERR; //蓝牙状态错误指示
typedef struct
{
u8 Ble_cur_mode; //当前主从模式
u8 Ble_scan_state; //当前扫描状态,扫描未开始、扫描中、扫描结束
u8 Ble_con_state; //当前的连接状态
u8 Ble_power_flag; //当前的供电状态
u8 Ble_con_MAC[12]; //连接时的MAC
u8 Ble_adv_data[13]; //广播数据
u8 Ble_key_word_len; //关键字长度
u8 Ble_key_word[12]; //关键字内容
u8 Ble_white_list[15][6]; //MAC白名单
u8 Ble_softverson[2]; //蓝牙版本
u8 Ble_name[12]; //蓝牙名称
u8 Ble_mac[6]; //蓝牙MAC
u8 Ble_cur_sec; //蓝牙当前的加密配对状态
u8 Ble_cur_pin[3]; //蓝牙当前使用的配对密码,密码不超过六位
} BLE_WORK_STATE;
//******************************* 外部变量***************************************
//******************************* 外部接口函数***********************************
void BleInit(void);
void BleMainMachine(void);
u8 BleIfIdle(void);
u8 BleIfSleep(void);
void BlePreSleep(void);
void BleWakeSleep(void);
void BlePowerOff(void);
void BlePowerOn(void) ;
u8 BleIfPowerOn(void);
void BleForcePowerOff(TYP_POWER_STATUS data);
u8 format_ascii2hex(u8 *dest, u8 *sour, u8 sourlen);
//任务启动接口
void BleStartInitTask(void); //初始化启动
void BleCentralSwitchTask(u8 switch_type); //主从切换启动
u8 BleGetCurMode(void); //获取当前的模式
u8 BleConMacTask(u8 con_oeder,u8 *con_mac); //连接或断开连接
u8 BleGetCurConState(void); //查询当前连接状态
void BleNameMacTask(u8 opr_type,u8* name_src);//启动修改蓝牙名称及MAC
u8 BleUpdataAdvDataTask(u8* snd_data); //启动更新广播数据
void BleChangeAdvParaTask(void); //启动变更蓝牙参数
void BleKeyWordTask(u8 type,u8* key_word,u8 key_len);//启动变更蓝牙关键字
u8 BleGetCurKeyWord(u8* key_addr); //查询当前关键字
void BleChkStatusTask(void); //启动查询当前的主从模式及连接状态
u8 BleSecChkOrSetTask(u8 sec_type); //启动查询、设置、取消蓝牙加密配对
u8 BleChkCurSecState(u8 **cur_pin); //获取蓝牙当前的加密配对状态及PIN
#if BLE_CENTRAL_SLAVE_MOD
void BleMacWhiteListTask(u8 type,u8* list_addr);//启动MAC白名单
u8 BleScanTask(u8 scan_order); //启动或关闭扫描
u8 BleGetCurScanState(void); //获取当前扫描状态
#endif
void BleGetFirmVerson(u8* verson_addr); //获取蓝牙版本号
void BleGetCurMacAddr(u8 *cur_mac); //获取当前蓝牙的MAC
void Ble_IODeInit(void);
void BleClearResetCount(void);
TYP_POWER_STATUS BleGetPowerState(void);
//u8 BleCheckConInitMsg(void);
//u8 BleClrConInitMsg(void);
//u8 BleCheckTxInitMsg(void);
//u8 BleClrTxInitMsg(void);
//#pragma pack()
#ifdef __cplusplus
}
#endif
#endif