From c8c473623946d71ff6347421c745c88e6e9899c8 Mon Sep 17 00:00:00 2001 From: dekunukem Date: Sat, 4 Dec 2021 23:07:17 +0000 Subject: [PATCH] working on OLED queues --- user_program/usb4vc_main.py | 1 + user_program/usb4vc_oled.py | 52 ++++++++++++++++++++++++++------- user_program/usb4vc_usb_scan.py | 3 ++ 3 files changed, 45 insertions(+), 11 deletions(-) diff --git a/user_program/usb4vc_main.py b/user_program/usb4vc_main.py index c42d0ba..a26b264 100644 --- a/user_program/usb4vc_main.py +++ b/user_program/usb4vc_main.py @@ -11,6 +11,7 @@ usb4vc_oled.print_welcome_screen(RPI_APP_VERSION_TUPLE) time.sleep(1) usb4vc_oled.oled_clear() +usb4vc_oled.oled_queue_worker.start() usb4vc_usb_scan.usb_device_scan_thread.start() usb4vc_usb_scan.raw_input_event_parser_thread.start() diff --git a/user_program/usb4vc_oled.py b/user_program/usb4vc_oled.py index 14cb0aa..43ef7fc 100644 --- a/user_program/usb4vc_oled.py +++ b/user_program/usb4vc_oled.py @@ -2,10 +2,26 @@ import sys import time +import queue +import threading from demo_opts import get_device from luma.core.render import canvas from PIL import ImageFont +oled_display_queue = queue.PriorityQueue() + +""" +oled display object: + +text +size +font +x, y +duration +afterwards + +""" + OLED_WIDTH = 128 OLED_HEIGHT = 32 @@ -44,21 +60,35 @@ max_char_per_line = {font_regular:21, font_medium:16, font_large:11} width_per_char = {font_regular:6, font_medium:8, font_large:12} def oled_print_centered(text, font, y, this_canvas): - text = text.strip()[:max_char_per_line[font]] - start_x = int((OLED_WIDTH - (len(text) * width_per_char[font]))/2) - if start_x < 0: - start_x = 0 - this_canvas.text((start_x, y), text, font=font, fill="white") + text = text.strip()[:max_char_per_line[font]] + start_x = int((OLED_WIDTH - (len(text) * width_per_char[font]))/2) + if start_x < 0: + start_x = 0 + this_canvas.text((start_x, y), text, font=font, fill="white") + +# persistent canvas, will need to clear areas before drawing new stuff +oled_canvas = canvas(device) def print_welcome_screen(version_tuple): - with canvas(device) as draw: - oled_print_centered("USB4VC", font_large, 0, draw) - oled_print_centered(f"V{version_tuple[0]}.{version_tuple[1]}.{version_tuple[2]} dekuNukem", font_regular, 20, draw) + with oled_canvas as ocan: + oled_print_centered("USB4VC", font_large, 0, ocan) + oled_print_centered(f"V{version_tuple[0]}.{version_tuple[1]}.{version_tuple[2]} dekuNukem", font_regular, 20, ocan) def oled_clear(): - device.clear() + device.clear() + +def oled_queue_worker(): + print("oled_queue_worker started") + while 1: + print(oled_display_queue.qsize()) + time.sleep(0.75) + + +oled_queue_worker = threading.Thread(target=oled_queue_worker, daemon=True) -# print_welcome_screen((0, 2, 3)) # while 1: -# time.sleep(1) \ No newline at end of file +# with oled_canvas as ocan: +# ocan.rectangle((0, 0, device.width-1, device.height-1), outline=0, fill=0) +# oled_print_centered(f"{int(time.time())}", font_large, 0, ocan) +# time.sleep(1) \ No newline at end of file diff --git a/user_program/usb4vc_usb_scan.py b/user_program/usb4vc_usb_scan.py index 5799bd9..443f769 100644 --- a/user_program/usb4vc_usb_scan.py +++ b/user_program/usb4vc_usb_scan.py @@ -5,6 +5,8 @@ import spidev import threading import RPi.GPIO as GPIO +from usb4vc_oled import oled_display_queue + """ sudo apt install stm32flash @@ -174,6 +176,7 @@ def usb_device_scan_worker(): device_file_list = os.listdir(input_device_path) except FileNotFoundError: print("No input devices found") + oled_display_queue.put((0, 'no input')) continue except Exception as e: print('list input device exception:', e)