class Board(object): """ Base class for Board hardware implementations """ __metaclass__ = ABCMeta def __init__(self): self.emitter = EventEmitter() self.hardware_event_job = SCHEDULER.add_job( self.update_hardware_state, "interval", seconds=ms(100), coalesce=True, max_instances=1 ) def trigger_hardware_event(self, event, *args, **kwargs): """ Signal hardware event. """ self.emitter.emit(event, *args, **kwargs) def add_event_handler(self, event, handler, once=False): """ Add hardware event handler. """ if once: self.emitter.once(event, handler) else: self.emitter.on(event, handler) def remove_event_handler(self, event, handler): """ Remove hardware event handler. """ self.emitter.remove(event, handler) @abstractmethod def update_hardware_state(self): """ Abstract method for updating hardware state. """ pass