• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    紅外線通信協議介紹

    發布: 2007-5-25 11:57 | 作者: 李魯群 | 來源: 賽迪網 | 查看: 244次 | 進入軟件測試論壇討論

    領測軟件測試網 基于紅外線的傳輸技術最近幾年有了很大發展。目前廣泛使用的家電遙控器幾乎都是采用的紅外線傳輸技術。作為無線局域網的傳輸方式,紅外線方式的最大優點是不受無線電干擾,且它的使用不受國家無線管理委員會的限制。但是,紅外線對非透明物體的透過性較差,導致傳輸距離受限制。

    紅外線是波長在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.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>