蓝牙连接的建立过程

物理信道(physical channel)是蓝牙系统的最底层结构,它以一伪随机跳频序列、特定的发送时槽定时、接入码及帧头编码来表征。蓝牙定义了一系列物理信道用于不同的应用,包括用于匹克网内设备通信的匹克网物理信道用于查找设备的查找扫描物理信道和用于寻呼设备的寻呼扫描物理信道。两台设备必须采用相同的物理信道才能进行通信。主从设备建立连接的过程就是建立相同的匹克网信道的过程,这样主从设备才能以同样的定时和次序进行载波频率的跳变,进行数据传输

同时可以根据匹克网接入码和帧头编码进行数据过滤和解析,避免和其他设备在同一个频段上的偶尔的相撞。


1.查询扫描过程


2.寻呼扫描过程

寻呼扫描物理信道(page scan physical channel)用于主设备寻呼从设备,是设备建立连接的必经阶段,主从设备是匹克网内设备的概念,这里用来指发起寻呼的设备和寻呼扫描设备。寻呼扫描跳频序列和寻呼请求帧的设备接入码-DAC是由从设备物理地址运算出来的,主设备以该跳频序列进行载波频率的跳变并在发送时间槽内发送寻呼请求,处于可被连接模式的从设备以固定的周期(由page scan interval决定)在一个固定的时间窗(由page scan window决定)内以某个跳频频率监听主设备的寻呼请求,监听到请求便在下个时间槽立即发送从设备寻呼响应(slave page response),主设备在收到从设备寻呼响应的下个时间槽发送主设备寻呼响应(master page response),该响应中包含了由主设备地址运算出来的跳频序列信息和时钟相位,从设备接收到这些信息便进入连接状态并自动成为匹克网的从设备,并再次返回从设备寻呼响应,主设备收到该响应后进入连接状态并自动成为匹克网的主设备。


应用层的连接是建立在匹克网物理信道之上的逻辑连接,主设备通过SDP查询从设备相应服务的逻辑通道号,依据该通道建立应用

层级的连接。


协议栈已经有了,使用蓝牙是非常简单的事情。

    (1)找到蓝牙设备,这是HCI层负责的,使用bluez-utils包提供的hcitool来找到蓝牙设备。

    (2)找到服务,RFCOMM是通过不同的频道(channel)来提供不同的Profile的,所以需要找到要用的服务在设备上的哪个频道上,这是通过同一个软件包里的sdptool来完成的,就是SDP,服务发现协议。

    (3)连接恰当的服务并使用。

    蓝牙的特点就是如上所述的那些了,而用户态的工具所要完成的任务就是发现服务和使用服务了。


连接的建立:

蓝牙系统有三种主要状态:待机状态,连接状态和节能状态。从待机状态向连接状态转变的过程中,有7个子状态:寻呼、寻呼扫描、查询、查询扫描、主响应、从响应、查询响应


1.启动HCI设备
    首先,用户需要启动hcid,让HCI层的通信可以进行。对于Debian用户来说,需要安装bluez-utils包,并启动hcid。如果已经运行了bluetooth服务,插入USB适配器后,hcid就已经在运行了,看看相关信息,见清单15.2。

清单15.2  HCI接口信息

1    inspiration :/ etc/ bluetooth # hciconfig -a

hci 0:  Type : USB

3            BD Address : 11:11:11:11:11:11 ACL MTU: 678:8 SCO MTU: 48:10

        UP RUNNING PSCAN ISCAN

5            RX bytes :413 acl :0 sco :0 events :19 errors :0

        TX bytes :323 acl :0 sco :0 commands :19 errors :0

7            Features : 0xbf 0xfe 0x8d 0x78 0x08 0x18 0x00 0x00

        Packet type : DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3

9            Link policy : RSWITCH HOLD SNIFF PARK

        Link mode : MASTER

11           Name : 'inspiration -0'

        Class : 0x3e 0100

13           Service Classes : Networking , Rendering , Capturing , Object Transfer , Audio

        Device Class : Computer , Uncategorized

15           HCI Ver : 1.2 (0x2) HCI Rev : 0x1fe LMP Ver : 1.2 (0x2) LMP Subver : 0x1fe

             Manufacturer : Integrated System Solution Corp . (57)

    这个过程是自动的,当然也可以用hciconfig(8)来手工控制。hcid的配置文件位于/etc/bluetooth/hcid.conf, 通常使用软件包附带的版本就可以了,如果希望不用每次连接都在计算机这里确认一次PIN码的话,可以设置其中的security字段为auto,这样,每 次连接就会使用passkey设置的PIN码了。


