紅外線通信協議介紹

發表于:2007-05-25來源:作者:點擊數: 標簽:紅外線基于介紹通信協議
基于紅外線的傳輸技術最近幾年有了很大發展。目前廣泛使用的家電遙控器幾乎都是采用的紅外線傳輸技術。作為無線局域網的傳輸方式,紅外線方式的最大優點是不受無線電干擾,且它的使用不受國家無線管理委員會的限制。但是,紅外線對非透明物體的透過性較差,
基于紅外線的傳輸技術最近幾年有了很大發展。目前廣泛使用的家電遙控器幾乎都是采用的紅外線傳輸技術。作為無線局域網的傳輸方式,紅外線方式的最大優點是不受無線電干擾,且它的使用不受國家無線管理委員會的限制。但是,紅外線對非透明物體的透過性較差,導致傳輸距離受限制。

紅外線是波長在750nm至1mm之間的電磁波,它的頻率高于微波而低于可見光,是一種人的眼睛看不到的光線。紅外通信一般采用紅外波段內的近紅外線,波長在0.75um至25um之間。紅外數據協會(IRDA)成立后,為了保證不同廠商的紅外產品能夠獲得最佳的通信效果,紅外通信協議將紅外數據通信所采用的光波波長的范圍限定在850至900nm之內。

IRDA標準包括三個基本的規范和協議:物理層規范(Physical Layer Link Specification)、鏈接建立協議(Link Access Protocol:IrLAP)和鏈接管理協議(Link Management Protocol:IrLMP)。物理層規范制定了紅外通信硬件設計上的目標和要求,IrLAP和IrLMP為兩個軟件層,負責對鏈接進行設置、管理和維護。在IrLAP和IrLMP基礎上,針對一些特定的紅外通信應用領域,IRDA還陸續發布了一些更高級別的紅外協議,如TinyTP、IrOBEX、IrCOMM、IrLAN、IrTran-P和IrBus等等(見圖1)。

 


圖1 IrBus紅外線通信協議層


Palm J2ME對紅外口的操作介紹


事實上,Sun對基于Palm的Java程序設計提供了兩種方法:一種是利用CLDC+KJava;另一種是利用CLDC+MIDP,然后通過MIDP4Palm將MIDP轉換為Palm上可以運行的程序。前一種為編程方式,它無論從功能、對漢字的支持、還是運行速度上都高于后者,但是前一種提供的Java虛擬機KVM是單色的,不過可以選用完全兼容KVM的KAWT虛擬機來彌補此缺憾。后一種編程方式沒有提供對紅外口操作的類庫或方法。

Sun公司的J2ME中的CLDC1.x,KJava為Palm提供了紅外通信的API功能包。在KJava的API中,Palm 應程序中的主程序必須從J2ME的Spotlet類派生而來。

 


圖2 Sun Java體系結構


Spotlet類提供了Palm經過紅外口發送數據的靜態方法beamSend()。在Palm應用程序中,只需要將待經紅外線發送的數據轉化為字節數組,直接利用beamSend()就可以將數據經紅外口發送給別的設備,見下面程序代碼。


            ....
            public boolean sendData(String s)
            {
            boolean state=false;
            if (s!=null)
            state=this.beamSend(s.getBytes());
            return state;
            }.......
            


對于紅外線數據的接收,Spotlet類提供了 beamReceive(byte[]) 方法,將經紅外口接收到的數據存儲到一個字節數組中,進一步通過對此字節數組操作(如將其轉化為字符串等),可以將獲得的數據顯示出來,見下面程序代碼。


            //Receive beam Data
            public void beamReceive(byte[] parm1) {
            super.beamReceive( parm1);
            beamData=new String(parm1);
            System.out.print(“the received beam datab is:\n”+eamData);
            }
            


Palm J2ME紅外線聊天程序


Palm紅外線數據傳輸應用程序的編寫,取決于經紅外線通信的雙方。通信的雙方必須將接受紅外線設置為Beam Receive: on。雙方必須安裝相應的紅外通訊軟件。

在此假設通信的雙方均是Palm掌上電腦,雙向使用紅外線聊天系統。通信的雙方可以采用相同的程序。系統的主要設計思路是:在Palm J2ME程序GUI中,構造兩個TextField用于對話框,一個用于發送數據,另一個用于顯示經紅外口接收到的數據,然后在構造幾個按鈕,完成數據的發送、程序退出等(見圖3)。

 


