| 42 | |
| 43 | # Mock GPIO for testing on non-Pi systems |
| 44 | class MockGPIO: |
| 45 | BCM = OUT = IN = HIGH = LOW = PUD_UP = PUD_DOWN = PUD_OFF = 1 |
| 46 | _pins = {} |
| 47 | |
| 48 | def setmode(self, mode): pass |
| 49 | def setwarnings(self, flag): pass |
| 50 | def setup(self, pin, mode, pull_up_down=None): |
| 51 | self._pins[pin] = {'mode': mode, 'value': 0, 'pull': pull_up_down} |
| 52 | def output(self, pin, value): |
| 53 | if pin in self._pins: self._pins[pin]['value'] = value |
| 54 | def input(self, pin): |
| 55 | return self._pins.get(pin, {}).get('value', 0) |
| 56 | def PWM(self, pin, freq): |
| 57 | return type('PWM', (), {'start': lambda duty: None, 'stop': lambda: None, 'ChangeDutyCycle': lambda duty: None})() |
| 58 | def cleanup(self): self._pins.clear() |
| 59 | |
| 60 | GPIO = MockGPIO() |
| 61 | |