基本概念
蓝牙串口是基于 SPP 协议(Serial Port Profile),能在蓝牙设备之间创建串口进行数据传输的一种设备。 蓝牙串口的目的是针对如何在两个不同设备(通信的两端)上的应用之间保证一条完整的通信路径。具体的基本流程如下:
设备A:这个设备会发起一个连接另外设备的请求。
设备B:这个设备等待另外一个设备发起连接请求。
协议栈分层
这个应用两边都是典型的传统应用,能够通过一个虚拟串口通道和对方通信。通过下图可以看出,SPP的协议栈使用的还是rfcomm通道,这个是蓝牙中比较古老的通道了。
基本流程
连接流程一般分成三个部分,如下所示:
1 创建虚拟连接:
A 使用SDP提交一个请求来查找RFCOMM服务信道号码。
B 请求对远端设备进行认证。
C 向远端的RFCOMM通道发起一个新的L2CAP请求。
D 在L2CAP通道上初始化一个RFCOMM连接。
E f在RFCOMM连接上创建一个新的数据连接。
2 接受虚拟串口连接:
A 接受发起设备端的认证请求并做处理.
B 在L2CAP层接收一个新的连接。
C 接受RFCOMM连接请求在RFCOMM通道上
D 在RFCOMM通道上接收数据连接请求。
3 在本地SDP数据上注册服务
SPP的API参数
/** A connection has been established with a remote device.
- When this callback is received, the “spp_callback_parms.p.remDev” field
- contains a pointer to the remote device context.
*/
#define BTIF_SPP_EVENT_REMDEV_CONNECTED 0
/** A connection has been terminated for a remote device.
- When this callback is received, the “spp_callback_parms.p.other” field
- contains a 0.
*/
#define BTIF_SPP_EVENT_REMDEV_DISCONNECTED 1
/** The data has been sent out. At this time the tx buffer can be released.
- When this callback is received, the “spp_callback_parms.p.other” field
- is from data structure SppTxDone_t.
*/
#define BTIF_SPP_EVENT_DATA_SENT 2
/** A request to close a channel was received.
- When this callback is received, the “spp_callback_parms.p.other” field
- contains a 0.
*/
#define BTIF_SPP_EVENT_REMDEV_DISCONNECTED_IND 3
/** A request to open a channel was received.
- When this callback is received, the “spp_callback_parms.p.remDev” field
- contains a pointer to the remote device context.
- This is an opportunitity for the server to reject the incoming request. To
- reject the request modify spp_callback_parms.status to be BT_STATUS_CANCELLED.
*/
#define BTIF_SPP_EVENT_REMDEV_CONNECTED_IND 4
作者:虚生 出处:https://www.cnblogs.com/dylancao/ 以音频和传感器算法为核心的智能可穿戴产品解决方案提供商 ,提供可穿戴智能软硬件解决方案的设计,开发和咨询服务。 勾搭热线:邮箱:1173496664@qq.com weixin:18019245820 市场技术对接群:347609188 |
![]() |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战