2014-10-30 130 views
0

我有以下的用例:在AOA附件檢測該應用程序已被關閉並重新打開

  1. 用戶連接附件電話。
  2. 應用程序在手機上自動啓動(這是AOA功能的一部分)。
  3. 應用程序和附件之間的通信繼續進行。
  4. 用戶關閉應用程序(通過從最近的應用程序菜單上將其刷掉)。
  5. 用戶再次啓動應用程序。
  6. 配件嘗試將數據發送到應用程序。

在第6步,我在配件上獲得USB error 7: Transfer error on bulk endpoint: Operation timed out - 與應用程序完全沒有運行時相同!發生這種情況,即使通知應用程序UsbAccessory可用。

處理這種情況的正確方法是什麼?

回答

1

目前如果應用程序已關閉,則無法重新打開從android端接收的端口。它是由下層驅動程序實現中的錯誤引起的。

解決這個問題的一種方法是運行一個協議來檢查應用程序是否存在。如果它沒有活着,恢復的一種可能的方法是從附件側對USB端口供電。

觸發下層驅動程序重新枚舉的最好方法是對USB端口進行電源循環。

如果您在關閉應用程序之前關閉了端口,它將正常工作。但是,由於應用程序正在被殺害,因此情況並非如此。

+0

謝謝,這很好。該配件正在運行Linux,因此無法爲端口供電。但是,重置工作正常。 [如何重置USB設備](http://askubuntu.com/questions/645/how-do-you-reset-a-usb-device-from-the-command-line) – 2014-11-14 07:33:19

+0

Gr8。如何嘗試libusb的libusb_reset_device api? – skylinedreamer 2014-11-14 08:13:34

+0

如果不是很明顯,我上面評論中的「如何重置USB設備」是一個鏈接。它涉及到一個StackOverflow答案如何這樣做。其中的答案是'ioctl(fd,IOCTL_USBFS_RESET,0)'系統調用,libusb([source](http://git.libusb.org/?p=libusb.git;a=blob;f)也是如此= libusb的/ OS/linux_usbfs.c; H = 0717fa0b62628ba6a12e5756929b63f5e42abf62; HB = HEAD; JS = 1個#l1399))。因此,使用哪種解決方案並不重要(除非您已經使用libusb,在這種情況下,libusb_reset_device可能更容易)。 – 2014-11-14 12:11:57

相關問題