def run(self): try: self.sleeptimer.resetsleep() lcd.init() self.framebuffer = graphics.Surface(lcd.LCD_WIDTH, lcd.LCD_HEIGHT) lcd.set_backlight_enabled(True) self.broker.register_service(services.clock.ClockService) self.broker.register_service(services.weather.WeatherService) self.broker.register_service(services.podcast.PodcastService) self.broker.register_service(services.audio.AudioService) self.broker.register_service( services.public_transport.PublicTransportService) for p, args in self.panel_defs: self.addpanel(p, args) self.activate_panel(0) self.broker.start_bound_services() while True: services.deliver_pending_notifications() self.sleeptimer.update_sleep() self.trigger_key_events() self.active_panel.update() if self.activate_panel: if self.active_panel.paint_if_needed(self.active_panel_fb): # logging.debug('Updating LCD (active_panel)') lcd.update(self.active_panel_fb) time.sleep(1.0 / UPDATE_RATE) finally: self.broker.stop_running()
def run(self): try: self.sleeptimer.resetsleep() lcd.init() self.framebuffer = graphics.Surface(lcd.LCD_WIDTH, lcd.LCD_HEIGHT) lcd.set_backlight_enabled(True) self.broker.register_service(services.clock.ClockService) self.broker.register_service(services.weather.WeatherService) self.broker.register_service(services.podcast.PodcastService) self.broker.register_service(services.audio.AudioService) self.broker.register_service(services.public_transport.PublicTransportService) for p, args in self.panel_defs: self.addpanel(p, args) self.activate_panel(0) self.broker.start_bound_services() while True: services.deliver_pending_notifications() self.sleeptimer.update_sleep() self.trigger_key_events() self.active_panel.update() if self.activate_panel: if self.active_panel.paint_if_needed(self.active_panel_fb): # logging.debug('Updating LCD (active_panel)') lcd.update(self.active_panel_fb) time.sleep(1.0 / UPDATE_RATE) finally: self.broker.stop_running()
def activate_panel(self, panel_idx): logging.debug('Activated panel %s', self.active_panel.__class__.__name__) self.panel_idx = panel_idx % len(self.panels) if self.active_panel: self.active_panel.deactivate() self.active_panel = self.panels[self.panel_idx] self.active_panel.activate() self.active_panel_fb = self.backing_stores[self.active_panel] if not self.needs_repaint: # logging.debug('Updating LCD -- no repaint needed (active_panel)') lcd.update(self.active_panel_fb) else: self.active_panel.paint(self.active_panel_fb) lcd.update(self.active_panel_fb)
def lcd_update(self): # logging.debug('Updating LCD (framebuffer)') lcd.update(self.framebuffer)