基本概念

蓝牙串口是基于 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协议分析的更多相关文章

  1. android 蓝牙SPP协议通信

    准备 1.蓝牙串行端口基于SPP协议(Serial Port Profile),能在蓝牙设备之间创建串口进行数据传输 2.SPP的UUID:00001101-0000-1000-8000-00805F ...

  2. 蓝牙协议分析(7)_BLE连接有关的技术分析

    转自:http://www.wowotech.net/bluetooth/ble_connection.html#comments 1. 前言 了解蓝牙的人都知道,在经典蓝牙中,保持连接(Connec ...

  3. 蓝牙接收苹果手机通知 ANCS协议分析

    蓝牙接收苹果手机通知 ANCS协议分析 转载,请注明出处:http://www.cnblogs.com/alexcai/p/4321514.html 综述 现在有许多蓝牙手表.手环都能接收苹果ipho ...

  4. 蓝牙协议分析(11)_BLE安全机制之SM

    1. 前言 注1:此SM是Security Manager的缩写,非彼SM,大家不要理解歪了! 书接上文,我们在“蓝牙协议分析(10)_BLE安全机制之LE Encryption”中介绍了BLE安全机 ...

  5. 蓝牙协议分析(10)_BLE安全机制之LE Encryption

    1. 前言 前面文章介绍了两种BLE的安全机制:白名单[4]和LL privacy[3].说实话,在这危机四伏的年代,这两种“捂着脸讲话(其它人不知道是谁在讲话,因而不能插话.不能假传圣旨,但讲话的内 ...

  6. 蓝牙协议分析(9)_BLE安全机制之LL Privacy

    1. 前言 在上一篇文章[1]中,我们介绍了BLE的白名单机制,这是一种通过地址进行简单的访问控制的安全机制.同时我们也提到了,这种安全机制只防君子,不防小人,试想这样一种场景: A设备表示只信任B. ...

  7. 蓝牙协议分析(8)_BLE安全机制之白名单

    1. 前言 在万物联网的时代,安全问题将会受到非常严峻的挑战(相应地,也会获得最大的关注度),因为我们身边的每一个IOT设备,都是一个处于封印状态的天眼,随时都有被开启的危险.想想下面的场景吧: 凌晨 ...

  8. 蓝牙协议分析(5)_BLE广播通信相关的技术分析

    1. 前言 大家都知道,相比传统蓝牙,蓝牙低功耗(BLE)最大的突破就是加大了对广播通信(Advertising)的支持和利用.关于广播通信,通过“玩转BLE(1)_Eddystone beacon” ...

  9. 蓝牙协议分析(4)_IPv6 Over BLE介绍

    1. 前言 蓝牙是个奇葩的家伙:它总是以后来者的身份出现,很喜欢打仗,而且还不落下风(有点像某讯的风格).90年代末期和Wi-Fi的无线标准之争如此,当前和802.15.4系(ZigBee.RF4CE ...

随机推荐

  1. SpringSpringBoot上传文件到七牛云

    准备工作 maven pom.xml添加七牛云的sdk依赖 <dependency> <groupId>com.qiniu</groupId> <artifa ...

  2. 【Java Web开发学习】Spring配置数据源

    Spring配置数据源 转载:https://www.cnblogs.com/yangchongxing/p/10027495.html =============================== ...

  3. java面试题干货51-95

    51.类ExampleA继承Exception,类ExampleB继承ExampleA. 有如下代码片断: try { throw new ExampleB("b") } catc ...

  4. 最简单的 Java内存模型 讲解

    前言 在网上看了很多文章,也看了好几本书中关于JMM的介绍,我发现JMM确实是Java中比较难以理解的概念.网上很多文章中关于JMM的介绍要么是照搬了一些书上的内容,要么就干脆介绍的就是错的.本文试着 ...

  5. webpack学习_webpack-dev-server自动编译代码

    之前每次修改完之后都要执行npm run build来编译,下面有三种方式可以实现代码变化后自动编译代码,下面只重点说webpack-dev-server,其他的请看webpack开发文档 1.web ...

  6. gitbook 入门教程之网站域名备案 icp 插件

    欢迎访问 gitbook-plugin-icp 官网

  7. gorm操练记录

    这个数据库的定义蛮全的,先作个记录. package main import ( "time" "github.com/jinzhu/gorm" _ " ...

  8. 备份下ESP8266的AT指令集手册和用例手册中文版,准备为V7做几个ESP8266的例子

    指令集手册:https://files.cnblogs.com/files/armfly/4a-esp8266_at_instruction_set_cn.rar 用例手册: https://file ...

  9. python批量插入数据到es和读取es数据

    一.插入数据 1.首先准备类似如下数据 {"_type": "type1", "_id": 1, "_index": & ...

  10. centos7下安装客户端rabbitmq9.0

    下载目前最新rabbitmq客户端版本: wget https://github.com/alanxz/rabbitmq-c/archive/v0.9.0.tar.gz php扩展 : wget ht ...