4.9. BLE透传
概述
使用demo_ble工程的BLE透传功能的使用说明
4.9.1. 操作说明
在app_config.h文件中使能以下宏
#define TCFG_USER_BLE_ENABLE 1 //BLE功能使能
#define TRANS_DATA_EN 1 //从机 传输数据
配置GATT服务和属性
(1)修改profile_data数据表,通过工具[make_gatt_services](SDK目录下sdk_tools/make_gatt_services)进行自定义修改,将新的profile_data数据表和对应的handle编号存放在le_trans_data.h。详细操作请参考[make_gatt_services工具说明](sdk_tools/make_gatt_services/make_gatt_services工具说明.pdf)。
(2)带有READ属性的handle放到 att_read_callback 函数中
static uint16_t att_read_callback(hci_con_handle_t connection_handle, uint16_t att_handle, uint16_t offset, uint8_t *buffer, uint16_t buffer_size)
{
//......省略
switch (handle) {
//带有READ权限的handle
case ATT_CHARACTERISTIC_2a00_01_VALUE_HANDLE:
//以下为对应属性的操作处理
att_value_len = gap_device_name_len;
if ((offset >= att_value_len) || (offset + buffer_size) > att_value_len) {
break;
}
if (buffer) {
memcpy(buffer, &gap_device_name[offset], buffer_size);
att_value_len = buffer_size;
log_info("\n------read gap_name: %s \n", gap_device_name);
}
break;
//......省略
}
}
(3)将带有WRITE属性的handle放到 att_write_callback 函数中
static int att_write_callback(hci_con_handle_t connection_handle, uint16_t att_handle, uint16_t transaction_mode, uint16_t offset, uint8_t *buffer, uint16_t buffer_size)
{
//......省略
switch (handle) {
//带有WRITE权限的handle
case ATT_CHARACTERISTIC_ae03_01_VALUE_HANDLE:
//以下为对应属性的操作处理
printf("\n-ae03_rx(%d):", buffer_size);
//收发测试,自动发送收到的数据;for test
if (app_send_user_data_check(buffer_size)) {
app_send_user_data(ATT_CHARACTERISTIC_ae05_01_VALUE_HANDLE, buffer, buffer_size, ATT_OP_AUTO_READ_CCC);
}
break;
//......省略
}
(4)将带有NOTIFY或者INDICATION属性的 handle 通过传参到发送数据的函数中。对于带有NOTIFY或者INDICATION属性的characteristic,主机端需要使能CCCD才能接收notify和indicate命令。
app_send_user_data(ATT_CHARACTERISTIC_ae05_01_VALUE_HANDLE, buffer, buffer_size, ATT_OP_AUTO_READ_CCC);
编译工程,烧录镜像,复位启动
在手机或其他终端打开BLE助手;连接成功后,在通过BLE助手进行收发测试
(1)蓝牙连接成功后,点击“蓝牙服务”查看当前蓝牙设备的service列表,如图1所示;
(2)点击第二项service,点击UUID为ae03的characteristic对应的箭头,表示发送该characteristic对应的数据,如图2所示;
(3)点击UUID为ae05的characteristic对应的按钮,表示使能该characteristic的CCD,即接收其indicate命令,如图2所示;
(4)点击“实时日志”,在发送栏编辑数据后点击“发送”,通过日志可看到BLE助手发送数据成功,并且成功接收到从机发送的数据,如图3所示。
图1
图2
图3