mirror of
https://github.com/infiniteCable2/panda.git
synced 2026-02-19 09:43:51 +08:00
55 lines
1.4 KiB
Python
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)
|