圖3 Palm紅外聊天程序


程序說明如下 :

(1)構造類BeamDemo,由于BeamDemo屬于Palm 的J2ME程序的入口類必須由Spotlet派生,同時BeamDemo完成DialogOwner類(該類是否完成implements可選)如圖4所示。

 


圖4 BeamDemo UML類圖


(2)設置BeamDemo的程序入口,代碼如下。


            public static void main(String args[]) {
            new BeamDemo().register(WANT_SYSTEM_KEYS);
            }
            


Spotlet.register()的系統注冊事件可以有兩種:

一種為NO_EVENT_OPTIONS。如果注冊了此類事件,Palm的幾個功能鍵仍然可以被PalmOS操作系統使用。因此,由Spotlet派生來的程序可以不用設置程序的退出,直接由Palm的按鈕完成。

另一種為WANT_SYSTEM_KEYS。如果注冊了此類事件,Palm的幾個功能鍵不被PalmOS操作系統使用,只能由程序控制使用。因此,由Spotlet派生來的程序,必須設置程序的退出退出代碼,如:


            switch ( keyCode ) {
            case 264: // Home button was pressed
            System.exit(0); // exits program
            break;
            .........
            


否則系統無法退出。只有Reset Palm才能使系統退出。系統事件類型為使用系統鍵,該程序運行后會屏蔽系統鍵的功能,這樣可以提高系統響應速度。

(3)用戶界面的構造

為了演示Palm紅外線的通信功能,我們在此只構造3個按鈕、1個textField和1個textBox(如圖3)。


            ....
            static Graphics g = Graphics.getGraphics();
            //這里構造用戶界面(如圖1)
            Button button5 = new Button(“Exit”,117,139);
            Button button4 = new Button(“Clear”,69,139);
            Button button3 = new Button(“Send”,20,139);
            TextField textField2 = new TextField(“Please Data Here”,13,96,139,33);
            TextBox textBox1 = new TextBox(“This is the message that this\n System
            Received!\n\n”,15,8,137,73);
            //構造方法。
            public BeamDemo() {
            button5.setEnabled(true);
            button4.setEnabled(true);
            button3.setEnabled(true);
            textField2.setUpperCase(false);
            textField2.setText(“”);
            paint();
            }
            


(4)為了監聽系統紅外線口,必須重載Spotlet的beamReceive事件,Palm監聽的數據是原始的字節,如果由數據到來,就將數據讀入字節數組data[]中,將data[]構造出字符串,寫入textBox1,代碼如下:


            public void beamReceive(byte[] data) {
            String receivedString=new String(data);
            textBox1.setText(String.valueOf(receivedString));
            }
            public void dialogDismissed(String title) {
            ......
            }
            public void keyDown(int keyCode) {
            if (textField2.hasFocus()) {
            textField2.handleKeyDown(keyCode);
            }
            public void penDown(int x, int y) {
            if (button5.pressed(x,y)) {
            System.exit(0);
            }
            if (button4.pressed(x,y)) {
            textBox1.setText(“”);
            }
            ...
            


(5)設置經過紅外口,發送的內容。在BeamDemo程序中,使用textField2的內容作為要發送的數據。由于該數據是字符串,所以可以直接將字符串轉換為字節數組,通過beamSend方法以字節的形式經過Palm紅外口發送出。


            String text = textField2.getText();
            boolean suceeded = beamSend(String.valueOf(text).getBytes());
            if (textField2.pressed(x,y)) {
            }
            public void penMove(int x, int y) {
            if (textField2.pressed(x,y)) {
            }
            public void penUp(int x, int y) {
            }
            }
            


總結


總體來講,Palm J2ME紅外程序的編寫并不復雜,但要注意數據的發送是通過Spotlet的靜態方法static booolean beamSend(byte[])實現的,而數據的獲得必須重載beamReceive(byte[]) 方法,來提取接收的數據。另外,要注意Palm的模擬器POSE到目前為止并不支持紅外線通信的模擬,該程序的調試必須在兩臺真實的Palm上進行。

在日常生活中,許多紅外線遙控器都發送紅外線指令給被控制電器??梢岳蒙鲜龀绦?,將紅外線遙控器對準Palm的紅外口,由Palm捕獲紅外線遙控器發出的字節,并存放于Palm的內部數據庫中,然后利用static booolean beamSend(byte[])發送給被控制電器,就會驚喜地發現,Palm完全可以替代紅外線遙控器。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97