#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