基于BlueZ協(xié)議棧的嵌入式系統(tǒng)無線通信實(shí)現(xiàn)
(1) 生成交叉編譯器,創(chuàng)建交叉編譯環(huán)境
(2) 編譯、配置實(shí)驗(yàn)開發(fā)平臺上的 Linux內(nèi)核
(3) 安裝 BlueZ 軟件包
(4) 編譯實(shí)驗(yàn)開發(fā)平臺上的Linux內(nèi)核
(5) 向s3c2410a實(shí)驗(yàn)平臺移植 通過上述步驟完成了藍(lán)牙協(xié)議棧 BlueZ的移植后,一個嵌入式藍(lán)牙應(yīng)用開發(fā)平臺就搭建本文引用地址:http://www.ex-cimer.com/article/151711.htm
4、文件傳輸功能的實(shí)現(xiàn)
如上步驟成功移植藍(lán)牙協(xié)議棧BlueZ后,一個完整的嵌入式藍(lán)牙應(yīng)用開發(fā)平臺就已經(jīng)搭建好了,本文將利用BlueZ提供的API函數(shù)在RFCOMM層上實(shí)現(xiàn)藍(lán)牙文件傳輸?shù)墓δ?,所采用?a class="contentlabel" href="http://www.ex-cimer.com/news/listbylabel/label/協(xié)議">協(xié)議路徑為:射頻(RF)―基帶與鏈路控制(BBLC)―主機(jī)控制接口(HCI)―邏輯鏈路與適配協(xié)議(L2CAP)―串口仿真(RFCOMM)―對象交換協(xié)議(OBEX)。它的實(shí)現(xiàn)分為客戶端程序和服務(wù)器端程序,流程圖如圖2所示。
2反映了通過藍(lán)牙實(shí)現(xiàn)文件從客戶端傳輸一個文件到服務(wù)器的過程,其中用到的協(xié)議棧中的API函數(shù)以及針對藍(lán)牙通信的設(shè)置如下 : (1)int socket(int domain, int type,int protocol) 通過這個函數(shù)建立一個套接字,其中參數(shù) domain說明網(wǎng)絡(luò)程序所用的通訊協(xié)議族,本實(shí)驗(yàn)中我們用的是藍(lán)牙官方協(xié)議棧BlueZ,所以我們的 domain取值A(chǔ)F_BLUETOOTH,type
我們采用可靠的面向連接的 SOCK_STREAM,protocol我們采用的代表串口仿真的 BTPROTO_RFCOMM。
(2) int bind(int sockfd, struct sockaddr *my_addr, int addrlen)
這個函數(shù)是服務(wù)器端的函數(shù),實(shí)現(xiàn)的是綁定端口功能。在我們的實(shí)驗(yàn)中,參數(shù) my_addr代表的我們用的是一個結(jié)構(gòu)體,表示本地地址信息,它的 rc_family我們?nèi)?AF_BLUETOOTH,它的rc_bdaddr我們?nèi)】梢院腿我庵鳈C(jī)通信的 INADDR_ANY。
(3) int listen(int sockfd,int backlog)
這個函數(shù)是服務(wù)器端的函數(shù),實(shí)現(xiàn)監(jiān)聽端口功能,它和我們普通Linux下的使用方法完全一樣。
(4) int accept(int sockfd, struct sockaddr *addr,int *addrlen)
這個函數(shù)是服務(wù)器端的函數(shù),完成接受客戶端的鏈接請求,并建立與客戶端的鏈接的功能。
評論