2.寻找蓝牙设备
    HCI已经启动了,现在就可以用它来寻找蓝牙设备了,当然,一定要先开启蓝牙设备的蓝牙功能,这个不是废话,手机的蓝牙是 默认关闭的,只有在手动控制之下才会发送信号,允许被扫描到,不过设备的个体差异性太大,这里没法介绍,作者假设读者已经自己摸索或参照说明书打开了设备 的蓝牙电源。寻找蓝牙设备如清单15.3所示。

清单15.3  寻找蓝牙设备

inspiration :/ home / gnawux # hcitool scan

18   Scanning ...

        00:17:00:7 B :18: B8         Motorola SLVR

之后蓝牙设备就会被顺利地找到,当然,前提是不要忘了打开手机的蓝牙开关,并允许被找,这个功能平时最好不要打开,以防在公共场合遇到安全问题。


3.查看设备提供的服务
利用SDP协议,用户还可以查看每个设备都有功能,能提供什么服务,每种基于RFCOMM的服务都使用某种协议,占据一个“频道(channel)”,这是使用蓝牙服务时的一个重要参数。

下面是例子,先看看本机,见清单15.4。

清单15.4  本机提供的蓝牙服务

20   gnawux@inspiration :~$ sdptool browse local

Browsing FF:FF:FF :00:00:00 ...

22   Service Name : OBEX Object Push

Service RecHandle : 0x10000

24   Service Class ID List :

  " OBEX Object Push " (0x1105)

26   Protocol Descriptor List :

  "L2CAP" (0x0100)

28     "RFCOMM " (0x0003)

    Channel : 9

30     " OBEX " (0x0008)

Profile Descriptor List :

32     " OBEX Object Push " (0x1105)

     Version : 0x0100

然后可以看看关心的设备提供的服务,手机提供的服务种类比较多,首先是SDP服务器,也就是服务发现服务器,有了这个服务,就可以接下来发现其他服务功能了,见清单15.5。

清单15.5  手机提供的SDP功能

34   gnawux@inspiration :~$ sdptool browse 00:17:00:7 B :18: B8

Browsing 00:17:00:7 B :18: B8 ...

36   Service RecHandle : 0x0

Service Class ID List :

38    "SDP Server " (0x 1000)

Protocol Descriptor List :

40    "L2CAP" (0x 0100)

       "SDP" (0x 0001)

42   Profile Descriptor List :

  "SDP Server " (0x 1000)

44       Version : 0x 0100

手机的最基本功能就是用于(电话或网络)拨号,这里列出的第一项服务也是“拨号网络网关”,标识服务具体类型的字段是“Service Class ID”,它所在的频道是RFCOMM的频道1,如清单15.6所示。

清单15.6  手机提供的拨号网络功能

Service Name : Dialup Networking Gateway

46   Service Description : Dialup Networking Gateway

Service Provider : Motorola

48   Service RecHandle : 0x 10001

Service Class ID List :

50    " Dialup Networking " (0x 1103)

Protocol Descriptor List :

52    "L2CAP" (0x 0100)

       " RFCOMM " (0x 0003)

54        Channel : 1

Language Base Attr List :

56    code _ ISO 639: 0x 656e

 encoding :     0x6a

58    base _ offset : 0x 100

 code _ ISO 639: 0x7a68

60    encoding :     0x6a

 base _ offset : 0xc 800

62  Profile Descriptor List :

 " Dialup Networking " (0x 1103)

64        Version : 0x 0100

除 了拨号网络服务的频道位置相对固定之外,其他服务在不同手机上的频道通常是不同的,手机一般支持的其他服务包括音频/耳机服务、车载免提服务、 OBEX对象推送服务、OBEX文件传输服务以及图片推送服务等,利用这些服务,可以利用手机拨号上网或是与手机交换图片、音乐等文件。


15.2.4  使用蓝牙
    首先介绍如何利用蓝牙取代手机数据线,以便进行拨号等工作。之后介绍利用蓝牙传送文件的几个用法,都是借助于前面提到的OBEX协议。

1.用蓝牙代替串口
    大家知道,蓝牙的一个基本功能就是模仿串口,而串口的重要作用之一(可能是最重要的了)就是拨号,传统的DTE也就是Modem。实际上,通过 RFCOMM,蓝牙连接可以反映在/dev/rfcomm0这样的字符设备上,像串口一样操作。当然,最好先定义/etc /bluetooth/ rfcomm.conf,里面根据手机的设备号和频道号写上相应设置,见清单15.7。

清单15.7  rfcomm设置

