Java 平台一直都以其平台無關性自豪。雖然這種無關性有許多好處,但是它也使得編寫與硬體交互的 Java 應用程式的過程變得相當複雜。本文討論了兩個專案,它們透過提供使 Java 應用程式可以使用 USB 裝置的 API 而使這個過程變得更容易。雖然這兩個專案仍然處於萌芽狀態,但是它們都顯示了良好的前景,並已經成為一些實用應用程式的基礎。
USB 協定有嚴格的階層結構。在所有 USB 系統中,只有一個主裝置,連接到主計算機的 USB 介面稱為主控制器。主控制器有兩個標準:開放主控制器介面 (OHCI) 和通用主控制器介面 (UHCI)。USB 物理互連是分層的星形拓撲,最多有七層。一個 Hub 是每個星形的中心,USB 主機被認為是 Root Hub。
主機使用主/從協定與 USB 裝置通信。所有傳輸的資料都是由主控制器發起的。資料從主機流向裝置稱為下游或輸出傳輸,資料從裝置流向主機稱為上游或輸入傳輸。資料傳輸發生在主機和 USB 裝置上特定的端點之間,主機與端點之間的資料鏈接稱為管道。
IBM 的 Dan Streetman 最早開始了在 Java 語言中提供對 USB 裝置存取的努力。2001 年,他的專案透過 Java 規範請求 (JSR) 過程被接受為 Java 語言的候選擴展標準。這個專案現在稱為 JSR-80 並且指定了官方套件 javax.usb。
2000 年 6 月,Mojo Jojo 和 David Brownell 在 SourceForge 開始了 jUSB 專案。這兩個專案都開發出了 Linux 開發人員可以使用的套件,雖然它們都還很不完善。這兩個專案也都開始試圖向其他作業系統上的 Java 應用程式提供對 USB 裝置的存取。
本文將對 jUSB 和 JSR-80 專案作一個簡要介紹,並提供程式碼片段以展示如何用這兩個專案的 API 存取 USB 裝置。