2014-12-05 102 views
0

我有一個android應用程序,它創建與USB設備的連接並且必須通過特定端點接收數據。我正在用本地代碼處理數據傳輸部分。該應用程序能夠找到設備,打開連接並找到所需的端點。 數據讀取部分位於本機代碼中,其中在while循環內進行ioctl調用。ioctl在android USB批量傳輸中返回-1

int bytesTransferred = ioctl(g_fileDescriptor, USBDEVFS_BULK, &ctrl); 

這個g_fileDescriptor是USB連接的描述符。

第二個參數是表示它是批量傳輸。

第三個參數具有以下結構usbdevfs_bulktransfer(其具有的端點地址,BufferLength中 - 16KB,數據佔位符,超時1000msec)

我嘗試這樣使用兩個USB設備。 第一臺設備運行良好。數據正在成功讀取。

第二個設備似乎給一些問題。我的應用程序找到設備,連接到它,找到所需的端點。但ioctl調用總是返回-1。我注意到,兩次連續的ioctl調用之間的時間間隔平均爲0.99秒(這大約等於我設置的超時值)。

所以我在這裏有三個問題。

  1. 我可以斷定超時是ioctl返回-1的原因嗎?

  2. 可以strerror(errorno)找到什麼問題? (因爲我讀到ioctl在錯誤時返回-1,並在系統的'errno'變量中設置相應的錯誤代碼)

  3. 在批量傳輸的情況下發生超時的情況是什麼?

回答

0

1.我可以得出結論:超時是ioctl返回-1的原因嗎? =>如果將ctrl.timeout設置爲「0」(零),則可以等待無限時間。通過這個,你可以證明你的結論。