ill be using theese
authorEduardo <[email protected]>
Sun, 10 Dec 2023 21:57:58 +0000 (22:57 +0100)
committerEduardo <[email protected]>
Sun, 10 Dec 2023 21:57:58 +0000 (22:57 +0100)
fonts/ArcadePix9x11.c [new file with mode: 0644]
libs/ili9341.py
libs/xglcd_font.py [new file with mode: 0644]

diff --git a/fonts/ArcadePix9x11.c b/fonts/ArcadePix9x11.c
new file mode 100644 (file)
index 0000000..737de4e
--- /dev/null
@@ -0,0 +1,111 @@
+
+//WARNING: This Font Require X-GLCD Lib.
+//         You can not use it with MikroE GLCD Lib.
+
+//Font Generated by MikroElektronika GLCD Font Creator 1.2.0.0
+//MikroElektronika 2011 
+//http://www.mikroe.com 
+
+//GLCD FontName : Arcadepix9x11
+//Based on a font created by Reekee of Dimenzioned - [email protected]
+//GLCD FontSize : 9 x 11
+
+const unsigned short Arcadepix9x11[] = {
+        0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char  
+        0x03, 0xBE, 0x01, 0xBE, 0x01, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char !
+        0x07, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char "
+        0x07, 0x00, 0x00, 0x48, 0x00, 0xFC, 0x00, 0x48, 0x00, 0xFC, 0x00, 0x48, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char #
+        0x06, 0x98, 0x00, 0xA4, 0x00, 0xA6, 0x01, 0xA4, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char $
+        0x08, 0x04, 0x00, 0x8A, 0x00, 0x44, 0x00, 0x20, 0x00, 0x10, 0x00, 0x88, 0x00, 0x44, 0x01, 0x80, 0x00, 0x00, 0x00,  // Code for char %
+        0x07, 0xC0, 0x00, 0xE4, 0x01, 0x3E, 0x01, 0x32, 0x01, 0x4C, 0x01, 0xC4, 0x00, 0xA0, 0x01, 0x00, 0x00, 0x00, 0x00,  // Code for char &
+        0x02, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char '
+        0x03, 0xFC, 0x00, 0xFE, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char (
+        0x03, 0x02, 0x01, 0xFE, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char )
+        0x06, 0x00, 0x00, 0xAC, 0x00, 0x70, 0x00, 0xFE, 0x01, 0x78, 0x00, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char *
+        0x07, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0xFC, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char +
+        0x03, 0x00, 0x02, 0x80, 0x03, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char ,
+        0x07, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char -
+        0x02, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char .
+        0x06, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x30, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char /
+        0x08, 0x38, 0x00, 0xFC, 0x00, 0x84, 0x00, 0x02, 0x01, 0x02, 0x01, 0x06, 0x01, 0xFC, 0x00, 0x38, 0x00, 0x00, 0x00,  // Code for char 0
+        0x07, 0x00, 0x01, 0x04, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,  // Code for char 1
+        0x08, 0x84, 0x01, 0xC6, 0x01, 0xE2, 0x01, 0x62, 0x01, 0x62, 0x01, 0x72, 0x01, 0x3E, 0x01, 0x0C, 0x01, 0x00, 0x00,  // Code for char 2
+        0x08, 0x80, 0x00, 0x82, 0x01, 0x22, 0x01, 0x22, 0x01, 0x32, 0x01, 0x3E, 0x01, 0xE6, 0x01, 0xC2, 0x00, 0x00, 0x00,  // Code for char 3
+        0x08, 0x60, 0x00, 0x70, 0x00, 0x4C, 0x00, 0x44, 0x00, 0x46, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0x40, 0x00, 0x00, 0x00,  // Code for char 4
+        0x08, 0x8E, 0x00, 0x8E, 0x01, 0x0A, 0x01, 0x0A, 0x01, 0x0A, 0x01, 0x0A, 0x01, 0xFA, 0x01, 0xE2, 0x00, 0x00, 0x00,  // Code for char 5
+        0x08, 0xF8, 0x00, 0xFC, 0x01, 0x26, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0xE2, 0x01, 0xC2, 0x00, 0x00, 0x00,  // Code for char 6
+        0x08, 0x06, 0x00, 0x06, 0x00, 0xC2, 0x01, 0xE2, 0x01, 0x22, 0x00, 0x1A, 0x00, 0x0E, 0x00, 0x06, 0x00, 0x00, 0x00,  // Code for char 7
+        0x08, 0xCC, 0x00, 0x3E, 0x01, 0x32, 0x01, 0x22, 0x01, 0x22, 0x01, 0x32, 0x01, 0xCC, 0x01, 0xC0, 0x00, 0x00, 0x00,  // Code for char 8
+        0x08, 0x0C, 0x00, 0x3E, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0xA2, 0x01, 0xFE, 0x00, 0x7C, 0x00, 0x00, 0x00,  // Code for char 9
+        0x02, 0x98, 0x01, 0x98, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char :
+        0x03, 0x00, 0x02, 0x98, 0x03, 0x98, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char ;
+        0x05, 0x00, 0x00, 0x20, 0x00, 0x70, 0x00, 0xCC, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char <
+        0x07, 0x00, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char =
+        0x05, 0x00, 0x00, 0x84, 0x00, 0xCC, 0x00, 0x70, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char >
+        0x08, 0x0C, 0x00, 0x0E, 0x00, 0x02, 0x05, 0x02, 0x05, 0x82, 0x00, 0xC2, 0x00, 0x7E, 0x00, 0x1C, 0x00, 0x00, 0x00,  // Code for char ?
+        0x09, 0x00, 0x00, 0xF8, 0x00, 0x04, 0x01, 0x72, 0x02, 0x8A, 0x02, 0x8A, 0x02, 0x92, 0x00, 0xE2, 0x00, 0xFC, 0x01,  // Code for char @
+        0x08, 0xF8, 0x01, 0xFC, 0x01, 0x46, 0x00, 0x42, 0x00, 0x42, 0x00, 0x46, 0x00, 0xFC, 0x01, 0xF8, 0x01, 0x00, 0x00,  // Code for char A
+        0x08, 0xFE, 0x01, 0xFE, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0xFE, 0x01, 0xCC, 0x00, 0x00, 0x00,  // Code for char B
+        0x08, 0x38, 0x00, 0xFC, 0x00, 0x86, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x86, 0x01, 0x84, 0x00, 0x00, 0x00,  // Code for char C
+        0x08, 0xFE, 0x01, 0xFE, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x86, 0x01, 0xFC, 0x00, 0x70, 0x00, 0x00, 0x00,  // Code for char D
+        0x08, 0xFE, 0x01, 0xFE, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0x02, 0x01, 0x00, 0x00,  // Code for char E
+        0x08, 0xFE, 0x01, 0xFE, 0x01, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x02, 0x00, 0x00, 0x00,  // Code for char F
+        0x08, 0x70, 0x00, 0xFC, 0x00, 0x86, 0x01, 0x02, 0x01, 0x02, 0x01, 0x22, 0x01, 0xE2, 0x01, 0xE2, 0x01, 0x00, 0x00,  // Code for char G
+        0x08, 0xFE, 0x01, 0xFE, 0x01, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0x00, 0x00,  // Code for char H
+        0x07, 0x02, 0x01, 0x02, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,  // Code for char I
+        0x08, 0xC0, 0x00, 0xC0, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFE, 0x01, 0xFE, 0x00, 0x00, 0x00,  // Code for char J
+        0x08, 0xFE, 0x01, 0xFE, 0x01, 0x60, 0x00, 0x70, 0x00, 0xD8, 0x00, 0xCC, 0x01, 0x86, 0x01, 0x02, 0x01, 0x00, 0x00,  // Code for char K
+        0x08, 0xFE, 0x01, 0xFE, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00,  // Code for char L
+        0x08, 0x00, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0x1C, 0x00, 0x38, 0x00, 0x1C, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0x00, 0x00,  // Code for char M
+        0x08, 0xFE, 0x01, 0xFE, 0x01, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0x00, 0x00,  // Code for char N
+        0x08, 0xFC, 0x00, 0xFE, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFE, 0x01, 0xFC, 0x00, 0x00, 0x00,  // Code for char O
+        0x08, 0xFE, 0x01, 0xFE, 0x01, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x7E, 0x00, 0x1C, 0x00, 0x00, 0x00,  // Code for char P
+        0x08, 0xFC, 0x00, 0xFE, 0x01, 0x02, 0x01, 0x42, 0x01, 0x42, 0x01, 0xC2, 0x01, 0xFE, 0x00, 0x7C, 0x01, 0x00, 0x00,  // Code for char Q
+        0x08, 0xFE, 0x01, 0xFE, 0x01, 0x42, 0x00, 0x42, 0x00, 0xC2, 0x00, 0xF2, 0x01, 0xBE, 0x01, 0x3C, 0x01, 0x00, 0x00,  // Code for char R
+        0x08, 0x8C, 0x00, 0xBE, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0x26, 0x01, 0xE4, 0x01, 0xC0, 0x00, 0x00, 0x00,  // Code for char S
+        0x07, 0x02, 0x00, 0x02, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char T
+        0x08, 0xFE, 0x00, 0xFE, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFE, 0x01, 0xFE, 0x00, 0x00, 0x00,  // Code for char U
+        0x08, 0x00, 0x00, 0x3E, 0x00, 0x7E, 0x00, 0xE0, 0x00, 0xC0, 0x01, 0xE0, 0x00, 0x7E, 0x00, 0x3E, 0x00, 0x00, 0x00,  // Code for char V
+        0x08, 0x00, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0xE0, 0x00, 0x38, 0x00, 0xE0, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0x00, 0x00,  // Code for char W
+        0x07, 0x86, 0x01, 0xCE, 0x01, 0xFC, 0x00, 0x38, 0x00, 0xFC, 0x00, 0xCE, 0x01, 0x86, 0x01, 0x00, 0x00, 0x00, 0x00,  // Code for char X
+        0x06, 0x1E, 0x00, 0x3E, 0x00, 0xE0, 0x01, 0xE0, 0x01, 0x3E, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char Y
+        0x08, 0x82, 0x01, 0xC2, 0x01, 0xE2, 0x01, 0x72, 0x01, 0x3A, 0x01, 0x1E, 0x01, 0x0E, 0x01, 0x06, 0x01, 0x00, 0x00,  // Code for char Z
+        0x04, 0xFE, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char [
+        0x06, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char BackSlash
+        0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFE, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char ]
+        0x07, 0x10, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x06, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char ^
+        0x08, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00,  // Code for char _
+        0x05, 0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char `
+        0x07, 0xC0, 0x00, 0xE4, 0x01, 0x24, 0x01, 0x24, 0x01, 0x24, 0x01, 0xFC, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char a
+        0x07, 0xFE, 0x01, 0xFE, 0x01, 0x08, 0x01, 0x08, 0x01, 0x08, 0x01, 0xF8, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char b
+        0x07, 0xF8, 0x00, 0xFC, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x8C, 0x01, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char c
+        0x07, 0xF0, 0x00, 0xF8, 0x01, 0x08, 0x01, 0x08, 0x01, 0x08, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0x00, 0x00, 0x00, 0x00,  // Code for char d
+        0x07, 0xF0, 0x00, 0xFC, 0x01, 0x44, 0x01, 0x44, 0x01, 0x44, 0x01, 0x7C, 0x01, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char e
+        0x06, 0x08, 0x00, 0xFC, 0x01, 0xFE, 0x01, 0x0A, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char f
+        0x07, 0xF8, 0x00, 0xFC, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0xFC, 0x07, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00,  // Code for char g
+        0x07, 0xFE, 0x01, 0xFE, 0x01, 0x18, 0x00, 0x08, 0x00, 0x08, 0x00, 0xF8, 0x01, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00,  // Code for char h
+        0x03, 0x04, 0x00, 0xFD, 0x01, 0xFD, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char i
+        0x05, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0xFD, 0x07, 0xFD, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char j
+        0x06, 0xFE, 0x01, 0xFE, 0x01, 0x40, 0x00, 0xE0, 0x00, 0xB8, 0x01, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char k
+        0x03, 0x02, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char l
+        0x08, 0x00, 0x00, 0xFC, 0x01, 0xFC, 0x01, 0x7C, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0xFC, 0x01, 0xF8, 0x01, 0x00, 0x00,  // Code for char m
+        0x07, 0xFC, 0x01, 0xFC, 0x01, 0x0C, 0x00, 0x04, 0x00, 0x04, 0x00, 0xFC, 0x01, 0xF8, 0x01, 0x00, 0x00, 0x00, 0x00,  // Code for char n
+        0x07, 0xF8, 0x00, 0xFC, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0xFC, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char o
+        0x07, 0xFC, 0x07, 0xFC, 0x07, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0xFC, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char p
+        0x07, 0xF8, 0x00, 0xFC, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0xFC, 0x07, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00,  // Code for char q
+        0x07, 0xFC, 0x01, 0xFC, 0x01, 0x0C, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char r
+        0x07, 0x88, 0x00, 0xBC, 0x01, 0x24, 0x01, 0x24, 0x01, 0x24, 0x01, 0xE4, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char s
+        0x05, 0x04, 0x00, 0xFE, 0x00, 0xFE, 0x01, 0x04, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char t
+        0x07, 0xFC, 0x00, 0xFC, 0x01, 0x00, 0x01, 0x00, 0x01, 0x80, 0x01, 0xFC, 0x01, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00,  // Code for char u
+        0x06, 0x7C, 0x00, 0xFC, 0x00, 0x80, 0x01, 0x80, 0x01, 0xFC, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char v
+        0x07, 0xFC, 0x00, 0xFC, 0x01, 0xE0, 0x01, 0xF0, 0x00, 0xE0, 0x01, 0xFC, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char w
+        0x07, 0x84, 0x01, 0xCC, 0x01, 0x78, 0x00, 0x30, 0x00, 0x78, 0x00, 0xCC, 0x01, 0x84, 0x01, 0x00, 0x00, 0x00, 0x00,  // Code for char x
+        0x07, 0xFC, 0x00, 0xFC, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0xFC, 0x07, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00,  // Code for char y
+        0x07, 0x84, 0x01, 0xC4, 0x01, 0xC4, 0x01, 0x64, 0x01, 0x3C, 0x01, 0x1C, 0x01, 0x0C, 0x01, 0x00, 0x00, 0x00, 0x00,  // Code for char z
+        0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char {
+        0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char |
+        0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char }
+        0x08, 0x20, 0x00, 0x38, 0x00, 0x08, 0x00, 0x18, 0x00, 0x20, 0x00, 0x20, 0x00, 0x38, 0x00, 0x08, 0x00, 0x00, 0x00,  // Code for char ~
+        0x02, 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00   // Code for char \7f
+        };
+
index 5fd91185cb98e2b540d7c01abd50be796155faad..31ecacf3e37124fc559e14c2eb29e46734d27977 100644 (file)
@@ -2,7 +2,7 @@
 from time import sleep
 from math import cos, sin, pi, radians
 from sys import implementation
-from framebuf import FrameBuffer, RGB565  # type: ignore
+from framebuf import FrameBuffer, RGB565
 
 
 def color565(r, g, b):
diff --git a/libs/xglcd_font.py b/libs/xglcd_font.py
new file mode 100644 (file)
index 0000000..5d28853
--- /dev/null
@@ -0,0 +1,170 @@
+"""XGLCD Font Utility."""
+from math import ceil, floor
+
+
+class XglcdFont(object):
+    """Font data in X-GLCD format.
+
+    Attributes:
+        letters: A bytearray of letters (columns consist of bytes)
+        width: Maximum pixel width of font
+        height: Pixel height of font
+        start_letter: ASCII number of first letter
+        height_bytes: How many bytes comprises letter height
+
+    Note:
+        Font files can be generated with the free version of MikroElektronika
+        GLCD Font Creator:  www.mikroe.com/glcd-font-creator
+        The font file must be in X-GLCD 'C' format.
+        To save text files from this font creator program in Win7 or higher
+        you must use XP compatibility mode or you can just use the clipboard.
+    """
+
+    # Dict to tranlate bitwise values to byte position
+    BIT_POS = {1: 0, 2: 2, 4: 4, 8: 6, 16: 8, 32: 10, 64: 12, 128: 14, 256: 16}
+
+    def __init__(self, path, width, height, start_letter=32, letter_count=96):
+        """Constructor for X-GLCD Font object.
+
+        Args:
+            path (string): Full path of font file
+            width (int): Maximum width in pixels of each letter
+            height (int): Height in pixels of each letter
+            start_letter (int): First ACII letter.  Default is 32.
+            letter_count (int): Total number of letters.  Default is 96.
+        """
+        self.width = width
+        self.height = max(height, 8)
+        self.start_letter = start_letter
+        self.letter_count = letter_count
+        self.bytes_per_letter = (floor(
+            (self.height - 1) / 8) + 1) * self.width + 1
+        self.__load_xglcd_font(path)
+
+    def __load_xglcd_font(self, path):
+        """Load X-GLCD font data from text file.
+
+        Args:
+            path (string): Full path of font file.
+        """
+        bytes_per_letter = self.bytes_per_letter
+        # Buffer to hold letter byte values
+        self.letters = bytearray(bytes_per_letter * self.letter_count)
+        mv = memoryview(self.letters)
+        offset = 0
+        with open(path, 'r') as f:
+            for line in f:
+                # Skip lines that do not start with hex values
+                line = line.strip()
+                if len(line) == 0 or line[0:2] != '0x':
+                    continue
+                # Remove comments
+                comment = line.find('//')
+                if comment != -1:
+                    line = line[0:comment].strip()
+                # Remove trailing commas
+                if line.endswith(','):
+                    line = line[0:len(line) - 1]
+                # Convert hex strings to bytearray and insert in to letters
+                mv[offset: offset + bytes_per_letter] = bytearray(
+                    int(b, 16) for b in line.split(','))
+                offset += bytes_per_letter
+
+    def lit_bits(self, n):
+        """Return positions of 1 bits only."""
+        while n:
+            b = n & (~n+1)
+            yield self.BIT_POS[b]
+            n ^= b
+
+    def get_letter(self, letter, color, background=0, landscape=False):
+        """Convert letter byte data to pixels.
+
+        Args:
+            letter (string): Letter to return (must exist within font).
+            color (int): RGB565 color value.
+            background (int): RGB565 background color (default: black).
+            landscape (bool): Orientation (default: False = portrait)
+        Returns:
+            (bytearray): Pixel data.
+            (int, int): Letter width and height.
+        """
+        # Get index of letter
+        letter_ord = ord(letter) - self.start_letter
+        # Confirm font contains letter
+        if letter_ord >= self.letter_count:
+            print('Font does not contain character: ' + letter)
+            return b'', 0, 0
+        bytes_per_letter = self.bytes_per_letter
+        offset = letter_ord * bytes_per_letter
+        mv = memoryview(self.letters[offset:offset + bytes_per_letter])
+
+        # Get width of letter (specified by first byte)
+        letter_width = mv[0]
+        letter_height = self.height
+        # Get size in bytes of specified letter
+        letter_size = letter_height * letter_width
+        # Create buffer (double size to accommodate 16 bit colors)
+        if background:
+            buf = bytearray(background.to_bytes(2, 'big') * letter_size)
+        else:
+            buf = bytearray(letter_size * 2)
+
+        msb, lsb = color.to_bytes(2, 'big')
+
+        if landscape:
+            # Populate buffer in order for landscape
+            pos = (letter_size * 2) - (letter_height * 2)
+            lh = letter_height
+            # Loop through letter byte data and convert to pixel data
+            for b in mv[1:]:
+                # Process only colored bits
+                for bit in self.lit_bits(b):
+                    buf[bit + pos] = msb
+                    buf[bit + pos + 1] = lsb
+                if lh > 8:
+                    # Increment position by double byte
+                    pos += 16
+                    lh -= 8
+                else:
+                    # Descrease position to start of previous column
+                    pos -= (letter_height * 4) - (lh * 2)
+                    lh = letter_height
+        else:
+            # Populate buffer in order for portrait
+            col = 0  # Set column to first column
+            bytes_per_letter = ceil(letter_height / 8)
+            letter_byte = 0
+            # Loop through letter byte data and convert to pixel data
+            for b in mv[1:]:
+                # Process only colored bits
+                segment_size = letter_byte * letter_width * 16
+                for bit in self.lit_bits(b):
+                    pos = (bit * letter_width) + (col * 2) + segment_size
+                    buf[pos] = msb
+                    pos = (bit * letter_width) + (col * 2) + 1 + segment_size
+                    buf[pos] = lsb
+                letter_byte += 1
+                if letter_byte + 1 > bytes_per_letter:
+                    col += 1
+                    letter_byte = 0
+
+        return buf, letter_width, letter_height
+
+    def measure_text(self, text, spacing=1):
+        """Measure length of text string in pixels.
+
+        Args:
+            text (string): Text string to measure
+            spacing (optional int): Pixel spacing between letters.  Default: 1.
+        Returns:
+            int: length of text
+        """
+        length = 0
+        for letter in text:
+            # Get index of letter
+            letter_ord = ord(letter) - self.start_letter
+            offset = letter_ord * self.bytes_per_letter
+            # Add length of letter and spacing
+            length += self.letters[offset] + spacing
+        return length