Да, это можно сделать с помощью libusb (перейдите по этой ссылке для использования libusb с C++). Теперь несколько вещей, которые нужно иметь в виду -
1 - Что такое адрес устройства? (Вы можете получить это с помощью libusb API)
libusb_get_device_list (libusb_context *ctx, libusb_device ***list)
libusb_get_device_address (libusb_device *dev)
libusb_get_port_number (libusb_device *dev)
2 - Устройство подключено к порту корневого концентратора или к порту концентратора? (Это можно сделать, прочитав родительское устройство /dev/sdb1 или sda1)
libusb_get_parent (libusb_device *dev)
3 - Если он подключен к концентратору, выполните передачу управления, чтобы «очистить» функцию PORT_POWER этого порта. Это отключит порт, и устройство будет отключено. Вы можете «настроить» функцию PORT_POWER, чтобы включить порт, и устройство снова будет подключено. Помните, что вы не получите никакого события отключения, которое соответствует спецификации. (EHCI или XHCI)
int libusb_control_transfer ( libusb_device_handle * dev_handle,
uint8_t bmRequestType,
uint8_t bRequest,
uint16_t wValue,
uint16_t wIndex,
unsigned char * data,
uint16_t wLength,
unsigned int timeout
)
4 - Если устройство подключено к порту корневого концентратора напрямую, проверьте, поддерживает ли libusb сброс питания порта корневого концентратора. Я не уверен в этом. Это также зависит от стека драйверов хост-контроллера.
Пожалуйста, перейдите по ссылке, которую я упомянул вверху, например, для использования этих API.
person
Shaibal
schedule
22.06.2017
eject
.. - person Jesper Juhl   schedule 20.06.2017