rfcomm 0 {

66          # Automatically bind the device at startup

    bind yes ;

68

        # Bluetooth address of the device

70      device 00:17:00:7 B :18: B8;

72          # RFCOMM channel for the connection

    channel 1;

74

        # Description of the connection

76      comment " Motorola SLVR L7";

}

    这样,在启动bluetooth服务的时候,就已经自动连接上了,而不需要使用rfcomm(1)命令自己费力气了。现在,可以使用任意一个喜欢的串口程 序(minicom、gtkterm等等)来对/dev/rfcomm0进行操作了,当然也可以使用pppd建立拨号网络。


2.利用OBEX推送文件
    这是使用手机或计算机提供的“OBEX Object Push”(0x1105)服务,由另一方向其推送如文件。使用的工具是openobex-apps包里的obex test工具。首先是利用手机的Push服务向手机推送,对于本例中的手机,这是通过清单15.5所使用的sdptool命令得到的结果的一部分,清单 15.8所示。

清单15.8  手机提供的对象推送功能

78   Service Name : OBEX Object Push

Service Description : OBEX Object Push

80   Service Provider : Motorola

Service RecHandle : 0x 10008

82   Service Class ID List :

        " OBEX Object Push " (0x 1105)

84   Protocol Descriptor List :

        "L2CAP" (0x 0100)

86      " RFCOMM " (0x 0003)

       Channel : 8

88      " OBEX " (0x 0008)

可以看到,推送服务位于频道8,现在,在obex_test的命令行里指定设备和频道,如清单15.9所示。

清单15.9  向手机推送文件

gnawux@inspiration :~$ obex _ test -b 00:17:00:7 B :18: B8 8

90   Using Bluetooth RFCOMM transport

OBEX Interactive test client / server .

92  > c

Connect OK!

94   Version : 0x10. Flags : 0x00

> p wangxu . jpg me. jpg

96   PUT file (local , remote )> name = wangxu .jpg , size =34177

Going to send 34177 bytes

98   Made some progress ...

Made some progress ...

100  Made some progress ...

Made some progress ...

102  Made some progress ...

PUT successful !

104  > q

