物理信道(physical channel)是藍(lán)牙系統(tǒng)的最底層結(jié)構(gòu),它以一偽隨機(jī)跳頻序列、特定的發(fā)送時(shí)槽定時(shí)、接入碼及幀頭編碼來(lái)表征。藍(lán)牙定義了一系列物理信道用于不同的應(yīng)用,包括用于匹克網(wǎng)內(nèi)設(shè)備通信的匹克網(wǎng)物理信道,用于查找設(shè)備的查找掃描物理信道和用于尋呼設(shè)備的尋呼掃描物理信道。兩臺(tái)設(shè)備必須采用相同的物理信道才能進(jìn)行通信。主從設(shè)備建立連接的過程就是建立相同的匹克網(wǎng)信道的過程,這樣主從設(shè)備才能以同樣的定時(shí)和次序進(jìn)行載波頻率的跳變,進(jìn)行數(shù)據(jù)傳輸, 同時(shí)可以根據(jù)匹克網(wǎng)接入碼和幀頭編碼進(jìn)行數(shù)據(jù)過濾和解析,避免和其他設(shè)備在同一個(gè)頻段上的偶爾的相撞。 1.查詢掃描過程 2.尋呼掃描過程 尋呼掃描物理信道(page scan physical channel)用于主設(shè)備尋呼從設(shè)備,是設(shè)備建立連接的必經(jīng)階段,主從設(shè)備是匹克網(wǎng)內(nèi)設(shè)備的概念,這里用來(lái)指發(fā)起尋呼的設(shè)備和尋呼掃描設(shè)備。尋呼掃描跳頻序列和尋呼請(qǐng)求幀的設(shè)備接入碼-DAC是由從設(shè)備物理地址運(yùn)算出來(lái)的,主設(shè)備以該跳頻序列進(jìn)行載波頻率的跳變并在發(fā)送時(shí)間槽內(nèi)發(fā)送尋呼請(qǐng)求,處于可被連接模式的從設(shè)備以固定的周期(由page scan interval決定)在一個(gè)固定的時(shí)間窗(由page scan window決定)內(nèi)以某個(gè)跳頻頻率監(jiān)聽主設(shè)備的尋呼請(qǐng)求,監(jiān)聽到請(qǐng)求便在下個(gè)時(shí)間槽立即發(fā)送從設(shè)備尋呼響應(yīng)(slave page response),主設(shè)備在收到從設(shè)備尋呼響應(yīng)的下個(gè)時(shí)間槽發(fā)送主設(shè)備尋呼響應(yīng)(master page response),該響應(yīng)中包含了由主設(shè)備地址運(yùn)算出來(lái)的跳頻序列信息和時(shí)鐘相位,從設(shè)備接收到這些信息便進(jìn)入連接狀態(tài)并自動(dòng)成為匹克網(wǎng)的從設(shè)備,并再次返回從設(shè)備尋呼響應(yīng),主設(shè)備收到該響應(yīng)后進(jìn)入連接狀態(tài)并自動(dòng)成為匹克網(wǎng)的主設(shè)備。 應(yīng)用層的連接是建立在匹克網(wǎng)物理信道之上的邏輯連接,主設(shè)備通過SDP查詢從設(shè)備相應(yīng)服務(wù)的邏輯通道號(hào),依據(jù)該通道建立應(yīng)用 層級(jí)的連接。 協(xié)議棧已經(jīng)有了,使用藍(lán)牙是非常簡(jiǎn)單的事情。 (1)找到藍(lán)牙設(shè)備,這是HCI層負(fù)責(zé)的,使用bluez-utils包提供的hcitool來(lái)找到藍(lán)牙設(shè)備。 (2)找到服務(wù),RFCOMM是通過不同的頻道(channel)來(lái)提供不同的Profile的,所以需要找到要用的服務(wù)在設(shè)備上的哪個(gè)頻道上,這是通過同一個(gè)軟件包里的sdptool來(lái)完成的,就是SDP,服務(wù)發(fā)現(xiàn)協(xié)議。 (3)連接恰當(dāng)?shù)姆?wù)并使用。 藍(lán)牙的特點(diǎn)就是如上所述的那些了,而用戶態(tài)的工具所要完成的任務(wù)就是發(fā)現(xiàn)服務(wù)和使用服務(wù)了。 連接的建立: 藍(lán)牙系統(tǒng)有三種主要狀態(tài):待機(jī)狀態(tài),連接狀態(tài)和節(jié)能狀態(tài)。從待機(jī)狀態(tài)向連接狀態(tài)轉(zhuǎn)變的過程中,有7個(gè)子狀態(tài):尋呼、尋呼掃描、查詢、查詢掃描、主響應(yīng)、從響應(yīng)、查詢響應(yīng)。 1.啟動(dòng)HCI設(shè)備 清單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) 這個(gè)過程是自動(dòng)的,當(dāng)然也可以用hciconfig(8)來(lái)手工控制。hcid的配置文件位于/etc/bluetooth/hcid.conf, 通常使用軟件包附帶的版本就可以了,如果希望不用每次連接都在計(jì)算機(jī)這里確認(rèn)一次PIN碼的話,可以設(shè)置其中的security字段為auto,這樣,每 次連接就會(huì)使用passkey設(shè)置的PIN碼了。 2.尋找藍(lán)牙設(shè)備 清單15.3 尋找藍(lán)牙設(shè)備 inspiration :/ home / gnawux # hcitool scan 18 Scanning ... 00:17:00:7 B :18: B8 Motorola SLVR 之后藍(lán)牙設(shè)備就會(huì)被順利地找到,當(dāng)然,前提是不要忘了打開手機(jī)的藍(lán)牙開關(guān),并允許被找,這個(gè)功能平時(shí)最好不要打開,以防在公共場(chǎng)合遇到安全問題。 3.查看設(shè)備提供的服務(wù) 下面是例子,先看看本機(jī),見清單15.4。 清單15.4 本機(jī)提供的藍(lán)牙服務(wù) 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 然后可以看看關(guān)心的設(shè)備提供的服務(wù),手機(jī)提供的服務(wù)種類比較多,首先是SDP服務(wù)器,也就是服務(wù)發(fā)現(xiàn)服務(wù)器,有了這個(gè)服務(wù),就可以接下來(lái)發(fā)現(xiàn)其他服務(wù)功能了,見清單15.5。 清單15.5 手機(jī)提供的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 手機(jī)的最基本功能就是用于(電話或網(wǎng)絡(luò))撥號(hào),這里列出的第一項(xiàng)服務(wù)也是“撥號(hào)網(wǎng)絡(luò)網(wǎng)關(guān)”,標(biāo)識(shí)服務(wù)具體類型的字段是“Service Class ID”,它所在的頻道是RFCOMM的頻道1,如清單15.6所示。 清單15.6 手機(jī)提供的撥號(hào)網(wǎng)絡(luò)功能 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 除了撥號(hào)網(wǎng)絡(luò)服務(wù)的頻道位置相對(duì)固定之外,其他服務(wù)在不同手機(jī)上的頻道通常是不同的,手機(jī)一般支持的其他服務(wù)包括音頻/耳機(jī)服務(wù)、車載免提服務(wù)、 OBEX對(duì)象推送服務(wù)、OBEX文件傳輸服務(wù)以及圖片推送服務(wù)等,利用這些服務(wù),可以利用手機(jī)撥號(hào)上網(wǎng)或是與手機(jī)交換圖片、音樂等文件。 15.2.4 使用藍(lán)牙 1.用藍(lán)牙代替串口 清單15.7 rfcomm設(shè)置 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"; } 這樣,在啟動(dòng)bluetooth服務(wù)的時(shí)候,就已經(jīng)自動(dòng)連接上了,而不需要使用rfcomm(1)命令自己費(fèi)力氣了?,F(xiàn)在,可以使用任意一個(gè)喜歡的串口程序(minicom、gtkterm等等)來(lái)對(duì)/dev/rfcomm0進(jìn)行操作了,當(dāng)然也可以使用pppd建立撥號(hào)網(wǎng)絡(luò)。 2.利用OBEX推送文件 清單15.8 手機(jī)提供的對(duì)象推送功能 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) 可以看到,推送服務(wù)位于頻道8,現(xiàn)在,在obex_test的命令行里指定設(shè)備和頻道,如清單15.9所示。 清單15.9 向手機(jī)推送文件 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 執(zhí)行完obex-test之后,進(jìn)入一個(gè)交互狀態(tài),首先建立連接,然后傳送文件(本地文件名是wangxu.jpg,存在手機(jī)上叫me.jpg(這個(gè)是隨意取的),最后退出。這個(gè)過程需要看著手機(jī)屏幕,可能要確認(rèn)是否連接,文件存放在哪里,這個(gè)和手機(jī)有關(guān)。 現(xiàn)在也可以看看手機(jī)向計(jì)算機(jī)推送,首先應(yīng)該讓計(jì)算機(jī)進(jìn)入接收狀態(tài),如果本地沒有啟動(dòng)Object PUSH服務(wù),可以利用sdptool把它加上,如清單15.10所示。 清單15.10 給計(jì)算機(jī)加上Object Push服務(wù) gnawux@inspiration :~$ sdptool add OPUSH 106 OBEX Object Push service registered 現(xiàn)在進(jìn)入接收狀態(tài),注意要使用計(jì)算機(jī)(local)的地址和頻道號(hào),這些信息可以通過清單15.4所示方法得到,見清單15.11。 清單15.11 接收手機(jī)推送的文件 gnawux@inspiration :~$ obex _ test -b FF:FF:FF :00:00:00 9 108 Using Bluetooth RFCOMM transport OBEX Interactive test client / server . 110 > s 現(xiàn)在,計(jì)算機(jī)進(jìn)入了接收模式,在手機(jī)側(cè)發(fā)送文件到計(jì)算機(jī)就可以了。 3.使用obexftp上傳下載 清單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 )"...| 116 118 - perm =" RW" /> 120 user - perm =" RW" /> user - perm =" RW" /> 121 124 done Disconnecting ... done 可以看到,有4個(gè)有讀寫(RW)權(quán)限的目錄,再看看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 "...|
132 134 136 done Disconnecting ... done 可以看到,這里有一個(gè)MP3文件,把它取下來(lái),如清單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 經(jīng)過一段漫長(zhǎng)的等待,傳送終于完成了。再把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的基本用法,更復(fù)雜的用法可以參考它的手冊(cè)頁(yè)obexftp(1)。此外,還有obexserver、qobex(基于QT的圖形化界面工具)等工具,此處不一一介紹。 ="">="">=""> |
|