2014-03-13 36 views
1

我正在使用通過Libusb Java使用PIC18F4550構建的USB設備進行通信。 我可以異步地寫入它,所以我不需要使用設備對變量進行池化,但是我無法使用Java應用程序進行處理。我必須不斷嘗試從中讀取消息,引發微控制器中斷,我試圖避免的是什麼。 有沒有一種使用類似回調或阻塞命令的方式,只有當它實際上有東西要讀取時纔會嘗試從設備讀取? 如果我無法讓我的問題更清楚,我會非常抱歉,任何懷疑都會被問到!Libusb Java - 從設備異步讀取

回答

1

不,這是不可能的,因爲USB工作的基本方式。一個USB設備只能在主機詢問是否有任何要說的時候與主機通話。負責誰可以說話的主持人。當您有一個IN端點時,主機必須定期輪詢您的設備以檢查設備是否有任何要說的內容。

我以前編寫過PIC18F4550,並且我知道如果您將IN端點配置爲發送NAK,則每當主機要求來自端點的數據時,您都不必處理中斷。我懷疑你正在配置端點發送零長度數據包,實際上你應該配置它發送NAK。 USB SIE可以處理NAK響應,無需您的任何固件干預。

但是,您可以使用阻止命令從USB讀取數據。它們從Java程序的角度來阻止命令,但是在硬件中它們是通過輪詢USB設備來實現的。我沒有使用過「Libusb Java」,但我知道libusb 1.0支持blocking commands,比如libusb_bulk_transfer