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);