<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    OMG,到底在尋找什么..................
    (構(gòu)造一個(gè)完美的J2EE系統(tǒng)所需要的完整知識(shí)體系)
    posts - 198,  comments - 37,  trackbacks - 0


    hbb [等級(jí):◆(初級(jí))] (信譽(yù)值: 100) 回復(fù)于: 2007-1-8 2:19:31Top

    jUSB API

    jUSB 項(xiàng)目是由 Mojo Jojo 和 David Brownell 于 2000年 6月創(chuàng)立的。其目標(biāo)是提供一組免費(fèi)的、在 Linux 平臺(tái)上訪問 USB 設(shè)備的 Java API。這個(gè) API 是按照 Lesser GPL (LGPL)條款發(fā)表的,這意味著您可以在專有和免費(fèi)軟件項(xiàng)目中使用它。這個(gè) API 提供了對(duì)多個(gè)物理 USB 設(shè)備的多線程訪問,并支持本機(jī)和遠(yuǎn)程設(shè)備。具有多個(gè)接口的設(shè)備可以同時(shí)被多個(gè)應(yīng)用程序(或者設(shè)備驅(qū)動(dòng)程序)所訪問,其中每一個(gè)應(yīng)用程序(或者設(shè)備驅(qū)動(dòng)程序)都占據(jù)一個(gè)不同的接口。該 API 支持控制傳輸、批量傳輸和中斷傳輸,不支持等時(shí)傳輸,因?yàn)榈葧r(shí)傳輸用于媒體數(shù)據(jù)(如音頻和視頻),JMF API 已經(jīng)在其他標(biāo)準(zhǔn)設(shè)備驅(qū)動(dòng)程序上對(duì)此提供了很好的支持(參閱 參考資料)。當(dāng)前,該 API 可以在具有 Linux 2.4 核心或者以前的 2.2.18 核心的 GNU/Linux 版本上工作。因此可支持大多數(shù)最新的版本,例如,該 API 可以在沒有任何補(bǔ)丁或者升級(jí)的 Red Hat 7.2 和 9.0 上工作。

    jUSB API 包括以下包:
     
    ·usb.core: 這個(gè)包是 jUSB API 的核心部分。它使得 Java 應(yīng)用程序可以從 USB 主機(jī)訪問 USB 設(shè)備。

    ·usb.linux: 這個(gè)包包含 usb.core.Host 對(duì)象的 Linux 實(shí)現(xiàn)、bootstrapping 支持和其他可以提升 Linux USB 支持的類。這個(gè)實(shí)現(xiàn)通過虛擬 USB 文件系統(tǒng)(usbdevfs)訪問 USB 設(shè)備。

    ·usb.windows: 這個(gè)包包含 usb.core.Host 對(duì)象的 Windows 實(shí)現(xiàn)、bootstrapping 支持和其他可以提升 Windows USB 支持的類。這個(gè)實(shí)現(xiàn)仍然處于非常初級(jí)的階段。

    ·usb.remote: 這個(gè)包是 usb.core API 的遠(yuǎn)程版本。它包括一個(gè) RMI proxy 和一個(gè) daemon 應(yīng)用程序,它讓 Java 應(yīng)用程序可以訪問遠(yuǎn)程計(jì)算機(jī)上的 USB 設(shè)備。

    ·usb.util: 這個(gè)包提供了一些有用的實(shí)用程序,可以將 firmware下載到 USB 設(shè)備上、將 USB 系統(tǒng)的內(nèi)容轉(zhuǎn)儲(chǔ)到 XML 中、以及將只有 bulk I/O 的 USB 設(shè)備工具轉(zhuǎn)換成一個(gè)套接字(socket)。

    ·usb.devices: 這個(gè)可選包收集了用 jUSB API 訪問不同 USB 設(shè)備的 Java 代碼,包括柯達(dá)數(shù)碼相機(jī)和 Rio 500 MP3 播放器。這些 API 經(jīng)過特別編寫以簡(jiǎn)化訪問特定 USB 設(shè)備的過程,并且不能用于訪問其他設(shè)備。這些 API 是在 usb.core API 之上構(gòu)建的,它們可以工作在所有支持 jUSB 的操作系統(tǒng)上。

    ·usb.view: 這個(gè)可選包提供了基于 Swing 的 USB 樹簡(jiǎn)單瀏覽器。它是一個(gè)展示 jUSB API 應(yīng)用的很好的示例程序。

    盡管 usb.core.Host 對(duì)象的實(shí)現(xiàn)對(duì)于不同的操作系統(tǒng)是不同的,但是 Java 程序員只需要理解 usb.core 包就可以用 jUSB API 開始應(yīng)用程序的開發(fā)。表 1 列出了 usb.core 的接口和類,Java 程序員應(yīng)該熟悉它們:

    表 1. jUSB 中的接口和類

    接口 說明
    Bus 將一組 USB 設(shè)備連接到 Host 上
    Host 表示具有一個(gè)或者多個(gè) Bus 的 USB 控制器

    類 說明
    Configuration 提供對(duì)設(shè)備所支持的 USB 配置的訪問,以及對(duì)與該配置關(guān)聯(lián)的接口的訪問
    Descriptor 具有 USB 類型的描述符的實(shí)體的基類
    Device 提供對(duì) USB 設(shè)備的訪問
    DeviceDescriptor 提供對(duì) USB 設(shè)備描述符的訪問
    EndPoint 提供對(duì) USB 端點(diǎn)描述符的訪問、在給定設(shè)備配置中構(gòu)造設(shè)備數(shù)據(jù)輸入或者輸出
    HostFactory 包含 bootstrapping 方法
    Hub 提供對(duì) USB hub 描述符以及一些 hub 操作的訪問
    Interface 描述一組端點(diǎn),并與一個(gè)特定設(shè)備配置相關(guān)聯(lián)
    PortIdentifier 為 USB 設(shè)備提供穩(wěn)定的字符串標(biāo)識(shí)符,以便在操作和故障診斷時(shí)使用

    用 jUSB API 訪問一臺(tái) USB 設(shè)備的正常過程如下:

    ·通過從 HostFactory 得到 USB Host 進(jìn)行 Bootstrap。

    ·從 Host 訪問 USB Bus,然后從這個(gè) Bus 訪問 USB root hub(即 USB Device)。

    ·得到 hub 上可用的 USB 端口數(shù)量,遍歷所有端口以找到正確的 Device。

    ·訪問附加到特定端口上的 USB Device。可以用一臺(tái) Device 的 PortIdentifier 直接從 Host 訪問它,也可以通過從 root hub 開始遍歷 USB Bus 找到它。

    ·用 ControlMessage 與該 Device 直接交互,或者從該 Device 的當(dāng)前 Configuration 中要求一個(gè) Interface,并與該 Interface 上可用的 Endpoint 進(jìn)行 I/O 。

    清單 1 展示了如何用 jUSB API 獲得 USB 系統(tǒng)中的內(nèi)容。這個(gè)程序編寫為只是查看 root hub 上可用的 USB 設(shè)備,但是很容易將它改為遍歷整個(gè) USB 樹。這里的邏輯對(duì)應(yīng)于上述步驟 1 到步驟 4。

    清單 1. 用 jUSB API 獲得 USB 系統(tǒng)的內(nèi)容

    import usb.core.*;

    public class ListUSB
    {
     public static void main(String[] args)
     {
    try
    {
     // Bootstrap by getting the USB Host from the HostFactory.
     Host host = HostFactory.getHost();

     // Obtain a list of the USB buses available on the Host.
     Bus[] bus = host.getBusses();
     int total_bus = bus.length;

     // Traverse through all the USB buses.
     for (int i=0; i<total_bus; i++)
     {
    // Access the root hub on the USB bus and obtain the
    // number of USB ports available on the root hub.
    Device root = bus[i].getRootHub();
    int total_port = root.getNumPorts();

    // Traverse through all the USB ports available on the
    // root hub. It should be mentioned that the numbering
    // starts from 1, not 0.
    for (int j=1; j<=total_port; j++)
    {
     // Obtain the Device connected to the port.
     Device device = root.getChild(j);
     if (device != null)
     {
    // USB device available, do something here.
     }
    }
     }
    } catch (Exception e)
    {
     System.out.println(e.getMessage());
    }
     }


    hbb [等級(jí):◆(初級(jí))] (信譽(yù)值: 100) 回復(fù)于: 2007-1-8 2:19:59Top

    清單 2 展示了在應(yīng)用程序成功地找到了 Device 的條件下,如何與 Interface 和 EndPoint 進(jìn)行批量 I/O。 這個(gè)代碼段也可以修改為執(zhí)行控制或者中斷 I/O。它對(duì)應(yīng)于上述步驟 5。

    清單 2. 用 jUSB API 執(zhí)行批量 I/O

    if (device != null)
    {
    // Obtain the current Configuration of the device and the number of
    // Interfaces available under the current Configuration.
    Configuration config = device.getConfiguration();
    int total_interface = config.getNumInterfaces();

    // Traverse through the Interfaces
    for (int k=0; k<total_interface; k++)
    {
    // Access the currently Interface and obtain the number of
    // endpoints available on the Interface.
    Interface itf = config.getInterface(k, 0);
    int total_ep = itf.getNumEndpoints();

    // Traverse through all the endpoints.
    for (int l=0; l<total_ep; l++)
    {
    // Access the endpoint, and obtain its I/O type.
    Endpoint ep = itf.getEndpoint(l);
    String io_type = ep.getType();
    boolean input = ep.isInput();

    // If the endpoint is an input endpoint, obtain its
    // InputStream and read in data.
    if (input)
    {
    InputStream in;
    in = ep.getInputStream();
    // Read in data here
    in.close();
    }
    // If the Endpoint is and output Endpoint, obtain its
    // OutputStream and write out data.
    else
    {
    OutputStream out;
    out = ep.getOutputStream();
    // Write out data here.
    out.close();
    }
    }
    }
    }

    jUSB 項(xiàng)目在 2000年 6月到 2001年 2月期間非常活躍。該 API 的最新的版本 0.4.4發(fā)表于 2001年 2月 14日。從那以后只提出了很少的改進(jìn),原因可能是 IBM 小組成功地成為了 Java 語(yǔ)言的候選擴(kuò)展標(biāo)準(zhǔn)。不過,基于 jUSB 已經(jīng)開發(fā)出一些第三方應(yīng)用程序,包括 JPhoto 項(xiàng)目(這是一個(gè)用 jUSB 連接到數(shù)碼照相機(jī)的應(yīng)用程序)和 jSyncManager 項(xiàng)目(這是一個(gè)用 jUSB 與使用 Palm 操作系統(tǒng)的 PDA 同步的應(yīng)用程序)。


    hbb [等級(jí):◆(初級(jí))] (信譽(yù)值: 100) 回復(fù)于: 2007-1-8 2:20:38Top

    JSR-80 API (javax.usb)

    正如前面提到的,JSR-80 項(xiàng)目是由 IBM 的 Dan Streetman 于 1999年創(chuàng)立的。2001年,這個(gè)項(xiàng)目通過 Java 規(guī)范請(qǐng)求(JSR)過程被接受為 Java 語(yǔ)言的候選擴(kuò)展標(biāo)準(zhǔn)。這個(gè)項(xiàng)目現(xiàn)在稱為 JSR-80 并且被正式分派了 Java 包 javax.usb。這個(gè)項(xiàng)目使用 Common Public License 的許可證形式,并通過 Java Community Process 進(jìn)行開發(fā)。這個(gè)項(xiàng)目的目標(biāo)是為 Java 平臺(tái)開發(fā)一個(gè) USB 接口,可以從任何 Java 應(yīng)用程序中完全訪問 USB 系統(tǒng)。JSR-80 API 支持 USB 規(guī)范所定義的全部四種傳輸類型。目前,該 API 的 Linux 實(shí)現(xiàn)可以在支持 2.4 核心的大多數(shù)最新 GNU/Linux 版本上工作,如 Red Hat 7.2 和 9.0。

    JSR-80 項(xiàng)目包括三個(gè)包:javax-usb (javax.usb API)、javax-usb-ri (操作系統(tǒng)無(wú)關(guān)的基準(zhǔn)實(shí)現(xiàn)的公共部分)以及 javax-usb-ri-linux (Linux 平臺(tái)的基準(zhǔn)實(shí)現(xiàn),它將公共基準(zhǔn)實(shí)現(xiàn)鏈接到 Linux USB 堆棧)。所有這三個(gè)部分都是構(gòu)成 Linux 平臺(tái)上 java.usb API 完整功能所必需的。在該項(xiàng)目的電子郵件列表中可以看到有人正在致力于將這個(gè) API 移植到其他操作系統(tǒng)上(主要是 Microsoft Windows),但是還沒有可以工作的版本發(fā)表。

    盡管 JSR-80 API 的操作系統(tǒng)無(wú)關(guān)的實(shí)現(xiàn)在不同的操作系統(tǒng)上是不同的,但是 Java 程序員只需要理解 javax.usb 包就可以開始開發(fā)應(yīng)用程序了。表 2 列出了 javax.usb 中的接口和類, Java 程序員應(yīng)該熟悉它們:

    表 2. JSR-80 API 中的接口和類

    接口 說明
    UsbConfiguration 表示 USB 設(shè)備的配置
    UsbConfigurationDescriptor USB 配置描述符的接口
    UsbDevice USB 設(shè)備的接口
    UsbDeviceDescriptor USB 設(shè)備描述符的接口
    UsbEndpoint USB 端點(diǎn)的接口
    UsbEndpointDescriptor USB 端點(diǎn)描述符的接口
    UsbHub USB hub 的接口
    UsbInterface USB 接口的接口
    UsbInterfaceDescriptor USB 接口描述符的接口
    UsbPipe USB 管道的接口
    UsbPort USB 端口的接口
    UsbServices javax.usb 實(shí)現(xiàn)的接口

    類 說明
    UsbHostManager javax.usb 的入口點(diǎn)

    用 JSR-80 API 訪問 USB 設(shè)備的正常過程如下:

    ·通過從 UsbHostManager 得到相應(yīng)的 UsbServices 進(jìn)行 Bootstrap。

    ·通過 UsbServices 訪問 root hub。在應(yīng)用程序中 root hub 就是一個(gè) UsbHub。

    ·獲得連接到 root hub 的 UsbDevices 清單。遍歷所有低級(jí) hub 以找到正確的 UsbDevice。

    ·用控制消息(UsbControlIrp)與 UsbDevice 直接交互,或者從 UsbDevice 的相應(yīng) UsbConfiguration 中要求一個(gè) UsbInterface 并與該 UsbInterface 上可用的 UsbEndpoint 進(jìn)行 I/O。

    ·如果一個(gè) UsbEndpoint 用于進(jìn)行 I/O,那么打開與它關(guān)聯(lián)的 UsbPipe。通過這個(gè) UsbPipe 可以同步或者異步提交上行數(shù)據(jù)(從 USB 設(shè)備到主計(jì)算機(jī))和下行數(shù)據(jù)(從主計(jì)算機(jī)到 USB 設(shè)備)。

    ·當(dāng)應(yīng)用程序不再需要訪問該 UsbDevice 時(shí),關(guān)閉這個(gè) UsbPipe 并釋放相應(yīng)的 UsbInterface。

    在清單 3 中,我們用 JSR-80 API 獲得 USB 系統(tǒng)的內(nèi)容。這個(gè)程序遞歸地遍歷 USB 系統(tǒng)上的所有 USB hub 并找出連接到主機(jī)計(jì)算機(jī)上的所有 USB 設(shè)備。這段代碼對(duì)應(yīng)于上述步驟 1 到步驟 3。

    清單 3. 用 JSR-80 API 獲得 USB 系統(tǒng)的內(nèi)容

    import javax.usb.*;
    import java.util.List;

    public class TraverseUSB
    {
    public static void main(String argv[])
    {
    try
    {
    // Access the system USB services, and access to the root
    // hub. Then traverse through the root hub.
    UsbServices services = UsbHostManager.getUsbServices();
    UsbHub rootHub = services.getRootUsbHub();
    traverse(rootHub);
    } catch (Exception e) {}
    }

    public static void traverse(UsbDevice device)
    {
    if (device.isUsbHub())
    {
    // This is a USB Hub, traverse through the hub.
    List attachedDevices = ((UsbHub) device).getAttachedUsbDevices();
    for (int i=0; i<attachedDevices.size(); i++)
    {
    traverse((UsbDevice) attachedDevices.get(i));
    }
    }
    else
    {
    // This is a USB function, not a hub.
    // Do something.
    }
    }
    }

    清單 4 展示了在應(yīng)用程序成功地找到 Device 后,如何與 Interface 和 EndPoint 進(jìn)行 I/O。這段代碼還可以修改為進(jìn)行所有四種數(shù)據(jù)傳輸類型的 I/O。它對(duì)應(yīng)于上述步驟 4 到步驟 6。

    清單 4. 用 JSR-80 API 進(jìn)行 I/O

    public static void testIO(UsbDevice device)
    {
    try
    {
    // Access to the active configuration of the USB device, obtain
    // all the interfaces available in that configuration.
    UsbConfiguration config = device.getActiveUsbConfiguration();
    List totalInterfaces = config.getUsbInterfaces();

    // Traverse through all the interfaces, and access the endpoints
    // available to that interface for I/O.
    for (int i=0; i<totalInterfaces.size(); i++)
    {
    UsbInterface interf = (UsbInterface) totalInterfaces.get(i);
    interf.claim();
    List totalEndpoints = interf.getUsbEndpoints();
    for (int j=0; j<totalEndpoints.size(); j++)
    {
    // Access the particular endpoint, determine the direction
    // of its data flow, and type of data transfer, and open the
    // data pipe for I/O.
    UsbEndpoint ep = (UsbEndpoint) totalEndpoints.get(i);
    int direction = ep.getDirection();
    int type = ep.getType();
    UsbPipe pipe = ep.getUsbPipe();
    pipe.open();
    // Perform I/O through the USB pipe here.
    pipe.close();
    }
    interf.release();
    }
    } catch (Exception e) {}
    }

    JSR-80 項(xiàng)目從一開始就非常活躍。2003年 2月發(fā)表了 javax.usb API、RI 和 RI 的 0.10.0 版本。看起來這一版本會(huì)提交給 JSR-80 委員會(huì)做最終批準(zhǔn)。預(yù)計(jì)正式成為 Java 語(yǔ)言的擴(kuò)展標(biāo)準(zhǔn)后,其他操作系統(tǒng)上的實(shí)現(xiàn)會(huì)很快出現(xiàn)。Linux 開發(fā)者團(tuán)體看來對(duì) JSR-80 項(xiàng)目的興趣比 jUSB 項(xiàng)目更大,使用 Linux 平臺(tái)的 javax.usb API 的項(xiàng)目數(shù)量在不斷地增加。

    結(jié)束語(yǔ)

    jUSB API 和 JSR-80 API 都為應(yīng)用程序提供了從運(yùn)行 Linux 操作系統(tǒng)的計(jì)算機(jī)中訪問 USB 設(shè)備的能力。JSR-80 API 提供了比 jUSB API 更多的功能,很有可能成為 Java 語(yǔ)言的擴(kuò)展標(biāo)準(zhǔn)。目前,只有 Linux 開發(fā)人員可以利用 jUSB 和 JSR-80 API 的功能。不過,有人正在積極地將這兩種 API 移植到其他操作系統(tǒng)上。Java 開發(fā)人員應(yīng)該在不久就可以在其他操作系統(tǒng)上訪問 USB 設(shè)備。從現(xiàn)在起就熟悉這些 API,當(dāng)這些項(xiàng)目可以在多個(gè)平臺(tái)上發(fā)揮作用時(shí),您就可以在自己的應(yīng)用程序中加入 USB 功能了。

    posted on 2007-01-31 15:33 OMG 閱讀(349) 評(píng)論(0)  編輯  收藏 所屬分類: JavaX

    <2007年1月>
    31123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    IT風(fēng)云人物

    文檔

    朋友

    相冊(cè)

    經(jīng)典網(wǎng)站

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 特级aa**毛片免费观看| 最近中文字幕无吗免费高清| 亚洲а∨精品天堂在线| 亚洲国产香蕉碰碰人人| 亚洲人成影院在线观看| 精品国产免费一区二区| 最近免费2019中文字幕大全| 国内精品免费久久影院| 一级特级女人18毛片免费视频| 亚洲色精品三区二区一区| 亚洲毛片免费观看| 亚洲大片在线观看| 亚洲毛片αv无线播放一区 | 美腿丝袜亚洲综合| 波多野结衣一区二区免费视频| 精品熟女少妇AV免费观看| 最近中文字幕2019高清免费| 曰批全过程免费视频在线观看无码| 一级看片免费视频囗交| 免费大片av手机看片高清| 久久亚洲精品11p| 亚洲第一成年网站视频| 久久水蜜桃亚洲AV无码精品| 亚洲熟妇AV一区二区三区浪潮| 亚洲avav天堂av在线网爱情| 亚洲区精品久久一区二区三区| 亚洲精品视频专区| 亚洲乱码卡一卡二卡三| 亚洲AV无码专区在线亚 | 久久福利资源网站免费看| 91热久久免费精品99| 91麻豆国产免费观看| 91精品国产免费网站| 永久在线免费观看| 亚洲精品免费在线| 久久国产免费福利永久| 成人黄软件网18免费下载成人黄18免费视频 | 特级一级毛片免费看| 一级毛片无遮挡免费全部| 国产黄色片免费看| 最近免费中文字幕MV在线视频3|