zoukankan      html  css  js  c++  java
  • 蓝牙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
  • 相关阅读:
    记录上锁(字节范围锁,特例:锁住文件的某一部分或者整个文件)
    读写锁的实现原理(pthread_rwlock_t)
    Linux 互斥锁的实现原理(pthread_mutex_t)
    System V消息队列
    Web安全之SQL注入攻击技巧与防范
    如何正确地写出单例模式
    java的concurrent用法详解
    java并发编程-Executor框架
    java.util.concurrent包分类结构图
    Java多线程干货系列(1):Java多线程基础
  • 原文地址:https://www.cnblogs.com/dylancao/p/11712833.html
Copyright © 2011-2022 走看看