第 2 章 APP 使用说明

1、APP概述

本章旨在介绍常见的蓝牙应用方案,从最接近目标产品的APP开始,指导用户开发。AC63N_BT_SDK系列集成了蓝牙应用App,具有丰富的板级配置、外设驱动以及蓝牙数据库等,并将持续集成更多通用蓝牙方案。

2、APP-Bluetooth Dual-Mode SPP-BLE

2.1 概述

支持蓝牙双模透传传输功能。CLASSIC蓝牙使用标准串口SPP profile协议,BLE蓝牙使用自定义的profile协议,提供ATT的WRITE、WRITE_WITHOUT_RESPONSE,NOTIFY和INDICATE等属性传输收发数据。

2.2 工程配置

代码工程 apps\spp_and_le\board\bd19\AC632N_spp_and_le.cbp

1)先配置板级 board_config.h 和对应配置文件中蓝牙双模使能。

/*
*  板级配置选择
*/
#define CONFIG_BOARD_AC632N_DEMO
// #define CONFIG_BOARD_AC6321A_DEMO
#include "board_ac632n_demo_cfg.h"
#include "board_ac6321a_demo_cfg.h"

board_ac632n_demo_cfg.h 中配置打开 edr 和 ble 模块。

#define TCFG_USER_BLE_ENABLE                      1   //BLE功能使能
#define TCFG_USER_EDR_ENABLE                      1   //EDR功能使能

2)配置对应case需求: app_config.h

//apps example 选择,只能选1个,要配置对应的board_config.h
#define CONFIG_APP_SPP_LE                 1 //SPP + LE or LE's client
#define CONFIG_APP_MULTI                  0 //蓝牙LE多连 + spp
#define CONFIG_APP_DONGLE                0 //usb + 蓝牙(ble 主机),PC hid设备
#define CONFIG_APP_CENTRAL               0 //ble client,中心设备
#define CONFIG_APP_LL_SYNC               0 //腾讯连连
#define CONFIG_APP_BEACON                0 //蓝牙BLE ibeacon
#define CONFIG_APP_NONCONN_24G           0 //2.4G 非连接收发
#define CONFIG_APP_TUYA                  0 //涂鸦协议
#define CONFIG_APP_AT_COM                0 //AT com HEX格式命令
#define CONFIG_APP_AT_CHAR_COM           0 //AT com 字符串格式命令
#define CONFIG_APP_IDLE                  0 //空闲任务

3)配置对应case需求:app_config.h

#if CONFIG_APP_SPP_LE
//配置双模同名字,同地址
#define DOUBLE_BT_SAME_NAME                0 //同名字
#define DOUBLE_BT_SAME_MAC                 0 //同地址
#define CONFIG_APP_SPP_LE_TO_IDLE          0 //SPP_AND_LE To IDLE Use

4)蓝牙的BLE配置,保护GATT和SM的配置。

//蓝牙BLE配置
#define CONFIG_BT_GATT_COMMON_ENABLE       1 //配置使用gatt公共模块
#define CONFIG_BT_SM_SUPPORT_ENABLE        0 //配置是否支持加密
#define CONFIG_BT_GATT_CLIENT_NUM          0 //配置主机client个数 (app not support)
#define CONFIG_BT_GATT_SERVER_NUM          1 //配置从机server个数
#define CONFIG_BT_GATT_CONNECTION_NUM      (CONFIG_BT_GATT_SERVER_NUM + CONFIG_BT_GATT_CLIENT_NUM) //配置连接个数

2.3 SPP数据通信

推荐使用手机测试工具:“SPP蓝牙串口”。

SPP数据通信的代码文件为 spp_trans.c

2.3.1接口说明: spp_trans.c

1)SPP模块初始化。

void transport_spp_init(void)
{
    log_info("trans_spp_init\n");
    log_info("spp_file: %s", __FILE__);
#if (USER_SUPPORT_PROFILE_SPP==1)
  spp_state = 0;
    spp_get_operation_table(&spp_api);
    spp_api->regist_recieve_cbk(0, transport_spp_recieve_cbk);
    spp_api->regist_state_cbk(0, transport_spp_state_cbk);
    spp_api->regist_wakeup_send(NULL, transport_spp_send_wakeup);
#endif
#if TEST_SPP_DATA_RATE
    spp_timer_handle  = sys_timer_add(NULL, test_timer_handler, SPP_TIMER_MS);
#endif
}

2)SPP连接和断开事件处理。

static void transport_spp_state_cbk(u8 state)
{
spp_state = state;
switch (state) {
case SPP_USER_ST_CONNECT:
log_info("SPP_USER_ST_CONNECT ~~~\n");
break;
case SPP_USER_ST_DISCONN:
log_info("SPP_USER_ST_DISCONN ~~~\n");
spp_channel = 0;
break;
default:
break;
}
}

3)SPP发送数据接口,发送前先调用接口transport_spp_send_data_check检查。

