4.3.10. APP - CONN_24G
4.3.10.1. 概述
主要功能是在蓝牙BLE架构基础上自定义不可见的2.4G连接模式数据传输示例。
支持的板级: br25、br23、bd19、br34
支持的芯片: AC636N、AC635N、AC632N、AC638N
4.3.10.2. 工程配置
代码工程:apps/spp_and_le/board/bdxx/AC63xN_spp_and_le.cbp
配置app选择(apps/spp_and_le/include/app_config.h),如下图选择对应的应用示例
*//app case 选择,只能选1个,要配置对应的board_config.h* #define CONFIG_APP_CONN_24G 1 //基于BLE的2.4g,板级只需要开BLE
先配置板级board_config.h(apps/spp_and_le/board/brxx/board_config.h),选择对应的开发板,可以使用默认的板级
#define CONFIG_BOARD_AC632N_DEMO *// #define CONFIG_BOARD_AC6321A_DEMO* *// #define CONFIG_BOARD_AC6323A_DEMO* *// #define CONFIG_BOARD_AC6328A_DEMO* *// #define CONFIG_BOARD_AC6328B_DONGLE* *// #define CONFIG_BOARD_AC6329B_DEMO* *// #define CONFIG_BOARD_AC6329C_DEMO* *// #define CONFIG_BOARD_AC6329E_DEMO* *// #define CONFIG_BOARD_AC6329F_DEMO*
只需要使能BLE就可以了
#define TCFG_USER_BLE_ENABLE 1 \ *//BLE功能使能* #define TCFG_USER_EDR_ENABLE 0 \ *//EDR功能使能*
设置2.4G ID(apps/spp_and_le/examples/conn_24g/app_conn_24g.c):修改CFG_RF_24G_CODE_ID为0x23即可
*//2.4G模式: 0---ble, 非0---2.4G配对码* */* #define CFG_RF_24G_CODE_ID (0) //<=24bits */* #define CFG_RF_24G_CODE_ID (0x23) \ *//<=24bits*
4.3.10.3. 设置2.4G物理层
设置物理层可设置传输数率,目前蓝牙协议包含的物理层,我司都是支持的(包含1M、2M、CODED S2、CODED S8),具体设置如下:
设置为1M 物理层收发(1M不需要设置S2/S8,所以SELECT_CODED_S2_OR_S8随意设置):
*//选择物理层* #define SELECT_PHY CONN_SET_1M_PHY\ *//1M:CONN_SET_1M_PHY 2M:CONN_SET_2M_PHY CODED:CONN_SET_CODED_PHY* *//选择CODED类型:S2 or S8* #define SELECT_CODED_S2_OR_S8 CONN_SET_PHY_OPTIONS_S2\ *//S2:CONN_SET_PHY_OPTIONS_S2 S8:CONN_SET_PHY_OPTIONS_S8*
设置为2M物理层收发(2M不需要设置S2/S8,所以SELECT_CODED_S2_OR_S8随意设置):
*//选择物理层* #define SELECT_PHY CONN_SET_2M_PHY\ *//1M:CONN_SET_1M_PHY 2M:CONN_SET_2M_PHY CODED:CONN_SET_CODED_PHY* *//选择CODED类型:S2 or S8* #define SELECT_CODED_S2_OR_S8 CONN_SET_PHY_OPTIONS_S2\ *//S2:CONN_SET_PHY_OPTIONS_S2 S8:CONN_SET_PHY_OPTIONS_S8*
设置为CODED S2物理层收发:
*//选择物理层* #define SELECT_PHY CONN_SET_CODED_PHY\ *//1M:CONN_SET_1M_PHY 2M:CONN_SET_2M_PHY CODED:CONN_SET_CODED_PHY* *//选择CODED类型:S2 or S8* #define SELECT_CODED_S2_OR_S8 CONN_SET_PHY_OPTIONS_S2\ *//S2:CONN_SET_PHY_OPTIONS_S2 S8:CONN_SET_PHY_OPTIONS_S8*
设置为CODED S8物理层收发:
*//选择物理层* #define SELECT_PHY CONN_SET_CODED_PHY\ *//1M:CONN_SET_1M_PHY 2M:CONN_SET_2M_PHY CODED:CONN_SET_CODED_PHY* *//选择CODED类型:S2 or S8* #define SELECT_CODED_S2_OR_S8 CONN_SET_PHY_OPTIONS_S8\ *//S2:CONN_SET_PHY_OPTIONS_S2 S8:CONN_SET_PHY_OPTIONS_S8*
4.3.10.4. 数据发送模块
在(app_conn_24g.c)中打开CONN_24G_KEEP_SEND_EN使能(数据发送使能):
#define CONN_24G_KEEP_SEND_EN 1 \ *//just for 2.4gtest keep data*
代码会在连接之后打开发送测试、在断开连接关闭发送测试:
case BLE_ST_DISCONN: /* * 蓝牙断开连接,主机设置关闭数据发送 */ #if CONN_24G_KEEP_SEND_EN && CONFIG_BT_GATT_CLIENT_NUM log_info("CLOSE CONN_24G_KEEP_SEND_EN\n"); sys_timeout_del(conn_24g_phy_test_timer_id); conn_24g_phy_test_timer_id = 0; #endif break; case BLE_ST_NOTIFY_IDICATE: case BLE_ST_CREATE_CONN: /* * 蓝牙设备已经连接允许主机发数据 */ #if CONN_24G_KEEP_SEND_EN && CONFIG_BT_GATT_CLIENT_NUM if (conn_24g_phy_test_timer_id == 0) { log_info("OPEN CONN_24G_KEEP_SEND_EN\n"); conn_24g_phy_test_timer_id = sys_timer_add(NULL, conn_24g_phy_test, 200); } #endif break;
4.3.10.5. 绑定、解绑使用
绑定
原理:普通的蓝牙设备,从机连接一个设备之后,会记住对端的地址,但是下次还是可以和新的设备进行连接;这是因为没有做绑定的原因。由于考虑到客户可能需要绑定功能,于是加入;从机连接一个设备之后,保存配对信息,当重新广播时若从机有配对信息则从机将广播设置为定向广播(定向广播具有定向连接性)。主机连接一个从机设备之后,保存从机配对信息,当重新扫描时若主机有配对信息则主机只扫描具有定向广播的从机,并且只连接具有与主机记录配对信息相同的从机
从机设置(ble_24g_server.c):有配对信息设置为定向广播。
*//配置定向广播信息* conn_24g_server_adv_config.adv_type = ADV_DIRECT_IND_LOW; conn_24g_server_adv_config.adv_interval = PAIR_DIRECT_LOW_ADV_INTERVAL; log_info("===DIRECT_ADV address:"); put_buf(conn_24g_server_adv_config.direct_address_info, 7);
主机设置(ble_24g_client.c):连接后只识别定向广播,并且重新传入搜索配置
*//连接后识别定向广播,不然会导致从机一断开连接,主机马上又连接* ble_gatt_client_set_search_config(&conn_24g_central_bond_config);
解绑:
原理:有绑定肯定就有解绑需求,本设计设置AD key 0长按抬起解绑。将主从机的配对信息删除即可完成解绑,解绑之后打开主从机的扫描和广播为下次绑定做好准备。
主机(app_conn_24g.c):删除配对信息并设置scan:
memset(&client_pair_bond_info[0], 0, 8); conn_24g_pair_vm_do(client_pair_bond_info, sizeof(client_pair_bond_info), 1); log_info("clear client pear info!"); put_buf(&client_pair_bond_info, 8); ble_gatt_client_scan_enable(0); ble_gatt_client_disconnect_all(); conn_24g_central_init(); ble_gatt_client_scan_enable(1);
从机(app_conn_24g.c):删除配对信息并设置adv:
memset(&pair_bond_info[0], 0, 8); conn_24g_pair_vm_do(pair_bond_info, sizeof(pair_bond_info), 1); log_info("clear server pear info!"); put_buf(&pair_bond_info, 8); *//关闭模块重新打开* ble_gatt_server_adv_enable(0); ble_gatt_server_disconnect_all(); */* ble_comm_disconnect(0x50); */* conn_24g_server_init(); ble_gatt_server_adv_enable(1);