Update diagnostics/os_diagnostics.py

This commit is contained in:
2026-03-06 18:35:52 +00:00
parent 644d338957
commit 94b9b64ef3

View File

@@ -1,18 +1,28 @@
from pybricks.pupdevices import Motor
from pybricks.parameters import Port from pybricks.parameters import Port
from uerrno import EAGAIN, EBUSY, ECANCELED, EINVAL, EIO, ENODEV, EOPNOTSUPP, EPERM, ETIMEDOUT from uerrno import EAGAIN, EBUSY, ECANCELED, EINVAL, EIO, ENODEV, EOPNOTSUPP, EPERM, ETIMEDOUT
class OSDiagnostics:
try: def __init__(self, hub, motorclass):
self.motorclass = motorclass
self.successfultests = 0
self.failedtests = {}
def testenodev:
try:
# Try to initialize a motor on an empty port (Port.A) # Try to initialize a motor on an empty port (Port.A)
print("Starting Test 6/9: ENODEV - Device Not Found Error")
input("Make sure Port A doesn't have anything plugged in, then press Enter.") input("Make sure Port A doesn't have anything plugged in, then press Enter.")
my_motor = Motor(Port.A) my_motor = self.motorclass(Port.A)
print("OS detected a motor when there was nothing. You may have allowed missing motors. This is useful for debugging, but not recommended for production as it can cause issues with device control.") print("OS detected a motor when there was nothing. You may have allowed missing motors. This is useful for debugging, but not recommended for production as it can cause issues with device control.")
except OSError as ex: except OSError as ex:
# If an OSError was raised, check the specific error code # If an OSError was raised, check the specific error code
if ex.errno == ENODEV: if ex.errno == ENODEV:
print("There is no motor on this port. ENODEV can be ") print("There is no motor on this port. ENODEV can be thrown and caught.\nCompleted Test 6/9: ENODEV - SUCCESSFUL")
self.successfultests += 1
elif ex.errno == EIO: elif ex.errno == EIO:
print("An I/O error occurred (EIO). Try unplugging/replugging the device.") print("An unspecified error occurred (EIO).\nCompleted Test 6/9: ENODEV - FAILED")
self.failedtests["ENODEV"] = "EIO - Unspecified Error"
else: else:
print(f"Another error occurred with code: {ex.errno}") print(f"Another error occurred with code: {ex.errno}.\nCompleted Test 6/9: ENODEV - FAILED")
self.failedtests["ENODEV"] = ex.errno
def print_results:
for key, value in self.failedtests():
print(f"{key}: {value}")