Switch from 12-bit to 10-bit gamma to fit RGB into a uint32_t. Simplifies PIO and halves the RAM usage for F/B buffer.
Switch "flip" to *literally* swap the front and back buffers, and then asyncronously DMA the new back buffer into the front ready for the next draw.
The FM6126A register write was causing some weirdness on soft reset where the pin state wasn't predictable.
Have twiddled some pins at startup to ensure everything works as expected.
Add set_hsv and set_all_hsv (since setting individual pixels with hsv is S L O W)
Made "flip()" blocking, it was easy to accidentally get a little tearing.
Switch MicroPython HUB75 driver over to DMA/PIO.
TODO:
* Move this into drivers for C++ use too
* Fix hitting "Stop" in Thonny causing rows to stick on the display (this is bad, and should not happen)
* Fix "Stop -> Start" in Thonny causing weird display issues (it's not memory offets, maybe DMA/PIO issues?)
This code is intentionally written in C++ to illustrate the basics of driving HUB75 without being overly complicated to read and understand.
Tested on a 32x32 panel and a 64x64 "FM6126A" panel, for which this code includes a magic pair of register settings.
The screen init (C++ bindings) was trouncing the PWM setup (Python) for the RGB LED.
This is because the backlight pin (12) and LED G pin (13) share the same PWM slice.
This does not seem to affect the screen backlight functionality.
* Add a new "connection_mode" argument to http_request. This can be TLS_MODE or TCP_MODE
* Fix a bug where assumptions about json parsing don't hold up
* Check for TCP_STATE_CLOSED and bail early from connect_to_server
This slightly reckless extension to ppwhttp adds support for wildcard routes, eg:
/get_led/<int:index>
Which will serve URLs in the form:
/get_led/10
/get_led/22
etc.
The wildcard includes <type:key>, attempting to match the behaviour of Flask.
Only type "int" is supported currently.
/get_led/<index> - would set data["index"] to a string
/get_led/<int:index> - would attempt to parse the URL part to an int, and would not serve eg: /get_led/hi
See plasma_ws2812_http.py for example usage.
Uses the correct? default Content-Type and encoding for HTTP.
Parses the Content-Type header *before* decoding the content body.
Handles JSON type gracefully.
Decodes the response body accoding to the encoding header.
This is a bit of a fudge, and was only tested against the Cheerlights API.
Detects JSON content type, parses out the content length and truncates the response body to length.
Should probably do this *before* decoding from utf-8.
Updates cheerlights.py API example to support XML, JSON and TEXT endpoints.
Creates a new ppwhttp library to hide the implementation detail of HTTP clients/servers from the examples.
Adds a new example - plasma_ws2812_http.py - showing how to expand rgb_http.py to use a WS2812 pixel strip.
Adds "secrets.py" and moves WIFI connection information there. ppwhttp will throw an error if it's missing.
Moves the 256 entry GAMMA table into pimoroni_common.
Should probably be added into a library so MicroPython is built with only one instance of the table.