164 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef BLE_DEMO_H__
 | ||
| #define BLE_DEMO_H__
 | ||
| 
 | ||
| #include "stdint.h"
 | ||
| 
 | ||
| 
 | ||
| //定义蓝牙的最大连接数
 | ||
| #define BLE_MAX_LINKED 5
 | ||
| 
 | ||
| //定义通知最大长度
 | ||
| #define BLE_NOTICE_LEN 256
 | ||
| 
 | ||
| //定义接收帧最大长度
 | ||
| #define BLE_RETURN_LINE_LEN 512
 | ||
| 
 | ||
| /*******************************************************
 | ||
| 
 | ||
| 	通知数据定义:
 | ||
| 	------------------------------------------------------+
 | ||
| 	主体			|obj_size |obj			|op|data_size|data			|
 | ||
| 	------------------------------------------------------+
 | ||
| 	长度(byte)|1				|obj_size |1 |1				 |data_size |
 | ||
| 	------------------------------------------------------+
 | ||
| 
 | ||
| ********************************************************/
 | ||
| 
 | ||
| 
 | ||
| //定义数据缓冲区大小
 | ||
| #define BLE_BUFF_LEN 512
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| #define BLE_UUID_TYPE_128   0x80
 | ||
| #define BLE_UUID_TYPE_32    0x20
 | ||
| #define BLE_UUID_TYPE_16    0x10
 | ||
| 
 | ||
| typedef struct
 | ||
| {
 | ||
| 	int buff_len;
 | ||
| 	int buff_used;
 | ||
| 	int read_ptr;
 | ||
| 	int save_ptr;
 | ||
| 	uint8_t buff[BLE_BUFF_LEN];
 | ||
| } ble_buff;
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| typedef struct
 | ||
| {
 | ||
| 	uint8_t mac[6];
 | ||
| 	uint16_t conn_handle;
 | ||
| 	int linked;
 | ||
| 	ble_buff buff_recv;
 | ||
| }ble_device;
 | ||
| 
 | ||
| 
 | ||
| typedef struct
 | ||
| {
 | ||
|   uint8_t obj[4];
 | ||
|   uint8_t obj_size;
 | ||
|   uint8_t par[BLE_NOTICE_LEN];
 | ||
|   int par_size;
 | ||
| }notice_t;
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| typedef struct
 | ||
| {
 | ||
| 	char mode;                          //工作模式'i'空闲;'h'主机;'s'从机
 | ||
| 	int linked;			                //当前连接数
 | ||
| 	ble_device device[BLE_MAX_LINKED];
 | ||
| 	notice_t notice;
 | ||
| 	uint8_t conn_mac[6];			    //正在连接的蓝牙mac地址
 | ||
| 	uint8_t data_temp[BLE_BUFF_LEN];				//数据临时存储区
 | ||
|   uint8_t return_line[BLE_RETURN_LINE_LEN];      //接收数据存储区
 | ||
|   void (*linked_change)(uint16_t handle,uint16_t state);
 | ||
|   void (*recv_data)(uint16_t handle,uint8_t *data,int len);
 | ||
|   void (*user_irq)(uint8_t *data,int len);
 | ||
|   void *ret_event;//返回事件
 | ||
|   void *kno_event;//知晓事件
 | ||
| }ble_struct;
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| typedef struct
 | ||
| {
 | ||
| 	uint8_t mac[6];
 | ||
| 	int8_t rssi;
 | ||
| 	char name[20];
 | ||
| }ble_mac_name;
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| //ble初始化
 | ||
| void ble_init(ble_struct *ble);
 | ||
| 
 | ||
| //ble去初始化
 | ||
| void ble_deinit(ble_struct *ble);
 | ||
| 
 | ||
| //读取指定长度的数据
 | ||
| int ble_get_recv_data(ble_struct *ble,uint16_t handle,uint8_t *buff,int read_len);
 | ||
| 
 | ||
| //读取数据直到出现界定符
 | ||
| int ble_get_recv_data_by_end(ble_struct *ble,uint16_t handle,uint8_t *buff,int buff_size,uint8_t end_par);
 | ||
| 
 | ||
| //返回指定索引的蓝牙设备
 | ||
| ble_device *ble_find_device_by_index(ble_struct *ble,int index);
 | ||
| 
 | ||
| // 设置连接状态改变回调
 | ||
| int ble_set_callback_linked_change(ble_struct *ble,void (*linked_change)(uint16_t handle,uint16_t state));
 | ||
| // 设置接收到数据回调,如果设置了此回调函数,则接收到数据时不会保存到缓冲区
 | ||
| // 即通过 ble_get_recv_data | ble_get_recv_data_by_end 函数无法读取到数据
 | ||
| int ble_set_callback_recv_data(ble_struct *ble,void (*recv_data)(uint16_t handle,uint8_t *data,int len));
 | ||
| // 设置用户中断回调
 | ||
| int ble_set_callback_user_irq(ble_struct *ble,void (*user_irq)(uint8_t *data,int len));
 | ||
| 
 | ||
| //设置设备名称
 | ||
| int ble_set_name(ble_struct *ble,char *name);
 | ||
| 
 | ||
| //获取设备mac地址
 | ||
| int ble_get_mac(ble_struct *ble,uint8_t mac[6]);
 | ||
| 
 | ||
| //重启
 | ||
| int ble_reboot(ble_struct *ble);
 | ||
| 
 | ||
| //设置uuid
 | ||
| int ble_set_uuid(ble_struct *ble,uint8_t sub,uint8_t type,uint8_t *uuid);
 | ||
| 
 | ||
| //打开/关闭数据传输
 | ||
| int ble_set_data_transport(ble_struct *ble,uint8_t power);
 | ||
| 
 | ||
| //发送数据
 | ||
| int ble_send_data(ble_struct *ble,uint16_t handle,uint8_t *buff,int len);
 | ||
| 
 | ||
| //设置为从机模式
 | ||
| int ble_set_slave(ble_struct *ble);
 | ||
| 
 | ||
| //设置为主机模式
 | ||
| int ble_set_host(ble_struct *ble);
 | ||
| 
 | ||
| //连接指定的从机
 | ||
| int ble_connect_by_mac(ble_struct *ble,uint8_t mac[6]);
 | ||
| 
 | ||
| //断开指定的从机
 | ||
| int ble_discon_by_mac(ble_struct *ble,uint8_t mac[6]);
 | ||
| 
 | ||
| //扫描
 | ||
| int ble_scan(ble_struct *ble,ble_mac_name mac[32],int *mac_num);
 | ||
| 
 | ||
| //发送用户设置数据
 | ||
| int ble_user_cmd_set(ble_struct *ble,uint8_t *tx,int tx_len);
 | ||
| 
 | ||
| //发送用户获取数据,rx_len获取的数据长度,失败返回0
 | ||
| int ble_user_cmd_get(ble_struct *ble,uint8_t *tx,int tx_len,uint8_t *rx,int *rx_len);
 | ||
| 
 | ||
| 
 | ||
| #endif
 | ||
| 
 | ||
| 
 |