some font enhancements for new display driver (working better with some displays)

pull/80/head
Hansi, dl9rdz 2021-05-24 02:29:58 +02:00
rodzic b912995026
commit f28c464add
6 zmienionych plików z 351 dodań i 4 usunięć

Wyświetl plik

@ -46,7 +46,9 @@
%VERSION_NAME%<br>
Copyright &copy; 2019-2021 by Hansi Reiser, DL9RDZ<br>
(version %VERSION_ID%)<br><br>
with contributions by Vigor and Xavier (M20 support), <a href="https://www.dl2mf.de/" target="_blank">Meinhard Guenther, DL2MF</a>,
with contributions by Vigor and Xavier (M20 support),
<a href="https://github.com/LukePrior">Luke Prior</a> and <a href="https://github.com/oh3bsg">OH3BSG</a> (SondeHub support),
<a href="https://www.dl2mf.de/" target="_blank">Meinhard Guenther, DL2MF</a>,
<a href="https://github.com/bazjo">Johannes</a>, <a href="http://www.p1337.synology.me/dokuwiki/doku.php?id=public:wettersonden">Robert Stefanowicz</a>,
<a href="https://github.com/puspis">Josema</a>, and probably some more people I forgot to mention here.

Wyświetl plik

@ -1,4 +1,4 @@
const char *version_name = "rdzTTGOsonde";
const char *version_id = "sondehub-test";
const char *version_id = "devel20210524";
const int SPIFFS_MAJOR=2;
const int SPIFFS_MINOR=11;

110
fontconverter 100755
Wyświetl plik

@ -0,0 +1,110 @@
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my $fontname = "Terminal11x16";
my @data;
# read font bitmap
while(<>) {
my @dt = map { $_=~/(0x..)/ ? (hex($1)) : () } split(/,/,$_);
push @data, @dt;
}
my $width = shift @data;
my $height = shift @data;
my $first = shift @data;
my $count = shift @data;
my $nbrows = int(($height+7)/8);
my $charofs = $width * $nbrows + 1;
## process all glyphs
my @bitmap;
my @glyph;
my $bitofs = 0;
#$count=2;
sub optimize_glyph {
my $w = shift;
my $h = shift;
my $pix = shift;
my $xofs = 0;
my $yofs = 0;
# shrink 2D pixel array if possible
while(@$pix) {
if ( @{$pix->[0]} == grep { $_ == 0 } @{$pix->[0]} ) { shift(@$pix); $yofs++; $h--; }
else { last; }
}
while(@$pix) {
if ( @{$pix->[-1]} == grep { $_ == 0 } @{$pix->[-1]} ) { pop(@$pix); $h--; }
else { last; }
}
# transform 2D pixel array into compact byte sequence
my @all;
for(@$pix) { push @all, @$_; }
#print("pix size: ".(@all)."\n");
my @res;
while(@all) {
my @b = splice(@all,0,8);
while(@b<8) { push @b,0; }
my $res = 0;
while(@b) { $res = ($res*2) + (shift(@b)?1:0); }
push @res,$res;
}
return ($w, $h, \@res, $xofs, $yofs);
}
for my $c ($first .. $first+$count-1) {
# Convert char $c
my @gly = splice(@data,0,$charofs);
my $glywidth = shift @gly;
my @pixmap;
# print("Converting $c ($width x $height => nbrows=$nbrows)");
for my $x (0..$glywidth-1) {
for my $y (0..$height-1) {
my $g = $gly[$x * $nbrows + int($y/8)];
$pixmap[$y]->[$x] = (($g >> ($y%8))&1) ? 1 : 0;
#print("$x, $y : $pixmap[$y]->[$x]\n");
}
}
# pixmap is now my glyph
my ($w, $h, $d, $xofs, $yofs) = optimize_glyph($glywidth, $height, \@pixmap);
my $glyph = {
"offset" => $bitofs,
"width" => $w,
"height" => $h,
"xadv" => $w+1,
"xofs" => $xofs,
"yofs" => -$height + $yofs,
"c" => $c,
};
push @bitmap, @$d;
$bitofs += @$d;
push @glyph, $glyph;
#print(Dumper($glyph,$d));
}
#print(Dumper(\@glyph));
printf("const uint8_t %sBitmap[] = {\n", $fontname);
while(my @bm = splice(@bitmap,0,12)) { print( " ".join(", ", map { sprintf("0x%02X",$_) } @bm ).",\n" ); }
print("};\n\n");
printf("const GFXglyph %sGlyphs[] = {\n", $fontname);
for my $gl (@glyph) {
printf(" { %5d, %3d, %3d, %3d, %4d, %4d }, // 0x%02x '%c'\n ", $gl->{"offset"}, $gl->{"width"}, $gl->{"height"},
$gl->{"xadv"}, $gl->{"xofs"}, $gl->{"yofs"}, $gl->{"c"}, $gl->{"c"});
}
print("};\n");
printf("const GFXfont %sFont = {\n", $fontname);
printf(" (uint8_t *)%sBitmap,\n", $fontname);
printf(" (GFXglyph *)%sGlyphs,\n", $fontname);
printf(" 0x%02X, 0x%02X, %d };\n", $first, $first+$count-1, $height+2+8); # warum auch immer +8

