USBDEVFS_RESET против IOCTL_USB_RESET

Я, кажется, запутался между различными абстракциями в стеке USB... какая разница между IOCTL_USB_RESET а также USBDEVFS_RESET выстрелил в устройство USB? Будут ли оба вызова, в конце концов, вызывать одинаковые низкоуровневые действия на интерфейсе, или есть разница?

Я заметил, что USBDEVFS_RESET иногда описывается как "эквивалент повторного подключения и повторного подсчета устройства", в то время как я обнаружил, что стрельба IOCTL_USB_RESET (как сделано libusb's usb_reset() вызов) вызывает сообщение сброса в dmesg но нет нового "перечисления", которое привело бы к обычным многострочным сообщениям обнаружения и идентификации USB, я думаю.

Как IOCTL_USB_RESET не выполнимо решить мои проблемы (застрял usb-устройства), и даже не вызывает повторное перечисление, есть ли шанс USBDEVFS_RESET будет лучше?

1 ответ

Я думаю, что вы говорите о IOCTL_USBFS_RESET вместо IOCTL_USB_RESET?

IOCTL_USBFS_RESET специфично для libusb, В самом деле, libusb не использует структуры или ioctls, определенные в usbdevice_fs.h, Вместо этого он переопределяет все в os/linux_usbfs.h (Думаю по историческим причинам). Эти два заголовка двоично совместимы, но, libusb не использует одинаковые имена для структур и ioctl. Для структур, префикс usbdevfs_ заменяется на usbfs_ (usbfs_ctrltransfer, usbfs_bulktransfer...) Для ioctls префикс USBDEVFS_ заменяется IOCTL_USBFS_,

Так что, действительно, IOCTL_USBFS_RESET это то же самое, что USBDEVFS_RESET знак равно _IO('U', 20)).

Другие вопросы по тегам