int transport_spp_send_data(u8 *data, u16 len)
{
if (spp_api)
{
log_info("spp_api_tx(%d) \n", len);
/* log_info_hexdump(data, len); */
/* clear_sniff_cnt(); */
bt_comm_edr_sniff_clean();
return spp_api->send_data(NULL, data, len);
}
return SPP_USER_ERR_SEND_FAIL;
}

4)SPP检查是否可以往协议栈发送数据。

int transport_spp_send_data_check(u16 len)
{
if (spp_api) {
if (spp_api->busy_state())
{
return 0;
}
}
return 1;
}

5)SPP发送完成回调,表示可以继续往协议栈发数,用来触发继续发数。

static void transport_spp_send_wakeup(void)
{
putchar('W');
}

6)SPP接收数据接口。

static void transport_spp_recieve_cbk(void *priv, u8 *buf, u16 len)
{
spp_channel = (u16)priv;
log_info("spp_api_rx(%d) \n", len);
log_info_hexdump(buf, len);

}

2.3.2 收发测试: spp_trans.c

代码已经实现收到手机的SPP数据后,会主动把数据回送,测试数据收发。

//loop send data for test
if (transport_spp_send_data_check(len))
   {
log_info("-loop send\n");
transport_spp_send_data(buf, len);
}

3、APP-Bluetooth Dual-Mode AT Moudle

概述

主要功能是在普通数传BLE和EDR的基础上增加了由上位机或其他MCU可以通过UART对接蓝牙芯片进行基本配置、状态获取、控制扫描、连接断开以及数据收发等操作。
AT控制透传支持从机模式和主机模式, 编译的时候只能二选一, 从机模式支持双模, 主机模式只支持BLE。
定义一套串口的控制协议,具体请查看附录A 《蓝牙AT协议》。

工程配置

代码工程: apps\spp_and_le\board\bd29\AC631N_spp_and_le.cbp

配置描述

1)先配置板级 board_config.h 和对应配置文件中蓝牙双模使能。

/*
 *  板级配置选择
 */
#define CONFIG_BOARD_AC630X_DEMO
// #define CONFIG_BOARD_AC6311_DEMO
// #define CONFIG_BOARD_AC6313_DEMO
// #define CONFIG_BOARD_AC6318_DEMO
// #define CONFIG_BOARD_AC6319_DEMO

2)配置对应的 board_acxxx_demo_cfg.h 文件使能BLE或EDR(主机不支持EDR), 以 board_ac630x_demo_cfg.h 为例。

#define TCFG_USER_BLE_ENABLE                      1   //BLE功能使能
#define TCFG_USER_EDR_ENABLE                      1   //EDR功能使能

4、APP-Bluetooth Dual-Mode Central

概述

Central中心设备是使用GATT的client角色,在SDK中是以主机Master的方式实现,主动发起搜索和连接其他BLE设备。连接成功后遍历从机GATT的Services信息数据。最大支持16个Sevices遍历。
SDK的例子是以杰理的数传SDK的BLE的设备中Services为搜索目标,用户根据需求也可自行搜索过滤其他的Services。

工程配置

代码工程:apps\spp_and_le\board\bd19\AC632N_spp_and_le.cbp

1)先配置板级board_config.h和对应配置文件中蓝牙双模使能。

配置只支持ble模块,如下代码:

#define TCFG_USER_BLE_ENABLE                    1   //BLE功能使能
#define TCFG_USER_EDR_ENABLE                      0  //EDR功能使能

5、APP-Bluetooth Dual-Mode Dongle

概述

蓝牙dongle符合USB和BLE或EDR传输标准,具有即插即用,方便实用的特点。它可用于蓝牙设备之间的数据传输,让电脑能够和周边的蓝牙设备进行无线连接和数据的通讯,自动发现和管理远程蓝牙设备、资源和服务,实现蓝牙设备之间的绑定和自动连接。
蓝牙dongle支持BLE和2.4G两种连接模式;支持连接指定蓝牙名或mac地址;应用示例是连接杰理的鼠标。
蓝牙dongle支持EDR,支持连接指定蓝牙名或mac地址,连接杰理的键盘设备。
蓝牙双模dongle不建议同时打开,会降低搜索效率。

工程配置

代码工程: apps\spp_and_le\board\bd19\AC632N_spp_and_le.cbp

1)APP选择,配置app_config.h。

//app case 选择,只能选1个,要配置对应的board_config.h

2)使用EDR模式,还必先打印如下主机搜索使能。

#define EDR_EMITTER_EN                   1 //蓝牙(edr主机)

3)板级选择, 配置board_config.h。目前只有AC6328a_DONGLE板子支持蓝牙dongle。

//#define CONFIG_BOARD_AC636N_DEMO
#define CONFIG_BOARD_AC6368B_DONGLE //CONFIG_APP_DONGLE
// #define CONFIG_BOARD_AC6363F_DEMO

主要代码说明

