diff --git a/tests/pkg/mcufont/Makefile b/tests/pkg/mcufont/Makefile new file mode 100644 index 0000000000..e292e08369 --- /dev/null +++ b/tests/pkg/mcufont/Makefile @@ -0,0 +1,6 @@ +include ../Makefile.pkg_common + +USEPKG += mcufont +CFLAGS += -I$(CURDIR)/fonts + +include $(RIOTBASE)/Makefile.include diff --git a/tests/pkg/mcufont/Makefile.board.dep b/tests/pkg/mcufont/Makefile.board.dep new file mode 100644 index 0000000000..c17116f833 --- /dev/null +++ b/tests/pkg/mcufont/Makefile.board.dep @@ -0,0 +1,4 @@ +# Boards with a screen can use disp_dev +ifneq (,$(filter stm32f429i-disc% stm32f746g-disco stm32f7508-dk pinetime adafruit-clue adafruit-pybadge esp32-wrover-kit,$(BOARD))) + USEMODULE += disp_dev +endif diff --git a/tests/pkg/mcufont/Makefile.ci b/tests/pkg/mcufont/Makefile.ci new file mode 100644 index 0000000000..363d4f3a79 --- /dev/null +++ b/tests/pkg/mcufont/Makefile.ci @@ -0,0 +1,4 @@ +BOARD_INSUFFICIENT_MEMORY := \ + atmega8 \ + nucleo-l011k4 \ + # diff --git a/tests/pkg/mcufont/README.md b/tests/pkg/mcufont/README.md new file mode 100644 index 0000000000..372b4efb3d --- /dev/null +++ b/tests/pkg/mcufont/README.md @@ -0,0 +1,19 @@ +mcufont +======= + +The mcufont test application renders a string inside a pixel buffer after which +the pixel buffer is rendered using one ASCII Block symbol per pixel. This gives +a figlet-like effect. + +A default black and white only font is included in this test. It has been +generated from the MCUFont tools and fonts. + +When a display is present on the board with disp_dev support, the text string is +also shown on the display. In that case another font with aliasing support is +included in the build. This adds about 10 KiB to the build (including the +display driver) + +Usage +===== + +Compile the application and run the test. diff --git a/tests/pkg/mcufont/fonts/DejaVuSans12.c b/tests/pkg/mcufont/fonts/DejaVuSans12.c new file mode 100644 index 0000000000..dc6c5f3a78 --- /dev/null +++ b/tests/pkg/mcufont/fonts/DejaVuSans12.c @@ -0,0 +1,421 @@ + + +/* Start of automatically generated font definition for DejaVuSans12. */ + +#ifndef MF_RLEFONT_INTERNALS +#define MF_RLEFONT_INTERNALS +#endif +#include "mf_rlefont.h" + +#ifndef MF_RLEFONT_VERSION_4_SUPPORTED +#error The font file is not compatible with this version of mcufont. +#endif + +static const uint8_t mf_rlefont_DejaVuSans12_dictionary_data[943] PROGMEM = { + 0x0a, 0xc5, 0x09, 0x28, 0xce, 0xc4, 0x05, 0x03, 0x2b, 0x06, 0x09, 0x1c, 0x07, 0xcc, 0xc5, 0x01, + 0x08, 0x02, 0x29, 0xcb, 0x09, 0xd8, 0xcc, 0xc6, 0x84, 0x07, 0xcb, 0x85, 0xcc, 0xce, 0xc7, 0xc3, + 0xcd, 0x04, 0xc6, 0xc7, 0x0b, 0xc7, 0xc8, 0x0c, 0x11, 0xd9, 0x04, 0xc2, 0x80, 0xcc, 0xc5, 0x0b, + 0xcc, 0xc5, 0x09, 0x16, 0x10, 0xc5, 0xce, 0xc1, 0xc6, 0xcb, 0xc4, 0xca, 0xc3, 0x01, 0xc5, 0x0b, + 0xc4, 0xce, 0xc1, 0x01, 0xcd, 0xc7, 0xcc, 0xc3, 0xc3, 0xcc, 0x80, 0xc3, 0xc1, 0xcc, 0x06, 0xcc, + 0xcd, 0xc1, 0x40, 0x03, 0xc1, 0xc5, 0xce, 0xc2, 0xc3, 0xce, 0x40, 0x02, 0x07, 0xc1, 0xc7, 0xcb, + 0x01, 0xc6, 0xca, 0x06, 0xc2, 0xce, 0xc8, 0xcc, 0xc2, 0xc3, 0xca, 0xc2, 0xc1, 0x81, 0xda, 0xc8, + 0xce, 0xc1, 0x02, 0x06, 0xcc, 0xc5, 0x01, 0x01, 0xc1, 0xce, 0xc3, 0x01, 0xcc, 0xde, 0xca, 0xc8, + 0x02, 0xce, 0xc5, 0xcb, 0x04, 0x05, 0xce, 0xc4, 0x03, 0xcb, 0xc1, 0xca, 0xc4, 0xcb, 0xc7, 0xc2, + 0xcc, 0xc8, 0xc1, 0x01, 0xc6, 0xc7, 0xc9, 0xc6, 0xcd, 0x06, 0xc5, 0xc8, 0xc9, 0x06, 0xc1, 0x82, + 0x01, 0xc2, 0xc1, 0xc2, 0xce, 0xcb, 0xcc, 0xc5, 0xcc, 0xc4, 0xc4, 0xcb, 0x01, 0xce, 0xcc, 0x80, + 0xc1, 0x02, 0xcc, 0xc7, 0xcd, 0xc9, 0x81, 0xce, 0xce, 0x80, 0xc9, 0xca, 0xd7, 0xc9, 0xc4, 0xca, + 0xc6, 0x01, 0xc3, 0xc6, 0xcd, 0xc4, 0xcd, 0xc3, 0xc5, 0xcd, 0xcb, 0xc8, 0xc3, 0xcb, 0x80, 0xc2, + 0xc6, 0xcc, 0xc5, 0xc7, 0xc4, 0xca, 0xcb, 0xcc, 0xc6, 0xc8, 0xc6, 0xcb, 0x01, 0xc4, 0xcd, 0xc6, + 0xc3, 0x80, 0x01, 0x40, 0x28, 0x01, 0xc9, 0xcd, 0xc2, 0xcb, 0xc3, 0xc2, 0xca, 0xcc, 0xc8, 0x80, + 0xc8, 0x01, 0xcd, 0xc5, 0x01, 0x02, 0xc1, 0xcb, 0xca, 0xcb, 0xce, 0xc6, 0xc9, 0xc5, 0xca, 0xce, + 0xc6, 0x02, 0xc1, 0xc4, 0x40, 0x08, 0xce, 0xca, 0xce, 0xc9, 0xc9, 0xc8, 0xcc, 0xc9, 0x15, 0x07, + 0xc9, 0xca, 0x02, 0xc7, 0xcc, 0x06, 0xc1, 0xce, 0x84, 0xc3, 0x05, 0xc5, 0xce, 0x04, 0xcb, 0xc8, + 0x05, 0xcb, 0xc8, 0x03, 0x18, 0xcd, 0xc8, 0x1e, 0x51, 0x0e, 0x0e, 0x3b, 0x1d, 0x9c, 0x66, 0x0c, + 0x1d, 0x07, 0x0a, 0x1f, 0x49, 0x1d, 0x9c, 0x2a, 0xa1, 0x98, 0x58, 0x4e, 0x94, 0x0c, 0x53, 0x40, + 0x18, 0x39, 0x90, 0x1c, 0x49, 0x1d, 0x7e, 0x66, 0x0c, 0x1d, 0x9c, 0x1f, 0x49, 0x1d, 0x7e, 0x2a, + 0xa1, 0x47, 0x90, 0x1f, 0x41, 0x6c, 0x5a, 0x2c, 0x0d, 0x9a, 0x23, 0x6c, 0x02, 0x02, 0x88, 0x2a, + 0x1b, 0x24, 0x27, 0x2a, 0x58, 0x00, 0x64, 0x2a, 0x58, 0x00, 0x64, 0x2a, 0x58, 0x00, 0x64, 0x2a, + 0x58, 0x00, 0x64, 0x08, 0x2a, 0x71, 0x27, 0x2a, 0x71, 0x27, 0x2a, 0x71, 0x27, 0x2a, 0x48, 0x24, + 0x5a, 0x1c, 0x24, 0x35, 0x24, 0x35, 0x24, 0x35, 0x24, 0x6d, 0x00, 0x58, 0x18, 0x58, 0x18, 0x58, + 0x18, 0x34, 0x06, 0x18, 0x49, 0x01, 0x18, 0x33, 0x1c, 0x0c, 0x0f, 0x9b, 0x01, 0x1c, 0x63, 0x5b, + 0x6b, 0x84, 0x1d, 0x92, 0x97, 0x57, 0x97, 0x00, 0x87, 0x71, 0x24, 0x31, 0x8c, 0x2a, 0x65, 0x69, + 0x04, 0x4e, 0x58, 0x00, 0x7b, 0x1f, 0x49, 0x52, 0x07, 0x0f, 0x04, 0x2a, 0x08, 0x0e, 0x9b, 0x6e, + 0x9d, 0x22, 0x00, 0x07, 0x0c, 0x22, 0x02, 0x9d, 0x00, 0x44, 0x53, 0x9a, 0x01, 0x22, 0x18, 0x0f, + 0x0b, 0x22, 0x18, 0x35, 0x24, 0x0c, 0xf3, 0x08, 0x22, 0x18, 0x35, 0x24, 0x0c, 0xf3, 0x0c, 0x1f, + 0x21, 0x30, 0x30, 0x1d, 0x9c, 0x68, 0x55, 0x58, 0x1f, 0x0a, 0x07, 0x00, 0x7d, 0x24, 0x66, 0x0c, + 0x00, 0x60, 0x20, 0x1b, 0x80, 0x20, 0x08, 0x6c, 0x0a, 0x0e, 0x3f, 0x23, 0x9d, 0x6b, 0x7b, 0x1f, + 0x49, 0x1d, 0x95, 0x66, 0x29, 0x0b, 0x1f, 0x2d, 0x1f, 0x44, 0x62, 0x39, 0x06, 0x4b, 0x0a, 0x0e, + 0x9b, 0x01, 0x1c, 0x1a, 0x6a, 0x94, 0x0a, 0x07, 0x26, 0x0d, 0x05, 0x34, 0x01, 0x2a, 0x3e, 0x72, + 0x9f, 0x00, 0x38, 0x0a, 0x3d, 0x07, 0x0a, 0x3d, 0x07, 0x0a, 0x3d, 0x07, 0x0a, 0x3d, 0x07, 0x0a, + 0x1f, 0x83, 0x24, 0x07, 0x77, 0x1f, 0x50, 0x87, 0x03, 0x2f, 0x1c, 0x77, 0x24, 0x0c, 0x69, 0x04, + 0x1d, 0x61, 0x1c, 0x2f, 0x3c, 0x59, 0x0a, 0x02, 0x1c, 0x63, 0x0e, 0x06, 0x01, 0x47, 0x09, 0x1d, + 0x92, 0x97, 0x2a, 0x87, 0x71, 0x23, 0x38, 0x18, 0x87, 0x71, 0x00, 0x4b, 0x97, 0x23, 0x63, 0x0e, + 0x06, 0x01, 0x47, 0x09, 0x00, 0x66, 0x59, 0x0a, 0x02, 0x88, 0x2a, 0x65, 0x00, 0x08, 0x26, 0x93, + 0x48, 0x20, 0x38, 0x1c, 0x08, 0x5c, 0x04, 0x71, 0x24, 0x76, 0x24, 0x92, 0x97, 0x57, 0x97, 0x24, + 0x63, 0x5b, 0x6b, 0x84, 0x2a, 0x81, 0x0f, 0x9b, 0x01, 0x1e, 0x46, 0x8e, 0x0e, 0x7b, 0x23, 0x9d, + 0x6b, 0x08, 0x2a, 0x49, 0x1c, 0x66, 0x0c, 0x3d, 0x49, 0x31, 0x9d, 0x6b, 0x08, 0x56, 0x24, 0x7d, + 0x3d, 0x80, 0x3d, 0x80, 0x23, 0xec, 0x25, 0x0c, 0x1d, 0x3e, 0x1d, 0x6a, 0x1b, 0x57, 0x1a, 0x03, + 0x0f, 0x0e, 0x2e, 0x7f, 0x1f, 0x0d, 0x2e, 0x50, 0x1f, 0x0d, 0x1d, 0x77, 0x2a, 0x0d, 0x24, 0x61, + 0x68, 0x53, 0x80, 0x5f, 0x05, 0x0c, 0x1f, 0x72, 0x0e, 0x01, 0x3c, 0x0c, 0x1f, 0x6d, 0x09, 0x09, + 0x3c, 0x0c, 0x1f, 0x6d, 0x02, 0x48, 0x05, 0x0c, 0x56, 0x09, 0x09, 0x05, 0x0c, 0x56, 0x02, 0x2c, + 0x0c, 0x56, 0x8b, 0x70, 0x56, 0x57, 0x70, 0x03, 0x09, 0x3d, 0x1b, 0x3d, 0x1b, 0x3d, 0x1b, 0x3d, + 0x18, 0x89, 0x94, 0x18, 0x34, 0x0d, 0x19, 0x07, 0x1d, 0x4e, 0x53, 0x9a, 0x01, 0x22, 0x02, 0x1b, + 0x1d, 0x4c, 0x5d, 0x4c, 0x5d, 0x4c, 0x5d, 0x4c, 0x5d, 0x4c, 0x5d, 0x4c, 0x1c, 0x28, 0x1d, 0x33, + 0x24, 0x07, 0x7c, 0x98, 0x1b, 0x2a, 0x07, 0x0d, 0x0e, 0x6d, 0x21, 0x76, 0x2e, 0x0b, 0x06, 0x3d, + 0x02, 0x94, 0x91, 0x2a, 0xa1, 0x98, 0x58, 0x1c, 0x49, 0x9b, 0x23, 0x0e, 0x50, 0x02, 0x72, 0x2a, + 0x5b, 0x24, 0x7d, 0x2a, 0x58, 0x00, 0x49, 0x2a, 0x5b, 0x24, 0x7d, 0x2a, 0x0e, 0x50, 0x02, 0x72, + 0x2a, 0x2c, 0x0d, 0x9b, 0x7c, 0x3d, 0x7c, 0x3d, 0x7c, 0x3d, 0x8f, 0x98, 0x4f, 0x2a, 0x41, 0x0e, + 0x76, 0x3d, 0x76, 0x20, 0x21, 0x71, 0x08, 0x07, 0x08, 0x01, 0x2a, 0x00, 0x79, 0x63, 0x06, 0x23, + 0x09, 0x5e, 0x0b, 0x02, 0x2f, 0x19, 0x07, 0x2f, 0x19, 0x0d, 0x0b, 0x3d, 0x28, 0x1d, 0x4b, 0x18, + 0x07, 0x55, 0x05, 0x0c, 0x44, 0x4f, 0x24, 0x0a, 0x0b, 0x18, 0x8a, 0x63, 0x53, 0x00, 0x92, 0x04, + 0x6d, 0x01, 0x47, 0x40, 0x1c, 0x2f, 0x05, 0x01, 0x80, 0x2e, 0x4b, 0x00, 0x6a, 0x8c, 0x09, 0x19, + 0x01, 0x0f, 0x8c, 0x6c, 0x5a, 0x1c, 0xa1, 0x47, 0x5c, 0x87, 0x0d, 0x05, 0x01, 0x47, 0x7c, 0x1f, + 0x03, 0x94, 0x0e, 0x8d, 0x24, 0xa0, 0x2a, 0x33, 0x2a, 0x0b, 0x53, 0x06, 0x0f, 0x08, 0x0a, +}; + +static const uint16_t mf_rlefont_DejaVuSans12_dictionary_offsets[212] PROGMEM = { + 0x0000, 0x0001, 0x0003, 0x0004, 0x0006, 0x0007, 0x0008, 0x0009, + 0x000a, 0x000b, 0x000c, 0x0010, 0x0011, 0x0012, 0x0013, 0x0015, + 0x0016, 0x0018, 0x0019, 0x001a, 0x001d, 0x001f, 0x0021, 0x0022, + 0x0024, 0x0027, 0x0028, 0x0029, 0x002b, 0x002d, 0x0033, 0x0034, + 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, 0x003f, 0x0040, 0x0044, + 0x0046, 0x0048, 0x004a, 0x004c, 0x004e, 0x0050, 0x0052, 0x0054, + 0x0056, 0x0058, 0x005a, 0x005c, 0x005e, 0x0061, 0x0063, 0x0065, + 0x0067, 0x0069, 0x006b, 0x006d, 0x006e, 0x0070, 0x0073, 0x0077, + 0x0079, 0x007c, 0x007e, 0x0081, 0x0083, 0x0085, 0x0089, 0x008b, + 0x008d, 0x008f, 0x0091, 0x0093, 0x0095, 0x0097, 0x0099, 0x009b, + 0x009d, 0x009f, 0x00a0, 0x00a2, 0x00a4, 0x00a6, 0x00a8, 0x00aa, + 0x00ad, 0x00af, 0x00b2, 0x00b4, 0x00b6, 0x00b8, 0x00ba, 0x00bc, + 0x00bd, 0x00bf, 0x00c2, 0x00c4, 0x00c6, 0x00c8, 0x00ca, 0x00cc, + 0x00ce, 0x00d0, 0x00d2, 0x00d4, 0x00d6, 0x00d8, 0x00da, 0x00dc, + 0x00de, 0x00e0, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00eb, 0x00ed, + 0x00ef, 0x00f2, 0x00f5, 0x00f7, 0x00f9, 0x00fb, 0x00fd, 0x00ff, + 0x0102, 0x0104, 0x0106, 0x0108, 0x010a, 0x010c, 0x010e, 0x010f, + 0x0124, 0x0125, 0x0127, 0x012c, 0x013d, 0x0142, 0x0157, 0x0173, + 0x0182, 0x018b, 0x0190, 0x0199, 0x01ab, 0x01c0, 0x01cf, 0x01e1, + 0x01e3, 0x01f8, 0x0213, 0x0216, 0x0223, 0x0230, 0x0244, 0x0269, + 0x0272, 0x028a, 0x029d, 0x02a0, 0x02a6, 0x02a8, 0x02ae, 0x02c4, + 0x02e7, 0x02e9, 0x02f0, 0x02f2, 0x02f8, 0x02fa, 0x02ff, 0x031b, + 0x031d, 0x0320, 0x0329, 0x0344, 0x034a, 0x0350, 0x0355, 0x0357, + 0x0359, 0x035b, 0x035e, 0x0360, 0x0362, 0x0364, 0x0369, 0x036b, + 0x036d, 0x036f, 0x0371, 0x0377, 0x037a, 0x037d, 0x037f, 0x0385, + 0x0387, 0x0389, 0x038b, 0x038d, 0x0390, 0x0393, 0x0398, 0x03a6, + 0x03a9, 0x03ab, 0x03ad, 0x03af, +}; + +static const uint8_t mf_rlefont_DejaVuSans12_glyph_data_0[2008] PROGMEM = { + 0x04, 0x00, 0x10, 0x05, 0x25, 0x89, 0xc2, 0xc2, 0xc2, 0x18, 0x34, 0xe1, 0x0e, 0xa0, 0x89, 0xc2, + 0x10, 0x06, 0x25, 0xe3, 0xe3, 0xe3, 0x10, 0x0a, 0x37, 0x25, 0x45, 0x7f, 0x23, 0x61, 0x00, 0x77, + 0x1f, 0xe9, 0x29, 0x80, 0x1f, 0x0a, 0x05, 0x00, 0x0e, 0x20, 0x45, 0x7f, 0x68, 0x53, 0x29, 0x07, + 0x1f, 0x85, 0x00, 0x8d, 0x23, 0x5f, 0x01, 0x0d, 0x10, 0x08, 0x1e, 0x62, 0x20, 0x41, 0x0f, 0x0d, + 0xd2, 0x0d, 0xcf, 0xc0, 0x02, 0x2a, 0x48, 0x62, 0x20, 0x07, 0x0c, 0x3a, 0x18, 0x8e, 0x0a, 0x8c, + 0x20, 0x62, 0x67, 0x2a, 0x3b, 0x08, 0x03, 0x60, 0x1f, 0x87, 0x0c, 0x0f, 0x9b, 0x18, 0x62, 0x3d, + 0x62, 0x10, 0x0b, 0x25, 0x08, 0x0e, 0x5e, 0x00, 0x3c, 0x09, 0x24, 0xe2, 0x45, 0x27, 0x00, 0x43, + 0x01, 0x1d, 0x3c, 0x09, 0x00, 0x83, 0x00, 0x08, 0x06, 0x1c, 0x03, 0x45, 0x27, 0x7f, 0x2a, 0x08, + 0x70, 0x01, 0x8d, 0x07, 0x70, 0x01, 0x1f, 0x85, 0x02, 0x45, 0x27, 0x1c, 0x43, 0x01, 0x83, 0x87, + 0x5c, 0x8b, 0x05, 0x6a, 0x45, 0x27, 0x2e, 0x7f, 0x1d, 0x07, 0x0e, 0x50, 0x10, 0x09, 0x25, 0x63, + 0x0e, 0x2c, 0x24, 0x4e, 0x42, 0x01, 0x09, 0xd0, 0x02, 0x55, 0x20, 0xd6, 0x18, 0x0a, 0x64, 0x0b, + 0x00, 0x8b, 0x07, 0x24, 0xe2, 0xf5, 0xd3, 0x7c, 0x2e, 0x03, 0x71, 0x0a, 0x0d, 0x0a, 0x1f, 0x0d, + 0x0a, 0x52, 0x07, 0x0f, 0x0b, 0x1f, 0x8e, 0x0e, 0x0e, 0x3b, 0x8f, 0x10, 0x03, 0x25, 0x8c, 0x3d, + 0x8c, 0x3d, 0x8c, 0x10, 0x05, 0x00, 0x21, 0x77, 0xd8, 0x55, 0x23, 0x4d, 0x3d, 0xc8, 0x7b, 0x3d, + 0x58, 0x18, 0x7b, 0x3d, 0xc8, 0x4d, 0xe1, 0x45, 0x3d, 0x77, 0x10, 0x05, 0x21, 0x40, 0x3d, 0x96, + 0x31, 0x48, 0x3d, 0xc8, 0x67, 0x3d, 0xea, 0x3d, 0x67, 0x3d, 0xc8, 0x48, 0x18, 0x96, 0x3d, 0x40, + 0x10, 0x06, 0x25, 0x3c, 0x19, 0xdf, 0x82, 0xd2, 0x81, 0x28, 0x20, 0x81, 0x0c, 0xd2, 0xdf, 0x82, + 0xd2, 0x3c, 0x05, 0x10, 0x0a, 0x37, 0x1e, 0x30, 0xaf, 0x23, 0x2b, 0x23, 0xcf, 0xaf, 0x10, 0x04, + 0x21, 0x8a, 0x76, 0x3d, 0xc8, 0x0d, 0x10, 0x04, 0xdc, 0x0b, 0x10, 0x04, 0x21, 0x8a, 0x7e, 0x3d, + 0x7e, 0x10, 0x04, 0x1a, 0xe2, 0x0d, 0x3d, 0x95, 0x3d, 0x3a, 0xd8, 0x0e, 0x3d, 0x96, 0x3d, 0x79, + 0x18, 0x55, 0x23, 0x6f, 0x18, 0x08, 0x07, 0x3d, 0x8c, 0x10, 0x08, 0x1a, 0x57, 0x0a, 0x0e, 0x0d, + 0xd2, 0xd3, 0x04, 0x1b, 0x2a, 0x1b, 0x24, 0x33, 0xe2, 0x71, 0x81, 0x1f, 0x03, 0xf5, 0x3c, 0x0c, + 0x4e, 0x71, 0x81, 0x2a, 0x1b, 0x24, 0x33, 0x1d, 0xd3, 0x04, 0x1b, 0x4b, 0x0a, 0x0e, 0x97, 0x10, + 0x08, 0x25, 0x0a, 0x53, 0x09, 0x3d, 0x33, 0xe7, 0x33, 0xe7, 0x33, 0xe7, 0x33, 0x1c, 0x08, 0xf3, + 0x08, 0x10, 0x08, 0x1a, 0x3c, 0x0c, 0x0e, 0x6d, 0x4b, 0x3b, 0x39, 0x80, 0x3d, 0x0d, 0x05, 0xd8, + 0x42, 0x18, 0x0b, 0x09, 0x18, 0xdb, 0xdb, 0x0a, 0x5e, 0xc4, 0x29, 0x07, 0x10, 0x08, 0x25, 0x03, + 0x94, 0x0d, 0xd2, 0x78, 0x98, 0x1b, 0x3d, 0x0b, 0x06, 0x20, 0x87, 0x58, 0x1f, 0x8b, 0x53, 0x07, + 0x3d, 0x03, 0x88, 0x3d, 0x67, 0x68, 0x09, 0x02, 0x00, 0x03, 0x88, 0x00, 0x66, 0x0c, 0x0e, 0x3f, + 0x10, 0x08, 0x25, 0xe2, 0x6c, 0x18, 0x0b, 0x0b, 0x26, 0x96, 0x4c, 0x4b, 0x8c, 0x4c, 0x1f, 0x8b, + 0x07, 0x00, 0x4c, 0x1f, 0x41, 0x24, 0x4c, 0x1f, 0xe9, 0x29, 0x18, 0x4c, 0xd9, 0x0b, 0x10, 0x08, + 0x25, 0x0b, 0x0f, 0x74, 0x23, 0xc8, 0xc8, 0x94, 0x0e, 0x6d, 0x18, 0x39, 0x42, 0x3d, 0x5a, 0x20, + 0x0a, 0x08, 0x68, 0x09, 0x02, 0x39, 0x42, 0x2a, 0x65, 0x0e, 0x6d, 0x10, 0x08, 0x00, 0x25, 0x65, + 0x9b, 0xd0, 0x04, 0x7b, 0x39, 0x04, 0x00, 0x44, 0xd2, 0xec, 0x07, 0x0e, 0x9b, 0x2a, 0x34, 0xd4, + 0x02, 0x8f, 0x68, 0x0f, 0x05, 0x24, 0x81, 0x2a, 0x5b, 0x24, 0x81, 0x2a, 0x08, 0x50, 0x02, 0x72, + 0x2a, 0x8b, 0x0e, 0x4f, 0x10, 0x08, 0x25, 0x29, 0x08, 0xd8, 0x1b, 0x18, 0x65, 0x3d, 0x60, 0x00, + 0xc4, 0x80, 0xd9, 0x0b, 0x3d, 0x88, 0x18, 0x3e, 0x20, 0x33, 0x10, 0x08, 0xb2, 0x4f, 0x23, 0x9d, + 0x6b, 0x88, 0x2a, 0x1b, 0x24, 0x9c, 0x2a, 0x0a, 0x09, 0x6b, 0x7b, 0x00, 0x4e, 0x0d, 0x53, 0x09, + 0x23, 0x3f, 0x6b, 0x72, 0x4e, 0x71, 0x81, 0x2a, 0x2c, 0x6b, 0x9d, 0x1f, 0x87, 0x59, 0x09, 0x01, + 0x10, 0x08, 0xb2, 0x91, 0x2a, 0xa1, 0x98, 0x58, 0x1c, 0x03, 0x71, 0x5a, 0x2e, 0x03, 0x71, 0x0a, + 0x0b, 0x2a, 0xa1, 0x98, 0x70, 0x2a, 0x41, 0x70, 0x76, 0x3d, 0x60, 0x2a, 0x07, 0x03, 0x01, 0x07, + 0x0e, 0xd0, 0x41, 0x0e, 0xd4, 0x10, 0x04, 0x23, 0x99, 0xcd, 0xcd, 0x10, 0x04, 0x23, 0x99, 0xcd, + 0x76, 0x3d, 0xc8, 0x0d, 0x10, 0x0a, 0x99, 0x03, 0xea, 0x2a, 0x03, 0x08, 0xd6, 0x06, 0x02, 0x2e, + 0x63, 0xd6, 0x06, 0xd0, 0x63, 0xd6, 0x06, 0x01, 0x18, 0x03, 0x08, 0xd6, 0x06, 0x01, 0x18, 0x03, + 0x76, 0x10, 0x0a, 0x9e, 0x99, 0x2b, 0x00, 0x32, 0x2b, 0x10, 0x0a, 0x46, 0x0a, 0x78, 0xd8, 0x86, + 0xa1, 0x03, 0xd8, 0x86, 0x3f, 0x00, 0x4b, 0x86, 0x3f, 0x24, 0xdd, 0x86, 0x73, 0x03, 0x2a, 0x0a, + 0x78, 0x10, 0x06, 0x25, 0x65, 0x9a, 0x24, 0x4e, 0x09, 0x6b, 0x88, 0xd7, 0x20, 0x8b, 0x0b, 0xd9, + 0x0b, 0x3d, 0x0a, 0x07, 0xa0, 0x60, 0x3d, 0x60, 0x10, 0x0c, 0x31, 0x1e, 0x87, 0x94, 0x0e, 0x28, + 0x1f, 0x08, 0x6d, 0x52, 0x51, 0x5e, 0x24, 0x3c, 0x5e, 0x1c, 0x27, 0x1d, 0x50, 0x00, 0x08, 0x0e, + 0x0d, 0x27, 0x00, 0x0d, 0x92, 0x0b, 0x87, 0x50, 0x02, 0x8f, 0x00, 0xd4, 0x00, 0x51, 0x00, 0x85, + 0x24, 0xcf, 0x00, 0x0c, 0xe2, 0x0b, 0x87, 0x0c, 0x52, 0x8f, 0x64, 0x1d, 0x50, 0x00, 0x08, 0x0e, + 0x8f, 0xa1, 0x2e, 0x86, 0x31, 0x08, 0x6e, 0x01, 0x98, 0x8d, 0x66, 0x94, 0x0e, 0x72, 0x01, 0x10, + 0x08, 0x1e, 0xc3, 0xb3, 0x10, 0x08, 0xbc, 0x74, 0x8d, 0x22, 0x01, 0x09, 0x0c, 0x22, 0x00, 0x89, + 0x56, 0x01, 0x09, 0x0b, 0x00, 0x44, 0x69, 0x58, 0x56, 0x3c, 0x48, 0x56, 0x24, 0x5b, 0x56, 0x3c, + 0x42, 0x44, 0x69, 0x88, 0x10, 0x08, 0x25, 0xb6, 0x10, 0x09, 0xbc, 0x74, 0x28, 0x22, 0x01, 0x7d, + 0x0a, 0x56, 0x24, 0x03, 0x42, 0x1c, 0x6d, 0x2e, 0x3f, 0x1c, 0x6d, 0x2e, 0x7e, 0x1c, 0x6d, 0x2e, + 0x3f, 0x1c, 0x6d, 0x1d, 0x03, 0x42, 0x1c, 0x6d, 0x57, 0x7d, 0x0a, 0x44, 0x74, 0x28, 0x10, 0x08, + 0xbc, 0x69, 0xae, 0x10, 0x07, 0xbc, 0x69, 0x42, 0x22, 0x18, 0x35, 0x24, 0x0c, 0x69, 0x0c, 0x23, + 0x35, 0x24, 0x35, 0x10, 0x09, 0x25, 0x3c, 0x59, 0x0b, 0x05, 0x1c, 0x63, 0x0e, 0x06, 0x52, 0x83, + 0x01, 0x00, 0xdd, 0x97, 0x2a, 0x87, 0x71, 0x23, 0x38, 0x1d, 0x0c, 0x53, 0x05, 0x1d, 0x87, 0x71, + 0x24, 0x91, 0xdd, 0x97, 0x24, 0x91, 0x1d, 0x63, 0x0e, 0x06, 0x01, 0x01, 0x03, 0x5b, 0x66, 0x59, + 0x28, 0x10, 0x09, 0x2a, 0x21, 0xba, 0xba, 0xba, 0xba, 0x44, 0x29, 0x0d, 0xba, 0xba, 0xba, 0xba, + 0x10, 0x04, 0x25, 0x35, 0xa8, 0x10, 0x04, 0xbc, 0x19, 0xa8, 0x18, 0x0d, 0x19, 0x87, 0x80, 0x23, + 0x8b, 0x3f, 0x10, 0x08, 0x1f, 0x21, 0x22, 0x87, 0x5b, 0x56, 0x04, 0x1b, 0x2a, 0x6d, 0x05, 0x1b, + 0x24, 0x44, 0x0a, 0x1b, 0x1d, 0x44, 0x70, 0x2e, 0x44, 0x81, 0x26, 0x6d, 0x43, 0x0a, 0x00, 0x22, + 0x43, 0x0a, 0x22, 0x57, 0x73, 0x10, 0x07, 0xbc, 0x19, 0xa8, 0x2e, 0x44, 0xf3, 0x09, 0x10, 0x0a, + 0xbc, 0x80, 0x1d, 0x0c, 0x42, 0x2e, 0x0c, 0xa1, 0xe2, 0x0d, 0x42, 0x2e, 0x72, 0x0d, 0x24, 0x08, + 0x07, 0x42, 0x2e, 0x6d, 0x3a, 0x00, 0x8c, 0x42, 0x2e, 0x6d, 0x4d, 0x6f, 0x42, 0x2e, 0x6d, 0x01, + 0x6c, 0x05, 0x00, 0x42, 0x2e, 0x6d, 0x8b, 0x0e, 0x24, 0x42, 0x2e, 0x6d, 0x1c, 0x42, 0x2e, 0x6d, + 0x1c, 0x42, 0x10, 0x09, 0xbc, 0xda, 0xbf, 0x10, 0x09, 0x25, 0x3c, 0xab, 0xc7, 0xb8, 0x07, 0xbc, + 0xc5, 0xad, 0x35, 0x24, 0x6d, 0x10, 0x09, 0x25, 0x3c, 0xab, 0xc7, 0x38, 0x1c, 0x08, 0x5c, 0x04, + 0x71, 0x24, 0xc7, 0x01, 0x97, 0x57, 0x97, 0x24, 0x63, 0x5b, 0x6b, 0x84, 0x00, 0x66, 0x0c, 0x53, + 0x5e, 0xd9, 0x45, 0x3d, 0x9d, 0x10, 0x08, 0xbc, 0xc5, 0x9d, 0x22, 0x00, 0x07, 0x0c, 0x22, 0x02, + 0x9d, 0x00, 0x44, 0x69, 0x5e, 0x22, 0x03, 0x1b, 0x22, 0x00, 0x07, 0x0c, 0x22, 0x57, 0x5b, 0x56, + 0x24, 0x08, 0x0c, 0x10, 0x08, 0x25, 0x03, 0x94, 0xa1, 0xd0, 0x2c, 0x6b, 0x07, 0x06, 0x1f, 0x34, + 0xe1, 0x4f, 0x02, 0x18, 0x8e, 0x0e, 0x9b, 0x01, 0x00, 0xc4, 0x93, 0x3d, 0x38, 0x4e, 0x3b, 0x6b, + 0x0b, 0x0b, 0x00, 0x66, 0x59, 0x0a, 0x01, 0x10, 0x07, 0x1a, 0x53, 0x29, 0x05, 0x23, 0x1b, 0xc1, + 0x1b, 0xc1, 0x10, 0x09, 0x25, 0xc6, 0x10, 0x08, 0x1a, 0x7e, 0x2e, 0x38, 0x1c, 0x7d, 0x2e, 0x5a, + 0xdd, 0x1b, 0x92, 0x42, 0x1c, 0x8b, 0x09, 0x24, 0x81, 0x2a, 0x3e, 0x72, 0x23, 0x0d, 0x05, 0x34, + 0x01, 0x23, 0x07, 0x60, 0x26, 0x34, 0x91, 0x20, 0x94, 0x10, 0x0c, 0x1a, 0x4c, 0x24, 0xd6, 0x1d, + 0x91, 0x49, 0x92, 0x0d, 0x0e, 0x24, 0xe0, 0x24, 0x58, 0x05, 0x09, 0x8d, 0x00, 0x7d, 0x1d, 0x60, + 0x8b, 0x85, 0x07, 0x8b, 0x09, 0x1d, 0xea, 0x00, 0x50, 0x83, 0x00, 0x28, 0x24, 0x87, 0x0e, 0x01, + 0x0e, 0x57, 0x0e, 0xe0, 0xdd, 0x0f, 0x07, 0x0a, 0x24, 0x72, 0x0d, 0x1c, 0x0c, 0x97, 0x09, 0x9a, + 0x1c, 0x08, 0x42, 0x00, 0x3c, 0x0f, 0x06, 0x10, 0x08, 0x1a, 0x01, 0x91, 0x57, 0x91, 0x1c, 0x3e, + 0x76, 0x23, 0x0a, 0x0a, 0x3e, 0x4b, 0x0e, 0x5b, 0x18, 0x0a, 0x55, 0x00, 0x66, 0x6c, 0x09, 0x00, + 0x4b, 0x5b, 0x01, 0x1b, 0x2a, 0x0a, 0x0a, 0x24, 0x65, 0x66, 0x55, 0x00, 0x7e, 0x10, 0x07, 0x1a, + 0x0b, 0x09, 0xbd, 0xb7, 0x34, 0x07, 0xc1, 0x1b, 0x10, 0x08, 0x1a, 0x05, 0x29, 0x90, 0x1d, 0x66, + 0x48, 0xc4, 0x5b, 0x24, 0x4b, 0xa1, 0x18, 0xdb, 0x07, 0x45, 0x23, 0x87, 0x0e, 0x03, 0xc4, 0x0e, + 0x06, 0xd9, 0x0f, 0x29, 0x0a, 0x10, 0x05, 0x1a, 0xfa, 0x08, 0x18, 0x80, 0xbb, 0x02, 0xbb, 0x02, + 0xbb, 0x90, 0x10, 0x04, 0x1a, 0x8c, 0x3d, 0x08, 0x07, 0x3d, 0x6f, 0x3d, 0x55, 0x20, 0x79, 0x18, + 0x96, 0xe1, 0x0e, 0x31, 0x3a, 0x3d, 0x95, 0x24, 0xc4, 0x0d, 0x10, 0x05, 0xbc, 0x0f, 0xb4, 0x00, + 0xd9, 0xb4, 0x2e, 0x44, 0x0f, 0x0a, 0x10, 0x0a, 0x1e, 0x2d, 0x58, 0x2a, 0x2d, 0x05, 0x04, 0x7b, + 0x1c, 0x87, 0x40, 0xe2, 0x6e, 0x10, 0x06, 0x99, 0x8a, 0x4e, 0x29, 0x80, 0x10, 0x06, 0x21, 0x27, + 0x3d, 0x8b, 0x06, 0x10, 0x07, 0x46, 0xa4, 0x0d, 0xac, 0x10, 0x08, 0x21, 0xa9, 0x18, 0x2c, 0x0d, + 0xca, 0x10, 0x07, 0xb9, 0x23, 0x8e, 0x0e, 0x7b, 0x10, 0x08, 0x2e, 0x21, 0x27, 0x3d, 0x27, 0x3d, + 0x27, 0x2a, 0x61, 0xe5, 0xa5, 0x10, 0x07, 0x4a, 0x57, 0xb1, 0x10, 0x04, 0x21, 0x61, 0x0f, 0x07, + 0x20, 0x67, 0x3d, 0x79, 0x20, 0xe8, 0x42, 0x20, 0x79, 0x18, 0x79, 0x18, 0x79, 0x18, 0x79, 0x18, + 0x79, 0x18, 0x79, 0x10, 0x08, 0x46, 0x41, 0x6c, 0x5a, 0x1c, 0x3f, 0x47, 0x90, 0x1c, 0x49, 0x1d, + 0x0a, 0x08, 0x66, 0x0c, 0x1d, 0x9c, 0x1f, 0x49, 0x1d, 0x5a, 0x1c, 0x3f, 0x47, 0x90, 0x1f, 0x41, + 0x6c, 0x5a, 0x20, 0x0b, 0x06, 0x1f, 0x63, 0x04, 0x39, 0x48, 0x00, 0x4e, 0x94, 0x6e, 0x10, 0x08, + 0x21, 0xa9, 0x18, 0xa6, 0x10, 0x03, 0x25, 0x7c, 0xa0, 0xcb, 0xcb, 0x7c, 0x10, 0x03, 0x25, 0x7c, + 0xa0, 0x7c, 0x3d, 0xcb, 0xcb, 0x7c, 0x00, 0xc4, 0x55, 0x2a, 0x03, 0x4f, 0x10, 0x07, 0x21, 0x58, + 0x18, 0xa9, 0x03, 0x7b, 0x2a, 0x0e, 0x03, 0x04, 0x7c, 0x23, 0x2c, 0x7c, 0x20, 0x0e, 0x9b, 0x18, + 0x1b, 0x3f, 0x20, 0x0e, 0x03, 0x01, 0x3f, 0x23, 0x58, 0x02, 0x3f, 0x10, 0x03, 0x21, 0xcb, 0xcb, + 0xcb, 0x7c, 0x10, 0x0c, 0x46, 0x4f, 0x0d, 0x9b, 0x41, 0x0e, 0x5e, 0x1d, 0x6c, 0x6b, 0x0e, 0x7c, + 0x01, 0x60, 0x1d, 0x1b, 0x24, 0x0a, 0x07, 0x24, 0x07, 0x0a, 0x1d, 0x58, 0xd1, 0x0a, 0x1d, 0x58, + 0xd1, 0x0a, 0x1d, 0x58, 0xd1, 0x0a, 0x1d, 0x58, 0xd1, 0x0a, 0x10, 0x08, 0x46, 0xa6, 0x10, 0x07, + 0x46, 0xc9, 0xa3, 0x91, 0x10, 0x08, 0x46, 0x2c, 0x0d, 0xca, 0x23, 0xa9, 0x10, 0x08, 0x46, 0x61, + 0xe5, 0xa5, 0x20, 0x27, 0x3d, 0x27, 0x3d, 0x27, 0x10, 0x05, 0x46, 0x2c, 0x0c, 0x0e, 0x20, 0x0e, + 0x50, 0x18, 0x1b, 0x3d, 0x58, 0x18, 0xa9, 0x10, 0x06, 0x46, 0x08, 0x0e, 0x9b, 0xd0, 0x03, 0x48, + 0x39, 0x04, 0x2a, 0x03, 0x45, 0x3d, 0x86, 0x72, 0x01, 0xd8, 0x5a, 0x1c, 0x82, 0x52, 0x0a, 0x09, + 0x4b, 0x08, 0x0d, 0x9a, 0x01, 0x10, 0x05, 0x25, 0x7c, 0x3d, 0x7c, 0x18, 0x0a, 0x69, 0x06, 0x20, + 0xcb, 0x7c, 0xd7, 0x3d, 0x7d, 0x0f, 0x06, 0x10, 0x08, 0x46, 0xce, 0xa7, 0xcc, 0x54, 0x10, 0x07, + 0x4a, 0x07, 0x0a, 0x1d, 0x33, 0xe2, 0x55, 0x58, 0x1f, 0x28, 0x87, 0x0d, 0x23, 0x86, 0x00, 0x9c, + 0x23, 0xe0, 0x48, 0x20, 0x0b, 0x84, 0x2e, 0x66, 0x0f, 0x07, 0x10, 0x0a, 0x4a, 0x86, 0x24, 0x0d, + 0x0a, 0x24, 0x7c, 0x00, 0xe2, 0x0e, 0x57, 0x0d, 0x0d, 0x6a, 0x0e, 0x1c, 0x7c, 0x05, 0x09, 0x50, + 0x4d, 0x1c, 0x0a, 0x64, 0x05, 0x08, 0x95, 0x07, 0x1c, 0x4d, 0x50, 0x83, 0x7c, 0x1d, 0xe2, 0x0e, + 0x0d, 0x57, 0x0e, 0x0e, 0x2a, 0x9b, 0x24, 0x0c, 0x0b, 0x10, 0x07, 0x4a, 0x02, 0x58, 0x01, 0x1b, + 0x1f, 0x63, 0x45, 0x7e, 0x20, 0x0a, 0x0c, 0x0c, 0x2e, 0x66, 0x0f, 0xd2, 0x57, 0x73, 0x45, 0x23, + 0x76, 0x00, 0x76, 0x00, 0x66, 0x45, 0x57, 0x91, 0x10, 0x07, 0x4a, 0x07, 0x0a, 0xb0, 0xaa, 0xe4, + 0x10, 0x06, 0x4a, 0x05, 0xf3, 0x0c, 0xd7, 0x18, 0x0a, 0x09, 0xd9, 0x26, 0x87, 0x45, 0xc4, 0x0e, + 0x03, 0xd9, 0xf3, 0x0c, 0x10, 0x08, 0x1e, 0x41, 0x80, 0x24, 0xe7, 0x79, 0x18, 0x79, 0xc4, 0x7b, + 0x20, 0x08, 0x0f, 0x26, 0xe2, 0x7b, 0x3d, 0x79, 0x18, 0x79, 0x1d, 0xe7, 0x2d, 0x80, 0x10, 0x04, + 0x24, 0x21, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0x10, 0x08, 0x25, 0x07, 0x9a, 0xe1, 0x7c, 0x3d, + 0x6d, 0x3d, 0x0b, 0x05, 0x3d, 0x0a, 0x09, 0x3d, 0x49, 0x80, 0x20, 0x0a, 0x09, 0x01, 0x18, 0x0b, + 0x05, 0x3d, 0x6d, 0xd8, 0x7c, 0x20, 0x07, 0x9a, 0x10, 0x0a, 0x9e, 0x99, 0x7f, 0x6c, 0x05, 0x01, + 0xc0, 0x1c, 0x07, 0x03, 0x47, 0x94, 0x40, 0x10, +}; + +static const uint16_t mf_rlefont_DejaVuSans12_glyph_offsets_0[95] PROGMEM = { + 0x0000, 0x0003, 0x0011, 0x0017, 0x0039, 0x0062, 0x009d, 0x00cc, + 0x00d4, 0x00eb, 0x0101, 0x0114, 0x011f, 0x0127, 0x012b, 0x0132, + 0x014a, 0x0170, 0x0182, 0x019d, 0x01c1, 0x01df, 0x01fc, 0x0225, + 0x023b, 0x0261, 0x0286, 0x028c, 0x0295, 0x02b2, 0x02ba, 0x02d2, + 0x02e9, 0x0330, 0x0335, 0x0355, 0x0359, 0x037f, 0x0384, 0x0394, + 0x03c2, 0x03d1, 0x03d6, 0x03e3, 0x0406, 0x040f, 0x0443, 0x0448, + 0x044e, 0x0456, 0x0476, 0x0494, 0x04b8, 0x04c3, 0x04c7, 0x04ea, + 0x0528, 0x054e, 0x0559, 0x0576, 0x0583, 0x059b, 0x05a7, 0x05b6, + 0x05bd, 0x05c4, 0x05ca, 0x05d2, 0x05d9, 0x05e6, 0x05eb, 0x0604, + 0x062f, 0x0635, 0x063d, 0x064d, 0x066c, 0x0673, 0x069b, 0x069f, + 0x06a5, 0x06ad, 0x06b9, 0x06c8, 0x06e6, 0x06f8, 0x06ff, 0x071b, + 0x074a, 0x0769, 0x0771, 0x0785, 0x079f, 0x07a9, 0x07c9, +}; + +static const uint8_t mf_rlefont_DejaVuSans12_glyph_data_1[1628] PROGMEM = { + 0x04, 0x00, 0x10, 0x05, 0x25, 0x89, 0xc2, 0x31, 0xe1, 0x0e, 0x24, 0xc4, 0xfd, 0xc2, 0xc2, 0xc2, + 0xc2, 0x10, 0x08, 0x1e, 0x8b, 0x3d, 0x8b, 0xd9, 0x0d, 0x90, 0x2a, 0x07, 0x7b, 0x09, 0x06, 0x03, + 0x2a, 0x91, 0x09, 0x20, 0x58, 0x09, 0x20, 0x91, 0x09, 0x20, 0x07, 0x0d, 0xc0, 0x07, 0x03, 0x23, + 0x07, 0x0d, 0x0f, 0x09, 0x18, 0x8b, 0x3d, 0x8b, 0x10, 0x08, 0x1a, 0x92, 0x94, 0x5e, 0x23, 0xd3, + 0x04, 0x05, 0x23, 0x6d, 0x3d, 0x91, 0x20, 0xf3, 0x09, 0x20, 0x91, 0x18, 0x91, 0x18, 0x91, 0x2a, + 0x87, 0x29, 0x09, 0x10, 0x08, 0x4a, 0xc0, 0xdd, 0x0b, 0x1f, 0x43, 0x94, 0x0d, 0x72, 0x2a, 0x4d, + 0x01, 0x2d, 0xd0, 0x78, 0x24, 0x5f, 0x2a, 0x4d, 0x01, 0x03, 0x45, 0x1f, 0x43, 0x94, 0x0d, 0x8f, + 0x1f, 0xc0, 0xdd, 0x0a, 0x10, 0x08, 0x1a, 0x2d, 0x24, 0x87, 0x0c, 0x1f, 0x8b, 0x07, 0x24, 0x40, + 0x4b, 0x45, 0x95, 0x2a, 0x03, 0x53, 0x09, 0x75, 0x0c, 0x00, 0x4b, 0x9b, 0x23, 0x03, 0x29, 0x0c, + 0x20, 0x28, 0xd7, 0xd7, 0x10, 0x04, 0x1e, 0xaf, 0xaf, 0x24, 0xa0, 0xaf, 0xaf, 0x10, 0x06, 0x25, + 0x07, 0x75, 0x0d, 0x20, 0x42, 0x3d, 0x93, 0x02, 0xc4, 0x72, 0x0e, 0xd2, 0x85, 0x6a, 0x7b, 0x2a, + 0x49, 0x03, 0x8b, 0xd2, 0x04, 0x73, 0x0c, 0xd0, 0x92, 0x09, 0x0b, 0x00, 0xc2, 0x23, 0x74, 0x06, + 0x10, 0x06, 0x25, 0x60, 0x4c, 0x10, 0x0c, 0xa2, 0x1f, 0xde, 0x5e, 0x08, 0x75, 0x5e, 0x5c, 0x7a, + 0x05, 0x50, 0x24, 0x63, 0x03, 0x24, 0x3c, 0x04, 0x08, 0x06, 0x1d, 0x87, 0x05, 0x1d, 0x7a, 0x05, + 0x50, 0x24, 0x63, 0x03, 0x2e, 0x5e, 0x08, 0x75, 0x5e, 0xe6, 0x10, 0x06, 0x1a, 0xfa, 0x7c, 0x3d, + 0x83, 0x00, 0x4b, 0x0a, 0x75, 0x0c, 0x2a, 0x87, 0x0b, 0x47, 0x0c, 0x23, 0x43, 0x2c, 0x0c, 0x9e, + 0x03, 0x69, 0x0d, 0x10, 0x07, 0x99, 0xc4, 0x07, 0x63, 0x03, 0x2a, 0x03, 0x40, 0x76, 0x4b, 0x0e, + 0x03, 0x07, 0x26, 0x03, 0x40, 0x76, 0xc4, 0x07, 0x63, 0x03, 0x10, 0x0a, 0x9e, 0x99, 0x2b, 0x3d, + 0x41, 0x3d, 0x41, 0x10, 0x04, 0xdc, 0x0b, 0x10, 0x0c, 0xa2, 0x1f, 0xde, 0x0b, 0x43, 0x0f, 0x2c, + 0x01, 0x5c, 0x7a, 0x00, 0x50, 0x2d, 0x63, 0x03, 0x24, 0x3c, 0x04, 0x00, 0x0c, 0x0f, 0x5b, 0x87, + 0x05, 0x1d, 0x7a, 0x00, 0x50, 0x79, 0x06, 0x03, 0x2e, 0x0b, 0x43, 0x52, 0x7c, 0xe6, 0x10, 0x06, + 0x25, 0xe8, 0x0b, 0x10, 0x06, 0x25, 0x2d, 0x7c, 0x20, 0x8d, 0x03, 0x26, 0xd4, 0x7f, 0x23, 0x87, + 0x0d, 0x7c, 0x10, 0x0a, 0x37, 0x1e, 0xaf, 0x23, 0x2b, 0x23, 0xcf, 0x30, 0x9e, 0x2b, 0x10, 0x05, + 0x1a, 0xe9, 0x4f, 0x24, 0xc4, 0x0d, 0x00, 0xd9, 0x04, 0x24, 0x4b, 0x78, 0xd9, 0x69, 0x01, 0x10, + 0x05, 0x1a, 0x04, 0x53, 0x09, 0x24, 0xc4, 0x0e, 0xd9, 0x90, 0xd8, 0x8c, 0x23, 0xe9, 0x9a, 0x10, + 0x06, 0x24, 0x21, 0x9c, 0x18, 0x85, 0x10, 0x08, 0x46, 0x71, 0x27, 0x2a, 0x71, 0x27, 0x2a, 0x71, + 0x27, 0x2a, 0x71, 0x27, 0x2a, 0x80, 0x24, 0x9c, 0x2e, 0xec, 0x62, 0x03, 0x9b, 0x2e, 0xec, 0x08, + 0x0e, 0x28, 0x1b, 0x1f, 0x71, 0x20, 0x71, 0x20, 0x71, 0x10, 0x08, 0xb2, 0x53, 0x05, 0x00, 0x44, + 0x53, 0xdf, 0x1f, 0xf2, 0xdf, 0x2a, 0x0d, 0x53, 0xdf, 0x2a, 0x2d, 0x0f, 0xd5, 0x07, 0xd5, 0x07, + 0xd5, 0x10, 0x04, 0x9e, 0x99, 0x7e, 0x3d, 0x7e, 0x10, 0x06, 0x37, 0x1a, 0x8a, 0x26, 0x87, 0x0f, + 0x45, 0x10, 0x05, 0x1a, 0x03, 0x0f, 0x0e, 0x31, 0x0d, 0x31, 0x0d, 0x31, 0x0d, 0xd8, 0x53, 0x80, + 0x10, 0x06, 0x25, 0x08, 0x0e, 0x7b, 0x2a, 0x87, 0x0c, 0x98, 0x0d, 0x23, 0x85, 0x24, 0x45, 0x1f, + 0x87, 0x0c, 0x98, 0x0d, 0x20, 0x08, 0x0e, 0x7b, 0x9e, 0x03, 0x69, 0x0d, 0x10, 0x07, 0x23, 0x99, + 0x08, 0x98, 0x19, 0x05, 0x40, 0x60, 0x20, 0x81, 0x00, 0x91, 0x66, 0x40, 0x60, 0x23, 0x08, 0x98, + 0x05, 0x10, 0x0c, 0xbe, 0x24, 0x72, 0xb5, 0x10, 0x0c, 0xbe, 0x09, 0x0f, 0x97, 0x2e, 0x83, 0x1d, + 0x6f, 0x1c, 0x50, 0x24, 0x8b, 0x02, 0x1c, 0x77, 0x24, 0x8e, 0x02, 0x1c, 0x61, 0x1d, 0x0a, 0x53, + 0x0d, 0x10, 0x0c, 0x1a, 0x04, 0x53, 0x09, 0x1d, 0x7f, 0x4e, 0x0e, 0x1d, 0x50, 0x1c, 0x07, 0x90, + 0x00, 0x77, 0x4b, 0x8c, 0x61, 0x1f, 0xe9, 0x9a, 0x00, 0x5f, 0x24, 0x72, 0xb5, 0x10, 0x06, 0x1a, + 0xe2, 0x71, 0x23, 0x34, 0x01, 0x31, 0xe1, 0x71, 0x23, 0x7d, 0x20, 0x63, 0x50, 0x20, 0xe0, 0xd8, + 0x0f, 0x05, 0x47, 0xd2, 0x65, 0x9a, 0x01, 0x10, 0x08, 0x1c, 0xe1, 0x45, 0x1c, 0x66, 0x09, 0x3d, + 0xc3, 0xb3, 0x10, 0x08, 0x00, 0x32, 0x40, 0x18, 0x85, 0x3d, 0xc3, 0xb3, 0x10, 0x08, 0x32, 0x84, + 0x01, 0x1d, 0x66, 0x08, 0x04, 0x09, 0x18, 0xc3, 0xb3, 0x10, 0x08, 0x37, 0x06, 0x1b, 0x0c, 0x20, + 0x8d, 0x9d, 0x18, 0xc3, 0xb3, 0x10, 0x08, 0x37, 0x9c, 0x7d, 0x00, 0x36, 0xc3, 0xb3, 0x10, 0x08, + 0x1d, 0x43, 0x7c, 0x20, 0x2f, 0x51, 0x20, 0x2f, 0xc0, 0x18, 0x0e, 0x80, 0xc4, 0x70, 0x19, 0xea, + 0x07, 0x26, 0x0d, 0x05, 0x02, 0x80, 0x2a, 0x3e, 0x72, 0x9f, 0x00, 0x38, 0x10, 0x0c, 0x1e, 0x08, + 0x0f, 0x29, 0x0c, 0x1c, 0x0d, 0x05, 0x60, 0x23, 0x38, 0x00, 0x60, 0x23, 0x7e, 0x00, 0x60, 0x00, + 0x4e, 0x42, 0x00, 0x0b, 0xf3, 0x0a, 0x1d, 0x08, 0x0c, 0x24, 0x60, 0x2a, 0x0e, 0xf3, 0x07, 0x66, + 0x55, 0x60, 0x1f, 0x60, 0x1d, 0xe8, 0x74, 0x10, 0x08, 0x25, 0xb6, 0xc4, 0x09, 0xd9, 0x0f, 0x0a, + 0x10, 0x08, 0x37, 0x41, 0x31, 0x08, 0x07, 0x1d, 0x44, 0x69, 0xae, 0x10, 0x08, 0x1f, 0xe1, 0x45, + 0x20, 0x8b, 0x19, 0x0c, 0x69, 0xae, 0x10, 0x08, 0x37, 0x43, 0x0b, 0x18, 0x08, 0x82, 0xd2, 0x0c, + 0x69, 0xae, 0x10, 0x08, 0x1c, 0xd7, 0xea, 0x9e, 0x0c, 0x69, 0xae, 0x10, 0x04, 0x23, 0x66, 0x0b, + 0x31, 0x0a, 0x05, 0x3d, 0x35, 0xa8, 0x10, 0x04, 0x1d, 0x31, 0x41, 0x3d, 0x8d, 0x3d, 0x35, 0xa8, + 0x10, 0x04, 0x1c, 0xc4, 0x73, 0x18, 0x3b, 0x78, 0x18, 0x35, 0xa8, 0x10, 0x04, 0x24, 0x31, 0x1b, + 0x5a, 0x9e, 0x35, 0xa8, 0x10, 0x09, 0xbc, 0x74, 0x72, 0x2a, 0x28, 0x00, 0x98, 0xd6, 0x1f, 0x28, + 0x1d, 0x34, 0x04, 0x1c, 0x28, 0x2e, 0x8f, 0x2e, 0x0e, 0x69, 0x06, 0x24, 0x0a, 0x09, 0x1c, 0x28, + 0x2e, 0x8f, 0x1c, 0x28, 0x1d, 0x34, 0x04, 0x1c, 0x28, 0x00, 0x98, 0xd6, 0x44, 0x74, 0x72, 0x10, + 0x09, 0x2a, 0xc4, 0x4f, 0x07, 0x05, 0x2a, 0x63, 0x95, 0x45, 0x00, 0x44, 0xda, 0xbf, 0x10, 0x09, + 0x32, 0x4d, 0x31, 0x5f, 0x1d, 0x66, 0xab, 0xc7, 0xb8, 0x09, 0x00, 0x32, 0x41, 0x3d, 0x50, 0x1d, + 0x66, 0xab, 0xc7, 0xb8, 0x09, 0x23, 0xc4, 0x73, 0x18, 0xd4, 0x3b, 0x24, 0x66, 0xab, 0xc7, 0xb8, + 0x09, 0x3d, 0x44, 0x3a, 0x09, 0x23, 0x8e, 0x06, 0x1b, 0x24, 0x66, 0xab, 0xc7, 0xb8, 0x09, 0x32, + 0x42, 0x60, 0x9e, 0x05, 0xab, 0xc7, 0xb8, 0x0a, 0x4a, 0x6a, 0x5e, 0x1d, 0x3b, 0x1f, 0xd3, 0x00, + 0x93, 0x23, 0x0a, 0x93, 0x0a, 0x18, 0x0e, 0x55, 0x2a, 0x0a, 0x93, 0x0a, 0x23, 0xd3, 0x00, 0x93, + 0x4e, 0x5e, 0x1d, 0x3b, 0x10, 0x09, 0xa0, 0xe1, 0x66, 0x0c, 0x0f, 0xa1, 0x95, 0x2e, 0x63, 0x5b, + 0x6b, 0x0b, 0x55, 0x92, 0x97, 0x61, 0x5b, 0x1d, 0x87, 0x0f, 0x01, 0x57, 0x40, 0x33, 0x38, 0x24, + 0x3a, 0x00, 0x07, 0x5c, 0x03, 0x0f, 0x01, 0x79, 0x00, 0x76, 0x1c, 0x0d, 0x8f, 0x92, 0x97, 0x1d, + 0x08, 0x0f, 0x05, 0x6b, 0x84, 0x1d, 0xe2, 0x0b, 0x05, 0x59, 0x09, 0x01, 0x68, 0x10, 0x09, 0x32, + 0x0b, 0x05, 0x3d, 0x61, 0x01, 0x23, 0xc6, 0x10, 0x09, 0x32, 0x8b, 0x07, 0x00, 0xc4, 0x26, 0xc6, + 0x10, 0x09, 0x2a, 0xd9, 0x1b, 0xc4, 0xd4, 0x0b, 0x23, 0xc6, 0x10, 0x09, 0x37, 0x7d, 0xe0, 0x1d, + 0x32, 0xc6, 0x10, 0x07, 0x32, 0x6f, 0x18, 0x50, 0x23, 0x0b, 0x09, 0xbd, 0xb7, 0x34, 0x07, 0xc1, + 0x1b, 0x10, 0x07, 0x25, 0x6d, 0x1c, 0x44, 0xc5, 0xad, 0x35, 0x10, 0x08, 0x32, 0xe1, 0x94, 0x91, + 0x2a, 0x0a, 0x09, 0x98, 0x0e, 0xd0, 0x7c, 0x87, 0x58, 0x1f, 0x0e, 0x03, 0x05, 0x50, 0x23, 0x0e, + 0xc0, 0x07, 0x20, 0x0e, 0x7a, 0x58, 0x2a, 0x58, 0x07, 0x97, 0x1c, 0x58, 0x87, 0x0e, 0x2a, 0x58, + 0x00, 0x7d, 0x2a, 0x5b, 0x53, 0x7b, 0x10, 0x07, 0x36, 0x4e, 0x50, 0x3d, 0x03, 0x5e, 0x36, 0xa4, + 0x0d, 0xac, 0x10, 0x07, 0x9e, 0xc4, 0x50, 0x24, 0x4b, 0xd4, 0x36, 0xa4, 0x0d, 0xac, 0x10, 0x07, + 0x21, 0x3c, 0x1b, 0xc4, 0x5e, 0x5e, 0x9e, 0xa4, 0x0d, 0xac, 0x10, 0x07, 0x1a, 0x6a, 0x2c, 0x06, + 0x05, 0x2a, 0x63, 0x85, 0x45, 0x23, 0xa4, 0x0d, 0xac, 0x10, 0x07, 0x1a, 0x87, 0x0e, 0x00, 0x42, + 0x9e, 0xa4, 0x0d, 0xac, 0x10, 0x07, 0x1d, 0x07, 0x2c, 0x20, 0x43, 0x43, 0x20, 0x43, 0x43, 0xd9, + 0x2c, 0x36, 0xa4, 0x0d, 0xac, 0x10, 0x0c, 0x46, 0x0c, 0x53, 0x0d, 0x82, 0x0d, 0x9a, 0x01, 0x24, + 0xdd, 0xe9, 0x7c, 0x01, 0xea, 0x2a, 0x91, 0xf8, 0x1d, 0x65, 0x53, 0x29, 0x80, 0x6a, 0x58, 0x00, + 0x5b, 0x1f, 0x49, 0x52, 0x08, 0x0f, 0x40, 0x01, 0x51, 0x1d, 0x08, 0x0e, 0x9a, 0xc0, 0x0d, 0x0e, + 0x6e, 0x10, 0x07, 0xb9, 0x23, 0x8e, 0x0e, 0x7b, 0xd8, 0x0a, 0x18, 0xe9, 0x0b, 0x10, 0x07, 0x00, + 0x21, 0x79, 0x3d, 0x8d, 0x3d, 0xe1, 0xb1, 0x10, 0x07, 0x1d, 0x21, 0x0b, 0x19, 0x8b, 0x05, 0x3d, + 0xe1, 0xb1, 0x10, 0x07, 0x36, 0x4b, 0x73, 0x18, 0x3b, 0x08, 0x05, 0x18, 0xe1, 0xb1, 0x10, 0x07, + 0x00, 0x25, 0x1b, 0x5a, 0x23, 0xe1, 0xb1, 0x10, 0x03, 0x37, 0xd8, 0x6e, 0xe1, 0xd4, 0xa0, 0xcb, + 0xcb, 0x7c, 0x10, 0x03, 0x32, 0xe1, 0x40, 0x18, 0x5f, 0xa0, 0xcb, 0xcb, 0x7c, 0x10, 0x03, 0x9e, + 0x4e, 0x3f, 0x18, 0xd4, 0x3b, 0x00, 0x36, 0xcb, 0xcb, 0x7c, 0x10, 0x03, 0x3d, 0x21, 0xe0, 0x28, + 0x00, 0x36, 0xcb, 0xcb, 0x7c, 0x10, 0x07, 0x00, 0x25, 0x7e, 0x04, 0x09, 0x24, 0x4e, 0x09, 0x0f, + 0x0a, 0xd0, 0x3c, 0x03, 0x04, 0x48, 0x23, 0x41, 0x75, 0x0d, 0x4b, 0x2c, 0x01, 0x01, 0x88, 0x1c, + 0x87, 0x0d, 0x1d, 0xea, 0x1c, 0x87, 0x0d, 0x1d, 0x67, 0x68, 0x3f, 0x01, 0x03, 0x1b, 0x2a, 0x03, + 0x94, 0x88, 0x10, 0x08, 0x25, 0x8b, 0x50, 0x26, 0x0b, 0x2d, 0xd2, 0xa6, 0x10, 0x07, 0x32, 0xe1, + 0x6e, 0xe1, 0xd4, 0x36, 0xc9, 0xa3, 0x91, 0x10, 0x07, 0xa0, 0x68, 0x40, 0x18, 0x5f, 0x36, 0xc9, + 0xa3, 0x91, 0x10, 0x07, 0x21, 0x6a, 0x3f, 0x18, 0xd4, 0x3b, 0x9e, 0xc9, 0xa3, 0x91, 0x10, 0x07, + 0x00, 0xbc, 0x5f, 0x08, 0x23, 0x03, 0x08, 0x38, 0x03, 0x23, 0xc9, 0xa3, 0x91, 0x10, 0x07, 0x25, + 0xe0, 0x28, 0x9e, 0xc9, 0xa3, 0x91, 0x10, 0x0a, 0x3d, 0x99, 0xdb, 0x3d, 0x2b, 0x9e, 0xdb, 0x10, + 0x07, 0x2a, 0x1e, 0xc4, 0x00, 0x4e, 0x94, 0x0d, 0x67, 0x2a, 0xa1, 0x39, 0x42, 0x1f, 0x49, 0x57, + 0x93, 0x08, 0x66, 0x0c, 0x00, 0x8d, 0x07, 0x0a, 0x1f, 0x03, 0x9b, 0x05, 0x00, 0x9c, 0x2a, 0xd6, + 0x98, 0x58, 0x1c, 0x51, 0x94, 0x91, 0x1f, 0x52, 0x10, 0x08, 0x32, 0xe1, 0x3a, 0xe1, 0xd4, 0x36, + 0xce, 0xa7, 0xcc, 0x54, 0x10, 0x08, 0xa0, 0x68, 0x6e, 0x18, 0x5f, 0x36, 0xce, 0xa7, 0xcc, 0x54, + 0x10, 0x08, 0x21, 0x6a, 0xa1, 0x18, 0xd4, 0x78, 0x9e, 0xce, 0xa7, 0xcc, 0x54, 0x10, 0x08, 0x00, + 0x25, 0x42, 0x60, 0x9e, 0xce, 0xa7, 0xcc, 0x54, 0x10, 0x07, 0x9e, 0xc4, 0x50, 0x24, 0x4b, 0x8d, + 0x3d, 0xd9, 0x0a, 0xb0, 0xaa, 0xe4, 0x10, 0x08, 0x21, 0xa9, 0x18, 0x2c, 0x0d, 0xca, 0x23, 0xa9, + 0x10, 0x07, 0x25, 0x89, 0x1b, 0x18, 0xd9, 0x0a, 0xb0, 0xaa, 0xe4, 0x10, +}; + +static const uint16_t mf_rlefont_DejaVuSans12_glyph_offsets_1[96] PROGMEM = { + 0x0000, 0x0003, 0x0012, 0x0039, 0x0054, 0x0075, 0x0095, 0x009e, + 0x00c1, 0x00c6, 0x00eb, 0x0104, 0x011b, 0x0124, 0x0128, 0x014f, + 0x0154, 0x0163, 0x016f, 0x0180, 0x0190, 0x0197, 0x01ba, 0x01d2, + 0x01d9, 0x01e2, 0x01f1, 0x020d, 0x0222, 0x0228, 0x0242, 0x025e, + 0x0278, 0x0283, 0x028d, 0x029a, 0x02a6, 0x02af, 0x02cd, 0x02f8, + 0x0301, 0x030c, 0x0317, 0x0323, 0x032c, 0x0337, 0x0341, 0x034c, + 0x0355, 0x0380, 0x038f, 0x0399, 0x03a4, 0x03b0, 0x03be, 0x03c7, + 0x03e5, 0x041e, 0x0428, 0x0431, 0x043b, 0x0443, 0x0452, 0x045b, + 0x0487, 0x0493, 0x049f, 0x04ab, 0x04ba, 0x04c5, 0x04d6, 0x0502, + 0x050e, 0x0518, 0x0523, 0x052f, 0x0538, 0x0543, 0x054e, 0x055b, + 0x0566, 0x0593, 0x059d, 0x05a8, 0x05b3, 0x05bf, 0x05ce, 0x05d7, + 0x05e0, 0x0609, 0x0615, 0x0621, 0x062e, 0x0639, 0x0647, 0x0651, +}; + +static const uint8_t mf_rlefont_DejaVuSans12_glyph_data_2[26] PROGMEM = { + 0x04, 0xdc, 0x0b, 0x10, 0x08, 0xdc, 0xf3, 0x01, 0x10, 0x06, 0xdc, 0x53, 0x06, 0x10, 0x0c, 0xdc, + 0x69, 0x29, 0x06, 0x10, 0x0c, 0x8a, 0xfa, 0x29, 0x29, 0x10, +}; + +static const uint16_t mf_rlefont_DejaVuSans12_glyph_offsets_2[6] PROGMEM = { + 0x0000, 0x0000, 0x0004, 0x0009, 0x000e, 0x0014, +}; + +static const struct mf_rlefont_char_range_s mf_rlefont_DejaVuSans12_char_ranges[] = { + {32, 95, mf_rlefont_DejaVuSans12_glyph_offsets_0, mf_rlefont_DejaVuSans12_glyph_data_0}, + {160, 96, mf_rlefont_DejaVuSans12_glyph_offsets_1, mf_rlefont_DejaVuSans12_glyph_data_1}, + {8208, 6, mf_rlefont_DejaVuSans12_glyph_offsets_2, mf_rlefont_DejaVuSans12_glyph_data_2}, +}; + +const struct mf_rlefont_s mf_rlefont_DejaVuSans12 = { + { + "DejaVu Sans Book 12", + "DejaVuSans12", + 13, /* width */ + 15, /* height */ + 3, /* min x advance */ + 12, /* max x advance */ + 1, /* baseline x */ + 12, /* baseline y */ + 14, /* line height */ + 0, /* flags */ + 63, /* fallback character */ + &mf_rlefont_character_width, + &mf_rlefont_render_character, + }, + 4, /* version */ + mf_rlefont_DejaVuSans12_dictionary_data, + mf_rlefont_DejaVuSans12_dictionary_offsets, + 138, /* rle dict count */ + 211, /* total dict count */ + 3, /* char range count */ + mf_rlefont_DejaVuSans12_char_ranges, +}; + +#ifdef MF_INCLUDED_FONTS +/* List entry for searching fonts by name. */ +static const struct mf_font_list_s mf_rlefont_DejaVuSans12_listentry = { + MF_INCLUDED_FONTS, + (struct mf_font_s*)&mf_rlefont_DejaVuSans12 +}; +#undef MF_INCLUDED_FONTS +#define MF_INCLUDED_FONTS (&mf_rlefont_DejaVuSans12_listentry) +#endif + + +/* End of automatically generated font definition for DejaVuSans12. */ diff --git a/tests/pkg/mcufont/fonts/DejaVuSans12bw.c b/tests/pkg/mcufont/fonts/DejaVuSans12bw.c new file mode 100644 index 0000000000..ba367a5626 --- /dev/null +++ b/tests/pkg/mcufont/fonts/DejaVuSans12bw.c @@ -0,0 +1,250 @@ +/* Start of automatically generated font definition for DejaVuSans12bw. */ + +#ifndef MF_RLEFONT_INTERNALS +#define MF_RLEFONT_INTERNALS +#endif +#include "mf_rlefont.h" + +#ifndef MF_RLEFONT_VERSION_4_SUPPORTED +#error The font file is not compatible with this version of mcufont. +#endif + +static const uint8_t mf_rlefont_DejaVuSans12bw_dictionary_data[416] PROGMEM = { + 0x0b, 0x81, 0x05, 0x80, 0x02, 0x0c, 0x80, 0x0c, 0x80, 0x0c, 0x80, 0x0c, 0x80, 0x06, 0x80, 0x04, + 0x2b, 0x0c, 0x80, 0x0b, 0x04, 0x80, 0x02, 0x05, 0x80, 0x0c, 0x80, 0x0c, 0x80, 0x02, 0x09, 0x80, + 0x0a, 0x16, 0x1e, 0x81, 0x09, 0x01, 0x83, 0x02, 0x0a, 0x80, 0x01, 0x80, 0x01, 0x80, 0x02, 0x80, + 0x0c, 0x80, 0x81, 0x01, 0x10, 0x40, 0x07, 0x80, 0x04, 0x80, 0x07, 0x80, 0x29, 0x0b, 0x80, 0x03, + 0x83, 0x02, 0x15, 0x40, 0x04, 0x02, 0x82, 0x80, 0x02, 0x81, 0x07, 0x80, 0x01, 0x80, 0x09, 0x02, + 0x80, 0x85, 0x80, 0x04, 0x80, 0x03, 0x80, 0x02, 0x08, 0x0d, 0x03, 0x81, 0x03, 0x84, 0x01, 0x1d, + 0x80, 0x14, 0x81, 0x01, 0x80, 0x02, 0x40, 0x1d, 0x80, 0x02, 0x80, 0x06, 0x80, 0x0a, 0x03, 0x80, + 0x06, 0x80, 0x05, 0x80, 0x03, 0x01, 0x80, 0x09, 0x82, 0x0a, 0x08, 0x83, 0x02, 0x0c, 0x04, 0x80, + 0x07, 0x82, 0x09, 0x80, 0x01, 0x82, 0x06, 0x80, 0x04, 0x80, 0x80, 0x02, 0x01, 0x81, 0x02, 0x81, + 0x01, 0x01, 0x80, 0x02, 0x03, 0x80, 0x26, 0x1b, 0xdd, 0x2c, 0x2c, 0x2c, 0x2d, 0x9d, 0x2d, 0x1b, + 0x21, 0x37, 0x2c, 0x2c, 0x2c, 0x2c, 0xae, 0x1b, 0xae, 0x1b, 0xae, 0x2d, 0xcc, 0x2d, 0x3a, 0x45, + 0x3a, 0x45, 0x51, 0xb5, 0x2d, 0x30, 0x23, 0x28, 0x1a, 0x1e, 0x52, 0x37, 0x3b, 0x43, 0x3a, 0x44, + 0x35, 0x26, 0x28, 0x1e, 0xd3, 0x2c, 0x3b, 0x49, 0xc2, 0x2c, 0x2d, 0x9c, 0x2d, 0x41, 0x45, 0xd4, + 0x3a, 0xc4, 0xa0, 0xf3, 0x3b, 0xb7, 0x2d, 0x49, 0x38, 0x2d, 0x48, 0xa7, 0x47, 0x2d, 0x30, 0x36, + 0x28, 0xb5, 0x1b, 0x21, 0x26, 0xf3, 0x3b, 0xb7, 0x2c, 0x2c, 0x2d, 0x49, 0xb7, 0x2d, 0x4a, 0xc8, + 0x19, 0x45, 0xcc, 0x94, 0x19, 0x48, 0x3f, 0x30, 0xd4, 0xa6, 0x1b, 0xa8, 0x1b, 0xac, 0x1b, 0xac, + 0x4c, 0x4d, 0x94, 0x9c, 0xfe, 0xc7, 0x4e, 0x18, 0x26, 0x3a, 0xb4, 0x1f, 0xb4, 0x26, 0x35, 0x26, + 0x2d, 0x21, 0x26, 0xe3, 0x2d, 0x21, 0x26, 0x3e, 0x21, 0x26, 0x1a, 0x1c, 0x49, 0x1f, 0x3b, 0x43, + 0x3a, 0x3a, 0x2d, 0x50, 0xc4, 0xac, 0x29, 0xc5, 0x94, 0xcb, 0x2a, 0x2e, 0x28, 0xf4, 0x23, 0x28, + 0x1d, 0x4a, 0x37, 0x2d, 0x1a, 0x3b, 0x19, 0x46, 0x00, 0x28, 0xc4, 0x9c, 0x2f, 0x36, 0x28, 0x00, + 0x3e, 0xc9, 0xc4, 0xb8, 0xfc, 0xc5, 0x19, 0xcc, 0x2d, 0xfc, 0x39, 0x2c, 0x2d, 0x9c, 0x2d, 0x41, + 0x50, 0x2d, 0x3a, 0x19, 0x45, 0xcc, 0x94, 0x19, 0x4e, 0x36, 0x3f, 0x3b, 0x19, 0x52, 0xdc, 0xb4, + 0x4c, 0x2d, 0x3a, 0xc4, 0xa6, 0x2d, 0x41, 0x39, 0x2c, 0x2c, 0x2c, 0x2c, 0xfe, 0xc8, 0x3b, 0xca, + 0x44, 0x29, 0x52, 0x3a, 0x23, 0x22, 0x50, 0x37, 0x3a, 0xc6, 0xa6, 0x3a, 0x50, 0x19, 0xc4, 0xa8, + 0x36, 0xca, 0xf6, 0x2d, 0x2d, 0xdc, 0x1b, 0xac, 0x1b, 0xbc, 0x39, 0x1b, 0x4c, 0x2c, 0x2c, 0x2d, + 0x30, 0x2e, 0xa2, 0x2c, 0x29, 0x2f, 0x0f, 0x3b, 0x96, 0x2d, 0x49, 0x38, 0x2c, 0x1b, 0x1b, 0x2a, +}; + +static const uint16_t mf_rlefont_DejaVuSans12bw_dictionary_offsets[125] PROGMEM = { + 0x0000, 0x0002, 0x0005, 0x000d, 0x000f, 0x0010, 0x0011, 0x0014, + 0x0017, 0x0019, 0x001e, 0x0021, 0x0022, 0x0025, 0x0028, 0x002a, + 0x002f, 0x0032, 0x0034, 0x0035, 0x0036, 0x003a, 0x003c, 0x003d, + 0x0040, 0x0042, 0x0043, 0x0045, 0x0047, 0x004b, 0x004e, 0x004f, + 0x0051, 0x0052, 0x0055, 0x0058, 0x0059, 0x005a, 0x005d, 0x005f, + 0x0061, 0x0062, 0x0066, 0x0068, 0x006c, 0x006e, 0x0075, 0x007a, + 0x007d, 0x007e, 0x0081, 0x0085, 0x0086, 0x008a, 0x008c, 0x008e, + 0x0091, 0x0094, 0x0096, 0x0097, 0x009f, 0x00a1, 0x00a6, 0x00af, + 0x00b6, 0x00ba, 0x00bc, 0x00c4, 0x00ce, 0x00d3, 0x00dd, 0x00df, + 0x00e1, 0x00e2, 0x00e5, 0x00ee, 0x00f5, 0x00f8, 0x0104, 0x0106, + 0x0109, 0x010c, 0x010e, 0x0110, 0x0118, 0x011b, 0x011e, 0x0121, + 0x0123, 0x0126, 0x012b, 0x012d, 0x0130, 0x0138, 0x013a, 0x013c, + 0x013f, 0x0141, 0x0144, 0x0147, 0x0149, 0x014c, 0x0150, 0x0152, + 0x0154, 0x0158, 0x015a, 0x015d, 0x0167, 0x016c, 0x016e, 0x0170, + 0x0172, 0x0174, 0x0177, 0x017c, 0x017e, 0x0180, 0x0182, 0x0184, + 0x018c, 0x0191, 0x0194, 0x0196, 0x01a0, +}; + +static const uint8_t mf_rlefont_DejaVuSans12bw_glyph_data_0[823] PROGMEM = { + 0x04, 0x00, 0x10, 0x05, 0x00, 0x72, 0x1a, 0x73, 0x10, 0x05, 0x2e, 0x6a, 0x70, 0x10, 0x0a, 0x48, + 0x2e, 0x94, 0x7e, 0x8e, 0x38, 0x2d, 0x7a, 0xc5, 0xbc, 0x30, 0xc4, 0x27, 0x8c, 0x10, 0x08, 0x48, + 0x40, 0x1e, 0x4a, 0x35, 0x3b, 0x6a, 0x29, 0x18, 0x44, 0x35, 0xc4, 0xac, 0x46, 0x75, 0x10, 0x0b, + 0x52, 0xdc, 0x94, 0x94, 0x96, 0x19, 0x43, 0xad, 0x76, 0xdf, 0x3b, 0xa9, 0x1b, 0xa8, 0x1b, 0xa8, + 0x20, 0xb4, 0x10, 0x0a, 0x1d, 0xe7, 0x6e, 0xfc, 0x76, 0x26, 0xa6, 0x19, 0x96, 0x94, 0x3d, 0xdc, + 0x7b, 0xbb, 0x10, 0x03, 0x72, 0x1e, 0x10, 0x05, 0x40, 0x86, 0x5f, 0x77, 0x21, 0x77, 0x0f, 0x10, + 0x05, 0x00, 0x2a, 0x18, 0x21, 0x77, 0x21, 0x5f, 0x18, 0x10, 0x06, 0x00, 0x2e, 0x70, 0x46, 0x4a, + 0x6a, 0x10, 0x0a, 0x2b, 0x54, 0x2d, 0xf3, 0xc7, 0x54, 0x10, 0x04, 0x3b, 0x40, 0x42, 0x77, 0x10, + 0x04, 0x48, 0x42, 0xf2, 0x10, 0x04, 0x1d, 0x2b, 0x73, 0x10, 0x04, 0xfc, 0x72, 0x77, 0xc4, 0x54, + 0x5f, 0x10, 0x08, 0x2e, 0x25, 0x8c, 0x3b, 0x84, 0x3b, 0xcd, 0x47, 0x10, 0x08, 0x52, 0xbc, 0x6c, + 0x36, 0xc2, 0x10, 0x08, 0x2e, 0xe2, 0x3b, 0xb5, 0x21, 0x22, 0xc6, 0x6d, 0x36, 0x38, 0x10, 0x08, + 0x91, 0x1e, 0x46, 0xfc, 0x75, 0x2c, 0x47, 0x10, 0x08, 0x1d, 0x67, 0xf6, 0x6e, 0xfd, 0x2d, 0x7b, + 0x0f, 0x30, 0x5f, 0x10, 0x08, 0x64, 0x1b, 0x1e, 0x78, 0x18, 0x21, 0xc4, 0xb5, 0x47, 0x10, 0x08, + 0x1d, 0xcb, 0x2d, 0x7f, 0x36, 0xbe, 0x3b, 0xb7, 0xc4, 0x7c, 0x3b, 0x34, 0xe2, 0x10, 0x08, 0x2e, + 0x38, 0x1e, 0x28, 0x2f, 0x22, 0x75, 0x2f, 0x10, 0x08, 0x91, 0xc4, 0x7c, 0x47, 0x4c, 0xc4, 0x7c, + 0x47, 0x10, 0x08, 0x2e, 0xa2, 0x2d, 0x43, 0x7c, 0x2d, 0x34, 0xb2, 0x36, 0x7f, 0x46, 0x10, 0x04, + 0x00, 0x52, 0x72, 0x3c, 0x73, 0x10, 0x04, 0x32, 0x21, 0xf4, 0x23, 0x77, 0x10, 0x0a, 0x31, 0x2e, + 0x18, 0x47, 0xb4, 0x44, 0x4b, 0x48, 0xa2, 0x18, 0x10, 0x0a, 0x42, 0xf3, 0x30, 0xc4, 0x18, 0x38, + 0x10, 0x0a, 0x52, 0x3f, 0xc5, 0x47, 0x18, 0x44, 0xff, 0xc5, 0xc0, 0x76, 0x10, 0x06, 0x2e, 0x4a, + 0xfc, 0xc5, 0x6d, 0x5f, 0x73, 0x10, 0x0d, 0xf4, 0x64, 0x19, 0x9c, 0x7f, 0x50, 0xa2, 0x85, 0x95, + 0x85, 0x95, 0x85, 0x95, 0x95, 0xc0, 0xc5, 0xc6, 0x26, 0x20, 0x5e, 0x10, 0x08, 0x2e, 0x4f, 0x8d, + 0x6e, 0x93, 0x10, 0x08, 0x64, 0x90, 0x90, 0x10, 0x08, 0x74, 0x10, 0x09, 0x64, 0xfc, 0x94, 0x7f, + 0x80, 0x45, 0x51, 0x49, 0xe3, 0x10, 0x08, 0x2e, 0x38, 0x6b, 0x10, 0x07, 0x64, 0x61, 0x30, 0x61, + 0x10, 0x09, 0x00, 0x91, 0x54, 0xd2, 0x19, 0x45, 0xd4, 0x49, 0xe2, 0x10, 0x09, 0x88, 0x80, 0x3a, + 0xb4, 0x3e, 0x19, 0x80, 0x51, 0x10, 0x03, 0x72, 0x6c, 0x10, 0x03, 0x72, 0x6c, 0x48, 0x87, 0x10, + 0x07, 0x00, 0x59, 0x49, 0x95, 0x8c, 0x36, 0x6a, 0x44, 0x27, 0x6e, 0xf6, 0x2c, 0x10, 0x06, 0x72, + 0x6c, 0xf3, 0x10, 0x0a, 0x88, 0x1f, 0x3d, 0xca, 0x9c, 0x3d, 0x98, 0x27, 0xac, 0x98, 0x94, 0xca, + 0xc5, 0xb6, 0xc8, 0x45, 0x51, 0x10, 0x09, 0x52, 0x9c, 0x68, 0x00, 0xac, 0x3a, 0x65, 0x10, 0x09, + 0x1d, 0x63, 0x5c, 0x10, 0x08, 0x64, 0x90, 0x61, 0x10, 0x09, 0x1d, 0x63, 0x5c, 0x2f, 0x26, 0x10, + 0x08, 0x64, 0x90, 0x1b, 0xcc, 0xc4, 0x7c, 0x2d, 0x20, 0x10, 0x08, 0x91, 0x2d, 0x1e, 0x33, 0xc5, + 0x5f, 0x2c, 0x47, 0x10, 0x07, 0x52, 0x33, 0x30, 0x2d, 0x6c, 0x10, 0x09, 0x88, 0x80, 0x57, 0x10, + 0x08, 0x59, 0x1b, 0x20, 0x1b, 0x4c, 0xc4, 0x7c, 0x6e, 0x87, 0x8d, 0x10, 0x0b, 0x59, 0xd4, 0x94, + 0x8a, 0xc8, 0xa9, 0x20, 0x56, 0x10, 0x07, 0x59, 0xb5, 0x2d, 0x6f, 0x70, 0x2f, 0x3b, 0x6a, 0x7e, + 0x7f, 0x51, 0x10, 0x07, 0x59, 0x20, 0x2d, 0x7b, 0x6f, 0x70, 0xc4, 0x61, 0x10, 0x09, 0x2e, 0x38, + 0xc5, 0x6d, 0x22, 0xc6, 0x6d, 0x5f, 0x38, 0x10, 0x05, 0x52, 0xb4, 0x77, 0x6c, 0x0f, 0x10, 0x04, + 0x59, 0x3b, 0x49, 0x54, 0x77, 0x1c, 0x5f, 0x10, 0x05, 0x52, 0x3d, 0x5f, 0x6c, 0x18, 0x10, 0x0a, + 0x1d, 0x81, 0x96, 0x2c, 0x10, 0x06, 0x23, 0x32, 0x42, 0x38, 0x10, 0x06, 0x82, 0x10, 0x08, 0x32, + 0x5b, 0x10, 0x08, 0x2a, 0x1a, 0x62, 0xf3, 0x10, 0x07, 0x32, 0xeb, 0x76, 0x50, 0x61, 0x43, 0xbc, + 0x10, 0x08, 0x23, 0x77, 0x3b, 0x3e, 0x53, 0xf3, 0x10, 0x08, 0x32, 0x5d, 0x10, 0x04, 0x3f, 0x44, + 0xe5, 0x22, 0xa2, 0x5f, 0x1a, 0x10, 0x08, 0x32, 0x3e, 0x53, 0x4b, 0x28, 0x3b, 0x34, 0x33, 0x10, + 0x08, 0x2a, 0x1a, 0xf2, 0x76, 0x55, 0x2c, 0x10, 0x03, 0x2e, 0xe5, 0x58, 0x10, 0x03, 0x00, 0x59, + 0x73, 0x6c, 0x18, 0x10, 0x07, 0x2a, 0x1a, 0xcc, 0x8c, 0x36, 0x6a, 0x44, 0x27, 0x6e, 0xfe, 0x10, + 0x03, 0x00, 0x2a, 0x77, 0x6c, 0x10, 0x0b, 0x00, 0x2b, 0xc0, 0x66, 0x8a, 0x8a, 0x8a, 0x10, 0x08, + 0xfc, 0x2b, 0xbe, 0x76, 0x55, 0x2c, 0x10, 0x08, 0x32, 0x30, 0x53, 0x4b, 0x10, 0x08, 0x52, 0x3f, + 0x62, 0x30, 0x54, 0x10, 0x08, 0x32, 0x3e, 0x53, 0xd3, 0x77, 0x10, 0x05, 0xfc, 0x2b, 0x9e, 0x76, + 0x26, 0x1a, 0x10, 0x07, 0x32, 0xcb, 0x2d, 0x7b, 0x3c, 0xcb, 0x2f, 0x19, 0x46, 0x10, 0x05, 0x72, + 0x18, 0x29, 0x5f, 0x1a, 0xff, 0x10, 0x08, 0xf4, 0x2b, 0x84, 0x7d, 0x10, 0x06, 0x2b, 0x7c, 0x3b, + 0xcd, 0x6e, 0x87, 0x8d, 0x10, 0x09, 0x2b, 0x8a, 0x51, 0x56, 0x10, 0x06, 0x2b, 0x37, 0x49, 0x85, + 0x8c, 0x8d, 0x6e, 0xfd, 0x2c, 0x10, 0x06, 0x2b, 0x7c, 0x5a, 0x87, 0x10, 0x05, 0x2b, 0xc0, 0x28, + 0x2f, 0x6d, 0x5f, 0xf3, 0x10, 0x08, 0x1d, 0xd2, 0x5f, 0x21, 0x76, 0x1a, 0x36, 0xbc, 0x10, 0x04, + 0xfc, 0x59, 0x1a, 0x6c, 0x10, 0x08, 0x52, 0xbc, 0x1a, 0xc4, 0x76, 0x5f, 0x21, 0xc4, 0xbc, 0x10, + 0x0a, 0x42, 0xfe, 0xa7, 0x20, 0xbc, 0x10, +}; + +static const uint16_t mf_rlefont_DejaVuSans12bw_glyph_offsets_0[95] PROGMEM = { + 0x0000, 0x0003, 0x0009, 0x000e, 0x001e, 0x002f, 0x0043, 0x0053, + 0x0057, 0x0060, 0x006a, 0x0072, 0x007a, 0x0080, 0x0085, 0x008a, + 0x0092, 0x009c, 0x00a3, 0x00af, 0x00b8, 0x00c4, 0x00cf, 0x00de, + 0x00e8, 0x00f2, 0x00ff, 0x0106, 0x010d, 0x0119, 0x0121, 0x012d, + 0x0136, 0x014c, 0x0153, 0x0158, 0x015b, 0x0166, 0x016b, 0x0171, + 0x017c, 0x0186, 0x018a, 0x0190, 0x019e, 0x01a3, 0x01b6, 0x01bf, + 0x01c4, 0x01c9, 0x01d0, 0x01da, 0x01e4, 0x01eb, 0x01f0, 0x01fc, + 0x0206, 0x0213, 0x021d, 0x0228, 0x022f, 0x0238, 0x023f, 0x0245, + 0x024b, 0x024e, 0x0252, 0x0258, 0x0261, 0x0269, 0x026d, 0x0276, + 0x0280, 0x0288, 0x028d, 0x0294, 0x02a0, 0x02a6, 0x02af, 0x02b7, + 0x02bd, 0x02c4, 0x02cb, 0x02d3, 0x02de, 0x02e6, 0x02ec, 0x02f5, + 0x02fb, 0x0306, 0x030c, 0x0315, 0x031f, 0x0325, 0x0330, +}; + +static const uint8_t mf_rlefont_DejaVuSans12bw_glyph_data_1[812] PROGMEM = { + 0x04, 0x00, 0x10, 0x05, 0x00, 0x72, 0x73, 0x1a, 0x10, 0x08, 0xf4, 0x59, 0x1e, 0x4a, 0x0f, 0x8e, + 0x70, 0x26, 0x70, 0x46, 0x75, 0x10, 0x08, 0x1d, 0xca, 0x6e, 0x00, 0x22, 0xa2, 0x5f, 0x1e, 0xe3, + 0x10, 0x08, 0x2b, 0xe8, 0x49, 0x3e, 0x2d, 0x7b, 0x7b, 0x7b, 0xf3, 0x2d, 0x20, 0x10, 0x08, 0x88, + 0x7f, 0x7e, 0x7e, 0xd1, 0x22, 0xf3, 0xc5, 0x54, 0x10, 0x04, 0x1d, 0x1a, 0x1c, 0x23, 0x1a, 0x10, + 0x06, 0x2e, 0xf3, 0x3b, 0xc5, 0x76, 0x26, 0x81, 0x34, 0xaa, 0x3b, 0x9a, 0x26, 0x28, 0x47, 0x10, + 0x06, 0x2e, 0xee, 0x10, 0x0c, 0xf4, 0x64, 0xc4, 0xa7, 0xc5, 0xba, 0x30, 0x98, 0x94, 0xac, 0x19, + 0x98, 0x94, 0x9c, 0x38, 0x20, 0xb5, 0x5e, 0x10, 0x06, 0x2e, 0x66, 0x26, 0x3b, 0xa2, 0x2d, 0x7b, + 0xf3, 0x40, 0xc2, 0x10, 0x07, 0x2e, 0x88, 0xc5, 0xb4, 0xca, 0x19, 0x87, 0xe7, 0x8c, 0x10, 0x0a, + 0x42, 0x38, 0xc7, 0x5f, 0x10, 0x04, 0x48, 0x42, 0xf2, 0x10, 0x0c, 0x1d, 0x78, 0xc4, 0xca, 0xca, + 0xbc, 0x38, 0x94, 0x95, 0xc5, 0xc1, 0xc8, 0x98, 0x96, 0xbc, 0xbc, 0x20, 0xb5, 0x5e, 0x10, 0x06, + 0x2e, 0xf3, 0x10, 0x06, 0x2e, 0xca, 0x6e, 0x87, 0x10, 0x0a, 0x2b, 0x2d, 0x36, 0x6f, 0x38, 0x5f, + 0x48, 0x26, 0x38, 0x10, 0x05, 0x52, 0xbc, 0x21, 0x22, 0xf2, 0x10, 0x05, 0x52, 0xbc, 0x28, 0x36, + 0x81, 0x49, 0xc0, 0x10, 0x06, 0x23, 0x6d, 0x10, 0x08, 0x52, 0x3f, 0x49, 0x84, 0x2d, 0x38, 0x54, + 0x10, 0x08, 0x2e, 0xa2, 0x2d, 0x41, 0xc4, 0xb2, 0x3b, 0x9b, 0x76, 0x44, 0x6a, 0x70, 0x26, 0x70, + 0x10, 0x04, 0x32, 0x73, 0x10, 0x06, 0x52, 0x42, 0x3f, 0x18, 0x10, 0x05, 0x52, 0x9c, 0x77, 0x3b, + 0xbc, 0x10, 0x06, 0x2e, 0x66, 0x1b, 0x7b, 0x7b, 0x6f, 0xff, 0x31, 0xc2, 0x10, 0x07, 0x48, 0x32, + 0x43, 0xdc, 0x81, 0x85, 0xc4, 0x9f, 0x8c, 0x10, 0x0c, 0x83, 0x37, 0x8f, 0x10, 0x0c, 0x83, 0x4b, + 0x2c, 0x4c, 0x2d, 0x3d, 0xcc, 0xbc, 0x10, 0x0c, 0x2e, 0x30, 0xc7, 0x19, 0xc5, 0x9c, 0x70, 0x5e, + 0x37, 0x8f, 0x10, 0x06, 0xfc, 0x72, 0x73, 0x3b, 0x3a, 0x5f, 0x6f, 0xff, 0x10, 0x08, 0x1c, 0x92, + 0x40, 0x67, 0x7a, 0x93, 0x10, 0x08, 0x20, 0x2f, 0x31, 0x67, 0x7a, 0x93, 0x10, 0x08, 0x69, 0x37, + 0x23, 0x67, 0x7a, 0x93, 0x10, 0x08, 0x51, 0x79, 0x23, 0x67, 0x7a, 0x93, 0x10, 0x08, 0x36, 0x8c, + 0x23, 0x67, 0x7a, 0x93, 0x10, 0x08, 0x69, 0x7a, 0x87, 0x8d, 0x6e, 0x93, 0x10, 0x0c, 0x2e, 0xc0, + 0x30, 0xac, 0x3b, 0x98, 0x6e, 0xf3, 0xa7, 0x7b, 0xd3, 0x2d, 0x7f, 0xfc, 0x38, 0x10, 0x08, 0x74, + 0xf6, 0x18, 0x10, 0x08, 0x49, 0x1b, 0x23, 0x38, 0x6b, 0x10, 0x08, 0x20, 0x2f, 0x40, 0x38, 0x6b, + 0x10, 0x08, 0x69, 0x37, 0x31, 0x38, 0x6b, 0x10, 0x08, 0x3c, 0xac, 0x23, 0x38, 0x6b, 0x10, 0x03, + 0xc8, 0x2f, 0x48, 0x5f, 0x6c, 0x10, 0x03, 0xcc, 0x26, 0x73, 0x6c, 0x10, 0x03, 0xf2, 0x36, 0x9f, + 0x58, 0x75, 0x10, 0x03, 0x3c, 0x27, 0x58, 0x75, 0x10, 0x09, 0x64, 0xfc, 0x94, 0x7f, 0x45, 0xc0, + 0x80, 0x37, 0x5e, 0x10, 0x09, 0x51, 0x71, 0x4f, 0x68, 0x00, 0xac, 0x3a, 0x65, 0x10, 0x09, 0x19, + 0x2f, 0x40, 0x63, 0x5c, 0x10, 0x09, 0x1b, 0x2f, 0x31, 0x63, 0x5c, 0x10, 0x09, 0x20, 0x36, 0x98, + 0x23, 0x63, 0x5c, 0x10, 0x09, 0x51, 0x71, 0x1c, 0x63, 0x5c, 0x10, 0x09, 0x2a, 0xce, 0x23, 0x63, + 0x5c, 0x10, 0x0a, 0x2b, 0x1f, 0x7f, 0x7e, 0x50, 0x22, 0xfe, 0x7e, 0x7f, 0x51, 0x10, 0x09, 0x1d, + 0xdb, 0x2d, 0x7f, 0x4f, 0x19, 0xce, 0x19, 0x43, 0x35, 0x68, 0xc4, 0x95, 0xc4, 0xbe, 0x10, 0x09, + 0x20, 0x1e, 0x3b, 0x3a, 0x80, 0x57, 0x10, 0x09, 0x20, 0x3b, 0xac, 0x2a, 0x19, 0x80, 0x57, 0x10, + 0x09, 0x2a, 0xee, 0x2a, 0x19, 0x80, 0x57, 0x10, 0x07, 0x19, 0x22, 0x3b, 0x1f, 0x7f, 0x8e, 0x6f, + 0x70, 0xc4, 0x61, 0x10, 0x08, 0x72, 0x30, 0x90, 0x54, 0x10, 0x08, 0x3f, 0xe7, 0x2d, 0x7b, 0x7b, + 0x81, 0x6a, 0x81, 0x95, 0x2c, 0x2d, 0x49, 0xe1, 0x10, 0x08, 0x00, 0x82, 0x31, 0x5b, 0x10, 0x08, + 0x00, 0x89, 0x31, 0x5b, 0x10, 0x08, 0x24, 0xd6, 0x23, 0x5b, 0x10, 0x08, 0x3f, 0x79, 0x23, 0x5b, + 0x10, 0x08, 0x2e, 0xd6, 0x23, 0x5b, 0x10, 0x08, 0x69, 0x7a, 0x87, 0x23, 0x5b, 0x10, 0x0c, 0x32, + 0xbb, 0xc7, 0xa6, 0x34, 0xc5, 0x39, 0x38, 0xc7, 0x95, 0x8c, 0xa7, 0xb4, 0xc1, 0x10, 0x07, 0x32, + 0xeb, 0x76, 0x50, 0x61, 0x43, 0xdc, 0x28, 0x18, 0x10, 0x08, 0x82, 0x23, 0x5d, 0x10, 0x08, 0x89, + 0x23, 0x5d, 0x10, 0x08, 0x24, 0xd6, 0x23, 0x5d, 0x10, 0x08, 0x2e, 0xd8, 0x23, 0x5d, 0x10, 0x03, + 0x23, 0x19, 0x2f, 0x58, 0x10, 0x03, 0x3f, 0x2f, 0x58, 0x10, 0x03, 0xfc, 0x23, 0xbc, 0x36, 0x9f, + 0x58, 0x10, 0x03, 0x59, 0x50, 0x58, 0x10, 0x08, 0x52, 0x94, 0x46, 0xc8, 0x47, 0x1b, 0xd5, 0xc4, + 0x7c, 0x2d, 0x34, 0xe2, 0x10, 0x08, 0x3f, 0x43, 0xb8, 0x40, 0xbe, 0x76, 0x55, 0x2c, 0x10, 0x08, + 0x82, 0x31, 0x25, 0x53, 0x4b, 0x10, 0x08, 0x89, 0x31, 0x25, 0x53, 0x4b, 0x10, 0x08, 0x24, 0x96, + 0x3c, 0x47, 0x53, 0x4b, 0x10, 0x08, 0x3f, 0x79, 0x31, 0x25, 0x53, 0x4b, 0x10, 0x08, 0x2e, 0x96, + 0x3c, 0x47, 0x53, 0x4b, 0x10, 0x0a, 0x1d, 0x59, 0x23, 0x38, 0x44, 0x1e, 0x10, 0x08, 0x32, 0xe3, + 0x2d, 0x34, 0xad, 0x2d, 0x85, 0xc4, 0xa9, 0x2d, 0x34, 0xe3, 0x10, 0x08, 0x82, 0x31, 0x84, 0x7d, + 0x10, 0x08, 0x89, 0x31, 0x84, 0x7d, 0x10, 0x08, 0x24, 0xd6, 0x31, 0x84, 0x7d, 0x10, 0x08, 0x2e, + 0xd6, 0x31, 0x84, 0x7d, 0x10, 0x06, 0x89, 0xfc, 0x2a, 0x7c, 0x5a, 0x87, 0x10, 0x08, 0x2a, 0x1a, + 0x62, 0x30, 0x54, 0x10, 0x06, 0x88, 0xe5, 0x2a, 0x7c, 0x5a, 0x87, 0x10, +}; + +static const uint16_t mf_rlefont_DejaVuSans12bw_glyph_offsets_1[96] PROGMEM = { + 0x0000, 0x0003, 0x0009, 0x0016, 0x0021, 0x002e, 0x0039, 0x0040, + 0x0050, 0x0054, 0x0068, 0x0074, 0x007f, 0x0085, 0x008a, 0x009f, + 0x00a3, 0x00a9, 0x00b4, 0x00bb, 0x00c4, 0x00c8, 0x00d1, 0x00e1, + 0x00e5, 0x00eb, 0x00f2, 0x00fd, 0x0108, 0x010d, 0x0117, 0x0123, + 0x012d, 0x0135, 0x013d, 0x0145, 0x014d, 0x0155, 0x015d, 0x016e, + 0x0173, 0x017a, 0x0181, 0x0188, 0x018f, 0x0196, 0x019c, 0x01a3, + 0x01a9, 0x01b4, 0x01be, 0x01c5, 0x01cc, 0x01d4, 0x01db, 0x01e2, + 0x01ee, 0x01ff, 0x01ff, 0x0207, 0x0210, 0x0218, 0x0224, 0x022a, + 0x0239, 0x023f, 0x0245, 0x024b, 0x0251, 0x0257, 0x025e, 0x026e, + 0x0279, 0x027e, 0x0283, 0x0289, 0x028f, 0x0295, 0x029a, 0x02a2, + 0x02a7, 0x02b5, 0x02bf, 0x02c6, 0x02cd, 0x02d5, 0x02dd, 0x02e5, + 0x02ed, 0x02fb, 0x0301, 0x0307, 0x030e, 0x0315, 0x031d, 0x0324, +}; + +static const uint8_t mf_rlefont_DejaVuSans12bw_glyph_data_2[27] PROGMEM = { + 0x04, 0x48, 0x42, 0xf2, 0x10, 0x08, 0x3c, 0x42, 0x38, 0x10, 0x06, 0x48, 0x42, 0xc2, 0x10, 0x0c, + 0x48, 0x42, 0xc2, 0x38, 0x10, 0x0c, 0x48, 0x42, 0x38, 0x38, 0x10, +}; + +static const uint16_t mf_rlefont_DejaVuSans12bw_glyph_offsets_2[6] PROGMEM = { + 0x0000, 0x0000, 0x0005, 0x000a, 0x000f, 0x0015, +}; + +static const struct mf_rlefont_char_range_s mf_rlefont_DejaVuSans12bw_char_ranges[] = { + {32, 95, mf_rlefont_DejaVuSans12bw_glyph_offsets_0, mf_rlefont_DejaVuSans12bw_glyph_data_0}, + {160, 96, mf_rlefont_DejaVuSans12bw_glyph_offsets_1, mf_rlefont_DejaVuSans12bw_glyph_data_1}, + {8208, 6, mf_rlefont_DejaVuSans12bw_glyph_offsets_2, mf_rlefont_DejaVuSans12bw_glyph_data_2}, +}; + +const struct mf_rlefont_s mf_rlefont_DejaVuSans12bw = { + { + "DejaVu Sans Book 12", + "DejaVuSans12bw", + 13, /* width */ + 15, /* height */ + 3, /* min x advance */ + 13, /* max x advance */ + 1, /* baseline x */ + 12, /* baseline y */ + 14, /* line height */ + 2, /* flags */ + 63, /* fallback character */ + &mf_rlefont_character_width, + &mf_rlefont_render_character, + }, + 4, /* version */ + mf_rlefont_DejaVuSans12bw_dictionary_data, + mf_rlefont_DejaVuSans12bw_dictionary_offsets, + 59, /* rle dict count */ + 124, /* total dict count */ + 3, /* char range count */ + mf_rlefont_DejaVuSans12bw_char_ranges, +}; + +#ifdef MF_INCLUDED_FONTS +/* List entry for searching fonts by name. */ +static const struct mf_font_list_s mf_rlefont_DejaVuSans12bw_listentry = { + MF_INCLUDED_FONTS, + (struct mf_font_s*)&mf_rlefont_DejaVuSans12bw +}; +#undef MF_INCLUDED_FONTS +#define MF_INCLUDED_FONTS (&mf_rlefont_DejaVuSans12bw_listentry) +#endif + + +/* End of automatically generated font definition for DejaVuSans12bw. */ diff --git a/tests/pkg/mcufont/fonts/fonts.h b/tests/pkg/mcufont/fonts/fonts.h new file mode 100644 index 0000000000..c399811b12 --- /dev/null +++ b/tests/pkg/mcufont/fonts/fonts.h @@ -0,0 +1,15 @@ +#ifndef FONTS_H +#define FONTS_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "DejaVuSans12bw.c" +#include "DejaVuSans12.c" + +#ifdef __cplusplus +} +#endif + +#endif /* FONTS_H */ diff --git a/tests/pkg/mcufont/main.c b/tests/pkg/mcufont/main.c new file mode 100644 index 0000000000..36e2fea070 --- /dev/null +++ b/tests/pkg/mcufont/main.c @@ -0,0 +1,168 @@ +/* + * Copyright (C) 2023 Koen Zandberg + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @ingroup tests + * @{ + * + * @file + * @brief Test application for the MCUFont package + * + * @author Koen Zandberg + * + * @} + */ + +#include +#include +#include "mcufont.h" +#include "disp_dev.h" +#include "byteorder.h" + +#define ENABLE_DEBUG 0 +#include "debug.h" + +#ifdef MODULE_DISP_DEV +#ifdef LCD_SCREEN_WIDTH +#define DISPLAY_BUFFER_MAX_SIZE (LCD_SCREEN_WIDTH) +#else +#define DISPLAY_BUFFER_MAX_SIZE (320) +#endif +static uint16_t display_buffer[DISPLAY_BUFFER_MAX_SIZE] = { 0 }; +#endif + +#define PIXBUF_NUM_ROWS 15 +#define PIXBUF_NUM_COLS 16 +#define PIXBUF_ALPHA_THRESHOLD 80 + +#define MCUFONT_FIG_TEST_FONT mf_rlefont_DejaVuSans12bw +#define MCUFONT_DISP_TEST_FONT mf_rlefont_DejaVuSans12 + +extern const struct mf_rlefont_s MCUFONT_FIG_TEST_FONT; +extern const struct mf_rlefont_s MCUFONT_DISP_TEST_FONT; + +static const char input[] = "Hello, RIOT!"; +static uint8_t fig_buf[PIXBUF_NUM_ROWS][PIXBUF_NUM_COLS] = { 0 }; + +static disp_dev_reg_t *init_display(void) +{ + disp_dev_reg_t *disp_dev = NULL; +#ifdef MODULE_DISP_DEV + /* Use the first screen */ + disp_dev = disp_dev_reg_find_screen(0); + if (!disp_dev) { + puts("No screen found!"); + return NULL; + } + disp_dev_backlight_on(); + + /* Clear the screen */ + disp_dev_area_t area; + for (uint16_t y = 0; y < disp_dev_height(disp_dev->dev); y ++) { + area.x1 = 0; + area.x2 = disp_dev_width(disp_dev->dev) - 1; + area.y1 = area.y2 = y; + disp_dev_map(disp_dev->dev, &area, display_buffer); + } +#endif + return disp_dev; +} + +static void fig_callback(int16_t x, int16_t y, uint8_t count, uint8_t alpha, void *state) +{ + (void)state; + DEBUG("[draw] x: %"PRIi16", y: %"PRIi16", count: %u, color: %u\n", x, y, count, alpha); + if (y >= PIXBUF_NUM_ROWS || ((x + count) >= (PIXBUF_NUM_COLS * 8))) { + return; + } + while (count--) { + uint8_t bitpos = x % 8; + uint8_t bytepos = x / 8; + if (alpha > PIXBUF_ALPHA_THRESHOLD) { + fig_buf[y][bytepos] |= (1 << (7 - bitpos)); + } + x++; + } +} + +static uint16_t _alpha2rgb(uint8_t alpha) +{ + /* Assumes RGB 565 */ + return (alpha / 8) | ((alpha / 7) << 5) | ((alpha / 8) << 11); +} + +static void disp_callback(int16_t x, int16_t y, uint8_t count, uint8_t alpha, void *disp) +{ + DEBUG("[disp_draw] x: %"PRIi16", y: %"PRIi16", count: %u, color: %u\n", x, y, count, alpha); + while (count--) { + uint16_t color = htons(_alpha2rgb(alpha)); + disp_dev_area_t area = { + .x1 = x, + .y1 = y, + .x2 = x, + .y2 = y, + }; + disp_dev_map(disp, &area, &color); + x++; + } +} + +static void print_fig_buf(void) +{ + for (size_t y = 0; y < PIXBUF_NUM_ROWS; y++) { + for (size_t x = 0; x < PIXBUF_NUM_COLS; x++) { + for (int bitpos = 7; bitpos >= 0; bitpos--) { + if (fig_buf[y][x] & (1 << bitpos)) { + printf("█"); + } + else { + printf(" "); + } + } + } + puts(""); + } +} + +static uint8_t char_callback(int16_t x0, int16_t y0, mf_char character, void *state) +{ + return mf_render_character(&MCUFONT_FIG_TEST_FONT.font, x0, y0, character, &fig_callback, state); +} + +static uint8_t disp_char_callback(int16_t x0, int16_t y0, mf_char character, void *state) +{ + return mf_render_character(&MCUFONT_DISP_TEST_FONT.font, x0, y0, character, &disp_callback, state); +} + +int main(void) +{ + puts("mcufont package test application"); + mf_render_aligned( + &MCUFONT_FIG_TEST_FONT.font, + 0, 0, + MF_ALIGN_LEFT, + input, strlen(input), + &char_callback, NULL); + + print_fig_buf(); + + if (IS_ACTIVE(MODULE_DISP_DEV)) { + disp_dev_reg_t *display = init_display(); + puts("mcufont package test application"); + int16_t width = mf_get_string_width(&MCUFONT_DISP_TEST_FONT.font, input, 0, true); + mf_render_aligned( + &MCUFONT_DISP_TEST_FONT.font, + (disp_dev_width(display->dev) - width) / 2, + (disp_dev_height(display->dev) - MCUFONT_DISP_TEST_FONT.font.line_height) / 2, + MF_ALIGN_LEFT, + input, strlen(input), + &disp_char_callback, display->dev); + } + + return 0; +} diff --git a/tests/pkg/mcufont/tests/01-run.py b/tests/pkg/mcufont/tests/01-run.py new file mode 100755 index 0000000000..67982a73b1 --- /dev/null +++ b/tests/pkg/mcufont/tests/01-run.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2023 Koen Zandberg +# +# This file is subject to the terms and conditions of the GNU Lesser +# General Public License v2.1. See the file LICENSE in the top level +# directory for more details. + +import sys +from testrunner import run + +FONT_RENDER = """ + █ █ + █ █ █ █ █████ █ ███ ███████ █ + █ █ █ █ █ █ █ █ █ █ █ + █ █ ████ █ █ ████ █ █ █ █ █ █ █ + █ █ ██ ██ █ █ ██ ██ █ █ █ █ █ █ █ + ███████ █ █ █ █ █ █ █████ █ █ █ █ █ + █ █ ██████ █ █ █ █ █ █ █ █ █ █ █ + █ █ █ █ █ █ █ █ █ █ █ █ █ + █ █ ██ █ █ █ ██ ██ █ █ █ █ █ █ █ █ + █ █ ████ █ █ ████ █ █ █ █ ███ █ █ + █ +""" + + +def testfunc(child): + for line in FONT_RENDER.splitlines(): + child.expect_exact(line) + print("\nSUCCESS") + + +if __name__ == "__main__": + sys.exit(run(testfunc))