diff --git a/RX_FSK/data/index.html b/RX_FSK/data/index.html index dba123c..d3e1cb4 100644 --- a/RX_FSK/data/index.html +++ b/RX_FSK/data/index.html @@ -46,7 +46,9 @@ %VERSION_NAME%
Copyright © 2019-2021 by Hansi Reiser, DL9RDZ
(version %VERSION_ID%)

- with contributions by Vigor and Xavier (M20 support), Meinhard Guenther, DL2MF, + with contributions by Vigor and Xavier (M20 support), + Luke Prior and OH3BSG (SondeHub support), + Meinhard Guenther, DL2MF, Johannes, Robert Stefanowicz, Josema, and probably some more people I forgot to mention here. diff --git a/RX_FSK/version.h b/RX_FSK/version.h index 43b70b7..f7d101c 100644 --- a/RX_FSK/version.h +++ b/RX_FSK/version.h @@ -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; diff --git a/fontconverter b/fontconverter new file mode 100755 index 0000000..c836474 --- /dev/null +++ b/fontconverter @@ -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 diff --git a/libraries/SondeLib/Display.cpp b/libraries/SondeLib/Display.cpp index 76c3428..efe5b7a 100644 --- a/libraries/SondeLib/Display.cpp +++ b/libraries/SondeLib/Display.cpp @@ -16,6 +16,7 @@ extern const char *version_id; #include #include #include +#include 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 diff --git a/libraries/SondeLib/Display.h b/libraries/SondeLib/Display.h index ccae094..e35815f 100644 --- a/libraries/SondeLib/Display.h +++ b/libraries/SondeLib/Display.h @@ -1,4 +1,4 @@ -//#define ALT9225 +#define ALT9225 #ifndef Display_h #define Display_h @@ -9,7 +9,6 @@ #include #ifdef ALT9225 #include -//#include #else #include #endif diff --git a/libraries/SondeLib/fonts/Terminal11x16.h b/libraries/SondeLib/fonts/Terminal11x16.h new file mode 100644 index 0000000..7cdf6e4 --- /dev/null +++ b/libraries/SondeLib/fonts/Terminal11x16.h @@ -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 };