Files
panda-meb/tests/libs/resetter.py
Igor Biletskyy f040d8b726 CI: add USB hub reset (#1053)
USB hub reset
2022-08-31 12:15:36 -07:00

55 lines
1.4 KiB
Python

import time
import usb1
class Resetter():
def __init__(self):
self._handle = None
self.connect()
def close(self):
self._handle.close()
self._handle = None
def connect(self):
if self._handle:
self.close()
context = usb1.USBContext()
self._handle = None
while True:
try:
for device in context.getDeviceList(skip_on_error=True):
if device.getVendorID() == 0xbbaa and device.getProductID() == 0xddc0:
try:
self._handle = device.open()
self._handle.claimInterface(0)
break
except Exception as e:
print(e)
continue
except Exception as e:
print(e)
if self._handle:
break
context = usb1.USBContext()
assert self._handle
def enable_power(self, port, enabled):
self._handle.controlWrite((usb1.ENDPOINT_OUT | usb1.TYPE_VENDOR | usb1.RECIPIENT_DEVICE), 0xff, port, enabled, b'')
def enable_boot(self, enabled):
self._handle.controlWrite((usb1.ENDPOINT_OUT | usb1.TYPE_VENDOR | usb1.RECIPIENT_DEVICE), 0xff, 0, enabled, b'')
def cycle_power(self, delay=5, ports=None):
if ports is None:
ports = [1,2,3]
for port in ports:
self.enable_power(port, False)
time.sleep(1)
for port in ports:
self.enable_power(port, True)
if delay > 0:
time.sleep(delay)