4.3. SPP协议
概述
提供蓝牙串口SPP协议的配置接口和测试例程
4.3.1. 测试例程
进入
apps/demo/demo_edr/include/app_config.h
,开启宏SPP_TRANS_DATA_EN
进入
apps/demo/demo_edr/spp_trans_data.c
,开启宏TEST_SPP_DATA_RATE
设备烧录固件后上电,打开手机app里的SppTestDemo.apk(SDK的工具目录有安装包),扫描到设备后点击连接
设备每秒打印一次发送速率 `` -spp_data_rate: 162360 bytes, 158 kbytes- ``
4.3.2. 常见问题
Note
1.测试例程的SPP传输速率大概平均150kbytes
2.接收数据时可根据需要选择是否使能流控功能
3.若发送过程中出现 pend_for_tx_bulk
的打印,可在app_config.h适当增大底层缓存BUF CONFIG_BT_TX_BUFF_SIZE
,例如改成12K,但最大不能超过20K
4.#define TEST_SPP_SEND_SIZE 660 //660字节为一包发送最大数据
5.使用调用transport_spp_send_data发送数据要检查一下返回值,返回值失败的要应用层重发,防止丢失数据
4.3.3. API参考
流控配置
-
SPP_DATA_RECIEVT_FLOW
确定配置接口transport_spp_flow_cfg被调用后,在连接过程中通过接口transport_spp_flow_enable来控制流控开关
-
FLOW_SEND_CREDITS_NUM
流控速度控制,控制命令中控制可接收的数据包个数,发送给对方的range(1~32)
-
FLOW_SEND_CREDITS_TRIGGER_NUM
触发更新控制命令的阈值,range(1 to <= FLOW_SEND_CREDITS_NUM)
-
int transport_spp_send_data(u8 *data, u16 len)
spp传输发送数据
- Parameters
data – [in] 准备发送的数据指针
len – [in] 准备发送的数据长度
- Returns
0: 发送成功
- Returns
other: 发送失败
-
int transport_spp_send_data_check(u16 len)
检查spp是否允许发送数据
- Parameters
len – [in] 准备发送的数据长度
- Returns
1: 允许发送
- Returns
0: 发送忙碌
-
static void transport_spp_state_cbk(u8 state)
spp传输状态回调
- Parameters
state – [in] 连接状态
-
static void transport_spp_send_wakeup(void)
spp传输唤醒回调
-
static void transport_spp_recieve_cbk(void *priv, u8 *buf, u16 len)
spp数据接收回调
- Parameters
priv – [in] spp_channel
buf – [in] 接收到的数据指针
len – [in] 接收到的数据长度
-
void transport_spp_init(void)
初始化spp传输接口
Note
需要在蓝牙协议栈初始化btstack_init()成功后收到BT_STATUS_INIT_OK消息后调用
-
void transport_spp_disconnect(void)
断开SPP传输连接
-
static void timer_spp_flow_test(void)
-
void transport_spp_flow_cfg(void)
配置SPP传输接收流控控制参数
Note
需要在蓝牙协议栈初始化btstack_init()前调用
-
int transport_spp_flow_enable(u8 en)
SPP传输接收流控开关
- Parameters
en – [in] 1-打开 0-关闭
- Returns
0: 成功
- Returns
other: 失败