Quantum Painter (#10174)
* 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.
This commit is contained in:
		
							parent
							
								
									1dbbd2b6b0
								
							
						
					
					
						commit
						1f2b1dedcc
					
				
					 62 changed files with 7561 additions and 35 deletions
				
			
		
							
								
								
									
										29
									
								
								docs/quantum_painter_rle.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								docs/quantum_painter_rle.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
# 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)
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue