mirror of
https://github.com/Keychron/qmk_firmware.git
synced 2024-12-29 12:48:52 +06:00
1f2b1dedcc
* Install dependencies before executing unit tests. * Split out UTF-8 decoder. * Fixup python formatting rules. * Add documentation for QGF/QFF and the RLE format used. * Add CLI commands for converting images and fonts. * Add stub rules.mk for QP. * Add stream type. * Add base driver and comms interfaces. * Add support for SPI, SPI+D/C comms drivers. * Include <qp.h> when enabled. * Add base support for SPI+D/C+RST panels, as well as concrete implementation of ST7789. * Add support for GC9A01. * Add support for ILI9341. * Add support for ILI9163. * Add support for SSD1351. * Implement qp_setpixel, including pixdata buffer management. * Implement qp_line. * Implement qp_rect. * Implement qp_circle. * Implement qp_ellipse. * Implement palette interpolation. * Allow for streams to work with either flash or RAM. * Image loading. * Font loading. * QGF palette loading. * Progressive decoder of pixel data supporting Raw+RLE, 1-,2-,4-,8-bpp monochrome and palette-based images. * Image drawing. * Animations. * Font rendering. * Check against 256 colours, dump out the loaded palette if debugging enabled. * Fix build. * AVR is not the intended audience. * `qmk format-c` * Generation fix. * First batch of docs. * More docs and examples. * Review comments. * Public API documentation.
30 lines
879 B
Markdown
30 lines
879 B
Markdown
# QMK QGF/QFF RLE data schema :id=qmk-qp-rle-schema
|
|
|
|
There are two "modes" to the RLE algorithm used in both [QGF](quantum_painter_qgf.md)/[QFF](quantum_painter_qff.md):
|
|
|
|
* Non-repeating sections of octets, with associated length of up to `128` octets
|
|
* `length` = `marker - 128`
|
|
* A corresponding `length` number of octets follow directly after the marker octet
|
|
* Repeated octet with associated length, with associated length of up to `128`
|
|
* `length` = `marker`
|
|
* A single octet follows the marker that should be repeated `length` times.
|
|
|
|
Decoder pseudocode:
|
|
```
|
|
while !EOF
|
|
marker = READ_OCTET()
|
|
|
|
if marker >= 128
|
|
length = marker - 128
|
|
for i = 0 ... length-1
|
|
c = READ_OCTET()
|
|
WRITE_OCTET(c)
|
|
|
|
else
|
|
length = marker
|
|
c = READ_OCTET()
|
|
for i = 0 ... length-1
|
|
WRITE_OCTET(c)
|
|
|
|
```
|