Отключение USB-устройства
В настоящее время я работаю над PyUSB. Поскольку я новичок в USB, я не знаю, как я могу сделать следующее.
Я успешно подключился к своему USB-устройству из Python PyUSB. В коде мне потребовалось выполнить сброс устройства USB Device. Что я и сделал, отправив команду на оборудование. Теперь после аппаратного сброса я хочу освободить текущее USB-устройство от Python PyUSB. А затем я хочу снова подключиться к USB-устройству после его сброса.
Пожалуйста, дайте мне знать, как я могу отключить USB Device Connection, интерфейсы и т. Д., Чтобы я мог подключиться?
Заранее большое спасибо.
3 ответа
my_device = usb.core.find(...)
...
# necessary to allow further claim_interface calls
# (bulk read), generally not needed
usb.util.dispose_resources(my_device)
#!/usr/bin/python
from usb.core import find as finddev
dev = finddev(idVendor=0x1234, idProduct=0x5678)
dev.reset()
Хотя приведенный выше ответ совершенно верен, я несколько раз сталкивался с тем, что сброса USB-устройства недостаточно.
Хороший способ справиться с ними — отключить питание USB-контроллера, заставив его перезапуститься, как если бы он был отключен/подключен.
Вкратце: я написал небольшой скрипт на Python для сброса USB-устройств или USB-контроллеров. См. эту ссылку , которая работала для меня, когда никакое другое решение для сброса не работало (некоторые плохие USB-ИБП). Использование:
usb_reset --reset
#or
usb_reset --list && usb_reset -d 1234:1234
Оригинальная идея использования bash взята отсюда
for i in /sys/bus/pci/drivers/[uoex]hci_hcd/*:*; do
[ -e "$i" ] || continue
echo "Resetting ${i%/*}/${i##*/}"
echo "${i##*/}" > "${i%/*}/unbind"
echo "${i##*/}" > "${i%/*}/bind"
done