@@ -0,0 +1,1319 @@
+from . import HardwareAdapter, POWER%0A%0A%0Adef logged(func):%0A    def decorated(self, *args, **kwargs):%0A        name = func.__name__%0A        result = None%0A        try:%0A            result = getattr(self.delegate, name)(*args, **kwargs)%0A        except BaseException as ex:%0A            result = ex%0A            raise%0A        finally:%0A            args_str = %22, %22.join((repr(arg) for arg in args))%0A            kwargs_str = %22, %22.join((%22%7B%7D=%7B%7D%22.format(str(k), repr(v)) for k, v in kwargs.items()))%0A%0A            if len(args) %3E 0 and len(kwargs) %3E 0:%0A                arg_str = args_str + %22, %22 + kwargs_str%0A            else:%0A                arg_str = args_str + kwargs_str%0A%0A            print(%22%7B%7D(%7B%7D) = %7B%7D%22.format(name, arg_str, result))%0A    return decorated%0A%0A%0Aclass LoggingHardwareAdapter(HardwareAdapter):%0A    def __init__(self, delegate):%0A        super().__init__()%0A        self.delegate = delegate%0A%0A    @logged%0A    def set_io_state(self, *args, **kwargs): pass%0A%0A    @logged%0A    def get_analog(self, *args, **kwargs): pass%0A%0A    @logged%0A    def get_digital(self, *args, **kwargs): pass%0A%0A    @logged%0A    def set_motor(self, *args, **kwargs): pass%0A%0A    @logged%0A    def get_motor(self, *args, **kwargs): pass%0A%0A    @logged%0A    def set_motor_position(self, *args, **kwargs): pass%0A%0A    @logged%0A    def set_servo(self, *args, **kwargs): pass%0A

add a logging hardware wrapper