From d911c62e2db681b661e08f648e1c1d4268e1f750 Mon Sep 17 00:00:00 2001 From: caternuson Date: Sun, 25 Apr 2021 12:31:57 -0700 Subject: [PATCH] neopixel fixes --- .../microcontroller/pico_u2if/pico_u2if.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/adafruit_blinka/microcontroller/pico_u2if/pico_u2if.py b/src/adafruit_blinka/microcontroller/pico_u2if/pico_u2if.py index 95cd757..687bfc0 100644 --- a/src/adafruit_blinka/microcontroller/pico_u2if/pico_u2if.py +++ b/src/adafruit_blinka/microcontroller/pico_u2if/pico_u2if.py @@ -393,6 +393,8 @@ class Pico_u2if: raise RuntimeError("Neopixel init error") self._neopixel_initialized = True + self._serial.reset_output_buffer() + # write # command is done over HID remain_bytes = len(buf) @@ -407,14 +409,24 @@ class Pico_u2if: "Neopixel write error : too many pixel for the firmware." ) elif resp[2] == 0x02: + print(resp[0:10]) raise RuntimeError( "Neopixel write error : transfer already in progress." ) else: - raise RuntimeError("Neopixel write error") + raise RuntimeError("Neopixel write error.") # buffer is sent over serial self._serial.write(buf) + # hack (see u2if) + if len(buf) % 64 == 0: + self._serial.write([0]) self._serial.flush() + # polling loop to wait for write complete? + resp = self._hid.read(64) + while resp[0] != self.WS2812B_WRITE: + resp = self._hid.read(64) + if resp[1] != self.RESP_OK: + raise RuntimeError("Neopixel write (flush) error.") # ---------------------------------------------------------------- # PWM -- 2.49.0