4.3. SPP协议

概述

提供蓝牙串口SPP协议的配置接口和测试例程

4.3.1. 测试例程

    1. 进入 apps/demo/demo_edr/include/app_config.h ,开启宏 SPP_TRANS_DATA_EN

    1. 进入 apps/demo/demo_edr/spp_trans_data.c ,开启宏 TEST_SPP_DATA_RATE

    1. 设备烧录固件后上电,打开手机app里的SppTestDemo.apk(SDK的工具目录有安装包),扫描到设备后点击连接

    1. 设备每秒打印一次发送速率 `` -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: 失败