数日前、Android Lollipop でアプリをテストしましたが、動作しなくなりました。デバッグ後、libsub がデバイス リストの取得に失敗することがわかりました。
struct libusb_device **devs;
int devs_count = libusb_get_device_list(ctx, &devs);
私は引き続きソースを掘り下げ、次の失敗を見つけました (linux_usbfs.c):
DIR *buses = opendir(usbfs_path); // '/dev/bus/usb', correct
struct discovered_devs *discdevs = *_discdevs;
int r = 0;
if (!buses) {
usbi_err(ctx, "opendir buses failed errno=%d", errno);
return LIBUSB_ERROR_IO; // my case!
}
usbfs_path は正しく ( /dev/bus/usb
)、私のデバイスは/dev/bus/usb/003/002
です。
Android Lollipop で libusb を使用して USB デバイスを操作するにはどうすればよいですか?
以前は、デバイスを反復処理し、PID と VID を使用してデバイスを見つけ、そのエンドポイントを要求し、通常どおり動作しました。struct libusb_device **devs;
今では使用できずlibusb_get_device_list
、これですべてが停止します。Androidからデバイスパスと開かれた接続ファイル記述子を持って何ができますか?
PS。Android 5.1.1 を搭載した Nexus 9 でのテスト
PPS。libusb_open_device_with_vid_pid
デバイスリストも要求するため、どちらも使用できません。
DEFAULT_VISIBILITY
libusb_device_handle * LIBUSB_CALL libusb_open_device_with_vid_pid(
libusb_context *ctx, uint16_t vendor_id, uint16_t product_id)
{
struct libusb_device **devs;
struct libusb_device *found = NULL;
struct libusb_device *dev;
struct libusb_device_handle *handle = NULL;
size_t i = 0;
int r;
if (libusb_get_device_list(ctx, &devs) < 0)
return NULL;