From f369f888998b919a6351690335eff1acae5c17ce Mon Sep 17 00:00:00 2001 From: Markus Koch Date: Sat, 8 Aug 2020 16:52:57 +0200 Subject: [PATCH] sw: Implement preliminary key press handlers --- software/webradio.py | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/software/webradio.py b/software/webradio.py index 56f3740..9377f87 100644 --- a/software/webradio.py +++ b/software/webradio.py @@ -129,12 +129,39 @@ class display_manager(object): # TODO: Consider also animating inactive screens... Might resolve some glitches when updating text while a screen is in the background (or pass `tick` to update funcs) class radioserv: + def handle_rx(self, rdata): + # Handle key presses + key_id = rdata[0] & 0x0F + key_press_short = ((rdata[0] & 0xC0) == 128) + if (key_press_short): + print("Press key: {}".format(key_id)) + if (key_id == 0): # Tune- + pass + elif (key_id == 1): # Tune+ + self.mpd.previous() + elif (key_id == 2): # Power + self.kill_event.set() + elif (key_id == 4): # Wheel + self.mpd.pause() + elif (key_id == 5): # Source + pass + elif (key_id == 6): # Info / Menu + self.mpd.next() + elif (key_id == 7): # PRESET + pass + # Handle rotary input + rotary_delta = int(rdata[1])# - 128 + if (rotary_delta > 0): + print("Rotary: {}".format(rdata[2])) + # self.mpd.volume(rotary_delta) + #print("Battery: {}".format(rdata[2])) + async def io_main(self): while True: self.disp_mgr.animate(1) self.disp_mgr.render() rdata = self.spi.xfer([100, 101, 102], 50000, 1000) - print(rdata) + self.handle_rx(rdata) data = list(self.disp_mgr.get_image()) rdata = self.spi.xfer(data, SPI_SPEED, 10000) await self.io_event.wait() @@ -214,13 +241,14 @@ class radioserv: # Create main tasks self.io_event = asyncio.Event() + self.kill_event = asyncio.Event() io_task = asyncio.create_task(self.io_main()) io_timer_task = asyncio.create_task(self.io_timer_main()) mpd_task = asyncio.create_task(self.mpd_main()) - # TODO: Wait for exit condition (shutdown command) - await asyncio.sleep(6000) + await self.kill_event.wait() + self.kill_event.clear() io_timer_task.cancel() io_task.cancel()