蓝牙dongle实现文件 app_dongle.c和ble_dg_central,负责模块初始化、处理协议栈事件和命令数据控制发送等。

1)HID描述符, 描述为一个鼠标。

static const u8 sHIDReportDesc[] = {
   0x05, 0x01,        // Usage Page (Generic Desktop Ctrls)
   0x09, 0x02,        // Usage (Mouse)
   0xA1, 0x01,        // Collection (Application)
   0x85, 0x01,        //   Report ID (1)
   0x09, 0x01,        //   Usage (Pointer)

2)使用指定的uuid与从机通信, 需要与从机配合, 省掉了搜索uuid的时间。

static const target_uuid_t  dongle_search_ble_uuid_table[] = {
   {
       .services_uuid16 = 0x1812,
       .characteristic_uuid16 = 0x2a4d,
       .opt_type = ATT_PROPERTY_NOTIFY,
   },
   {
       .services_uuid16 = 0x1812,
       .characteristic_uuid16 = 0x2a33,
       .opt_type = ATT_PROPERTY_NOTIFY,
   },
    {
       .services_uuid16 = 0x1801,
       .characteristic_uuid16 = 0x2a05,
       .opt_type = ATT_PROPERTY_INDICATE,
    },
   };
  /*
  确定留给从机发数据的3个notify handle
  */
   static const u16 mouse_notify_handle[3] = {0x0027, 0x002b, 0x002f};

6、APP - Bluetooth DualMode Keyboard

概述

本案例为基于HID的键盘设备,可以用来媒体播放,上下曲暂停音量的控制,支持安卓和IOS的双系统,并且支持BLE和EDR两种工作模式。

工程配置

代码工程:apps\hid\board\br19\AC632N_hid.cbp

1)先进行APP选择配置(apps\hid\include\app_config.h)。

//app case 选择,只选1,要配置对应的board_config.h
#define CONFIG_APP_KEYBOARD                       1//hid按键 ,default case
#define CONFIG_APP_KEYFOB              0//自拍器,board_ac6368a,board_6318
#define CONFIG_APP_MOUSE                          0//mouse,   board_mouse
#define CONFIG_APP_STANDARD_KEYBOARD         0//标准HID键盘,board_ac6351d
#define CONFIG_APP_KEYPAGE                        0//翻页器

2)配置板级board_config.h(`` appshidboardbd19board_config.h ``),下图为选择AC632n板级,也可以选择ac6321a板级。

/*
 *  板级配置选择
 */
#define CONFIG_BOARD_AC632N_DEMO      // CONFIG_APP_KEYBOARD,CONFIG_APP_PAGE_TURNER
// #define CONFIG_BOARD_AC6321_DEMO   // CONFIG_APP_KEYBOARD,CONFIG_APP_PAGE_TURNER
#include "board_ac6321a_demo_cfg.h"
#include "board_ac6323a_mouse_cfg.h"
#include "board_ac6328a_mouse_cfg.h"
#include "board_ac6329b_demo_cfg.h"
#include "board_ac6329c_demo_cfg.h"
#endif

7、APP - Bluetooth DualMode Keyfob

概述

本案例主要用于蓝牙自拍器实现,进行以下配置后,打开手机蓝牙连接设备可进行对应的拍照操作。由于自拍器的使用会用到LED所以本案例也要对LED进行对应的设置,自拍器设备上电以后没有连接蓝牙之前,LED以一定的频率闪烁,直到连接或者是进入sleep模式时熄灭。蓝牙连接以后LED熄灭,只有按键按下的时候LED会同时接通过,可以通过LED的状态来判断自拍器的工作状态。

工程配置

代码工程:apps\hid\board\bd19\AC632N_hid.cbp

1)配置app选择(apps\hid\include\app_config.h),如下代码选择对应的自拍器应用。

//app case 选择,只选1,要配置对应的board_config.h
#define CONFIG_APP_KEYFOB        1//自拍器,  board_ac6328a,board_6328

2)先配置板级board_config.h(apps\hid\board\bd19\board_config.h),选择对应的开发板。

//#define CONFIG_BOARD_AC632N_DEMO       // CONFIG_APP_KEYBOARD,CONFIG_APP_PAGE_TURNER
// #define CONFIG_BOARD_AC6321A_MOUSE  // CONFIG_APP_MOUSE
 #define CONFIG_BOARD_AC632X_DEMO     // CONFIG_APP_KEYFOB
#include "board_ac632n_demo_cfg.h"
#include "board_ac6321a_demo_cfg.h"

8、APP - Bluetooth DualMode KeyPage

概述

本APP基于HID开发,主要用于浏览当下火爆的抖音等小视频的上下翻页、左右菜单切换、暂停等操作。首先选择需要用到的应用本案例选择,然后进行对应的支持板级选择,具体参考下文的步骤。通过软件编译下载到对应的开发板,打开手机蓝牙进行连接,进入视频浏览界面操作对应按键即可。

工程配置

代码工程:apps\hid\board\bd19\AC632N_hid.cbp