From 09271c5a84705b423192aee6fd8d6524c8ba5454 Mon Sep 17 00:00:00 2001 From: matteo porta Date: Wed, 5 Oct 2022 15:39:47 +0200 Subject: [PATCH] camera test --- src/components/neo_pixels.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/components/neo_pixels.py b/src/components/neo_pixels.py index 537eb76..8395a6b 100644 --- a/src/components/neo_pixels.py +++ b/src/components/neo_pixels.py @@ -1,7 +1,7 @@ import sys import traceback -from PyQt5.QtCore import QThread +from PyQt5.QtCore import QThread, pyqtSignal if "--sim-serial" in sys.argv: from components.dummies.serial import serial @@ -16,9 +16,12 @@ C_UINT32_MAX = c_uint32(-1).value class NeoPixels(Component): + request = pyqtSignal(object) + def __init__(self, config=None, name=None): self.conn = None super().__init__(config=config, name=name, threaded=False) + self.set_requestors({"self": self.request}) def config_changed(self): self.port = self.config[self.name]["port"] @@ -47,10 +50,14 @@ class NeoPixels(Component): self.set_all_pixel_color("#000000") @Component.reconfig_on_error - def set(self, pixel, color): - if type(pixel) is not int or pixel < 0 or pixel > C_UINT32_MAX: + def _set(self, data=None): + if not isinstance(data, dict): + raise ValueError(f"bad call data: {data!r}") + pixel = data.get("pixel", None) + color = data.get("color", None) + if not isinstance(pixel, int) or pixel < 0 or pixel > C_UINT32_MAX: raise ValueError(f"the pixel parameter must be a int between 0 and {C_UINT32_MAX} (broadcast)") - if not color.startswith("#") or len(color) != 7: + if not isinstance(color, str) or not color.startswith("#") or len(color) != 7: raise ValueError("the color parameter must be in the html hex format: '#RRGGBB'") try: self.conn.write(int.to_bytes(pixel, length=4, byteorder="big") + bytes.fromhex(color[1:7]) + b"\n") @@ -60,6 +67,9 @@ class NeoPixels(Component): except serial.serialutil.SerialException: self.log.exception(traceback.format_exc()) + def set(self, pixel, color): + self.request.emit({"pixel": pixel, "color": color}) + def set_pixel_color(self, pixel, color): self.set(pixel, color)