执行完obex-test之后,进入一个交互状态,首先建立连接,然后传送文件(本地文件名是wangxu.jpg,存在手机上叫me.jpg(这个是随意取的),最后退出。这个过程需要看着手机屏幕,可能要确认是否连接,文件存放在哪里,这个和手机有关。

现在也可以看看手机向计算机推送,首先应该让计算机进入接收状态,如果本地没有启动Object PUSH服务,可以利用sdptool把它加上,如清单15.10所示。

清单15.10  给计算机加上Object Push服务

gnawux@inspiration :~$ sdptool add OPUSH

106  OBEX Object Push service registered

现在进入接收状态,注意要使用计算机(local)的地址和频道号,这些信息可以通过清单15.4所示方法得到,见清单15.11。

清单15.11  接收手机推送的文件

gnawux@inspiration :~$ obex _ test -b FF:FF:FF :00:00:00 9

108  Using Bluetooth RFCOMM transport

OBEX Interactive test client / server .

110  > s

现在,计算机进入了接收模式,在手机侧发送文件到计算机就可以了。


3.使用obexftp上传下载
    使用“OBEX File Transfer”(0x1106)服务的obexftp是一个方便的工具,利用它可以查看手机上的内容,并进行上传下载,对于本例,对应的频道是9。先来查看一下有哪些目录,见清单15.12。

清单15.12  obexftp列目录清单

 gnawux@inspiration :~$ obexftp -b 00:17:00:7 B :18: B8 -B 9 -l

112  Browsing 00:17:00:7 B :18: B8 ...

 Channel : 9

114  Connecting ... done

 Receiving "( null )"...| <? xml version ="1.0" ?>

116   <! DOCTYPE folder - listing SYSTEM "obex - folder - listing . dtd">

 <folder - listing >

118   <parent - folder />

 <folder name =" audio " size ="0" type =" folder " modified ="20060805 T 144844 Z" user

 - perm =" RW" />

<!--[if !supportLists]-->120        <!--[endif]--><folder name =" video " size ="0" type =" folder " modified ="20060805 T 144844 Z"

      user - perm =" RW" />

 <folder name =" picture " size ="0" type =" folder " modified ="20060805 T 144844 Z"

 user - perm =" RW" />

<!--[if !supportLists]-->121        <!--[endif]--><folder name =" MMC( Removable )" size ="0" type =" folder " modified ="19700101 T

      000000 Z"      user - perm =" RW"

124    </folder - listing >done

  Disconnecting ... done

可以看到,有4个有读写(RW)权限的目录,再看看audio里面有什么,见清单15.13。

清单15.13  obexftp查看audio目录

126  gnawux@inspiration :~$ obexftp -b 00:17:00:7 B :18: B8 -B 9 -l audio

 Browsing 00:17:00:7 B :18: B8 ...

128   Channel : 9

 Connecting ... done

130   Receiving " audio "...| <? xml version ="1.0" ?>

 <! DOCTYPE folder - listing SYSTEM "obex - folder - listing . dtd">

132   <folder - listing >

 <parent - folder />

<!--[if !supportLists]-->134       <!--[endif]--><file name ="a.mp 3" size ="977920" type =" audio /mp 3" modified ="20060805 T 145050

       Z" user   - perm =" RW"

136   </folder - listing >done

 Disconnecting ... done

可以看到,这里有一个MP3文件,把它取下来,如清单15.14所示。

清单15.14  obexftp下载

138   gnawux@inspiration :~$ obexftp -b 00:17:00:7 B :18: B8 -B 9 -c audio -g a.mp3

 Browsing 00:17:00:7 B :18: B8 ...

140   Channel : 9

 Connecting ... done

142   Sending " audio "... done

 Receiving "a.mp3"... - done

144   Disconnecting ... done

经过一段漫长的等待,传送终于完成了。再把wangxu.jpg放到picture目录去,如清单15.15所示。

清单15.15  obexftp下载

gnawux@inspiration :~$ obexftp -b 00:17:00:7 B :18: B8 -B 9 -c picture -p wangxu .jpg

146  Browsing 00:17:00:7 B :18: B8 ...

Channel : 9

148  Connecting ... done

Sending " picture "... done

150  Sending " wangxu .jpg "...\ done

Disconnecting ... done

这些就是obexftp的基本用法,更复杂的用法可以参考它的手册页obexftp(1)。此外,还有obexserver、qobex(基于QT的图形化界面工具)等工具,此处不一一介绍。

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 蓝牙Profile建立过程协议栈图如下: 在蓝牙设备之间建立连接和通信的过程中,需要经历蓝牙协议栈的不同层次,包括物理层、链路层、主机控制器接口(HCI)、主机(Host)和应用层。 1. 物理层:该层负责将数据以无线信号的形式传输,并处理物理层的报文格式和通信介质的选择。物理层确定了频率、功率和调制等参数,是实现蓝牙通信的基础。 2. 链路层:该层负责处理无线信号的连接和断开,以及错误检测和纠正。链路层还定义了蓝牙设备之间的广播、扫描、连接和断开的规范。 3. 主机控制器接口(HCI):该层负责处理主机和主机控制器之间的通信,包括命令和事件的传输。主机控制器接口定义了蓝牙设备之间的通信接口。 4. 主机:主机层负责管理蓝牙设备的连接和数据传输。主机需要根据应用的需求选择合适的蓝牙Profile,并与连接的设备进行Profile的匹配和协商。 5. 应用层:应用层是最上层的层次,负责实现特定的蓝牙应用功能,比如音频传输、数据传输等。应用层需要通过主机层和主机控制器接口与其他设备通信。 在建立蓝牙Profile的过程中,首先设备之间需要进行配对和身份验证,以确保通信的安全性。配对和身份验证的方式可以使用数字证书、PIN码等方式。然后设备通过主机和主机控制器进行连接,并进行Profile的匹配和协商。设备之间的Profile协商包括选择通信协议、传输参数等。最后,设备之间建立完整的连接后,可以通过应用层进行具体的数据传输和应用功能实现。 以上是蓝牙Profile建立过程协议栈图的简要介绍,通过不同层次的协议和接口,蓝牙设备可以完成连接和通信,并实现各种蓝牙应用。 ### 回答2: 蓝牙profile建立过程协议栈图是描述蓝牙设备之间建立连接和交换数据的图示。蓝牙profile建立过程包括基本的蓝牙协议层。 在蓝牙设备之间建立连接过程中,首先是物理层的建立,即通过射频信号在蓝牙设备之间建立无线链接。接下来是链路管理协议(LMP),用于进行设备间的身份验证和建立可靠通信链路。LMP会与蓝牙对等协议(BNEP)同时运行,以提供对设备之间数据传输的支持。 蓝牙设备建立连接后,会进行服务发现协议(SDP),用于发现和获取对等设备上的服务。SDP会通过蓝牙协议与服务发现服务互动,亲自获取服务信息。 蓝牙协议还包括通用属性协议(GATT),它是在连接的设备之间建立应用层通信的基础。GATT使用属性协议(ATT)来管理数据的读取和写入,通过属性请求协议(ATTP)向对等设备发送数据请求或响应,以及通过属性通知协议(ANP)进行数据更新的通知。 总结起来,蓝牙profile建立过程协议栈图包括物理层、链路管理协议、蓝牙对等协议、服务发现协议、通用属性协议以及相关的属性协议。这些协议共同作用,使蓝牙设备能够建立连接、进行数据交换和实现各种应用功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值