一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

基于BlueZ協(xié)議棧的嵌入式系統(tǒng)無線通信實現(xiàn)

 joy_chen 2013-07-27

 摘要:藍(lán)牙技術(shù)作為全球統(tǒng)一的無線通信標(biāo)準(zhǔn),在多種智能設(shè)備無線互連,多媒體終端通信和家庭網(wǎng)絡(luò)等方面的應(yīng)用也越來越廣泛。本文在對官方的藍(lán)牙協(xié)議棧 BlueZ進(jìn)行分析研究的基礎(chǔ)上,在基于 S3C2410a的實驗開發(fā)平臺上實現(xiàn)了基于藍(lán)牙協(xié)議棧BlueZ的移植和文件傳輸功能,達(dá)到了預(yù)期的效果。

  1、引言

  隨著科學(xué)技術(shù)發(fā)展和社會進(jìn)步,嵌入式系統(tǒng)越來越多的應(yīng)用到我們的實際生活中,極大的改變著我們的生活。開發(fā)低成本、高性能、高可靠性的嵌入式產(chǎn)品正在成為研究的熱點。尤其是隨著信息化網(wǎng)絡(luò)化的發(fā)展,越來越需要與外部世界進(jìn)行信息交換,當(dāng)前主流的數(shù)據(jù)交換方式都是有線的,但有線通信存在著諸多不足,而無線通信以其無法比擬的靈活性,可移動性和極強(qiáng)的可擴(kuò)容性正得到越來越廣泛的應(yīng)用。藍(lán)牙技術(shù)作為全球統(tǒng)一的無線通信標(biāo)準(zhǔn),其目的在于建立通用的低功耗、低成本無線電空中接口及其控制軟件的公開標(biāo)準(zhǔn),使通信和計算機(jī)進(jìn)一步結(jié)合,使不同廠家生產(chǎn)的便攜式設(shè)備在沒有電線或電纜互相連接的情況下,能在近距離范圍內(nèi)具有互用、互操作的性能。而藍(lán)牙技術(shù)在多種智能設(shè)備無線互連,多媒體終端通信和家庭網(wǎng)絡(luò)等方面的應(yīng)用也越來越廣泛,本文在對藍(lán)牙的官方協(xié)議棧 BlueZ進(jìn)行深入研究的基礎(chǔ)上,在實驗開發(fā)平臺上實現(xiàn)了協(xié)議棧的移植和文件的傳輸功能。

  2、BlueZ 的體系結(jié)構(gòu)

  BlueZ由主機(jī)控制接口(Host CONTROL InteRFace,HCI)、Bluetooth協(xié)議核心、邏輯鏈路控制和適配協(xié)議(Logical Link CONTROL and AdaptaTIon Protocol,L2CAP)、SCO音頻層、其它 Bluetooth服務(wù)、用戶空間后臺進(jìn)程以及配置工具組成。它的完整結(jié)構(gòu)如圖 1所示(其中除應(yīng)用程序和硬件外為 BlueZ提供的部分)。

  3、BlueZ協(xié)議的移植 [2]

  本文涉及到的硬件平臺是三星公司的S3C2410a 開發(fā)板,軟件平臺是內(nèi)核版本為2.4.20Linux操作系統(tǒng)為實現(xiàn)藍(lán)牙協(xié)議棧BlueZ的移植可進(jìn)行以下步驟進(jìn)行移植:

  (1) 生成交叉編譯器,創(chuàng)建交叉編譯環(huán)境

  (2) 編譯、配置實驗開發(fā)平臺上的 Linux內(nèi)核

  (3) 安裝 BlueZ 軟件包

  (4) 編譯實驗開發(fā)平臺上的Linux內(nèi)核

  (5) s3c2410a實驗平臺移植 通過上述步驟完成了藍(lán)牙協(xié)議棧 BlueZ的移植后,一個嵌入式藍(lán)牙應(yīng)用開發(fā)平臺就搭建好了,下面利用該平臺提供的藍(lán)牙函數(shù)庫,來進(jìn)行文件傳輸功能的開發(fā)。

  4、文件傳輸功能的實現(xiàn)

  如上步驟成功移植藍(lán)牙協(xié)議棧BlueZ后,一個完整的嵌入式藍(lán)牙應(yīng)用開發(fā)平臺就已經(jīng)搭建好了,本文將利用BlueZ提供的API函數(shù)在 RFCOMM層上實現(xiàn)藍(lán)牙文件傳輸?shù)墓δ?,所采用的協(xié)議路徑為:射頻(RF)—基帶與鏈路控制(BB&LC)—主機(jī)控制接口(HCI)—邏輯鏈路與適配協(xié)議(L2CAP)—串口仿真(RFCOMM)—對象交換協(xié)議(OBEX)。它的實現(xiàn)分為客戶端程序和服務(wù)器端程序,流程圖如圖2所示。

  2反映了通過藍(lán)牙實現(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é)議族,本實驗中我們用的是藍(lán)牙官方協(xié)議棧BlueZ,所以我們的 domain取值AF_BLUETOOTH,type

  我們采用可靠的面向連接的 SOCK_STREAMprotocol我們采用的代表串口仿真的BTPROTO_RFCOMM。

  (2) int bind(int sockfd, struct sockaddr *my_addr, int addrlen)

  這個函數(shù)是服務(wù)器端的函數(shù),實現(xiàn)的是綁定端口功能。在我們的實驗中,參數(shù)my_addr代表的我們用的是一個結(jié)構(gòu)體,表示本地地址信息,它的 rc_family我們?nèi)?/span>AF_BLUETOOTH,它的rc_bdaddr我們?nèi)】梢院腿我庵鳈C(jī)通信的 INADDR_ANY

  (3) int listen(int sockfd,int backlog)

  這個函數(shù)是服務(wù)器端的函數(shù),實現(xiàn)*端口功能,它和我們普通Linux下的使用方法完全一樣。

   (4) int accept(int sockfd, struct sockaddr *addr,int *addrlen)

  這個函數(shù)是服務(wù)器端的函數(shù),完成接受客戶端的鏈接請求,并建立與客戶端的鏈接的功能。

  (5) int connect(int sockfd, struct sockaddr * serv_addr,int addrlen)

  這個函數(shù)是客戶端的函數(shù),完成向服務(wù)器端申請建立鏈接,與上面的綁定端口類似,參數(shù)my_addr代表的我們用的是一個結(jié)構(gòu)體,表示要申請鏈接的服務(wù)器地址信息,它的 rc_family我們?nèi)?/span>AF_BLUETOOTH,它的rc_bdaddr我們?nèi)】梢院腿我庵鳈C(jī)通信的INADDR_ANY。

  (6) ssize_t write(int fd,const void *buf,size_t nbytes) ssize_t read(int fd,void *buf,size_t nbyte)

  這兩個函數(shù)完成文件讀寫的功能,也完成服務(wù)器端和客戶端通信功能。在完成服務(wù)器端與客戶端通信功能時,把前面建立的通道看成是文件描述符,只要往文件描述符里面讀寫信息就可以了,與向文件讀寫過程一樣。

  以上是實現(xiàn)中用到的協(xié)議棧 BlueZ的主要庫函數(shù),它的客戶端核心代碼如下:

  if((from_fd=open(argv[2],O_RDONLY))==-1)

  while(bytes_read=read(from_fd,buffer,BUFFER_SIZE))

  {  /* 一個致命的錯誤發(fā)生了 */  if((bytes_read==-1)&&(errno!=EINTR)) break;   else if(bytes_read>0) { ptr="buffer";

  status=write(s,ptr,strlen(ptr));    memset(buffer,0,BUFFER_SIZE); }

  }

  它的服務(wù)器端核心代碼如下: /*創(chuàng)建目標(biāo)文件 */  memset(buf,0,BUFFER_SIZE); while(1) { bytes_read = read(client,buf,sizeof(buf));

  if(bytes_read>0)

  {  ptr="buf"; while(bytes_write=write(to_fd,ptr,bytes_read))  { /*一個致命錯誤發(fā)生了 */

  if((bytes_write==-1)&&(errno!=EINTR))break;/* 寫完了所有讀的字節(jié) */    else if(bytes_write==bytes_read) break; /*只寫了一部分 ,繼續(xù)寫 */     else if(bytes_write>0) { ptr+=bytes_write;

  bytes_read-=bytes_write;

  } }   /*寫的時候發(fā)生的致命錯誤 */ if(bytes_write==-1)break; /*這里讀完后必須把buffer清空*/    memset(buf,0,sizeof(buf));

  } else{  exit(1);  }

  }

  5、結(jié)束語

  在目前,對于藍(lán)牙協(xié)議棧的移植已經(jīng)有非常深入的研究,但對基于藍(lán)牙協(xié)議棧BlueZ的源代碼級的研究還不多。本文在 ARM9+Linux環(huán)境下構(gòu)建了的藍(lán)牙工作環(huán)境, 通過官方的藍(lán)牙協(xié)議棧 BlueZ提供的庫函數(shù)編程實現(xiàn)了藍(lán)牙的文件傳輸功能。利用嵌入式系統(tǒng)和無線傳輸實現(xiàn)文件傳輸,符合數(shù)字化、網(wǎng)絡(luò)化的發(fā)展趨勢。本文作者創(chuàng)新點 :在源代碼級別上借助藍(lán)牙協(xié)議棧 BlueZ實現(xiàn)了文件的傳輸功能。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日韩免费av一区二区三区| 99久久精品国产日本| 亚洲综合香蕉在线视频| 国产精品熟女在线视频| 亚洲高清中文字幕一区二三区 | 亚洲第一区欧美日韩在线| 久久精品国产亚洲熟女| 国产不卡在线免费观看视频| 绝望的校花花间淫事2| 国产欧美日韩精品一区二| 亚洲欧美日韩另类第一页| 国产成人精品在线播放| 欧美三级不卡在线观线看| 国产日产欧美精品大秀| 黄色国产精品一区二区三区| 视频一区二区 国产精品| 久久99亚洲小姐精品综合| 加勒比人妻精品一区二区| 在线观看欧美视频一区| 99久久免费看国产精品| 99福利一区二区视频| 91精品国自产拍老熟女露脸| 国产免费操美女逼视频| 国产超碰在线观看免费| 成年人黄片大全在线观看| 国产精品亚洲一区二区| 欧美日韩最近中国黄片| 最新69国产精品视频| 99久久国产精品亚洲| 在线免费观看黄色美女| 亚洲第一香蕉视频在线| 丰满的人妻一区二区三区| 国产精品成人又粗又长又爽| 国产精品久久精品毛片| 欧美日韩中国性生活视频| 人妻露脸一区二区三区| 亚洲一区二区三区三区| 一区中文字幕人妻少妇| 国产av精品高清一区二区三区 | 欧美人与动牲交a精品| 乱女午夜精品一区二区三区|