• 蓝牙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
  • 相关阅读:
    win7 安装 memcached
    Nginx执行php显示no input file specified的处理方法
    Nginx配置SSI
    Windows Services
    如何安装mysql服务
    windows下nginx+php简单配置
    Thread Safe(线程安全)和None Thread Safe(NTS,非线程安全)之分
    php常用方法总结
    弹出框以及提示插件lghdialog.js的使用
    webservice的简单示例的实现步骤
  • 原文地址:https://www.cnblogs.com/dylancao/p/11712833.html
Copyright © 2020-2023  润新知