]> Repositories - Adafruit_Blinka-hackapet.git/commitdiff
neopixel fixes
authorcaternuson <caternuson@gmail.com>
Sun, 25 Apr 2021 19:31:57 +0000 (12:31 -0700)
committercaternuson <caternuson@gmail.com>
Sun, 25 Apr 2021 19:31:57 +0000 (12:31 -0700)
src/adafruit_blinka/microcontroller/pico_u2if/pico_u2if.py

index 95cd757bba875ed564831324c71b2d494b590cb8..687bfc033585b4212b5bd44945fee65c4140461f 100644 (file)
@@ -393,6 +393,8 @@ class Pico_u2if:
                 raise RuntimeError("Neopixel init error")
             self._neopixel_initialized = True
 
                 raise RuntimeError("Neopixel init error")
             self._neopixel_initialized = True
 
+        self._serial.reset_output_buffer()
+
         # write
         # command is done over HID
         remain_bytes = len(buf)
         # 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:
                     "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 : transfer already in progress."
                 )
             else:
-                raise RuntimeError("Neopixel write error")
+                raise RuntimeError("Neopixel write error.")
         # buffer is sent over serial
         self._serial.write(buf)
         # buffer is sent over serial
         self._serial.write(buf)
+        # hack (see u2if)
+        if len(buf) % 64 == 0:
+            self._serial.write([0])
         self._serial.flush()
         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
 
     # ----------------------------------------------------------------
     # PWM