4.3.4. APP - Bluetooth Dual-Mode Central
4.3.4.1. 概述
Central中心设备是使用GATT的client角色,在SDK中是以主机Master的方式实现,主动发起搜索和连接其他BLE设备。连接成功后遍历从机GATT的Services信息数据。最大支持16个Sevices遍历。
SDK的例子是以杰理的数传SDK的BLE的设备中Services为搜索目标,用户根据需求也可自行搜索过滤其他的Services。
支持的板级: br25、br23、bd19、br34
支持的芯片: AC636N、AC635N、AC632N、AC638N
4.3.4.2. 工程配置
代码工程:apps/spp_and_le/board/bd19/AC632N_spp_and_le.cbp
先配置板级board_config.h和对应配置文件中蓝牙ble使能
*/\** * 板级配置选择 */ #define CONFIG_BOARD_AC632N_DEMO \ *// CONFIG_APP_KEYBOARD,CONFIG_APP_PAGE_TURNER* #include "board_ac632n_demo_cfg.h"
配置只支持ble模块
#define TCFG_USER_BLE_ENABLE 1 //BLE功能使能 #define TCFG_USER_EDR_ENABLE 0 //EDR功能使能
配置app选择
//app case 选择,只能选1个,要配置对应的board_config.h #define CONFIG_APP_CENTRAL 1 //ble client,中心设备
4.3.4.3. 主要代码说明
BLE实现文件 ble_central.c,负责模块初始化、处理GATT模块事件和命令数据控制发送等。
配置GATT client的模块基本要素。
static const sm_cfg_t cetl_sm_init_config = { static gatt_ctrl_t cetl_gatt_control_block = { static const gatt_client_cfg_t central_client_init_cfg = { .event_packet_handler = cetl_client_event_packet_handler, };
配置搜索的GATT服务以及记录搜索到的信息,支持16bit和128 bit的UUID。
配置扫描匹配的设备
*//配置多个扫描匹配设备* static const u8 cetl_test_remoter_name1[] = "AC897N_MX(BLE)";\ *//* static client_match_cfg_t cetl_match_device_table[] = { #if MATCH_CONFIG_NAME
搜索匹配设备会发聩事件处理
case GATT_COMM_EVENT_SCAN_DEV_MATCH: { log_info("match_dev:addr_type= %d\n", packet[0]); put_buf(&packet[1], 6); if (packet[8] == 2) { log_info("is TEST_BOX\n"); } client_match_cfg_t *match_cfg = ext_param; if (match_cfg) { log_info("match_mode: %d\n", match_cfg->create_conn_mode); if (match_cfg->compare_data_len) { put_buf(match_cfg->compare_data, match_cfg->compare_data_len); } } } break;
配置连上后搜索的uuid
*//指定搜索uuid* *//指定搜索uuid* static const target_uuid_t jl_cetl_search_uuid_table[] = { *// for uuid16* *// PRIMARY_SERVICE, ae30* *// CHARACTERISTIC, ae01, WRITE_WITHOUT_RESPONSE | DYNAMIC,* *// CHARACTERISTIC, ae02, NOTIFY,* { .services_uuid16 = 0xae30, .characteristic_uuid16 = 0xae01, .opt_type = ATT_PROPERTY_WRITE_WITHOUT_RESPONSE, }, { .services_uuid16 = 0xae30, .characteristic_uuid16 = 0xae02, .opt_type = ATT_PROPERTY_NOTIFY, },
查找到匹配的UUID和handle,处理事件,并且可以记录操作handle。
case GATT_COMM_EVENT_GATT_SEARCH_MATCH_UUID: { opt_handle_t *opt_hdl = packet; log_info("match:server_uuid= %04x,charactc_uuid= %04x,value_handle= %04x\n", \\ opt_hdl->search_uuid->services_uuid16, opt_hdl->search_uuid->characteristic_uuid16, opt_hdl->value_handle); #if cetl_TEST_WRITE_SEND_DATA *//for test* if (opt_hdl->search_uuid->characteristic_uuid16 == 0xae01) { cetl_ble_client_write_handle = opt_hdl->value_handle; } #endif } break;
配置扫描和连接参数:扫描参数以0.625ms为单位,设置如下所示:
#define SET_SCAN_TYPE SCAN_ACTIVE #define SET_SCAN_INTERVAL 48 #define SET_SCAN_WINDOW 16
连接参数interval是以1.25ms为单位,timeout是以10ms为单位,如下图:
#define SET_CONN_INTERVAL 0x30 #define SET_CONN_LATENCY 0 #define SET_CONN_TIMEOUT 0x180
以上两组参数请慎重修改,必须按照蓝牙的协议规范来定义修改。