# ----------------------------------------------------------------
def neopixel_write(self, gpio, buf):
"""NeoPixel write."""
- print("open serial")
# open serial (data is sent over this)
if self._serial is None:
import serial
if self._serial is None:
raise RuntimeError("Could not find Pico com port.")
- print("init")
# init
if not self._neopixel_initialized:
# deinit any current setup
self._serial.reset_output_buffer()
- print("write")
# write
# command is done over HID
remain_bytes = len(buf)
"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.")
- print("write 1")
# buffer is sent over serial
self._serial.write(buf)
# hack (see u2if)
- print("write 2")
if len(buf) % 64 == 0:
self._serial.write([0])
self._serial.flush()
# polling loop to wait for write complete?
- print("write 3")
time.sleep(0.1)
resp = self._hid.read(64)
- print("write 4")
while resp[0] != self.WS2812B_WRITE:
resp = self._hid.read(64)
- print("write 5")
if resp[1] != self.RESP_OK:
raise RuntimeError("Neopixel write (flush) error.")
if resp[1] != self.RESP_OK:
raise RuntimeError("PWM set duty cycle error.")
+
rp2040_u2if = RP2040_u2if()