1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
19726:  mcufont: Initial addition of MCUFont package  r=aabadie a=bergzand

### Contribution description

This adds the MCUFont library as a package to RIOT. Only the decoder part has been packaged. I did not touch the font generation, so the test includes a manually compressed font created via the tooling included in the package.

The included patch files have been submitted as PR upstream in https://github.com/mcufont/mcufont/pull/30

### Testing procedure

Run the test on Native or on any board, The output should be along the lines of:
```
2023-06-11 21:56:40,685 # Help: Press s to start test, r to print it is ready
s
2023-06-11 21:56:42,651 # START
2023-06-11 21:56:42,652 # main(): This is RIOT! (Version: 2023.07-devel-512-g49ee9-pr/mcufont)
2023-06-11 21:56:42,652 # Generated RIOT application: 'mcufont'
2023-06-11 21:56:42,653 #                                                                                                                                 |
2023-06-11 21:56:42,654 #                                                                                                                                 |
2023-06-11 21:56:42,694 #                   █  █                                                                                                          |
2023-06-11 21:56:42,695 #  █     █          █  █                  █████   █    ███   ███████  █                                                           |
2023-06-11 21:56:42,697 #  █     █          █  █                  █    █  █   █   █     █     █                                                           |
2023-06-11 21:56:42,737 #  █     █   ████   █  █   ████           █    █  █  █     █    █     █                                                           |
2023-06-11 21:56:42,739 #  █     █  ██  ██  █  █  ██  ██          █    █  █  █     █    █     █                                                           |
2023-06-11 21:56:42,740 #  ███████  █    █  █  █  █    █          █████   █  █     █    █     █                                                           |
2023-06-11 21:56:42,781 #  █     █  ██████  █  █  █    █          █   █   █  █     █    █     █                                                           |
2023-06-11 21:56:42,782 #  █     █  █       █  █  █    █          █    █  █  █     █    █                                                                 |
2023-06-11 21:56:42,783 #  █     █  ██   █  █  █  ██  ██  █       █    █  █   █   █     █     █                                                           |
2023-06-11 21:56:42,807 #  █     █   ████   █  █   ████   █       █     █ █    ███      █     █                                                           |
2023-06-11 21:56:42,807 # { "threads": [{ "name": "idle", "stack_size": 256, "stack_used": 220 }]}
2023-06-11 21:56:42,808 # { "threads": [{ "name": "main", "stack_size": 1280, "stack_used": 436 }]}
```


### Issues/PRs references

None

Co-authored-by: Koen Zandberg <koen@bergzand.net>
This commit is contained in:
bors[bot] 2023-08-15 21:38:13 +00:00 committed by GitHub
commit 4b1b0a9257
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 965 additions and 0 deletions

9
pkg/mcufont/Kconfig Normal file
View File

@ -0,0 +1,9 @@
# 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.
config PACKAGE_MCUFONT
bool "MCUFont"
depends on TEST_KCONFIG

9
pkg/mcufont/Makefile Normal file
View File

@ -0,0 +1,9 @@
PKG_NAME=mcufont
PKG_URL=https://github.com/mcufont/mcufont
PKG_VERSION=9f3aa41b231195e7b2b59f78d8f01d06460b6d35
PKG_LICENSE=MIT
include $(RIOTBASE)/pkg/pkg.mk
all:
$(QQ)"$(MAKE)" -C $(PKG_SOURCE_DIR)/decoder -f $(RIOTBASE)/Makefile.base MODULE=$(PKG_NAME)

View File

@ -0,0 +1 @@
INCLUDES += -I$(PKGDIRBASE)/mcufont/decoder

22
pkg/mcufont/doc.txt Normal file
View File

@ -0,0 +1,22 @@
/**
* @defgroup pkg_mcufont MCUFont
* @ingroup pkg
* @brief MCUFont is a font compression, decompression and rendering library
* for use with microcontroller systems.
*
* # Introduction
*
* MCUFont is a stand-alone font compression, decompression and rendering
* library for use with microcontroller systems. On microcontrollers only
* decompression and rendering is supported, the compression part is written in
* C++ and is not supposed to be run on constrained devices.
*
* MCUFont supports high quality rendering of supplied fonts with kerning and
* anti-aliasing support. It does not support font scaling.
*
* # License
*
* Licensed under MIT.
*
* @see https://github.com/mcufont/mcufont
*/

3
pkg/mcufont/mcufont.mk Normal file
View File

@ -0,0 +1,3 @@
MODULE = mcufont
include $(RIOTBASE)/Makefile.base

View File

@ -0,0 +1,6 @@
include ../Makefile.pkg_common
USEPKG += mcufont
CFLAGS += -I$(CURDIR)/fonts
include $(RIOTBASE)/Makefile.include

View File

@ -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

View File

@ -0,0 +1,4 @@
BOARD_INSUFFICIENT_MEMORY := \
atmega8 \
nucleo-l011k4 \
#

View File

@ -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.

View File

@ -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. */

View File

@ -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. */

View File

@ -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 */

168
tests/pkg/mcufont/main.c Normal file
View File

@ -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 <koen@bergzand.net>
*
* @}
*/
#include <stdio.h>
#include <string.h>
#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;
}

View File

@ -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))