蓝牙spp协议分析
基本概念
蓝牙串口是基于 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
蓝牙spp协议分析的更多相关文章
- android 蓝牙SPP协议通信
准备 1.蓝牙串行端口基于SPP协议(Serial Port Profile),能在蓝牙设备之间创建串口进行数据传输 2.SPP的UUID:00001101-0000-1000-8000-00805F ...
- 蓝牙协议分析(7)_BLE连接有关的技术分析
转自:http://www.wowotech.net/bluetooth/ble_connection.html#comments 1. 前言 了解蓝牙的人都知道,在经典蓝牙中,保持连接(Connec ...
- 蓝牙接收苹果手机通知 ANCS协议分析
蓝牙接收苹果手机通知 ANCS协议分析 转载,请注明出处:http://www.cnblogs.com/alexcai/p/4321514.html 综述 现在有许多蓝牙手表.手环都能接收苹果ipho ...
- 蓝牙协议分析(11)_BLE安全机制之SM
1. 前言 注1:此SM是Security Manager的缩写,非彼SM,大家不要理解歪了! 书接上文,我们在“蓝牙协议分析(10)_BLE安全机制之LE Encryption”中介绍了BLE安全机 ...
- 蓝牙协议分析(10)_BLE安全机制之LE Encryption
1. 前言 前面文章介绍了两种BLE的安全机制:白名单[4]和LL privacy[3].说实话,在这危机四伏的年代,这两种“捂着脸讲话(其它人不知道是谁在讲话,因而不能插话.不能假传圣旨,但讲话的内 ...
- 蓝牙协议分析(9)_BLE安全机制之LL Privacy
1. 前言 在上一篇文章[1]中,我们介绍了BLE的白名单机制,这是一种通过地址进行简单的访问控制的安全机制.同时我们也提到了,这种安全机制只防君子,不防小人,试想这样一种场景: A设备表示只信任B. ...
- 蓝牙协议分析(8)_BLE安全机制之白名单
1. 前言 在万物联网的时代,安全问题将会受到非常严峻的挑战(相应地,也会获得最大的关注度),因为我们身边的每一个IOT设备,都是一个处于封印状态的天眼,随时都有被开启的危险.想想下面的场景吧: 凌晨 ...
- 蓝牙协议分析(5)_BLE广播通信相关的技术分析
1. 前言 大家都知道,相比传统蓝牙,蓝牙低功耗(BLE)最大的突破就是加大了对广播通信(Advertising)的支持和利用.关于广播通信,通过“玩转BLE(1)_Eddystone beacon” ...
- 蓝牙协议分析(4)_IPv6 Over BLE介绍
1. 前言 蓝牙是个奇葩的家伙:它总是以后来者的身份出现,很喜欢打仗,而且还不落下风(有点像某讯的风格).90年代末期和Wi-Fi的无线标准之争如此,当前和802.15.4系(ZigBee.RF4CE ...
随机推荐
- Redis sorted set 常用命令介绍
Redis sorted set 使用: Redis 有序集合(sorted set) Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员. 不同的是每个元素都会关联一个 ...
- 【Ubuntu 16.04.2_64】系统配置
Ubuntu 16.04.2_64系统配置 转载:http://www.cnblogs.com/yangchongxing/p/9049897.html Ubuntu Server服务指南:https ...
- centos7制作U盘启动盘
一.准备相关软件 1.8G以上U盘 2.UltraISO虚拟光驱(试用版即可)最新版 下载地址:https://cn.ultraiso.net/xiazai.html 点击下载试用 3.CentOS ...
- Vue大纲
Vue框架 Vue ---- vue的基本使用 文本/事件/属性指令 补充: js面向对象 js函数 Vue ---- 表单指令 条件指令 循环指令 分隔符 过滤器 计算属性 监听属性 Vue --- ...
- lede install unifi controller
requirement: sdb3 should be formated as ext4, DO not use f2fs/NTFS/exFAT. debootstrap --arch=amd64 s ...
- django基础之day04,聚合查询和分组查询
聚合查询: 聚合函数必须用在分组之后,没有分组其实默认整体就是一组 Max Min Sum Avg Count 1.分组的关键字是:aggretate 2.导入模块 from django.db.mo ...
- javascript基础(001)-js加减乘除注意事项(含类型转换)
一,加减乘除注意事项: 1.任意类型'+'字符串都被强转字符串 2.数字和布尔类型'+'undefined 结果为 NaN (Not a Number) 3.'-','*','/'操作会尝试把数据转为 ...
- Microsemi Libero使用技巧——使用命令行模式下载程序
前言 在工程代码编译完成之后,如果需要给某个芯片下载程序时,或者是工厂量产烧录程序时,我们不需要把整个工程文件给别人,而只需要把生成的下载文件给别人,然后使用FlashPro就可以单独下载程序文件了. ...
- C# -- DateTime与TimeSpan
1. DateTime的使用 DateTime dt = DateTime.Now; StringBuilder sb = new StringBuilder(); sb.AppendLine(str ...
- jQuery模仿ToDoList实现简单的待办事项列表
功能:在文本框中输入待办事项按下回车后,事项会出现在未完成列表中:点击未完成事项前边的复选框后,该事项会出现在已完成列表中,反之亦然:点击删除按钮会删除该事项:双击事项可以修改事项的内容.待办事项的数 ...