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)
).