Wyświetl plik

@ -16,6 +16,7 @@ extern const char *version_id;
#include <fonts/FreeSans9pt7b.h>
#include <fonts/FreeSans12pt7b.h>
#include <fonts/Picopixel.h>
#include <fonts/Terminal11x16.h>
extern Sonde sonde;
@ -311,8 +312,14 @@ void U8x8Display::drawQS(uint8_t x, uint8_t y, uint8_t len, uint8_t /*size*/, ui
const GFXfont *gfl[] = {
#ifdef ALT9225
&Terminal11x16Font, // 3 (replacement for 1 or 2 with old library)
&Terminal11x16Font, // 4 (replacement for 1 or 2 with old library)
#else
// nobody was using them, so removed with new library
&FreeMono9pt7b, // 3
&FreeMono12pt7b, // 4
#endif
&FreeSans9pt7b, // 5
&FreeSans12pt7b, // 6
&Picopixel, // 7
@ -324,8 +331,13 @@ struct gfxoffset_t {
// first value: offset: max offset from font glyphs (last column * (-1)) (check /, \, `, $)`
// yclear:max height: max of (height in 3rd column) + (yofs + 6th column) (check j)
const struct gfxoffset_t gfxoffsets[]={
#ifdef ALT9225
{ 16, 18},
{ 16, 18},
#else
{ 11, 15 }, // 13+11-9 "j"
{ 15, 20 }, // 19+15-14
#endif
{ 13, 18 }, // 17+13-12 "j"
{ 17, 23 }, // 23+17-17
{ 4, 6}, // 6+4-4
@ -368,6 +380,9 @@ void ILI9225Display::clear() {
// for now, 0=small=FreeSans9pt7b, 1=large=FreeSans18pt7b
void ILI9225Display::setFont(uint8_t fontindex) {
#ifdef ALT9225
if(fontindex==1 || fontindex==2) { fontindex=3; }
#endif
findex = fontindex;
switch(fontindex) {
#ifdef ALT9225

Wyświetl plik

@ -1,4 +1,4 @@
//#define ALT9225
#define ALT9225
#ifndef Display_h
#define Display_h
@ -9,7 +9,6 @@
#include <SPI.h>
#ifdef ALT9225
#include <Arduino_GFX_Library.h>
//#include <Arduino_GFX.h>
#else
#include <TFT22_ILI9225.h>
#endif

Wyświetl plik

@ -0,0 +1,221 @@
const uint8_t Terminal11x16Bitmap[] = {
0x0C, 0x18, 0x78, 0xF1, 0xE3, 0xC7, 0x86, 0x0C, 0x18, 0x00, 0x00, 0xC1,
0x80, 0x33, 0x33, 0x33, 0x33, 0x0C, 0xC1, 0x98, 0x33, 0x3F, 0xF1, 0x98,
0x33, 0x0C, 0xC1, 0x98, 0xFF, 0x8C, 0xC1, 0x98, 0x33, 0x00, 0x0C, 0x06,
0x0F, 0xCF, 0xF6, 0xC3, 0x61, 0xFC, 0x7F, 0x0D, 0x86, 0xDF, 0xE7, 0xE0,
0xC0, 0x60, 0x00, 0x2E, 0x0D, 0xC3, 0xB8, 0xE0, 0x38, 0x0E, 0x03, 0x80,
0xE0, 0x38, 0x0E, 0x3B, 0x87, 0x60, 0xE0, 0x0E, 0x06, 0xC3, 0x30, 0xCC,
0x36, 0x07, 0x03, 0xC1, 0xF0, 0x66, 0xD9, 0xE6, 0x31, 0xDE, 0x3C, 0xC0,
0x1C, 0x71, 0xC3, 0x0C, 0x60, 0x07, 0x0C, 0x1C, 0x18, 0x38, 0x38, 0x38,
0x38, 0x38, 0x38, 0x18, 0x1C, 0x0C, 0x07, 0x38, 0x0C, 0x0E, 0x06, 0x07,
0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0x0E, 0x0C, 0x38, 0x6D, 0xB6, 0xCF,
0xC3, 0xC7, 0xF8, 0xF0, 0xFC, 0xDB, 0x6D, 0x80, 0x0C, 0x06, 0x03, 0x0F,
0xF7, 0xF8, 0x60, 0x30, 0x18, 0x1C, 0x71, 0xC3, 0x18, 0x7F, 0xBF, 0xC0,
0x1C, 0x71, 0xC0, 0x00, 0x20, 0x0C, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03,
0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0x60, 0x00, 0x1F, 0x0F, 0xF9, 0x83,
0x60, 0x7C, 0x1F, 0x86, 0xF1, 0x9E, 0x63, 0xD8, 0x7E, 0x0F, 0x81, 0xB0,
0x67, 0xFC, 0x3E, 0x00, 0x06, 0x03, 0x83, 0xE0, 0xF8, 0x06, 0x01, 0x80,
0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x3F, 0xCF, 0xF0, 0x3F, 0x8F,
0xFB, 0x83, 0xE0, 0x3C, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80,
0xE0, 0x38, 0x0F, 0xFF, 0xFF, 0xC0, 0x3F, 0x8F, 0xFB, 0x83, 0xE0, 0x30,
0x06, 0x01, 0xC7, 0xF0, 0xFC, 0x00, 0xC0, 0x0F, 0x01, 0xF0, 0x77, 0xFC,
0x7F, 0x00, 0x03, 0x80, 0xF0, 0x3E, 0x0E, 0xC3, 0x98, 0xE3, 0x38, 0x66,
0x0C, 0xFF, 0xFF, 0xFC, 0x06, 0x00, 0xC0, 0x18, 0x03, 0x00, 0xFF, 0xFF,
0xFF, 0x00, 0x60, 0x0C, 0x01, 0xFF, 0x1F, 0xF0, 0x07, 0x00, 0x60, 0x0F,
0x01, 0xF0, 0x77, 0xFC, 0x7F, 0x00, 0x07, 0x81, 0xF0, 0x70, 0x1C, 0x07,
0x00, 0xC0, 0x3F, 0xE7, 0xFE, 0xE0, 0xF8, 0x0F, 0x01, 0xF0, 0x77, 0xFC,
0x7F, 0x00, 0xFF, 0xFF, 0xFC, 0x03, 0x00, 0x60, 0x18, 0x03, 0x00, 0xC0,
0x18, 0x06, 0x00, 0xC0, 0x30, 0x06, 0x01, 0x80, 0x30, 0x00, 0x1F, 0x07,
0xF1, 0xC7, 0x30, 0x66, 0x0C, 0xE3, 0x8F, 0xE3, 0xFE, 0xE0, 0xF8, 0x0F,
0x01, 0xF0, 0x77, 0xFC, 0x7F, 0x00, 0x3F, 0x8F, 0xFB, 0x83, 0xE0, 0x3C,
0x07, 0xC1, 0xDF, 0xF9, 0xFF, 0x00, 0xC0, 0x38, 0x0E, 0x03, 0x83, 0xE0,
0x78, 0x00, 0x1C, 0x71, 0xC0, 0x00, 0x01, 0xC7, 0x1C, 0x1C, 0x71, 0xC0,
0x00, 0x01, 0xC7, 0x1C, 0x30, 0xC6, 0x01, 0x81, 0xC1, 0xC1, 0xC1, 0xC1,
0xC1, 0xC0, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0C, 0x7F, 0xDF,
0xF0, 0x00, 0x00, 0x7F, 0xDF, 0xF0, 0x60, 0x38, 0x0E, 0x03, 0x80, 0xE0,
0x38, 0x0E, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x03, 0x00, 0x3F, 0x1F,
0xEE, 0x1F, 0x03, 0xC1, 0xC0, 0xE0, 0x70, 0x38, 0x0C, 0x03, 0x00, 0xC0,
0x00, 0x0C, 0x03, 0x00, 0x3F, 0x8F, 0xF9, 0x83, 0x67, 0xBD, 0xF7, 0xB6,
0xF6, 0xDE, 0xDB, 0xDB, 0x7B, 0xFB, 0x3E, 0x70, 0x07, 0xF8, 0x3F, 0x00,
0x0C, 0x03, 0x01, 0xE0, 0x78, 0x1E, 0x0C, 0xC3, 0x30, 0xCC, 0x61, 0x9F,
0xE7, 0xFB, 0x03, 0xC0, 0xF0, 0x30, 0xFE, 0x3F, 0xCC, 0x3B, 0x06, 0xC1,
0xB0, 0xEF, 0xF3, 0xFE, 0xC1, 0xF0, 0x3C, 0x0F, 0x07, 0xFF, 0xBF, 0xC0,
0x1F, 0x0F, 0xE7, 0x1D, 0x83, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30,
0x06, 0x0D, 0xC7, 0x3F, 0x87, 0xC0, 0xFE, 0x3F, 0xCC, 0x3B, 0x06, 0xC0,
0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x1B, 0x0E, 0xFF, 0x3F, 0x80,
0xFF, 0xFF, 0xFC, 0x03, 0x00, 0xC0, 0x30, 0x0F, 0xF3, 0xFC, 0xC0, 0x30,
0x0C, 0x03, 0x00, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFC, 0x03, 0x00, 0xC0,
0x30, 0x0F, 0xF3, 0xFC, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x00,
0x1F, 0x8F, 0xF7, 0x0D, 0x80, 0xC0, 0x30, 0x0C, 0x7F, 0x1F, 0xC0, 0xF0,
0x36, 0x0D, 0xC3, 0x3F, 0xC7, 0xF0, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0,
0xF0, 0x3F, 0xFF, 0xFF, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x30,
0x3F, 0x3F, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
0x3F, 0x3F, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03,
0x00, 0xF0, 0x3C, 0x0F, 0x86, 0x7F, 0x8F, 0xC0, 0xC0, 0xF0, 0x7C, 0x3B,
0x1C, 0xCE, 0x37, 0x0F, 0x83, 0xE0, 0xDC, 0x33, 0x8C, 0x73, 0x0E, 0xC1,
0xF0, 0x30, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00,
0xC0, 0x30, 0x0C, 0x03, 0x00, 0xFF, 0xFF, 0xF0, 0xC0, 0xF8, 0x7E, 0x1F,
0xCF, 0xF3, 0xF7, 0xBD, 0xEF, 0x33, 0xCC, 0xF0, 0x3C, 0x0F, 0x03, 0xC0,
0xF0, 0x30, 0xC0, 0xF8, 0x3E, 0x0F, 0xC3, 0xD8, 0xF6, 0x3C, 0xCF, 0x33,
0xC6, 0xF1, 0xBC, 0x3F, 0x07, 0xC1, 0xF0, 0x30, 0x1E, 0x0F, 0xC7, 0x39,
0x86, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x36, 0x19, 0xCE, 0x3F,
0x07, 0x80, 0xFF, 0x3F, 0xEC, 0x1F, 0x03, 0xC0, 0xF0, 0x3C, 0x1F, 0xFE,
0xFF, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x00, 0x1E, 0x0F, 0xC7, 0x39,
0x86, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF1, 0xB6, 0x79, 0xCE, 0x3F,
0xC7, 0xB0, 0xFF, 0x3F, 0xEC, 0x1F, 0x03, 0xC0, 0xF0, 0x3C, 0x1F, 0xFE,
0xFF, 0x33, 0x8C, 0x73, 0x0E, 0xC1, 0xF0, 0x30, 0x3F, 0x1F, 0xEE, 0x1F,
0x03, 0xC0, 0x38, 0x07, 0xF0, 0xFE, 0x01, 0xC0, 0x3C, 0x0F, 0x87, 0x7F,
0x8F, 0xC0, 0x7F, 0xBF, 0xC3, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0,
0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0D, 0x86, 0x7F, 0x8F, 0xC0,
0xC0, 0xF0, 0x3C, 0x0D, 0x86, 0x61, 0x98, 0x63, 0x30, 0xCC, 0x33, 0x07,
0x81, 0xE0, 0x78, 0x0C, 0x03, 0x00, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0,
0xF0, 0x3C, 0x0F, 0x33, 0xCC, 0xF7, 0xBF, 0x3F, 0x87, 0xE1, 0xF0, 0x30,
0xC0, 0xF0, 0x36, 0x19, 0x86, 0x33, 0x07, 0x80, 0xC0, 0x30, 0x1E, 0x0C,
0xC6, 0x19, 0x86, 0xC0, 0xF0, 0x30, 0xC0, 0xF0, 0x36, 0x19, 0x86, 0x33,
0x0C, 0xC1, 0xE0, 0x78, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00,
0xFF, 0xFF, 0xF0, 0x18, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x30, 0x18, 0x0C,
0x06, 0x01, 0x80, 0xFF, 0xFF, 0xF0, 0x3F, 0x3F, 0x30, 0x30, 0x30, 0x30,
0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3F, 0x3F, 0x80, 0x18, 0x03, 0x80,
0x38, 0x03, 0x80, 0x38, 0x03, 0x80, 0x38, 0x03, 0x80, 0x38, 0x03, 0x80,
0x30, 0x3F, 0x3F, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x03, 0x3F, 0x3F, 0x04, 0x01, 0xC0, 0x7C, 0x1D, 0xC7, 0x1D, 0xC1, 0xF0,
0x18, 0xFF, 0xFF, 0xFC, 0x0E, 0x1C, 0x38, 0x60, 0xC0, 0xC0, 0x3F, 0x9F,
0xF0, 0x0C, 0xFF, 0x7F, 0xF0, 0x3C, 0x0F, 0xFF, 0x7F, 0xC0, 0xC0, 0x30,
0x0C, 0x03, 0x00, 0xC0, 0x37, 0xCF, 0xFB, 0x87, 0xC0, 0xF0, 0x3C, 0x0F,
0x07, 0xFF, 0xBF, 0xC0, 0x3F, 0x1F, 0xEE, 0x0F, 0x00, 0xC0, 0x30, 0x0E,
0x0D, 0xFE, 0x3F, 0x00, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xCF, 0xB7,
0xFF, 0x8F, 0xC0, 0xF0, 0x3C, 0x0F, 0x83, 0x7F, 0xCF, 0xF0, 0x3F, 0x1F,
0xEE, 0x0F, 0xFF, 0xFF, 0xB0, 0x0E, 0x01, 0xFE, 0x3F, 0x00, 0x0F, 0x1F,
0x38, 0x30, 0x30, 0x30, 0xFE, 0xFE, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
0x3F, 0xDF, 0xFE, 0x0F, 0x03, 0xE1, 0xDF, 0xF3, 0xEC, 0x03, 0x01, 0xDF,
0xE7, 0xF0, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0xF3, 0xFD, 0xC7, 0xC1,
0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0C, 0x0C, 0x0C, 0x00, 0x1C, 0x1C, 0x0C,
0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x3F, 0x03, 0x03, 0x00, 0x07, 0x07, 0x03,
0x03, 0x03, 0x03, 0x03, 0x03, 0x33, 0x3F, 0x1E, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x03, 0x19, 0x9C, 0xDC, 0x7C, 0x3E, 0x1B, 0x8C, 0xE6, 0x3B, 0x0C,
0x1C, 0x1C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
0x3F, 0x3F, 0xB3, 0x3F, 0xEF, 0xFF, 0x33, 0xCC, 0xF3, 0x3C, 0xCF, 0x33,
0xCC, 0xC0, 0x7F, 0x1F, 0xE6, 0x1D, 0x83, 0x60, 0xD8, 0x36, 0x0D, 0x83,
0x60, 0xC0, 0x3F, 0x1F, 0xEE, 0x1F, 0x03, 0xC0, 0xF0, 0x3E, 0x1D, 0xFE,
0x3F, 0x00, 0xFF, 0x3F, 0xEC, 0x1F, 0x03, 0xC0, 0xF8, 0x7F, 0xFB, 0x7C,
0xC0, 0x30, 0x0C, 0x00, 0x3F, 0xDF, 0xFE, 0x0F, 0x03, 0xC0, 0xF8, 0x77,
0xFC, 0xFB, 0x00, 0xC0, 0x30, 0x0C, 0x6F, 0x9F, 0xF7, 0x0D, 0x80, 0x60,
0x18, 0x06, 0x01, 0x80, 0x60, 0x00, 0x7E, 0xFF, 0xC0, 0xFE, 0x7F, 0x03,
0x03, 0xFF, 0x7E, 0x30, 0x30, 0x30, 0x30, 0xFE, 0xFE, 0x30, 0x30, 0x30,
0x30, 0x30, 0x3F, 0x1F, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3E,
0x1D, 0xFF, 0x3E, 0xC0, 0xC0, 0xF0, 0x36, 0x19, 0x86, 0x33, 0x0C, 0xC1,
0xE0, 0x78, 0x0C, 0x00, 0xCC, 0xF3, 0x3C, 0xCF, 0x33, 0xCC, 0xF7, 0xB7,
0xF9, 0xCE, 0x21, 0x00, 0xC1, 0xF1, 0xDD, 0xC7, 0xC1, 0xC1, 0xF1, 0xDD,
0xC7, 0xC1, 0x80, 0x61, 0xB0, 0xCC, 0xC6, 0x61, 0xE0, 0xF0, 0x30, 0x18,
0x18, 0x0C, 0x0C, 0x00, 0xFF, 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
0xFF, 0xFF, 0x80, 0x07, 0x87, 0xC7, 0x03, 0x01, 0x80, 0xC0, 0xE0, 0xE0,
0x38, 0x0C, 0x06, 0x03, 0x01, 0xC0, 0x7C, 0x1E, 0x0C, 0x30, 0xC3, 0x0C,
0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0x78, 0x3E, 0x03, 0x80, 0xC0,
0x60, 0x30, 0x1C, 0x07, 0x07, 0x03, 0x01, 0x80, 0xC0, 0xE3, 0xE1, 0xE0,
0x38, 0xDB, 0x6C, 0x70, 0x0C, 0x07, 0x83, 0x31, 0x86, 0xC0, 0xF0, 0x3F,
0xFF, 0xFF,
};
const GFXglyph Terminal11x16Glyphs[] = {
{ 0, 6, 0, 7, 0, 0 }, // 0x20 ' '
{ 0, 7, 14, 8, 0, -16 }, // 0x21 '!'
{ 13, 8, 4, 9, 0, -14 }, // 0x22 '"'
{ 17, 11, 12, 12, 0, -15 }, // 0x23 '#'
{ 34, 9, 14, 10, 0, -16 }, // 0x24 '$'
{ 50, 11, 12, 12, 0, -14 }, // 0x25 '%'
{ 67, 10, 13, 11, 0, -15 }, // 0x26 '&'
{ 84, 6, 6, 7, 0, -16 }, // 0x27 '''
{ 89, 8, 14, 9, 0, -16 }, // 0x28 '('
{ 103, 8, 14, 9, 0, -16 }, // 0x29 ')'
{ 117, 9, 9, 10, 0, -13 }, // 0x2a '*'
{ 128, 9, 8, 10, 0, -12 }, // 0x2b '+'
{ 137, 6, 5, 7, 0, -5 }, // 0x2c ','
{ 141, 9, 2, 10, 0, -9 }, // 0x2d '-'
{ 144, 6, 3, 7, 0, -5 }, // 0x2e '.'
{ 147, 11, 12, 12, 0, -15 }, // 0x2f '/'
{ 164, 11, 14, 12, 0, -16 }, // 0x30 '0'
{ 184, 10, 14, 11, 0, -16 }, // 0x31 '1'
{ 202, 11, 14, 12, 0, -16 }, // 0x32 '2'
{ 222, 11, 14, 12, 0, -16 }, // 0x33 '3'
{ 242, 11, 14, 12, 0, -16 }, // 0x34 '4'
{ 262, 11, 14, 12, 0, -16 }, // 0x35 '5'
{ 282, 11, 14, 12, 0, -16 }, // 0x36 '6'
{ 302, 11, 14, 12, 0, -16 }, // 0x37 '7'
{ 322, 11, 14, 12, 0, -16 }, // 0x38 '8'
{ 342, 11, 14, 12, 0, -16 }, // 0x39 '9'
{ 362, 6, 9, 7, 0, -12 }, // 0x3a ':'
{ 369, 6, 12, 7, 0, -12 }, // 0x3b ';'
{ 378, 9, 14, 10, 0, -16 }, // 0x3c '<'
{ 394, 10, 6, 11, 0, -11 }, // 0x3d '='
{ 402, 9, 14, 10, 0, -16 }, // 0x3e '>'
{ 418, 10, 14, 11, 0, -16 }, // 0x3f '?'
{ 436, 11, 14, 12, 0, -16 }, // 0x40 '@'
{ 456, 10, 14, 11, 0, -16 }, // 0x41 'A'
{ 474, 10, 14, 11, 0, -16 }, // 0x42 'B'
{ 492, 10, 14, 11, 0, -16 }, // 0x43 'C'
{ 510, 10, 14, 11, 0, -16 }, // 0x44 'D'
{ 528, 10, 14, 11, 0, -16 }, // 0x45 'E'
{ 546, 10, 14, 11, 0, -16 }, // 0x46 'F'
{ 564, 10, 14, 11, 0, -16 }, // 0x47 'G'
{ 582, 10, 14, 11, 0, -16 }, // 0x48 'H'
{ 600, 8, 14, 9, 0, -16 }, // 0x49 'I'
{ 614, 10, 14, 11, 0, -16 }, // 0x4a 'J'
{ 632, 10, 14, 11, 0, -16 }, // 0x4b 'K'
{ 650, 10, 14, 11, 0, -16 }, // 0x4c 'L'
{ 668, 10, 14, 11, 0, -16 }, // 0x4d 'M'
{ 686, 10, 14, 11, 0, -16 }, // 0x4e 'N'
{ 704, 10, 14, 11, 0, -16 }, // 0x4f 'O'
{ 722, 10, 14, 11, 0, -16 }, // 0x50 'P'
{ 740, 10, 14, 11, 0, -16 }, // 0x51 'Q'
{ 758, 10, 14, 11, 0, -16 }, // 0x52 'R'
{ 776, 10, 14, 11, 0, -16 }, // 0x53 'S'
{ 794, 9, 14, 10, 0, -16 }, // 0x54 'T'
{ 810, 10, 14, 11, 0, -16 }, // 0x55 'U'
{ 828, 10, 14, 11, 0, -16 }, // 0x56 'V'
{ 846, 10, 14, 11, 0, -16 }, // 0x57 'W'
{ 864, 10, 14, 11, 0, -16 }, // 0x58 'X'
{ 882, 10, 14, 11, 0, -16 }, // 0x59 'Y'
{ 900, 10, 14, 11, 0, -16 }, // 0x5a 'Z'
{ 918, 8, 14, 9, 0, -16 }, // 0x5b '['
{ 932, 11, 12, 12, 0, -15 }, // 0x5c '\'
{ 949, 8, 14, 9, 0, -16 }, // 0x5d ']'
{ 963, 11, 7, 12, 0, -16 }, // 0x5e '^'
{ 973, 11, 2, 12, 0, -2 }, // 0x5f '_'
{ 976, 7, 6, 8, 0, -15 }, // 0x60 '`'
{ 982, 10, 9, 11, 0, -11 }, // 0x61 'a'
{ 994, 10, 14, 11, 0, -16 }, // 0x62 'b'
{ 1012, 10, 9, 11, 0, -11 }, // 0x63 'c'
{ 1024, 10, 14, 11, 0, -16 }, // 0x64 'd'
{ 1042, 10, 9, 11, 0, -11 }, // 0x65 'e'
{ 1054, 8, 14, 9, 0, -16 }, // 0x66 'f'
{ 1068, 10, 11, 11, 0, -11 }, // 0x67 'g'
{ 1082, 9, 14, 10, 0, -16 }, // 0x68 'h'
{ 1098, 8, 12, 9, 0, -14 }, // 0x69 'i'
{ 1110, 8, 14, 9, 0, -14 }, // 0x6a 'j'
{ 1124, 9, 14, 10, 0, -16 }, // 0x6b 'k'
{ 1140, 8, 14, 9, 0, -16 }, // 0x6c 'l'
{ 1154, 10, 9, 11, 0, -11 }, // 0x6d 'm'
{ 1166, 10, 9, 11, 0, -11 }, // 0x6e 'n'
{ 1178, 10, 9, 11, 0, -11 }, // 0x6f 'o'
{ 1190, 10, 11, 11, 0, -11 }, // 0x70 'p'
{ 1204, 10, 11, 11, 0, -11 }, // 0x71 'q'
{ 1218, 10, 9, 11, 0, -11 }, // 0x72 'r'
{ 1230, 8, 9, 9, 0, -11 }, // 0x73 's'
{ 1239, 8, 13, 9, 0, -15 }, // 0x74 't'
{ 1252, 10, 9, 11, 0, -11 }, // 0x75 'u'
{ 1264, 10, 9, 11, 0, -11 }, // 0x76 'v'
{ 1276, 10, 9, 11, 0, -11 }, // 0x77 'w'
{ 1288, 9, 9, 10, 0, -11 }, // 0x78 'x'
{ 1299, 9, 11, 10, 0, -11 }, // 0x79 'y'
{ 1312, 9, 9, 10, 0, -11 }, // 0x7a 'z'
{ 1323, 9, 15, 10, 0, -16 }, // 0x7b '{'
{ 1340, 6, 14, 7, 0, -16 }, // 0x7c '|'
{ 1351, 9, 15, 10, 0, -16 }, // 0x7d '}'
{ 1368, 10, 3, 11, 0, -14 }, // 0x7e '~'
{ 1372, 10, 8, 11, 0, -12 }, // 0x7f ''
};
const GFXfont Terminal11x16Font = {
(uint8_t *)Terminal11x16Bitmap,
(GFXglyph *)Terminal11x16Glyphs,
0x20, 0x7F, 26 };