diff --git a/.gdbinit b/.gdbinit index b85525f..bbeee75 100644 --- a/.gdbinit +++ b/.gdbinit @@ -1,3 +1,17 @@ -set $PWR = (PWR_TypeDef *)(0x40000000 + 0x00007000U) +tar rem :4242 +file watch.elf +load watch.elf + +set $PERIPH_BASE = (uint32_t)0x40000000U +set $APBPERIPH_BASE = $PERIPH_BASE +set $AHBPERIPH_BASE = ($PERIPH_BASE + 0x00020000U) +set $IOPPERIPH_BASE = ($PERIPH_BASE + 0x10000000U) + set $RCC = (RCC_TypeDef *)(0x40000000 + 0x00020000U + 0x1000U) set $RTC = (RTC_TypeDef *)(0x40000000 + 0x00002800U) +set $PWR = (PWR_TypeDef *)(0x40000000 + 0x00007000U) +set $EXTI = (EXTI_TypeDef *) ($APBPERIPH_BASE + 0x00010400U) + +set history filename .gdb_history +set history save on +set history size 1024 diff --git a/BlinkTask.h b/BlinkTask.h new file mode 100644 index 0000000..916e026 --- /dev/null +++ b/BlinkTask.h @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2019 Max Regan + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#pragma once + +#include "macros.h" + +#include "ReturnCode.h" +#include "Time.h" +#include "SystemTime.h" + +class BlinkTask : public Common::Schedule::Task { +public: + + BlinkTask(Common::time_t blink_period) + : m_period(blink_period) + {} + + Common::ReturnCode init() { + /** Enable Port A,B clock */ + SET(RCC->IOPENR, RCC_IOPENR_IOPBEN); + /** Enable pin P3 for output */ + SET_TO(GPIOB->MODER, + GPIO_MODER_MODE3, + GPIO_MODER_MODE3_0); + + CLR(GPIOB->OTYPER, GPIO_OTYPER_OT_3); + CLR(GPIOB->PUPDR, GPIO_PUPDR_PUPD3); + + return Common::ReturnCode::OK; + } + + Common::Schedule::NextTime execute() override { + FLIP(GPIOB->ODR, GPIO_ODR_OD3); + + return Common::Schedule::NextTime::in(m_period / 2); + } + +private: + Common::time_t m_period; +}; diff --git a/ConcreteTaskScheduler.h b/ConcreteTaskScheduler.h new file mode 100644 index 0000000..9e5f2ed --- /dev/null +++ b/ConcreteTaskScheduler.h @@ -0,0 +1,151 @@ +/* + * Copyright (C) 2019 Max Regan + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#pragma once + +#include "macros.h" + +#include "TaskScheduler.h" +#include "SystemTime.h" +#include "LowPower.h" + +namespace Common { +namespace Schedule { + +template +class ConcreteTaskScheduler : public TaskScheduler { +public: + ConcreteTaskScheduler() : + m_tasks(), + m_task_count(0), + m_cycle_count(0) + {} + + [[noreturn]] void run() override + { + while (1) { + cycle(); + //remove_dead_tasks(); + } + } + + void add_task(Task &task, NextTime &time) override + { + if (m_task_count == MAX_TASKS || time.get_type() == ScheduleType::NEVER) { + return; + } + + m_tasks[m_task_count++] = TaskEvent(task, time); + } + + // ~ConcreteTaskScheduler() {} + +private: + struct TaskEvent { + + TaskEvent() : + m_task(nullptr), + m_time() + {} + + TaskEvent(Task &task, NextTime time) : + m_task(&task), + m_time(time) + {} + + Task *m_task; + NextTime m_time; + }; + + /* FIXME: implement some sort of fixed-size priority queue */ + TaskEvent m_tasks[MAX_TASKS]; + std::size_t m_task_count; + uint64_t m_cycle_count; + + void inline call_task(TaskEvent &task) + { + task.m_time = task.m_task->execute(); + } + + void inline cycle() + { + Common::time_t time = 0; + BSP::SystemTimer::get_time(time); + bool task_died = false; + + /* Keep state for when the next task will execute. */ + // bool execed = false; + // Common::time_t next_time = ~0; + + for (size_t i = 0; i < m_task_count; i++) { + TaskEvent &event = m_tasks[i]; + + if (event.m_time.get_type() == ScheduleType::AT_TIME) { + if (time >= event.m_time.get_time()) { + // execed = true; + call_task(event); + } else { + // next_time = MIN(next_time, event.m_time.get_time()); + } + } else if (event.m_time.get_type() == ScheduleType::NEVER) { + task_died = true; + } + } + + /* If nothing happened this cycle, and nothing will happen for + awhile, go to sleep */ + //if (!execed && (next_time - time > Time::millis(10))) { + //BSP::LowPower::stop(); + //} + if (task_died) { + remove_dead_tasks(); + } + + m_cycle_count++; + } + + void inline remove_dead_tasks() + { + std::size_t i_new = 0; + std::size_t i_old = 0; + while (i_old < m_task_count) { + //FIXME: this is broken + bool is_dead = true; + if (m_tasks[i_old].m_time.get_type() != ScheduleType::NEVER) { + is_dead = false; + } + + if (i_old != i_new) { + m_tasks[i_new] = m_tasks[i_old]; + } + + if (!is_dead) { + i_new++; + } + i_old++; + } + + m_task_count = i_new; + } +}; + +} +} diff --git a/DisplayDriver.cpp b/DisplayDriver.cpp new file mode 100644 index 0000000..23ccdaf --- /dev/null +++ b/DisplayDriver.cpp @@ -0,0 +1,201 @@ +/* + * Copyright (C) 2019 Max Regan + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "DisplayDriver.h" +#include "macros.h" +#include "font.h" + +namespace BSP { + +using Common::Schedule::NextTime; +using Common::ReturnCode; + +DisplayDriver::DisplayDriver(Common::Schedule::TaskScheduler &scheduler, SpiDriver &spi) + : m_scheduler(scheduler) + , m_spi(spi) + , m_is_dirty(true) + , m_dirty_line_min(0) + , m_dirty_line_max(0) +{ + buffer_init(); +} + +ReturnCode DisplayDriver::init() +{ + /** Enable Port A,B clock */ + SET(RCC->IOPENR, RCC_IOPENR_IOPBEN); + /** Enable pin P3 for output */ + SET_TO(GPIOB->MODER, + GPIO_MODER_MODE3, + GPIO_MODER_MODE3_0); + + CLR(GPIOB->OTYPER, GPIO_OTYPER_OT_3); + CLR(GPIOB->PUPDR, GPIO_PUPDR_PUPD3); + + return Common::ReturnCode::OK; + + + return ReturnCode::OK; +} + +NextTime DisplayDriver::execute() +{ + return NextTime::never(); +} + +void DisplayDriver::buffer_init() +{ + for (size_t i = 0; i < ARRAY_SIZE(m_buffer.lines); i++) { + struct display_line *line = &m_buffer.lines[i]; + line->mode = 1; // Update display + line->line = i; + for (size_t j = 0; j < ARRAY_SIZE(line->data); j++) { + line->data[j] = 0xFF; + } + } + + m_buffer.dummy = 0; +} + +void DisplayDriver::set_dirty(unsigned int y) +{ + if (!m_is_dirty) { + m_is_dirty = true; + m_dirty_line_min = y; + m_dirty_line_max = y; + } else { + m_dirty_line_min = MIN(y, m_dirty_line_min); + m_dirty_line_max = MAX(y, m_dirty_line_max); + } +} + +void DisplayDriver::set_bit(unsigned int x, unsigned int y, uint8_t val) +{ + if (x >= DISPLAY_WIDTH || y >= DISPLAY_HEIGHT) { + return; + } + + struct display_line *line = &m_buffer.lines[y]; + uint8_t *byte = &line->data[x >> 3]; + if (val) { + CLR_POS(*byte, x & 7); + } else { + SET_POS(*byte, x & 7); + } + + set_dirty(y); +} + +void DisplayDriver::set_byte(unsigned int x, unsigned int y, uint8_t val) +{ + if (x >= DISPLAY_WIDTH || y >= DISPLAY_HEIGHT) { + return; + } + + if (x & 7) { + return; + } + + struct display_line *line = &m_buffer.lines[y]; + line->data[x >> 3] = val; + set_dirty(y); +} + +void DisplayDriver::char_at(int *x_off, int y_off, char c, const struct font *font) +{ + const struct glyph *g = glyph_for_char(font, c); + if (g == NULL) { + return; + } + + // TODO: Don't hardcode this + int byte_cols = (g->cols / 8); + if (g->cols & 7) { + byte_cols++; + } + if (byte_cols & 1) { + byte_cols++; + } + for (size_t x = 0; x < g->cols; x++) { + for (size_t y = 0; y < g->rows; y++) { + int byte_x = x >> 3; + int byte_y = y; + uint8_t bit = (g->bitmap[byte_y * byte_cols + byte_x] >> (7 - (x & 7))) & 1; + /* 16 is font max height */ + set_bit(g->left + *x_off + x, y_off + y + 16 - g->top, bit); + } + } + *x_off += g->advance; +} + +void DisplayDriver::string_at(int x_off, int y_off, const char *string, const struct font *font) +{ + int i = 0; + while (string[i]) { + char_at(&x_off, y_off, string[i], font); + i++; + } +} + +void DisplayDriver::refresh() +{ + if (!m_is_dirty) { + return; + } + + uint8_t *start = (uint8_t *) &m_buffer.lines[m_dirty_line_min]; + // Data size + size_t size = sizeof(m_buffer.lines[0]) * (m_dirty_line_max - m_dirty_line_min + 1); + // Trailer dummy data + size += 2; + + m_spi.tx_blocking(start, size); + m_is_dirty = false; +} + +void DisplayDriver::clear() +{ + buffer_init(); + m_is_dirty = true; + m_dirty_line_min = 0; + m_dirty_line_max = DISPLAY_HEIGHT - 1; +} + +//TODO: put me somewhere fonty +const struct glyph *DisplayDriver::glyph_for_char(const struct font *font, char c) +{ + // TODO: This is almost the least efficient way imaginable to implement this + for (int i = 0; i < font->max; i++) { + const struct glyph *g = font->glyphs[i]; + if (g == NULL) { + continue; + } + + if (g->glyph == c) { + return g; + } + } + + return NULL; +} + + +} diff --git a/DisplayDriver.h b/DisplayDriver.h new file mode 100644 index 0000000..29614be --- /dev/null +++ b/DisplayDriver.h @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2019 Max Regan + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#pragma once + +#include "Task.h" +#include "SpiDriver.h" +#include "font.h" + +namespace BSP { + +class DisplayDriver : public Common::Schedule::Task { +public: + DisplayDriver(Common::Schedule::TaskScheduler &scheduler, SpiDriver &spi); + + static constexpr uint8_t DISPLAY_WIDTH = 144; + static constexpr uint8_t DISPLAY_HEIGHT = 168; + + + /** + * Common::Schedule::Task + */ + Common::ReturnCode init(); + Common::Schedule::NextTime execute() override; + + /** + * DisplayDriver + */ + void set_bit(unsigned int x, unsigned int y, uint8_t val); + void set_byte(unsigned int x, unsigned int y, uint8_t val); + void char_at(int *x_off, int y_off, char c, const struct font *font); + void string_at(int x_off, int y_off, const char *string, const struct font *font); + void refresh(); + void clear(); + +private: + void buffer_init(); + void set_dirty(unsigned int y); + const struct glyph *glyph_for_char(const struct font *font, char c); + + struct display_line + { + uint8_t mode; + uint8_t line; + uint8_t data[DISPLAY_WIDTH / 8]; + }; + + struct display_buffer + { + struct display_line lines[DISPLAY_HEIGHT]; + uint16_t dummy; + }; + + + Common::Schedule::TaskScheduler &m_scheduler; + SpiDriver &m_spi; + + struct display_buffer m_buffer; + + bool m_is_dirty; + uint8_t m_dirty_line_min; + uint8_t m_dirty_line_max; + +}; + +} diff --git a/DisplayTimeTask.cpp b/DisplayTimeTask.cpp new file mode 100644 index 0000000..dcd557d --- /dev/null +++ b/DisplayTimeTask.cpp @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2019 Max Regan + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "DisplayTimeTask.h" +#include "LowPower.h" + +#include "font-notomono-10.h" + + +using Common::ReturnCode; +using Common::Time; +using Common::Schedule::NextTime; + +DisplayTimeTask::DisplayTimeTask(BSP::DisplayDriver &driver) + : m_driver(driver) + , m_y_pos(0) +{} + +ReturnCode DisplayTimeTask::init() { + return ReturnCode::OK; +} + +NextTime DisplayTimeTask::execute() { + //static const char msg_str[] = "Hello world!"; + + int x = 20; + + m_driver.clear(); + m_driver.string_at(x, m_y_pos++, "Hello world!", &font_notomono_10); + m_driver.refresh(); + + if (m_y_pos > 160) { + m_y_pos = 0; + } + + BSP::LowPower::stop(); + + return NextTime::asap(); +} diff --git a/DisplayTimeTask.h b/DisplayTimeTask.h new file mode 100644 index 0000000..022adb1 --- /dev/null +++ b/DisplayTimeTask.h @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2019 Max Regan + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#pragma once + +#include "macros.h" + +#include "DisplayDriver.h" +#include "ReturnCode.h" +#include "Task.h" + +class DisplayTimeTask : public Common::Schedule::Task { +public: + + DisplayTimeTask(BSP::DisplayDriver &display); + + Common::ReturnCode init(); + Common::Schedule::NextTime execute(); + +private: + BSP::DisplayDriver &m_driver; + unsigned int m_y_pos; +}; diff --git a/LowPower.cpp b/LowPower.cpp new file mode 100644 index 0000000..6a68ff1 --- /dev/null +++ b/LowPower.cpp @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2019 Max Regan + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "SystemTime.h" +#include "LowPower.h" +#include "macros.h" + +#include "stm32l0xx.h" + +namespace BSP { + +using Common::ReturnCode; + +ReturnCode LowPower::init() +{ + /* Enable Clocks */ + SET(RCC->APB1ENR, RCC_APB1ENR_PWREN); + + // FIXME: Make these configurable, will mess with power consumption + SET(DBGMCU->CR, DBGMCU_CR_DBG_STOP); + SET(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP); + SET(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY); + return ReturnCode::OK; +} + +ReturnCode LowPower::sleep() +{ + return ReturnCode::FAIL; +} + +ReturnCode LowPower::stop() +{ + + /* Prepare to enter stop mode */ + SET(PWR->CR, PWR_CR_CWUF); // clear WUF + while(PWR->CSR & PWR_CSR_WUF) {}; + CLR(PWR->CR, PWR_CR_PDDS); // Enter stop mode when the CPU enters deepsleep + CLR(RCC->CFGR, RCC_CFGR_STOPWUCK); // MSI oscillator is wake-up from stop clock + SET(SCB->SCR, SCB_SCR_SLEEPDEEP_Msk); // low-power mode = stop mode + // Common::time_t time0 = ~0; + // SystemTimer::get_time(time0); + __WFI(); // enter low-power mode + // Common::time_t time1 = ~0; + // SystemTimer::get_time(time1); + // Common::time_t timediff = time1 - time0; + // volatile Common::time_t timediff2 = timediff; + + return ReturnCode::OK; +} + +} + diff --git a/LowPower.h b/LowPower.h new file mode 100644 index 0000000..3f0be5d --- /dev/null +++ b/LowPower.h @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2019 Max Regan + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#pragma once + +#include "ReturnCode.h" + +namespace BSP { + +class LowPower { +public: + LowPower() = delete; + + static Common::ReturnCode init(); + + static Common::ReturnCode sleep(); + static Common::ReturnCode stop(); +}; + +} diff --git a/LowPowerDelay.h b/LowPowerDelay.h new file mode 100644 index 0000000..257bfa0 --- /dev/null +++ b/LowPowerDelay.h @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2019 Max Regan + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#pragma once + +#include "Task.h" +#include "LowPower.h" + +class LowPowerDelay : public Common::Schedule::Task { + +public: + LowPowerDelay() + : m_is_first(true) + {} + Common::Schedule::NextTime execute() { + + if (m_is_first) { + m_is_first = false; + } else { + BSP::LowPower::stop(); + } + + return Common::Schedule::NextTime::in(Common::Time::millis(200)); + } + +private: + bool m_is_first; +}; diff --git a/Main.cpp.bak b/Main.cpp.bak new file mode 100644 index 0000000..996df45 --- /dev/null +++ b/Main.cpp.bak @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2019 Max Regan + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + +// TODO: Make a better "system" include +#include "stm32l0xx.h" + +#include "ConcreteTaskScheduler.h" +#include "SpiDriver.h" +#include "DisplayDriver.h" + +using Common::Schedule::TaskScheduler; + +static Common::Schedule::ConcreteTaskScheduler<10> g_scheduler; +static BSP::SpiDriver g_spi1(g_scheduler, SPI1); +static BSP::DisplayDriver g_display(g_scheduler, g_spi1); + +[[noreturn]] void main() +{ + g_spi1.init(); + g_display.init(); + g_scheduler.run(); +} diff --git a/Makefile b/Makefile index f3972e2..e58e2fd 100644 --- a/Makefile +++ b/Makefile @@ -24,13 +24,13 @@ # Tools # -TOOL_PREFIX ?= arm-none-eabi- +TOOL_PREFIX ?= arm-eabi- CC = $(TOOL_PREFIX)gcc +CXX = $(TOOL_PREFIX)g++ CPP = $(TOOL_PREFIX)cpp AS = $(TOOL_PREFIX)as LD = $(TOOL_PREFIX)gcc OBJCOPY = $(TOOL_PREFIX)objcopy -STM32FLASH ?= stm32flash # # Device Variables @@ -40,24 +40,30 @@ DEVICE_TYPE ?= stm32l031k6 DEVICE_FAMILY = stm32l031xx DEVICE_LINE = stm32l0xx - # # Filenames and paths # -C_SOURCES := $(shell find $(SOURCEDIR) -name '*.c') -S_SOURCES := $(shell find $(SOURCEDIR) -name '*.s') +# Ignores dotfiles and other garbage some tools leave behind +define find_important + $(shell find $(1) -type f -and -name $(2) -and -not -iname "*~" -and -not -iname "*#*" -and -not \( -path "*.cquery_cached_index*" \) ) +endef + +C_SOURCES := $(call find_important, $(SOURCEDIR), '*.c') +CXX_SOURCES := $(call find_important, $(SOURCEDIR), '*.cpp') +S_SOURCES := $(call find_important, $(SOURCEDIR), '*.s') SPP_SOURCES := $(DEVICE_TYPE).S -SOURCES = $(C_SOURCES) $(S_SOURCES) $(SPP_SOURCES) +SOURCES = $(C_SOURCES) $(S_SOURCES) $(SPP_SOURCES) $(CPP_SOURCES) C_OBJS := $(patsubst %.c,%.o,$(C_SOURCES)) +CXX_OBJS := $(patsubst %.cpp,%.o,$(CXX_SOURCES)) S_OBJS := $(patsubst %.s,%.o,$(S_SOURCES)) SPP_OBJS := $(patsubst %.S,%.o,$(SPP_SOURCES)) -OBJS = $(C_OBJS) $(S_OBJS) $(SPP_OBJS) +OBJS = $(C_OBJS) $(S_OBJS) $(SPP_OBJS) $(CXX_OBJS) LINKER_SCRIPT ?= $(DEVICE_TYPE).ld -OUTPUT_NAME ?= test +OUTPUT_NAME ?= watch OUTPUT_BIN ?= $(OUTPUT_NAME).bin OUTPUT_ELF ?= $(OUTPUT_NAME).elf @@ -70,7 +76,8 @@ DEVICE_DEFINE = $(subst XX,xx,$(shell echo $(DEVICE_FAMILY) | tr '[:lower:]' '[: # C pedantism CFLAGS = -Wall -Wextra -Wpedantic # Debug/optimization -CFLAGS += -Og -ggdb +CFLAGS += -ggdb -g3 +CFLAGS += -fdata-sections -ffunction-sections # Architecture CFLAGS += -mthumb -mcpu=cortex-m0plus CFLAGS += -ffreestanding @@ -81,11 +88,15 @@ CFLAGS += -I./lib/stm32/$(DEVICE_LINE)/Include CFLAGS += -I./lib/CMSIS/Core/Include CFLAGS += -I./lib/fonts/ +CXX_FLAGS = -std=c++14 -fno-exceptions -fno-rtti + # Startup Definitions ASFLAGS += -D__STARTUP_CLEAR_BSS ASFLAGS += -D__HEAP_SIZE=0 # No heap- let the linker decide it all -LDFLAGS += -nostdinc -lc -lnosys -Wl,--gc-sections -Wl,--print-memory-usage +LDFLAGS += -lc -lstdc++ -nostdinc -lnosys -Wl,--gc-sections -Wl,--build-id=None +LDFLAGS += -Wl,--wrap=malloc -Wl,--wrap=free # Fail to compile if dynamic allocation is sneaking through +LDFLAGS += -mthumb -mcpu=cortex-m0plus # # Default Target @@ -105,13 +116,17 @@ build: $(OUTPUT_BIN) @echo "AS $@" @$(CC) $(ASFLAGS) -c $< -o $@ +%.o: %.cpp + @echo "CXX $@" + @$(CXX) $(CXX_FLAGS) $(CFLAGS) -c $< -o $@ + $(OUTPUT_BIN): $(OUTPUT_ELF) @echo "OBJCOPY $@" @$(OBJCOPY) -O binary $(OUTPUT_ELF) $(OUTPUT_BIN) $(OUTPUT_ELF): $(LINKER_SCRIPT) $(OBJS) @echo "LD $@" - $(LD) $(LDFLAGS) -T $(LINKER_SCRIPT) -o $(OUTPUT_ELF) $(OBJS) + @$(LD) $(LDFLAGS) -T $(LINKER_SCRIPT) -o $(OUTPUT_ELF) $(OBJS) # # Utilities @@ -122,8 +137,7 @@ STM32FLASH_DEVICE = /dev/ttyUSB0 .PHONY: flash flash: $(OUTPUT_BIN) @echo "FLASH $(OUTPUT_BIN)" - @st-flash write $(OUTPUT_BIN) 0x8000000 2> /dev/null -# stm32flash -w $(OUTPUT_BIN) $(STM32FLASH_DEVICE) + @st-flash write $(OUTPUT_BIN) 0x8000000 .PHONY: clean diff --git a/ReturnCode.h b/ReturnCode.h new file mode 100644 index 0000000..1cc4794 --- /dev/null +++ b/ReturnCode.h @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2019 Max Regan + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#pragma once + +namespace Common { + +enum class ReturnCode : int { + OK = 0, + BUSY = 1, + FAIL = 2, +}; + +} diff --git a/SpiDriver.cpp b/SpiDriver.cpp new file mode 100644 index 0000000..049c8c7 --- /dev/null +++ b/SpiDriver.cpp @@ -0,0 +1,118 @@ +/* + * Copyright (C) 2019 Max Regan + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "SpiDriver.h" +#include "macros.h" + +namespace BSP { + +using RC = Common::ReturnCode; +using Common::Schedule::TaskScheduler; +using Common::Schedule::NextTime; +using Common::Time; + +SpiDriver::SpiDriver(TaskScheduler &scheduler) + : m_scheduler(scheduler) + , m_spi(SPI1) +{} + +void SpiDriver::init() +{ + SET(RCC->IOPENR, RCC_IOPENR_IOPAEN); + RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; + + /* Assign SPI_MOSI to PA12 (AFRH5), since PA7 is taken by LPTIM_OUT */ + GPIOA->AFR[1] &= ~GPIO_AFRH_AFRH4; + + SET_TO(GPIOA->MODER, GPIO_MODER_MODE12, 2u << GPIO_MODER_MODE12_Pos); + + GPIOA->OTYPER &= ~GPIO_OTYPER_OT_12; + GPIOA->PUPDR &= ~GPIO_PUPDR_PUPD12; + + // SPI1 NSS (PA4) + //GPIOA->AFR[0] &= ~GPIO_AFRL_AFRL4; + + SET_TO(GPIOA->MODER, GPIO_MODER_MODE4, 1u << GPIO_MODER_MODE4_Pos); + + GPIOA->OTYPER &= ~GPIO_OTYPER_OT_4; + GPIOA->PUPDR &= ~GPIO_PUPDR_PUPD4; + // enable pullup, since the pin doesn't seem to stay up + GPIOA->PUPDR |= 2u << GPIO_PUPDR_PUPD4_Pos; + + // SPI1 SCK (PA5) + GPIOA->AFR[0] &= ~GPIO_AFRL_AFRL5; + + SET_TO(GPIOA->MODER, GPIO_MODER_MODE5, 2u << GPIO_MODER_MODE5_Pos); + + GPIOA->OTYPER &= ~GPIO_OTYPER_OT_5; + GPIOA->PUPDR &= ~GPIO_PUPDR_PUPD5; + + // SPI1 MISO (PA6) + GPIOA->AFR[0] &= ~GPIO_AFRL_AFRL6; + + SET_TO(GPIOA->MODER, GPIO_MODER_MODE6, 2u << GPIO_MODER_MODE6_Pos); + + GPIOA->OTYPER &= ~GPIO_OTYPER_OT_6; + GPIOA->PUPDR &= ~GPIO_PUPDR_PUPD6; + + // Enable Master mode and half the baud rate, so it's set to ~1MHz + m_spi->CR1 |= SPI_CR1_MSTR | SPI_CR1_LSBFIRST | SPI_CR1_SSM; + m_spi->CR1 |= 1u << SPI_CR1_BR_Pos; + m_spi->CR2 |= SPI_CR2_SSOE; +} + +NextTime SpiDriver::execute() +{ + return NextTime::never(); +} + +RC SpiDriver::tx_blocking(const uint8_t *data, size_t len) +{ + if (len <= 0) { + return RC::FAIL; + } + + m_spi->CR1 |= SPI_CR1_SPE; + + //FLIP(GPIOB->ODR, GPIO_ODR_OD3); + CLR(m_spi->CR1, SPI_CR1_SSI); + SET(GPIOA->ODR, GPIO_ODR_OD4); + + for (size_t i = 0; i < len; i++) { + while (!(m_spi->SR & SPI_SR_TXE)) {} + m_spi->DR = data[i]; + } + + //FLIP(GPIOB->ODR, GPIO_ODR_OD3); + + while (!(m_spi->SR & SPI_SR_TXE)) {} + + // Ensure that NSS is held for long enough to meet the display's thSCS + for (int i = 0; i < 4; i++); + + m_spi->CR1 &= ~SPI_CR1_SPE; + SET(m_spi->CR1, SPI_CR1_SSI); + CLR(GPIOA->ODR, GPIO_ODR_OD4); + + return RC::OK; +} + +} diff --git a/SpiDriver.h b/SpiDriver.h new file mode 100644 index 0000000..d09dfbc --- /dev/null +++ b/SpiDriver.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2019 Max Regan + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#pragma once + +#include "ReturnCode.h" +#include "TaskScheduler.h" + +// TODO: Find a better include for this +#include "stm32l0xx.h" + +namespace BSP { + +class SpiDriver : public Common::Schedule::Task { + +public: + // TODO: Add configurability / provide a real abstraction + SpiDriver(Common::Schedule::TaskScheduler &scheduler); + + void init(); + Common::Schedule::NextTime execute() override; + Common::ReturnCode tx_blocking(const uint8_t *data, size_t len); + +private: + Common::Schedule::TaskScheduler &m_scheduler; + SPI_TypeDef *m_spi; +}; + +} diff --git a/SystemTime.cpp b/SystemTime.cpp new file mode 100644 index 0000000..b2cee6f --- /dev/null +++ b/SystemTime.cpp @@ -0,0 +1,171 @@ +/* + * Copyright (C) 2019 Max Regan + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "SystemTime.h" +#include "macros.h" + +namespace BSP { + +using Common::ReturnCode; +using Common::time_t; + +uint32_t SystemTimer::m_seconds(0); +RTC_TypeDef *SystemTimer::m_rtc = nullptr; + +void SystemTimer::enable_rtc_write() +{ + /*WPR = 0xCA; + RTC->WPR = 0x53; +} + +void SystemTimer::disable_rtc_write() +{ + /*WPR = 0x00; +} + +void SystemTimer::enable_rtc_wakeup_interrupt() +{ + CLR(RTC->CR, RTC_CR_WUTE); + while (!(RTC->ISR & RTC_ISR_WUTWF)) {} + SET_TO(RTC->WUTR, RTC_WUTR_WUT, 0); + SET_TO(RTC->CR, RTC_CR_WUCKSEL, RTC_CR_WUCKSEL_2); + + SET(EXTI->IMR, EXTI_IMR_IM20); + SET(EXTI->EMR, EXTI_EMR_EM20); + SET(EXTI->RTSR, EXTI_RTSR_RT20); + + NVIC_EnableIRQ(RTC_IRQn); + NVIC_SetPriority(RTC_IRQn, 0); + + SET(RTC->CR, RTC_CR_WUTE | RTC_CR_WUTIE); +} + +ReturnCode SystemTimer::init_hw() +{ + uint32_t temp = RCC->CSR; + + SET(RCC->CSR, RCC_CSR_RTCRST); + SET(RCC->APB1ENR, RCC_APB1ENR_PWREN); + SET(PWR->CR, PWR_CR_DBP); + + /*CSR = temp; + + while (!(RCC->CSR & RCC_CSR_LSERDY)) {} + + enable_rtc_write(); + + RTC->ISR = RTC_ISR_INIT; + while (!(RTC->ISR & RTC_ISR_INITF)) {} + + // FIXME: Make this use the minimum prescaler value + /*PRER, RTC_PRER_PREDIV_A, 0); + /*PRER, RTC_PRER_PREDIV_S, (LSE_CLOCK_FREQ - 1)); + + /*CR, RTC_CR_FMT); + + uint32_t time = 0; + SET(time, RTC_TR_PM); + SET_TO(time, RTC_TR_HT, 1 << RTC_TR_HT_Pos); + SET_TO(time, RTC_TR_HU, 2 << RTC_TR_HU_Pos); + SET_TO(time, RTC_TR_MNT, 5 << RTC_TR_MNT_Pos); + SET_TO(time, RTC_TR_MNU, 9 << RTC_TR_MNU_Pos); + SET_TO(time, RTC_TR_ST, 0 << RTC_TR_ST_Pos); + SET_TO(time, RTC_TR_SU, 0 << RTC_TR_SU_Pos); + RTC->TR = time; + + + CLR(RTC->ISR, RTC_ISR_INIT); + + enable_rtc_wakeup_interrupt(); + + disable_rtc_write(); + + return ReturnCode::OK; +} + +ReturnCode SystemTimer::init(RTC_TypeDef *rtc) +{ + if (rtc == nullptr) { + return ReturnCode::FAIL; + } + + m_rtc = rtc; + m_seconds = 0; + + init_hw(); + + return ReturnCode::OK; +} + +ReturnCode SystemTimer::get_time(time_t &time) +{ + if (m_rtc == nullptr) { + return ReturnCode::FAIL; + } + + uint32_t new_secs, old_secs, ssr, subsecond; + do { + old_secs = m_seconds; + ssr = m_rtc->SSR & 0xFFFF; + new_secs = m_seconds; + } while (new_secs != old_secs); + + new_secs = new_secs * LSE_CLOCK_FREQ; + /** SSR is a countdown register */ + subsecond = (new_secs + LSE_CLOCK_FREQ - 1 - ssr) * Common::Time::MILLIS_PER_SEC / LSE_CLOCK_FREQ; + time += Common::Time::millis(subsecond); + + return ReturnCode::OK; +} + +void SystemTimer::increment_seconds() +{ + m_seconds++; +} + +extern "C" void RTC_IRQHandler(void); + +void RTC_IRQHandler() { + SystemTimer::increment_seconds(); + // Clear the interrupt in the EXTI + SET(EXTI->PR, EXTI_PR_PIF20); + // Clear the interrupt in the RTC + CLR(RTC->ISR, RTC_ISR_WUTF); +} + +} diff --git a/SystemTime.h b/SystemTime.h new file mode 100644 index 0000000..22d5f25 --- /dev/null +++ b/SystemTime.h @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2019 Max Regan + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#pragma once + +#include + +#include "ReturnCode.h" +#include "Time.h" + +#include "stm32l0xx.h" + +namespace BSP { + +class SystemTimer { +public: + static Common::ReturnCode init(RTC_TypeDef *rtc); + static Common::ReturnCode get_time(Common::time_t &time); + static void increment_seconds(); +private: + + static Common::ReturnCode init_hw(); + static void enable_rtc_write(); + static void disable_rtc_write(); + static void enable_rtc_wakeup_interrupt(); + + static constexpr uint32_t LSE_CLOCK_FREQ = 32768; + + /** I'll be dead before this rolls over */ + /** FIXME FIXME FIXME: XXX This should be an atomic */ + static uint32_t m_seconds; + static RTC_TypeDef *m_rtc; +}; + +} diff --git a/Task.cpp b/Task.cpp new file mode 100644 index 0000000..0c87792 --- /dev/null +++ b/Task.cpp @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2019 Max Regan + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +namespace Common { + +} diff --git a/Task.h b/Task.h new file mode 100644 index 0000000..78af57b --- /dev/null +++ b/Task.h @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2019 Max Regan + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#pragma once + +#include "ReturnCode.h" +#include "Time.h" +#include "SystemTime.h" + +namespace Common { +namespace Schedule { + +enum class ScheduleType { + AT_TIME, + NEVER, +}; + +class NextTime { +public: + NextTime() : + m_type(ScheduleType::NEVER), + m_time(0) + {} + + static inline NextTime in(time_t offset) { + time_t time = 0; + /* If this call fails, we likely haven't initialized the timer + * yet, so just treat offset as the time- hopefully the system + * timer will be initialzed soon + */ + BSP::SystemTimer::get_time(time); + time += offset; + return {ScheduleType::AT_TIME, time }; + } + + static inline NextTime never() { + return { ScheduleType::NEVER, 0 }; + } + + static inline NextTime asap() { + return { ScheduleType::AT_TIME, 0 }; + } + + static inline NextTime at(time_t time) { + return { ScheduleType::AT_TIME, time }; + } + + inline ScheduleType get_type() { return m_type; } + inline time_t get_time() { return m_time; } + +private: + NextTime(ScheduleType type, time_t time) : + m_type(type), + m_time(time) + {} + + ScheduleType m_type; + time_t m_time; +}; + +class Task { +public: + virtual NextTime execute() = 0; +}; + +} // namespace Schedule +} // namespace Common diff --git a/TaskScheduler.h b/TaskScheduler.h new file mode 100644 index 0000000..3b0cfc1 --- /dev/null +++ b/TaskScheduler.h @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2019 Max Regan + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#pragma once + +#include + +#include "Task.h" +#include "system.h" + +namespace Common { +namespace Schedule { + +class TaskScheduler { +public: + virtual void add_task(Task &task, NextTime &time) = 0; + [[noreturn]] virtual void run() = 0; +protected: + //virtual ~TaskScheduler() {} +}; + +} +} diff --git a/Time.h b/Time.h new file mode 100644 index 0000000..3857f88 --- /dev/null +++ b/Time.h @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2019 Max Regan + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#pragma once + +#include + +namespace Common { + +using time_t = uint64_t; + +class Time { +public: + static constexpr uint64_t MILLIS_PER_SEC = 1e3; + static constexpr uint64_t MICROS_PER_SEC = 1e6; + static constexpr uint64_t NANOS_PER_SEC = 1e9; + + static constexpr uint64_t MICROS_PER_MILLI = 1e3; + static constexpr uint64_t NANOS_PER_MILLI = 1e6; + + static constexpr uint64_t NANOS_PER_MICRO = 1e3; + + static inline time_t nanos(uint64_t value) + { + return value / NANOS_PER_MICRO; + } + + static inline time_t micros(uint64_t value) + { + return value; + } + + static inline time_t millis(uint64_t value) + { + return value * MICROS_PER_MILLI; + } + + static inline time_t seconds(uint64_t value) + { + return value * MICROS_PER_SEC; + } +}; + +} diff --git a/app_manager.h b/app_manager.h new file mode 100644 index 0000000..5d9115a --- /dev/null +++ b/app_manager.h @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2019 Max Regan + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#pragma once + + +namespace BSP { + +namespace Application { + +}; + +class ApplicationManager { +public: + Common::ReturnCode set_next_display(&DisplayBW); +private: + +}; + +class TimedTaskManager { + +public: + + +}; + +class Task { + +public: + execute(); + +}; + + +class DisplayBW { + +public: + uint32_t get_width() const virtual = 0; + uint32_t get_height() const virtual = 0; + void set_bit(bool set, uint32 x, uint32_t y) virtual = 0; + uint8_t *get_row(uint32_t y) const virtual = 0; + void clear(uint32_t y) const virtual = 0; + int start_refresh(uint32_t y) const virtual = 0; + +}; + +class DisplayBWScreen { + + void display() virtual = 0; + +}; + +} diff --git a/display.c b/display.c index af8667f..e70d88d 100644 --- a/display.c +++ b/display.c @@ -148,7 +148,13 @@ void display_char_at(struct display *display, int *x_off, int y_off, char c, con } // TODO: Don't hardcode this - int byte_cols = 1; + int byte_cols = (g->cols / 8); + if (g->cols & 7) { + byte_cols++; + } + if (byte_cols & 1) { + byte_cols++; + } for (size_t x = 0; x < g->cols; x++) { for (size_t y = 0; y < g->rows; y++) { int byte_x = x >> 3; diff --git a/lib/fonts/font-OpenSansExtraBold-28.c b/lib/fonts/font-OpenSansExtraBold-28.c new file mode 100644 index 0000000..9d66f1e --- /dev/null +++ b/lib/fonts/font-OpenSansExtraBold-28.c @@ -0,0 +1,751 @@ +/* AUTOMATICALLY GENERATED FILE! EDITING NOT RECOMMENDED! + * + * This file is distributed under the terms of the MIT License. + * See the LICENSE file at the top of this tree, or if it is missing a copy can + * be found at http://opensource.org/licenses/MIT + */ + +#include +#include +#include "fontem.h" +#include "font-OpenSansExtraBold-28.h" + +/* Character list: 0123456789:APM */ + +/** Kerning table for character ' '. */ +static const struct kerning kerning_OpenSansExtraBold_28_0020[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character ' '. */ +static const struct glyph glyph_OpenSansExtraBold_28_0020 = { + .glyph = 32, + .left = 0, + .top = 0, + .advance = 10, + .cols = 0, + .rows = 0, + .bitmap = NULL, + .kerning = kerning_OpenSansExtraBold_28_0020, +}; + +/** Bitmap definition for character '0'. */ +static const uint8_t bitmap_OpenSansExtraBold_28_0030[] = { + 0x01, 0xfc, 0x00, 0x00, + 0x07, 0xff, 0x00, 0x00, + 0x0f, 0xff, 0x80, 0x00, + 0x1f, 0xff, 0xc0, 0x00, + 0x3f, 0xff, 0xe0, 0x00, + 0x3f, 0xff, 0xe0, 0x00, + 0x7f, 0x8f, 0xf0, 0x00, + 0x7f, 0x8f, 0xf0, 0x00, + 0x7f, 0x07, 0xf0, 0x00, + 0x7f, 0x07, 0xf0, 0x00, + 0x7f, 0x07, 0xf0, 0x00, + 0xff, 0x07, 0xf8, 0x00, + 0xff, 0x07, 0xf8, 0x00, + 0xff, 0x07, 0xf8, 0x00, + 0xff, 0x07, 0xf8, 0x00, + 0xff, 0x07, 0xf8, 0x00, + 0xff, 0x07, 0xf8, 0x00, + 0x7f, 0x07, 0xf0, 0x00, + 0x7f, 0x07, 0xf0, 0x00, + 0x7f, 0x07, 0xf0, 0x00, + 0x7f, 0x8f, 0xf0, 0x00, + 0x7f, 0x8f, 0xf0, 0x00, + 0x3f, 0xff, 0xe0, 0x00, + 0x3f, 0xff, 0xe0, 0x00, + 0x1f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0x80, 0x00, + 0x07, 0xff, 0x00, 0x00, + 0x01, 0xfc, 0x00, 0x00, +}; + +/** Kerning table for character '0'. */ +static const struct kerning kerning_OpenSansExtraBold_28_0030[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '0'. */ +static const struct glyph glyph_OpenSansExtraBold_28_0030 = { + .glyph = 48, + .left = 1, + .top = 28, + .advance = 23, + .cols = 21, + .rows = 28, + .bitmap = bitmap_OpenSansExtraBold_28_0030, + .kerning = kerning_OpenSansExtraBold_28_0030, +}; + +/** Bitmap definition for character '1'. */ +static const uint8_t bitmap_OpenSansExtraBold_28_0031[] = { + 0x00, 0x7f, + 0x01, 0xff, + 0x03, 0xff, + 0x07, 0xff, + 0x0f, 0xff, + 0x1f, 0xff, + 0x7f, 0xff, + 0xff, 0xff, + 0xff, 0xff, + 0x7e, 0xff, + 0x3c, 0xff, + 0x18, 0xff, + 0x10, 0xff, + 0x00, 0xff, + 0x00, 0xff, + 0x00, 0xff, + 0x00, 0xff, + 0x00, 0xff, + 0x00, 0xff, + 0x00, 0xff, + 0x00, 0xff, + 0x00, 0xff, + 0x00, 0xff, + 0x00, 0xff, + 0x00, 0xff, + 0x00, 0xff, + 0x00, 0xff, + 0x00, 0xff, +}; + +/** Kerning table for character '1'. */ +static const struct kerning kerning_OpenSansExtraBold_28_0031[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '1'. */ +static const struct glyph glyph_OpenSansExtraBold_28_0031 = { + .glyph = 49, + .left = 2, + .top = 28, + .advance = 23, + .cols = 16, + .rows = 28, + .bitmap = bitmap_OpenSansExtraBold_28_0031, + .kerning = kerning_OpenSansExtraBold_28_0031, +}; + +/** Bitmap definition for character '2'. */ +static const uint8_t bitmap_OpenSansExtraBold_28_0032[] = { + 0x03, 0xfc, 0x00, 0x00, + 0x0f, 0xff, 0x80, 0x00, + 0x3f, 0xff, 0xc0, 0x00, + 0x7f, 0xff, 0xe0, 0x00, + 0xff, 0xff, 0xe0, 0x00, + 0x7f, 0xff, 0xf0, 0x00, + 0x3f, 0x0f, 0xf0, 0x00, + 0x1c, 0x0f, 0xf0, 0x00, + 0x08, 0x0f, 0xf0, 0x00, + 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x1f, 0xe0, 0x00, + 0x00, 0x3f, 0xe0, 0x00, + 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x7f, 0x80, 0x00, + 0x00, 0xff, 0x80, 0x00, + 0x01, 0xff, 0x00, 0x00, + 0x03, 0xfe, 0x00, 0x00, + 0x07, 0xf8, 0x00, 0x00, + 0x0f, 0xf0, 0x00, 0x00, + 0x1f, 0xe0, 0x00, 0x00, + 0x3f, 0xc0, 0x00, 0x00, + 0x7f, 0xff, 0xf8, 0x00, + 0xff, 0xff, 0xf8, 0x00, + 0xff, 0xff, 0xf8, 0x00, + 0xff, 0xff, 0xf8, 0x00, + 0xff, 0xff, 0xf8, 0x00, + 0xff, 0xff, 0xf8, 0x00, +}; + +/** Kerning table for character '2'. */ +static const struct kerning kerning_OpenSansExtraBold_28_0032[] = { + { /* .left = '7' */ 55, /* .offset = */ -1 }, + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '2'. */ +static const struct glyph glyph_OpenSansExtraBold_28_0032 = { + .glyph = 50, + .left = 1, + .top = 28, + .advance = 23, + .cols = 21, + .rows = 28, + .bitmap = bitmap_OpenSansExtraBold_28_0032, + .kerning = kerning_OpenSansExtraBold_28_0032, +}; + +/** Bitmap definition for character '3'. */ +static const uint8_t bitmap_OpenSansExtraBold_28_0033[] = { + 0x03, 0xfc, 0x00, 0x00, + 0x1f, 0xff, 0x80, 0x00, + 0x7f, 0xff, 0xc0, 0x00, + 0x7f, 0xff, 0xe0, 0x00, + 0x7f, 0xff, 0xe0, 0x00, + 0x3f, 0xff, 0xf0, 0x00, + 0x1c, 0x1f, 0xf0, 0x00, + 0x10, 0x0f, 0xf0, 0x00, + 0x00, 0x0f, 0xe0, 0x00, + 0x00, 0x0f, 0xe0, 0x00, + 0x00, 0x3f, 0xc0, 0x00, + 0x07, 0xff, 0x80, 0x00, + 0x07, 0xff, 0x00, 0x00, + 0x07, 0xfc, 0x00, 0x00, + 0x07, 0xff, 0x80, 0x00, + 0x07, 0xff, 0xc0, 0x00, + 0x07, 0xff, 0xe0, 0x00, + 0x00, 0x1f, 0xf0, 0x00, + 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x0f, 0xf0, 0x00, + 0x80, 0x0f, 0xf0, 0x00, + 0xf0, 0x1f, 0xf0, 0x00, + 0xff, 0xff, 0xf0, 0x00, + 0xff, 0xff, 0xf0, 0x00, + 0xff, 0xff, 0xe0, 0x00, + 0xff, 0xff, 0xc0, 0x00, + 0xff, 0xff, 0x00, 0x00, + 0x0f, 0xf8, 0x00, 0x00, +}; + +/** Kerning table for character '3'. */ +static const struct kerning kerning_OpenSansExtraBold_28_0033[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '3'. */ +static const struct glyph glyph_OpenSansExtraBold_28_0033 = { + .glyph = 51, + .left = 1, + .top = 28, + .advance = 23, + .cols = 20, + .rows = 28, + .bitmap = bitmap_OpenSansExtraBold_28_0033, + .kerning = kerning_OpenSansExtraBold_28_0033, +}; + +/** Bitmap definition for character '4'. */ +static const uint8_t bitmap_OpenSansExtraBold_28_0034[] = { + 0x00, 0x1f, 0xc0, 0x00, + 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x7f, 0xc0, 0x00, + 0x00, 0xff, 0xc0, 0x00, + 0x00, 0xff, 0xc0, 0x00, + 0x01, 0xff, 0xc0, 0x00, + 0x03, 0xff, 0xc0, 0x00, + 0x03, 0xff, 0xc0, 0x00, + 0x07, 0xff, 0xc0, 0x00, + 0x0f, 0xdf, 0xc0, 0x00, + 0x1f, 0xdf, 0xc0, 0x00, + 0x1f, 0x9f, 0xc0, 0x00, + 0x3f, 0x9f, 0xc0, 0x00, + 0x7f, 0x1f, 0xc0, 0x00, + 0x7e, 0x1f, 0xc0, 0x00, + 0xfe, 0x1f, 0xc0, 0x00, + 0xff, 0xff, 0xf8, 0x00, + 0xff, 0xff, 0xf8, 0x00, + 0xff, 0xff, 0xf8, 0x00, + 0xff, 0xff, 0xf8, 0x00, + 0xff, 0xff, 0xf8, 0x00, + 0xff, 0xff, 0xf8, 0x00, + 0x00, 0x1f, 0xc0, 0x00, + 0x00, 0x1f, 0xc0, 0x00, + 0x00, 0x1f, 0xc0, 0x00, + 0x00, 0x1f, 0xc0, 0x00, + 0x00, 0x1f, 0xc0, 0x00, +}; + +/** Kerning table for character '4'. */ +static const struct kerning kerning_OpenSansExtraBold_28_0034[] = { + { /* .left = '7' */ 55, /* .offset = */ -1 }, + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '4'. */ +static const struct glyph glyph_OpenSansExtraBold_28_0034 = { + .glyph = 52, + .left = 1, + .top = 28, + .advance = 23, + .cols = 21, + .rows = 28, + .bitmap = bitmap_OpenSansExtraBold_28_0034, + .kerning = kerning_OpenSansExtraBold_28_0034, +}; + +/** Bitmap definition for character '5'. */ +static const uint8_t bitmap_OpenSansExtraBold_28_0035[] = { + 0x7f, 0xff, 0x80, 0x00, + 0x7f, 0xff, 0x80, 0x00, + 0x7f, 0xff, 0x80, 0x00, + 0x7f, 0xff, 0x80, 0x00, + 0x7f, 0xff, 0x80, 0x00, + 0x7f, 0xff, 0x80, 0x00, + 0x7f, 0x00, 0x00, 0x00, + 0x7f, 0x00, 0x00, 0x00, + 0x7f, 0x00, 0x00, 0x00, + 0x7e, 0x00, 0x00, 0x00, + 0x7f, 0xfc, 0x00, 0x00, + 0x7f, 0xff, 0x00, 0x00, + 0xff, 0xff, 0x80, 0x00, + 0xff, 0xff, 0xc0, 0x00, + 0xff, 0xff, 0xc0, 0x00, + 0x7f, 0xff, 0xe0, 0x00, + 0x10, 0x3f, 0xe0, 0x00, + 0x00, 0x1f, 0xe0, 0x00, + 0x00, 0x0f, 0xe0, 0x00, + 0x00, 0x0f, 0xe0, 0x00, + 0x00, 0x1f, 0xe0, 0x00, + 0xf0, 0x3f, 0xe0, 0x00, + 0xff, 0xff, 0xe0, 0x00, + 0xff, 0xff, 0xc0, 0x00, + 0xff, 0xff, 0x80, 0x00, + 0xff, 0xff, 0x00, 0x00, + 0xff, 0xfe, 0x00, 0x00, + 0x1f, 0xf0, 0x00, 0x00, +}; + +/** Kerning table for character '5'. */ +static const struct kerning kerning_OpenSansExtraBold_28_0035[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '5'. */ +static const struct glyph glyph_OpenSansExtraBold_28_0035 = { + .glyph = 53, + .left = 2, + .top = 28, + .advance = 23, + .cols = 19, + .rows = 28, + .bitmap = bitmap_OpenSansExtraBold_28_0035, + .kerning = kerning_OpenSansExtraBold_28_0035, +}; + +/** Bitmap definition for character '6'. */ +static const uint8_t bitmap_OpenSansExtraBold_28_0036[] = { + 0x00, 0x3f, 0xe0, 0x00, + 0x01, 0xff, 0xe0, 0x00, + 0x03, 0xff, 0xe0, 0x00, + 0x0f, 0xff, 0xe0, 0x00, + 0x1f, 0xff, 0xe0, 0x00, + 0x1f, 0xff, 0xe0, 0x00, + 0x3f, 0xe0, 0x00, 0x00, + 0x3f, 0x80, 0x00, 0x00, + 0x7f, 0x00, 0x00, 0x00, + 0x7f, 0x3f, 0x00, 0x00, + 0x7e, 0x7f, 0xc0, 0x00, + 0x7e, 0xff, 0xe0, 0x00, + 0x7f, 0xff, 0xe0, 0x00, + 0xff, 0xff, 0xf0, 0x00, + 0xff, 0xff, 0xf0, 0x00, + 0xff, 0x8f, 0xf8, 0x00, + 0xff, 0x07, 0xf8, 0x00, + 0xff, 0x07, 0xf8, 0x00, + 0xff, 0x07, 0xf8, 0x00, + 0x7f, 0x07, 0xf8, 0x00, + 0x7f, 0x07, 0xf8, 0x00, + 0x7f, 0x8f, 0xf0, 0x00, + 0x3f, 0xff, 0xf0, 0x00, + 0x3f, 0xff, 0xf0, 0x00, + 0x1f, 0xff, 0xe0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, + 0x07, 0xff, 0x80, 0x00, + 0x01, 0xfc, 0x00, 0x00, +}; + +/** Kerning table for character '6'. */ +static const struct kerning kerning_OpenSansExtraBold_28_0036[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '6'. */ +static const struct glyph glyph_OpenSansExtraBold_28_0036 = { + .glyph = 54, + .left = 1, + .top = 28, + .advance = 23, + .cols = 21, + .rows = 28, + .bitmap = bitmap_OpenSansExtraBold_28_0036, + .kerning = kerning_OpenSansExtraBold_28_0036, +}; + +/** Bitmap definition for character '7'. */ +static const uint8_t bitmap_OpenSansExtraBold_28_0037[] = { + 0xff, 0xff, 0xf0, 0x00, + 0xff, 0xff, 0xf0, 0x00, + 0xff, 0xff, 0xf0, 0x00, + 0xff, 0xff, 0xf0, 0x00, + 0xff, 0xff, 0xf0, 0x00, + 0xff, 0xff, 0xe0, 0x00, + 0x00, 0x1f, 0xe0, 0x00, + 0x00, 0x1f, 0xc0, 0x00, + 0x00, 0x1f, 0xc0, 0x00, + 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x3f, 0x80, 0x00, + 0x00, 0x7f, 0x80, 0x00, + 0x00, 0x7f, 0x00, 0x00, + 0x00, 0xff, 0x00, 0x00, + 0x00, 0xfe, 0x00, 0x00, + 0x01, 0xfe, 0x00, 0x00, + 0x01, 0xfe, 0x00, 0x00, + 0x01, 0xfc, 0x00, 0x00, + 0x03, 0xfc, 0x00, 0x00, + 0x03, 0xf8, 0x00, 0x00, + 0x07, 0xf8, 0x00, 0x00, + 0x07, 0xf8, 0x00, 0x00, + 0x0f, 0xf0, 0x00, 0x00, + 0x0f, 0xf0, 0x00, 0x00, + 0x0f, 0xe0, 0x00, 0x00, + 0x1f, 0xe0, 0x00, 0x00, + 0x1f, 0xc0, 0x00, 0x00, + 0x3f, 0xc0, 0x00, 0x00, +}; + +/** Kerning table for character '7'. */ +static const struct kerning kerning_OpenSansExtraBold_28_0037[] = { + { /* .left = '2' */ 50, /* .offset = */ -1 }, + { /* .left = '4' */ 52, /* .offset = */ -1 }, + { /* .left = '7' */ 55, /* .offset = */ 1 }, + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '7'. */ +static const struct glyph glyph_OpenSansExtraBold_28_0037 = { + .glyph = 55, + .left = 2, + .top = 28, + .advance = 23, + .cols = 20, + .rows = 28, + .bitmap = bitmap_OpenSansExtraBold_28_0037, + .kerning = kerning_OpenSansExtraBold_28_0037, +}; + +/** Bitmap definition for character '8'. */ +static const uint8_t bitmap_OpenSansExtraBold_28_0038[] = { + 0x03, 0xfe, 0x00, 0x00, + 0x0f, 0xff, 0x80, 0x00, + 0x1f, 0xff, 0xc0, 0x00, + 0x3f, 0xff, 0xe0, 0x00, + 0x7f, 0xff, 0xf0, 0x00, + 0x7f, 0x8f, 0xf0, 0x00, + 0x7f, 0x07, 0xf0, 0x00, + 0x7f, 0x07, 0xf0, 0x00, + 0x7f, 0x8f, 0xf0, 0x00, + 0x3f, 0xdf, 0xe0, 0x00, + 0x3f, 0xff, 0xe0, 0x00, + 0x1f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0x80, 0x00, + 0x07, 0xfe, 0x00, 0x00, + 0x0f, 0xff, 0x80, 0x00, + 0x3f, 0xff, 0xc0, 0x00, + 0x7f, 0xff, 0xe0, 0x00, + 0x7f, 0x8f, 0xf0, 0x00, + 0x7f, 0x07, 0xf0, 0x00, + 0xfe, 0x03, 0xf8, 0x00, + 0xfe, 0x03, 0xf8, 0x00, + 0xfe, 0x03, 0xf8, 0x00, + 0x7f, 0x07, 0xf0, 0x00, + 0x7f, 0xff, 0xf0, 0x00, + 0x7f, 0xff, 0xf0, 0x00, + 0x3f, 0xff, 0xe0, 0x00, + 0x0f, 0xff, 0x80, 0x00, + 0x03, 0xfe, 0x00, 0x00, +}; + +/** Kerning table for character '8'. */ +static const struct kerning kerning_OpenSansExtraBold_28_0038[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '8'. */ +static const struct glyph glyph_OpenSansExtraBold_28_0038 = { + .glyph = 56, + .left = 1, + .top = 28, + .advance = 23, + .cols = 21, + .rows = 28, + .bitmap = bitmap_OpenSansExtraBold_28_0038, + .kerning = kerning_OpenSansExtraBold_28_0038, +}; + +/** Bitmap definition for character '9'. */ +static const uint8_t bitmap_OpenSansExtraBold_28_0039[] = { + 0x03, 0xf8, 0x00, 0x00, + 0x0f, 0xff, 0x00, 0x00, + 0x1f, 0xff, 0x80, 0x00, + 0x3f, 0xff, 0xc0, 0x00, + 0x7f, 0xff, 0xe0, 0x00, + 0x7f, 0xff, 0xe0, 0x00, + 0xff, 0x0f, 0xf0, 0x00, + 0xff, 0x07, 0xf0, 0x00, + 0xfe, 0x07, 0xf0, 0x00, + 0xfe, 0x07, 0xf0, 0x00, + 0xfe, 0x07, 0xf8, 0x00, + 0xff, 0x07, 0xf8, 0x00, + 0xff, 0x0f, 0xf8, 0x00, + 0xff, 0xff, 0xf8, 0x00, + 0x7f, 0xff, 0xf8, 0x00, + 0x7f, 0xff, 0xf8, 0x00, + 0x3f, 0xfb, 0xf8, 0x00, + 0x1f, 0xf3, 0xf0, 0x00, + 0x07, 0xe7, 0xf0, 0x00, + 0x00, 0x07, 0xf0, 0x00, + 0x00, 0x1f, 0xf0, 0x00, + 0x00, 0x7f, 0xe0, 0x00, + 0x3f, 0xff, 0xe0, 0x00, + 0x3f, 0xff, 0xc0, 0x00, + 0x3f, 0xff, 0x80, 0x00, + 0x3f, 0xff, 0x00, 0x00, + 0x3f, 0xfc, 0x00, 0x00, + 0x3f, 0xe0, 0x00, 0x00, +}; + +/** Kerning table for character '9'. */ +static const struct kerning kerning_OpenSansExtraBold_28_0039[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '9'. */ +static const struct glyph glyph_OpenSansExtraBold_28_0039 = { + .glyph = 57, + .left = 1, + .top = 28, + .advance = 23, + .cols = 21, + .rows = 28, + .bitmap = bitmap_OpenSansExtraBold_28_0039, + .kerning = kerning_OpenSansExtraBold_28_0039, +}; + +/** Bitmap definition for character ':'. */ +static const uint8_t bitmap_OpenSansExtraBold_28_003a[] = { + 0x7c, 0x00, + 0xfe, 0x00, + 0xfe, 0x00, + 0xff, 0x00, + 0xfe, 0x00, + 0xfe, 0x00, + 0x7c, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x7c, 0x00, + 0xfe, 0x00, + 0xfe, 0x00, + 0xff, 0x00, + 0xfe, 0x00, + 0xfe, 0x00, + 0x7c, 0x00, +}; + +/** Kerning table for character ':'. */ +static const struct kerning kerning_OpenSansExtraBold_28_003a[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character ':'. */ +static const struct glyph glyph_OpenSansExtraBold_28_003a = { + .glyph = 58, + .left = 2, + .top = 22, + .advance = 11, + .cols = 8, + .rows = 22, + .bitmap = bitmap_OpenSansExtraBold_28_003a, + .kerning = kerning_OpenSansExtraBold_28_003a, +}; + +/** Bitmap definition for character 'A'. */ +static const uint8_t bitmap_OpenSansExtraBold_28_0041[] = { + 0x00, 0x7f, 0xe0, 0x00, + 0x00, 0xff, 0xe0, 0x00, + 0x00, 0xff, 0xf0, 0x00, + 0x00, 0xff, 0xf0, 0x00, + 0x01, 0xff, 0xf0, 0x00, + 0x01, 0xff, 0xf8, 0x00, + 0x01, 0xff, 0xf8, 0x00, + 0x01, 0xf9, 0xf8, 0x00, + 0x03, 0xf9, 0xfc, 0x00, + 0x03, 0xf9, 0xfc, 0x00, + 0x03, 0xf9, 0xfc, 0x00, + 0x07, 0xf0, 0xfe, 0x00, + 0x07, 0xf0, 0xfe, 0x00, + 0x07, 0xf0, 0xfe, 0x00, + 0x0f, 0xf0, 0xff, 0x00, + 0x0f, 0xf0, 0x7f, 0x00, + 0x0f, 0xe0, 0x7f, 0x00, + 0x1f, 0xff, 0xff, 0x80, + 0x1f, 0xff, 0xff, 0x80, + 0x1f, 0xff, 0xff, 0x80, + 0x3f, 0xff, 0xff, 0xc0, + 0x3f, 0xff, 0xff, 0xc0, + 0x3f, 0xff, 0xff, 0xc0, + 0x7f, 0xc0, 0x1f, 0xe0, + 0x7f, 0x80, 0x1f, 0xe0, + 0x7f, 0x80, 0x1f, 0xe0, + 0xff, 0x80, 0x1f, 0xf0, + 0xff, 0x00, 0x0f, 0xf0, +}; + +/** Kerning table for character 'A'. */ +static const struct kerning kerning_OpenSansExtraBold_28_0041[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character 'A'. */ +static const struct glyph glyph_OpenSansExtraBold_28_0041 = { + .glyph = 65, + .left = 0, + .top = 28, + .advance = 28, + .cols = 28, + .rows = 28, + .bitmap = bitmap_OpenSansExtraBold_28_0041, + .kerning = kerning_OpenSansExtraBold_28_0041, +}; + +/** Bitmap definition for character 'M'. */ +static const uint8_t bitmap_OpenSansExtraBold_28_004d[] = { + 0xff, 0xc0, 0x03, 0xff, + 0xff, 0xe0, 0x07, 0xff, + 0xff, 0xe0, 0x07, 0xff, + 0xff, 0xe0, 0x07, 0xff, + 0xff, 0xe0, 0x07, 0xff, + 0xff, 0xf0, 0x0f, 0xff, + 0xff, 0xf0, 0x0f, 0xff, + 0xff, 0xf0, 0x0f, 0xff, + 0xfd, 0xf8, 0x1f, 0xff, + 0xfd, 0xf8, 0x1f, 0xff, + 0xfd, 0xf8, 0x1f, 0x7f, + 0xfe, 0xf8, 0x1f, 0x7f, + 0xfe, 0xfc, 0x3f, 0x7f, + 0xfe, 0xfc, 0x3f, 0x7f, + 0xfe, 0xfc, 0x3e, 0x7f, + 0xfe, 0x7e, 0x7e, 0x7f, + 0xfe, 0x7e, 0x7e, 0x7f, + 0xfe, 0x7e, 0x7c, 0x7f, + 0xfe, 0x3f, 0x7c, 0x7f, + 0xfe, 0x3f, 0xfc, 0x7f, + 0xfe, 0x3f, 0xfc, 0x7f, + 0xfe, 0x3f, 0xf8, 0x7f, + 0xfe, 0x1f, 0xf8, 0x7f, + 0xfe, 0x1f, 0xf8, 0x7f, + 0xfe, 0x1f, 0xf0, 0x7f, + 0xfe, 0x0f, 0xf0, 0x7f, + 0xfe, 0x0f, 0xf0, 0x7f, + 0xfe, 0x0f, 0xf0, 0x7f, +}; + +/** Kerning table for character 'M'. */ +static const struct kerning kerning_OpenSansExtraBold_28_004d[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character 'M'. */ +static const struct glyph glyph_OpenSansExtraBold_28_004d = { + .glyph = 77, + .left = 3, + .top = 28, + .advance = 38, + .cols = 32, + .rows = 28, + .bitmap = bitmap_OpenSansExtraBold_28_004d, + .kerning = kerning_OpenSansExtraBold_28_004d, +}; + +/** Bitmap definition for character 'P'. */ +static const uint8_t bitmap_OpenSansExtraBold_28_0050[] = { + 0xff, 0xfc, 0x00, 0x00, + 0xff, 0xff, 0x80, 0x00, + 0xff, 0xff, 0xc0, 0x00, + 0xff, 0xff, 0xe0, 0x00, + 0xff, 0xff, 0xf0, 0x00, + 0xff, 0xff, 0xf0, 0x00, + 0xff, 0x0f, 0xf0, 0x00, + 0xff, 0x07, 0xf0, 0x00, + 0xff, 0x07, 0xf8, 0x00, + 0xff, 0x07, 0xf8, 0x00, + 0xff, 0x07, 0xf0, 0x00, + 0xff, 0x0f, 0xf0, 0x00, + 0xff, 0x1f, 0xf0, 0x00, + 0xff, 0xff, 0xf0, 0x00, + 0xff, 0xff, 0xe0, 0x00, + 0xff, 0xff, 0xe0, 0x00, + 0xff, 0xff, 0xc0, 0x00, + 0xff, 0xff, 0x00, 0x00, + 0xff, 0xfc, 0x00, 0x00, + 0xff, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x00, 0x00, +}; + +/** Kerning table for character 'P'. */ +static const struct kerning kerning_OpenSansExtraBold_28_0050[] = { + { /* .left = '7' */ 55, /* .offset = */ -2 }, + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character 'P'. */ +static const struct glyph glyph_OpenSansExtraBold_28_0050 = { + .glyph = 80, + .left = 3, + .top = 28, + .advance = 25, + .cols = 21, + .rows = 28, + .bitmap = bitmap_OpenSansExtraBold_28_0050, + .kerning = kerning_OpenSansExtraBold_28_0050, +}; + +/** Glyphs table for font "Open Sans". */ +static const struct glyph *glyphs_OpenSansExtraBold_28[] = { + &glyph_OpenSansExtraBold_28_0020, /* U+0020 ' ' */ + &glyph_OpenSansExtraBold_28_0030, /* U+0030 '0' */ + &glyph_OpenSansExtraBold_28_0031, /* U+0031 '1' */ + &glyph_OpenSansExtraBold_28_0032, /* U+0032 '2' */ + &glyph_OpenSansExtraBold_28_0033, /* U+0033 '3' */ + &glyph_OpenSansExtraBold_28_0034, /* U+0034 '4' */ + &glyph_OpenSansExtraBold_28_0035, /* U+0035 '5' */ + &glyph_OpenSansExtraBold_28_0036, /* U+0036 '6' */ + &glyph_OpenSansExtraBold_28_0037, /* U+0037 '7' */ + &glyph_OpenSansExtraBold_28_0038, /* U+0038 '8' */ + &glyph_OpenSansExtraBold_28_0039, /* U+0039 '9' */ + &glyph_OpenSansExtraBold_28_003a, /* U+003A ':' */ + &glyph_OpenSansExtraBold_28_0041, /* U+0041 'A' */ + &glyph_OpenSansExtraBold_28_004d, /* U+004D 'M' */ + &glyph_OpenSansExtraBold_28_0050, /* U+0050 'P' */ +}; + +/** Definition for font "Open Sans". */ +const struct font font_OpenSansExtraBold_28 = { + .name = "Open Sans", + .style = "ExtraBold", + .size = 28, + .dpi = 100, + .count = 15, + .max = 80, + .ascender = 42, + .descender = -12, + .height = 53, + .glyphs = glyphs_OpenSansExtraBold_28, + .compressed = 0, +}; + diff --git a/lib/fonts/font-OpenSansExtraBold-28.h b/lib/fonts/font-OpenSansExtraBold-28.h new file mode 100644 index 0000000..e31348f --- /dev/null +++ b/lib/fonts/font-OpenSansExtraBold-28.h @@ -0,0 +1,15 @@ +/* AUTOMATICALLY GENERATED FILE! EDITING NOT RECOMMENDED! + * + * This file is distributed under the terms of the MIT License. + * See the LICENSE file at the top of this tree, or if it is missing a copy can + * be found at http://opensource.org/licenses/MIT + */ + +#ifndef _FONTEM_OpenSansExtraBold_28_H +#define _FONTEM_OpenSansExtraBold_28_H + +#include "fontem.h" + +extern const struct font font_OpenSansExtraBold_28; + +#endif /* _FONTEM_OpenSansExtraBold_28_H */ diff --git a/lib/fonts/font-OpenSansExtraBold-32.c b/lib/fonts/font-OpenSansExtraBold-32.c new file mode 100644 index 0000000..627f8fa --- /dev/null +++ b/lib/fonts/font-OpenSansExtraBold-32.c @@ -0,0 +1,793 @@ +/* AUTOMATICALLY GENERATED FILE! EDITING NOT RECOMMENDED! + * + * This file is distributed under the terms of the MIT License. + * See the LICENSE file at the top of this tree, or if it is missing a copy can + * be found at http://opensource.org/licenses/MIT + */ + +#include +#include +#include "fontem.h" +#include "font-OpenSansExtraBold-32.h" + +/* Character list: 0123456789:APM */ + +/** Kerning table for character ' '. */ +static const struct kerning kerning_OpenSansExtraBold_32_0020[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character ' '. */ +static const struct glyph glyph_OpenSansExtraBold_32_0020 = { + .glyph = 32, + .left = 0, + .top = 0, + .advance = 11, + .cols = 0, + .rows = 0, + .bitmap = NULL, + .kerning = kerning_OpenSansExtraBold_32_0020, +}; + +/** Bitmap definition for character '0'. */ +static const uint8_t bitmap_OpenSansExtraBold_32_0030[] = { + 0x01, 0xfe, 0x00, 0x00, + 0x07, 0xff, 0x80, 0x00, + 0x1f, 0xff, 0xc0, 0x00, + 0x1f, 0xff, 0xe0, 0x00, + 0x3f, 0xff, 0xf0, 0x00, + 0x7f, 0xff, 0xf0, 0x00, + 0x7f, 0xff, 0xf8, 0x00, + 0x7f, 0xcf, 0xf8, 0x00, + 0xff, 0x87, 0xfc, 0x00, + 0xff, 0x07, 0xfc, 0x00, + 0xff, 0x03, 0xfc, 0x00, + 0xff, 0x03, 0xfc, 0x00, + 0xff, 0x03, 0xfc, 0x00, + 0xff, 0x03, 0xfc, 0x00, + 0xff, 0x03, 0xfc, 0x00, + 0xff, 0x03, 0xfc, 0x00, + 0xff, 0x03, 0xfc, 0x00, + 0xff, 0x03, 0xfc, 0x00, + 0xff, 0x03, 0xfc, 0x00, + 0xff, 0x03, 0xfc, 0x00, + 0xff, 0x03, 0xfc, 0x00, + 0xff, 0x07, 0xfc, 0x00, + 0xff, 0x87, 0xfc, 0x00, + 0x7f, 0xcf, 0xf8, 0x00, + 0x7f, 0xff, 0xf8, 0x00, + 0x7f, 0xff, 0xf8, 0x00, + 0x3f, 0xff, 0xf0, 0x00, + 0x1f, 0xff, 0xe0, 0x00, + 0x0f, 0xff, 0xe0, 0x00, + 0x07, 0xff, 0x80, 0x00, + 0x01, 0xfe, 0x00, 0x00, +}; + +/** Kerning table for character '0'. */ +static const struct kerning kerning_OpenSansExtraBold_32_0030[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '0'. */ +static const struct glyph glyph_OpenSansExtraBold_32_0030 = { + .glyph = 48, + .left = 2, + .top = 31, + .advance = 26, + .cols = 22, + .rows = 31, + .bitmap = bitmap_OpenSansExtraBold_32_0030, + .kerning = kerning_OpenSansExtraBold_32_0030, +}; + +/** Bitmap definition for character '1'. */ +static const uint8_t bitmap_OpenSansExtraBold_32_0031[] = { + 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x7f, 0xc0, 0x00, + 0x00, 0xff, 0xc0, 0x00, + 0x03, 0xff, 0xc0, 0x00, + 0x07, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, + 0x1f, 0xff, 0xc0, 0x00, + 0x7f, 0xff, 0xc0, 0x00, + 0xff, 0xff, 0xc0, 0x00, + 0x7f, 0xff, 0xc0, 0x00, + 0x7f, 0xbf, 0xc0, 0x00, + 0x3f, 0x3f, 0xc0, 0x00, + 0x1c, 0x3f, 0xc0, 0x00, + 0x08, 0x3f, 0xc0, 0x00, + 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x3f, 0xc0, 0x00, +}; + +/** Kerning table for character '1'. */ +static const struct kerning kerning_OpenSansExtraBold_32_0031[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '1'. */ +static const struct glyph glyph_OpenSansExtraBold_32_0031 = { + .glyph = 49, + .left = 2, + .top = 31, + .advance = 26, + .cols = 18, + .rows = 31, + .bitmap = bitmap_OpenSansExtraBold_32_0031, + .kerning = kerning_OpenSansExtraBold_32_0031, +}; + +/** Bitmap definition for character '2'. */ +static const uint8_t bitmap_OpenSansExtraBold_32_0032[] = { + 0x00, 0xff, 0x00, 0x00, + 0x07, 0xff, 0xc0, 0x00, + 0x1f, 0xff, 0xf0, 0x00, + 0x3f, 0xff, 0xf8, 0x00, + 0xff, 0xff, 0xfc, 0x00, + 0xff, 0xff, 0xfc, 0x00, + 0x7f, 0xff, 0xfc, 0x00, + 0x3f, 0x87, 0xfe, 0x00, + 0x1e, 0x03, 0xfe, 0x00, + 0x0c, 0x03, 0xfe, 0x00, + 0x00, 0x03, 0xfe, 0x00, + 0x00, 0x03, 0xfc, 0x00, + 0x00, 0x07, 0xfc, 0x00, + 0x00, 0x0f, 0xf8, 0x00, + 0x00, 0x1f, 0xf8, 0x00, + 0x00, 0x1f, 0xf0, 0x00, + 0x00, 0x3f, 0xe0, 0x00, + 0x00, 0x7f, 0xc0, 0x00, + 0x00, 0xff, 0x80, 0x00, + 0x03, 0xff, 0x00, 0x00, + 0x07, 0xfe, 0x00, 0x00, + 0x0f, 0xfc, 0x00, 0x00, + 0x1f, 0xf8, 0x00, 0x00, + 0x3f, 0xf0, 0x00, 0x00, + 0x7f, 0xff, 0xfe, 0x00, + 0xff, 0xff, 0xfe, 0x00, + 0xff, 0xff, 0xfe, 0x00, + 0xff, 0xff, 0xfe, 0x00, + 0xff, 0xff, 0xfe, 0x00, + 0xff, 0xff, 0xfe, 0x00, + 0xff, 0xff, 0xfe, 0x00, +}; + +/** Kerning table for character '2'. */ +static const struct kerning kerning_OpenSansExtraBold_32_0032[] = { + { /* .left = '7' */ 55, /* .offset = */ -1 }, + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '2'. */ +static const struct glyph glyph_OpenSansExtraBold_32_0032 = { + .glyph = 50, + .left = 1, + .top = 31, + .advance = 26, + .cols = 23, + .rows = 31, + .bitmap = bitmap_OpenSansExtraBold_32_0032, + .kerning = kerning_OpenSansExtraBold_32_0032, +}; + +/** Bitmap definition for character '3'. */ +static const uint8_t bitmap_OpenSansExtraBold_32_0033[] = { + 0x03, 0xfe, 0x00, 0x00, + 0x1f, 0xff, 0xc0, 0x00, + 0x7f, 0xff, 0xe0, 0x00, + 0xff, 0xff, 0xf0, 0x00, + 0xff, 0xff, 0xf8, 0x00, + 0x7f, 0xff, 0xf8, 0x00, + 0x3f, 0xff, 0xf8, 0x00, + 0x3c, 0x0f, 0xf8, 0x00, + 0x10, 0x07, 0xf8, 0x00, + 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x0f, 0xf8, 0x00, + 0x00, 0x1f, 0xf0, 0x00, + 0x0f, 0xff, 0xe0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0x00, 0x00, + 0x0f, 0xff, 0x00, 0x00, + 0x0f, 0xff, 0xe0, 0x00, + 0x0f, 0xff, 0xf0, 0x00, + 0x0f, 0xff, 0xf8, 0x00, + 0x00, 0x1f, 0xfc, 0x00, + 0x00, 0x07, 0xfc, 0x00, + 0x00, 0x07, 0xfc, 0x00, + 0x80, 0x07, 0xfc, 0x00, + 0xf0, 0x0f, 0xfc, 0x00, + 0xff, 0xff, 0xfc, 0x00, + 0xff, 0xff, 0xf8, 0x00, + 0xff, 0xff, 0xf8, 0x00, + 0xff, 0xff, 0xf0, 0x00, + 0xff, 0xff, 0xe0, 0x00, + 0xff, 0xff, 0x80, 0x00, + 0x0f, 0xfc, 0x00, 0x00, +}; + +/** Kerning table for character '3'. */ +static const struct kerning kerning_OpenSansExtraBold_32_0033[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '3'. */ +static const struct glyph glyph_OpenSansExtraBold_32_0033 = { + .glyph = 51, + .left = 2, + .top = 31, + .advance = 26, + .cols = 22, + .rows = 31, + .bitmap = bitmap_OpenSansExtraBold_32_0033, + .kerning = kerning_OpenSansExtraBold_32_0033, +}; + +/** Bitmap definition for character '4'. */ +static const uint8_t bitmap_OpenSansExtraBold_32_0034[] = { + 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x0f, 0xf8, 0x00, + 0x00, 0x1f, 0xf8, 0x00, + 0x00, 0x1f, 0xf8, 0x00, + 0x00, 0x3f, 0xf8, 0x00, + 0x00, 0x7f, 0xf8, 0x00, + 0x00, 0xff, 0xf8, 0x00, + 0x00, 0xff, 0xf8, 0x00, + 0x01, 0xff, 0xf8, 0x00, + 0x03, 0xff, 0xf8, 0x00, + 0x03, 0xff, 0xf8, 0x00, + 0x07, 0xff, 0xf8, 0x00, + 0x0f, 0xef, 0xf8, 0x00, + 0x0f, 0xef, 0xf8, 0x00, + 0x1f, 0xcf, 0xf8, 0x00, + 0x3f, 0xcf, 0xf8, 0x00, + 0x3f, 0x8f, 0xf8, 0x00, + 0x7f, 0x0f, 0xf8, 0x00, + 0xfe, 0x0f, 0xf8, 0x00, + 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, + 0x00, 0x0f, 0xf8, 0x00, + 0x00, 0x0f, 0xf8, 0x00, + 0x00, 0x0f, 0xf8, 0x00, + 0x00, 0x0f, 0xf8, 0x00, + 0x00, 0x0f, 0xf8, 0x00, +}; + +/** Kerning table for character '4'. */ +static const struct kerning kerning_OpenSansExtraBold_32_0034[] = { + { /* .left = '7' */ 55, /* .offset = */ -1 }, + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '4'. */ +static const struct glyph glyph_OpenSansExtraBold_32_0034 = { + .glyph = 52, + .left = 1, + .top = 31, + .advance = 26, + .cols = 24, + .rows = 31, + .bitmap = bitmap_OpenSansExtraBold_32_0034, + .kerning = kerning_OpenSansExtraBold_32_0034, +}; + +/** Bitmap definition for character '5'. */ +static const uint8_t bitmap_OpenSansExtraBold_32_0035[] = { + 0x3f, 0xff, 0xf0, 0x00, + 0x3f, 0xff, 0xf0, 0x00, + 0x3f, 0xff, 0xf0, 0x00, + 0x3f, 0xff, 0xf0, 0x00, + 0x7f, 0xff, 0xf0, 0x00, + 0x7f, 0xff, 0xf0, 0x00, + 0x7f, 0xff, 0xf0, 0x00, + 0x7f, 0x80, 0x00, 0x00, + 0x7f, 0x80, 0x00, 0x00, + 0x7f, 0x80, 0x00, 0x00, + 0x7f, 0x80, 0x00, 0x00, + 0x7f, 0xff, 0x00, 0x00, + 0x7f, 0xff, 0xc0, 0x00, + 0x7f, 0xff, 0xe0, 0x00, + 0x7f, 0xff, 0xf0, 0x00, + 0x7f, 0xff, 0xf8, 0x00, + 0x7f, 0xff, 0xf8, 0x00, + 0x7f, 0xff, 0xfc, 0x00, + 0x18, 0x1f, 0xfc, 0x00, + 0x00, 0x07, 0xfc, 0x00, + 0x00, 0x07, 0xfc, 0x00, + 0x00, 0x07, 0xfc, 0x00, + 0x80, 0x07, 0xfc, 0x00, + 0xf8, 0x0f, 0xfc, 0x00, + 0xff, 0xff, 0xf8, 0x00, + 0xff, 0xff, 0xf8, 0x00, + 0xff, 0xff, 0xf0, 0x00, + 0xff, 0xff, 0xf0, 0x00, + 0xff, 0xff, 0xe0, 0x00, + 0x7f, 0xff, 0x80, 0x00, + 0x0f, 0xfc, 0x00, 0x00, +}; + +/** Kerning table for character '5'. */ +static const struct kerning kerning_OpenSansExtraBold_32_0035[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '5'. */ +static const struct glyph glyph_OpenSansExtraBold_32_0035 = { + .glyph = 53, + .left = 2, + .top = 31, + .advance = 26, + .cols = 22, + .rows = 31, + .bitmap = bitmap_OpenSansExtraBold_32_0035, + .kerning = kerning_OpenSansExtraBold_32_0035, +}; + +/** Bitmap definition for character '6'. */ +static const uint8_t bitmap_OpenSansExtraBold_32_0036[] = { + 0x00, 0x1f, 0xf8, 0x00, + 0x00, 0xff, 0xf8, 0x00, + 0x03, 0xff, 0xf8, 0x00, + 0x07, 0xff, 0xf8, 0x00, + 0x1f, 0xff, 0xf8, 0x00, + 0x1f, 0xff, 0xf8, 0x00, + 0x3f, 0xff, 0xf8, 0x00, + 0x7f, 0xf0, 0x00, 0x00, + 0x7f, 0xc0, 0x00, 0x00, + 0x7f, 0x80, 0x00, 0x00, + 0xff, 0x1f, 0x80, 0x00, + 0xff, 0x7f, 0xe0, 0x00, + 0xfe, 0xff, 0xf0, 0x00, + 0xfe, 0xff, 0xf8, 0x00, + 0xff, 0xff, 0xfc, 0x00, + 0xff, 0xff, 0xfc, 0x00, + 0xff, 0xff, 0xfc, 0x00, + 0xff, 0x87, 0xfc, 0x00, + 0xff, 0x03, 0xfe, 0x00, + 0xff, 0x03, 0xfe, 0x00, + 0xff, 0x03, 0xfe, 0x00, + 0xff, 0x03, 0xfe, 0x00, + 0xff, 0x83, 0xfc, 0x00, + 0xff, 0xc7, 0xfc, 0x00, + 0x7f, 0xff, 0xfc, 0x00, + 0x7f, 0xff, 0xfc, 0x00, + 0x3f, 0xff, 0xf8, 0x00, + 0x1f, 0xff, 0xf0, 0x00, + 0x0f, 0xff, 0xe0, 0x00, + 0x07, 0xff, 0xc0, 0x00, + 0x00, 0xfe, 0x00, 0x00, +}; + +/** Kerning table for character '6'. */ +static const struct kerning kerning_OpenSansExtraBold_32_0036[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '6'. */ +static const struct glyph glyph_OpenSansExtraBold_32_0036 = { + .glyph = 54, + .left = 2, + .top = 31, + .advance = 26, + .cols = 23, + .rows = 31, + .bitmap = bitmap_OpenSansExtraBold_32_0036, + .kerning = kerning_OpenSansExtraBold_32_0036, +}; + +/** Bitmap definition for character '7'. */ +static const uint8_t bitmap_OpenSansExtraBold_32_0037[] = { + 0xff, 0xff, 0xfe, 0x00, + 0xff, 0xff, 0xfe, 0x00, + 0xff, 0xff, 0xfe, 0x00, + 0xff, 0xff, 0xfe, 0x00, + 0xff, 0xff, 0xfe, 0x00, + 0xff, 0xff, 0xfc, 0x00, + 0xff, 0xff, 0xfc, 0x00, + 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x0f, 0xf8, 0x00, + 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x1f, 0xf0, 0x00, + 0x00, 0x1f, 0xe0, 0x00, + 0x00, 0x1f, 0xe0, 0x00, + 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x7f, 0xc0, 0x00, + 0x00, 0x7f, 0x80, 0x00, + 0x00, 0xff, 0x80, 0x00, + 0x00, 0xff, 0x00, 0x00, + 0x01, 0xff, 0x00, 0x00, + 0x01, 0xfe, 0x00, 0x00, + 0x03, 0xfe, 0x00, 0x00, + 0x03, 0xfe, 0x00, 0x00, + 0x03, 0xfc, 0x00, 0x00, + 0x07, 0xfc, 0x00, 0x00, + 0x07, 0xf8, 0x00, 0x00, + 0x0f, 0xf8, 0x00, 0x00, + 0x0f, 0xf0, 0x00, 0x00, + 0x1f, 0xf0, 0x00, 0x00, + 0x1f, 0xf0, 0x00, 0x00, +}; + +/** Kerning table for character '7'. */ +static const struct kerning kerning_OpenSansExtraBold_32_0037[] = { + { /* .left = '2' */ 50, /* .offset = */ -1 }, + { /* .left = '4' */ 52, /* .offset = */ -1 }, + { /* .left = '7' */ 55, /* .offset = */ 1 }, + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '7'. */ +static const struct glyph glyph_OpenSansExtraBold_32_0037 = { + .glyph = 55, + .left = 2, + .top = 31, + .advance = 26, + .cols = 23, + .rows = 31, + .bitmap = bitmap_OpenSansExtraBold_32_0037, + .kerning = kerning_OpenSansExtraBold_32_0037, +}; + +/** Bitmap definition for character '8'. */ +static const uint8_t bitmap_OpenSansExtraBold_32_0038[] = { + 0x00, 0xff, 0x80, 0x00, + 0x07, 0xff, 0xe0, 0x00, + 0x0f, 0xff, 0xf8, 0x00, + 0x1f, 0xff, 0xf8, 0x00, + 0x3f, 0xff, 0xfc, 0x00, + 0x3f, 0xff, 0xfc, 0x00, + 0x7f, 0xc3, 0xfe, 0x00, + 0x7f, 0x81, 0xfe, 0x00, + 0x7f, 0x81, 0xfe, 0x00, + 0x3f, 0xc3, 0xfc, 0x00, + 0x3f, 0xe7, 0xfc, 0x00, + 0x1f, 0xff, 0xf8, 0x00, + 0x1f, 0xff, 0xf8, 0x00, + 0x0f, 0xff, 0xe0, 0x00, + 0x03, 0xff, 0xc0, 0x00, + 0x07, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xf0, 0x00, + 0x3f, 0xff, 0xf8, 0x00, + 0x3f, 0xff, 0xfc, 0x00, + 0x7f, 0xc7, 0xfe, 0x00, + 0x7f, 0x81, 0xfe, 0x00, + 0x7f, 0x00, 0xfe, 0x00, + 0xff, 0x00, 0xff, 0x00, + 0xff, 0x80, 0xff, 0x00, + 0x7f, 0xc1, 0xfe, 0x00, + 0x7f, 0xff, 0xfe, 0x00, + 0x7f, 0xff, 0xfe, 0x00, + 0x3f, 0xff, 0xfc, 0x00, + 0x1f, 0xff, 0xf8, 0x00, + 0x0f, 0xff, 0xe0, 0x00, + 0x01, 0xff, 0x80, 0x00, +}; + +/** Kerning table for character '8'. */ +static const struct kerning kerning_OpenSansExtraBold_32_0038[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '8'. */ +static const struct glyph glyph_OpenSansExtraBold_32_0038 = { + .glyph = 56, + .left = 1, + .top = 31, + .advance = 26, + .cols = 24, + .rows = 31, + .bitmap = bitmap_OpenSansExtraBold_32_0038, + .kerning = kerning_OpenSansExtraBold_32_0038, +}; + +/** Bitmap definition for character '9'. */ +static const uint8_t bitmap_OpenSansExtraBold_32_0039[] = { + 0x01, 0xfe, 0x00, 0x00, + 0x07, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xe0, 0x00, + 0x1f, 0xff, 0xf0, 0x00, + 0x3f, 0xff, 0xf8, 0x00, + 0x7f, 0xff, 0xfc, 0x00, + 0x7f, 0xff, 0xfc, 0x00, + 0x7f, 0xc7, 0xfe, 0x00, + 0xff, 0x83, 0xfe, 0x00, + 0xff, 0x01, 0xfe, 0x00, + 0xff, 0x01, 0xfe, 0x00, + 0xff, 0x01, 0xfe, 0x00, + 0xff, 0x81, 0xfe, 0x00, + 0xff, 0xc7, 0xff, 0x00, + 0x7f, 0xff, 0xff, 0x00, + 0x7f, 0xff, 0xff, 0x00, + 0x7f, 0xff, 0xfe, 0x00, + 0x3f, 0xfe, 0xfe, 0x00, + 0x1f, 0xfe, 0xfe, 0x00, + 0x0f, 0xfd, 0xfe, 0x00, + 0x03, 0xf1, 0xfe, 0x00, + 0x00, 0x03, 0xfe, 0x00, + 0x00, 0x07, 0xfc, 0x00, + 0x00, 0x3f, 0xfc, 0x00, + 0x3f, 0xff, 0xf8, 0x00, + 0x3f, 0xff, 0xf8, 0x00, + 0x3f, 0xff, 0xf0, 0x00, + 0x3f, 0xff, 0xe0, 0x00, + 0x3f, 0xff, 0xc0, 0x00, + 0x3f, 0xff, 0x00, 0x00, + 0x3f, 0xf0, 0x00, 0x00, +}; + +/** Kerning table for character '9'. */ +static const struct kerning kerning_OpenSansExtraBold_32_0039[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '9'. */ +static const struct glyph glyph_OpenSansExtraBold_32_0039 = { + .glyph = 57, + .left = 1, + .top = 31, + .advance = 26, + .cols = 24, + .rows = 31, + .bitmap = bitmap_OpenSansExtraBold_32_0039, + .kerning = kerning_OpenSansExtraBold_32_0039, +}; + +/** Bitmap definition for character ':'. */ +static const uint8_t bitmap_OpenSansExtraBold_32_003a[] = { + 0x3e, 0x00, + 0x7f, 0x00, + 0xff, 0x80, + 0xff, 0x80, + 0xff, 0x80, + 0xff, 0x80, + 0x7f, 0x00, + 0x3e, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x3e, 0x00, + 0x7f, 0x00, + 0xff, 0x80, + 0xff, 0x80, + 0xff, 0x80, + 0xff, 0x80, + 0x7f, 0x00, + 0x3e, 0x00, +}; + +/** Kerning table for character ':'. */ +static const struct kerning kerning_OpenSansExtraBold_32_003a[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character ':'. */ +static const struct glyph glyph_OpenSansExtraBold_32_003a = { + .glyph = 58, + .left = 2, + .top = 25, + .advance = 13, + .cols = 9, + .rows = 25, + .bitmap = bitmap_OpenSansExtraBold_32_003a, + .kerning = kerning_OpenSansExtraBold_32_003a, +}; + +/** Bitmap definition for character 'A'. */ +static const uint8_t bitmap_OpenSansExtraBold_32_0041[] = { + 0x00, 0x3f, 0xfc, 0x00, + 0x00, 0x3f, 0xfc, 0x00, + 0x00, 0x7f, 0xfc, 0x00, + 0x00, 0x7f, 0xfe, 0x00, + 0x00, 0x7f, 0xfe, 0x00, + 0x00, 0xff, 0xfe, 0x00, + 0x00, 0xff, 0xff, 0x00, + 0x00, 0xfe, 0xff, 0x00, + 0x01, 0xfe, 0x7f, 0x00, + 0x01, 0xfe, 0x7f, 0x80, + 0x01, 0xfe, 0x7f, 0x80, + 0x03, 0xfc, 0x3f, 0x80, + 0x03, 0xfc, 0x3f, 0xc0, + 0x03, 0xfc, 0x3f, 0xc0, + 0x07, 0xfc, 0x3f, 0xc0, + 0x07, 0xf8, 0x1f, 0xe0, + 0x07, 0xf8, 0x1f, 0xe0, + 0x0f, 0xf8, 0x1f, 0xe0, + 0x0f, 0xff, 0xff, 0xf0, + 0x0f, 0xff, 0xff, 0xf0, + 0x1f, 0xff, 0xff, 0xf0, + 0x1f, 0xff, 0xff, 0xf8, + 0x1f, 0xff, 0xff, 0xf8, + 0x3f, 0xff, 0xff, 0xf8, + 0x3f, 0xff, 0xff, 0xfc, + 0x3f, 0xe0, 0x07, 0xfc, + 0x7f, 0xe0, 0x03, 0xfc, + 0x7f, 0xc0, 0x03, 0xfe, + 0x7f, 0xc0, 0x03, 0xfe, + 0xff, 0xc0, 0x03, 0xff, + 0xff, 0x80, 0x01, 0xff, +}; + +/** Kerning table for character 'A'. */ +static const struct kerning kerning_OpenSansExtraBold_32_0041[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character 'A'. */ +static const struct glyph glyph_OpenSansExtraBold_32_0041 = { + .glyph = 65, + .left = 0, + .top = 31, + .advance = 32, + .cols = 32, + .rows = 31, + .bitmap = bitmap_OpenSansExtraBold_32_0041, + .kerning = kerning_OpenSansExtraBold_32_0041, +}; + +/** Bitmap definition for character 'M'. */ +static const uint8_t bitmap_OpenSansExtraBold_32_004d[] = { + 0xff, 0xf0, 0x00, 0x7f, 0xf8, 0x00, + 0xff, 0xf0, 0x00, 0x7f, 0xf8, 0x00, + 0xff, 0xf8, 0x00, 0xff, 0xf8, 0x00, + 0xff, 0xf8, 0x00, 0xff, 0xf8, 0x00, + 0xff, 0xf8, 0x00, 0xff, 0xf8, 0x00, + 0xff, 0xf8, 0x00, 0xff, 0xf8, 0x00, + 0xff, 0xfc, 0x01, 0xff, 0xf8, 0x00, + 0xff, 0xfc, 0x01, 0xff, 0xf8, 0x00, + 0xff, 0xfc, 0x01, 0xff, 0xf8, 0x00, + 0xff, 0xfe, 0x03, 0xff, 0xf8, 0x00, + 0xff, 0xfe, 0x03, 0xf7, 0xf8, 0x00, + 0xff, 0x7e, 0x03, 0xf7, 0xf8, 0x00, + 0xff, 0x7f, 0x07, 0xf7, 0xf8, 0x00, + 0xff, 0x7f, 0x07, 0xf7, 0xf8, 0x00, + 0xff, 0x7f, 0x07, 0xe7, 0xf8, 0x00, + 0xff, 0x3f, 0x87, 0xe7, 0xf8, 0x00, + 0xff, 0x3f, 0x8f, 0xe7, 0xf8, 0x00, + 0xff, 0x3f, 0x8f, 0xc7, 0xf8, 0x00, + 0xff, 0x1f, 0x8f, 0xc7, 0xf8, 0x00, + 0xff, 0x1f, 0xdf, 0xc7, 0xf8, 0x00, + 0xff, 0x1f, 0xdf, 0x87, 0xf8, 0x00, + 0xff, 0x0f, 0xdf, 0x87, 0xf8, 0x00, + 0xff, 0x0f, 0xff, 0x87, 0xf8, 0x00, + 0xff, 0x0f, 0xff, 0x87, 0xf8, 0x00, + 0xff, 0x0f, 0xff, 0x07, 0xf8, 0x00, + 0xff, 0x07, 0xff, 0x07, 0xf8, 0x00, + 0xff, 0x07, 0xff, 0x07, 0xf8, 0x00, + 0xff, 0x07, 0xfe, 0x07, 0xf8, 0x00, + 0xff, 0x03, 0xfe, 0x07, 0xf8, 0x00, + 0xff, 0x03, 0xfe, 0x07, 0xf8, 0x00, + 0xff, 0x03, 0xfe, 0x07, 0xf8, 0x00, +}; + +/** Kerning table for character 'M'. */ +static const struct kerning kerning_OpenSansExtraBold_32_004d[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character 'M'. */ +static const struct glyph glyph_OpenSansExtraBold_32_004d = { + .glyph = 77, + .left = 3, + .top = 31, + .advance = 43, + .cols = 37, + .rows = 31, + .bitmap = bitmap_OpenSansExtraBold_32_004d, + .kerning = kerning_OpenSansExtraBold_32_004d, +}; + +/** Bitmap definition for character 'P'. */ +static const uint8_t bitmap_OpenSansExtraBold_32_0050[] = { + 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0xe0, 0x00, + 0xff, 0xff, 0xf0, 0x00, + 0xff, 0xff, 0xf8, 0x00, + 0xff, 0xff, 0xfc, 0x00, + 0xff, 0xff, 0xfc, 0x00, + 0xff, 0xff, 0xfe, 0x00, + 0xff, 0x87, 0xfe, 0x00, + 0xff, 0x83, 0xfe, 0x00, + 0xff, 0x81, 0xfe, 0x00, + 0xff, 0x81, 0xfe, 0x00, + 0xff, 0x81, 0xfe, 0x00, + 0xff, 0x83, 0xfe, 0x00, + 0xff, 0x87, 0xfe, 0x00, + 0xff, 0xff, 0xfe, 0x00, + 0xff, 0xff, 0xfc, 0x00, + 0xff, 0xff, 0xfc, 0x00, + 0xff, 0xff, 0xf8, 0x00, + 0xff, 0xff, 0xf0, 0x00, + 0xff, 0xff, 0xc0, 0x00, + 0xff, 0xff, 0x00, 0x00, + 0xff, 0x80, 0x00, 0x00, + 0xff, 0x80, 0x00, 0x00, + 0xff, 0x80, 0x00, 0x00, + 0xff, 0x80, 0x00, 0x00, + 0xff, 0x80, 0x00, 0x00, + 0xff, 0x80, 0x00, 0x00, + 0xff, 0x80, 0x00, 0x00, + 0xff, 0x80, 0x00, 0x00, + 0xff, 0x80, 0x00, 0x00, + 0xff, 0x80, 0x00, 0x00, +}; + +/** Kerning table for character 'P'. */ +static const struct kerning kerning_OpenSansExtraBold_32_0050[] = { + { /* .left = '7' */ 55, /* .offset = */ -2 }, + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character 'P'. */ +static const struct glyph glyph_OpenSansExtraBold_32_0050 = { + .glyph = 80, + .left = 3, + .top = 31, + .advance = 28, + .cols = 23, + .rows = 31, + .bitmap = bitmap_OpenSansExtraBold_32_0050, + .kerning = kerning_OpenSansExtraBold_32_0050, +}; + +/** Glyphs table for font "Open Sans". */ +static const struct glyph *glyphs_OpenSansExtraBold_32[] = { + &glyph_OpenSansExtraBold_32_0020, /* U+0020 ' ' */ + &glyph_OpenSansExtraBold_32_0030, /* U+0030 '0' */ + &glyph_OpenSansExtraBold_32_0031, /* U+0031 '1' */ + &glyph_OpenSansExtraBold_32_0032, /* U+0032 '2' */ + &glyph_OpenSansExtraBold_32_0033, /* U+0033 '3' */ + &glyph_OpenSansExtraBold_32_0034, /* U+0034 '4' */ + &glyph_OpenSansExtraBold_32_0035, /* U+0035 '5' */ + &glyph_OpenSansExtraBold_32_0036, /* U+0036 '6' */ + &glyph_OpenSansExtraBold_32_0037, /* U+0037 '7' */ + &glyph_OpenSansExtraBold_32_0038, /* U+0038 '8' */ + &glyph_OpenSansExtraBold_32_0039, /* U+0039 '9' */ + &glyph_OpenSansExtraBold_32_003a, /* U+003A ':' */ + &glyph_OpenSansExtraBold_32_0041, /* U+0041 'A' */ + &glyph_OpenSansExtraBold_32_004d, /* U+004D 'M' */ + &glyph_OpenSansExtraBold_32_0050, /* U+0050 'P' */ +}; + +/** Definition for font "Open Sans". */ +const struct font font_OpenSansExtraBold_32 = { + .name = "Open Sans", + .style = "ExtraBold", + .size = 32, + .dpi = 100, + .count = 15, + .max = 80, + .ascender = 48, + .descender = -14, + .height = 61, + .glyphs = glyphs_OpenSansExtraBold_32, + .compressed = 0, +}; + diff --git a/lib/fonts/font-OpenSansExtraBold-32.h b/lib/fonts/font-OpenSansExtraBold-32.h new file mode 100644 index 0000000..a22ab0c --- /dev/null +++ b/lib/fonts/font-OpenSansExtraBold-32.h @@ -0,0 +1,15 @@ +/* AUTOMATICALLY GENERATED FILE! EDITING NOT RECOMMENDED! + * + * This file is distributed under the terms of the MIT License. + * See the LICENSE file at the top of this tree, or if it is missing a copy can + * be found at http://opensource.org/licenses/MIT + */ + +#ifndef _FONTEM_OpenSansExtraBold_32_H +#define _FONTEM_OpenSansExtraBold_32_H + +#include "fontem.h" + +extern const struct font font_OpenSansExtraBold_32; + +#endif /* _FONTEM_OpenSansExtraBold_32_H */ diff --git a/lib/fonts/font-OpenSansExtraBold-64.c b/lib/fonts/font-OpenSansExtraBold-64.c new file mode 100644 index 0000000..3c30b5b --- /dev/null +++ b/lib/fonts/font-OpenSansExtraBold-64.c @@ -0,0 +1,1264 @@ +/* AUTOMATICALLY GENERATED FILE! EDITING NOT RECOMMENDED! + * + * This file is distributed under the terms of the MIT License. + * See the LICENSE file at the top of this tree, or if it is missing a copy can + * be found at http://opensource.org/licenses/MIT + */ + +#include +#include +#include "fontem.h" +#include "font-OpenSansExtraBold-64.h" + +/* Character list: 0123456789:APM */ + +/** Kerning table for character ' '. */ +static const struct kerning kerning_OpenSansExtraBold_64_0020[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character ' '. */ +static const struct glyph glyph_OpenSansExtraBold_64_0020 = { + .glyph = 32, + .left = 0, + .top = 0, + .advance = 23, + .cols = 0, + .rows = 0, + .bitmap = NULL, + .kerning = kerning_OpenSansExtraBold_64_0020, +}; + +/** Bitmap definition for character '0'. */ +static const uint8_t bitmap_OpenSansExtraBold_64_0030[] = { + 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, + 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x00, + 0x00, 0x3f, 0xff, 0xff, 0xe0, 0x00, + 0x00, 0x7f, 0xff, 0xff, 0xf8, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xfc, 0x00, + 0x01, 0xff, 0xff, 0xff, 0xfe, 0x00, + 0x03, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x07, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x07, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0f, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0f, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0x3f, 0xff, 0xf8, 0x7f, 0xff, 0xe0, + 0x3f, 0xff, 0xf0, 0x3f, 0xff, 0xf0, + 0x3f, 0xff, 0xe0, 0x1f, 0xff, 0xf0, + 0x3f, 0xff, 0xe0, 0x1f, 0xff, 0xf0, + 0x7f, 0xff, 0xc0, 0x0f, 0xff, 0xf0, + 0x7f, 0xff, 0xc0, 0x0f, 0xff, 0xf8, + 0x7f, 0xff, 0xc0, 0x0f, 0xff, 0xf8, + 0x7f, 0xff, 0xc0, 0x0f, 0xff, 0xf8, + 0x7f, 0xff, 0xc0, 0x0f, 0xff, 0xf8, + 0x7f, 0xff, 0xc0, 0x0f, 0xff, 0xf8, + 0xff, 0xff, 0x80, 0x0f, 0xff, 0xf8, + 0xff, 0xff, 0x80, 0x07, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x07, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x07, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x07, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x07, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x07, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x07, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x07, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x07, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x07, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x07, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x07, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x07, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x07, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x07, 0xff, 0xfc, + 0x7f, 0xff, 0x80, 0x07, 0xff, 0xfc, + 0x7f, 0xff, 0xc0, 0x0f, 0xff, 0xf8, + 0x7f, 0xff, 0xc0, 0x0f, 0xff, 0xf8, + 0x7f, 0xff, 0xc0, 0x0f, 0xff, 0xf8, + 0x7f, 0xff, 0xc0, 0x0f, 0xff, 0xf8, + 0x7f, 0xff, 0xc0, 0x0f, 0xff, 0xf8, + 0x3f, 0xff, 0xc0, 0x0f, 0xff, 0xf8, + 0x3f, 0xff, 0xe0, 0x1f, 0xff, 0xf0, + 0x3f, 0xff, 0xe0, 0x1f, 0xff, 0xf0, + 0x3f, 0xff, 0xf0, 0x3f, 0xff, 0xf0, + 0x1f, 0xff, 0xf8, 0x7f, 0xff, 0xf0, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0x0f, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0x0f, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0x07, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x03, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x03, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x01, 0xff, 0xff, 0xff, 0xfe, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xfc, 0x00, + 0x00, 0x7f, 0xff, 0xff, 0xf8, 0x00, + 0x00, 0x3f, 0xff, 0xff, 0xf0, 0x00, + 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x00, + 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, +}; + +/** Kerning table for character '0'. */ +static const struct kerning kerning_OpenSansExtraBold_64_0030[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '0'. */ +static const struct glyph glyph_OpenSansExtraBold_64_0030 = { + .glyph = 48, + .left = 3, + .top = 64, + .advance = 52, + .cols = 46, + .rows = 65, + .bitmap = bitmap_OpenSansExtraBold_64_0030, + .kerning = kerning_OpenSansExtraBold_64_0030, +}; + +/** Bitmap definition for character '1'. */ +static const uint8_t bitmap_OpenSansExtraBold_64_0031[] = { + 0x00, 0x00, 0x07, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x0f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x3f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x7f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xf8, 0x00, + 0x00, 0x01, 0xff, 0xff, 0xf8, 0x00, + 0x00, 0x07, 0xff, 0xff, 0xf8, 0x00, + 0x00, 0x0f, 0xff, 0xff, 0xf8, 0x00, + 0x00, 0x1f, 0xff, 0xff, 0xf8, 0x00, + 0x00, 0x3f, 0xff, 0xff, 0xf8, 0x00, + 0x00, 0x7f, 0xff, 0xff, 0xf8, 0x00, + 0x01, 0xff, 0xff, 0xff, 0xf8, 0x00, + 0x03, 0xff, 0xff, 0xff, 0xf8, 0x00, + 0x07, 0xff, 0xff, 0xff, 0xf8, 0x00, + 0x0f, 0xff, 0xff, 0xff, 0xf8, 0x00, + 0x3f, 0xff, 0xff, 0xff, 0xf8, 0x00, + 0x7f, 0xff, 0xff, 0xff, 0xf8, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, + 0x7f, 0xff, 0xef, 0xff, 0xf8, 0x00, + 0x3f, 0xff, 0xcf, 0xff, 0xf8, 0x00, + 0x1f, 0xff, 0x8f, 0xff, 0xf8, 0x00, + 0x1f, 0xff, 0x0f, 0xff, 0xf8, 0x00, + 0x0f, 0xfe, 0x1f, 0xff, 0xf8, 0x00, + 0x07, 0xfc, 0x1f, 0xff, 0xf8, 0x00, + 0x03, 0xf0, 0x1f, 0xff, 0xf8, 0x00, + 0x01, 0xe0, 0x1f, 0xff, 0xf8, 0x00, + 0x01, 0xc0, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x80, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, +}; + +/** Kerning table for character '1'. */ +static const struct kerning kerning_OpenSansExtraBold_64_0031[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '1'. */ +static const struct glyph glyph_OpenSansExtraBold_64_0031 = { + .glyph = 49, + .left = 4, + .top = 64, + .advance = 52, + .cols = 37, + .rows = 64, + .bitmap = bitmap_OpenSansExtraBold_64_0031, + .kerning = kerning_OpenSansExtraBold_64_0031, +}; + +/** Bitmap definition for character '2'. */ +static const uint8_t bitmap_OpenSansExtraBold_64_0032[] = { + 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, + 0x00, 0x03, 0xff, 0xff, 0xc0, 0x00, + 0x00, 0x1f, 0xff, 0xff, 0xf0, 0x00, + 0x00, 0x7f, 0xff, 0xff, 0xfc, 0x00, + 0x01, 0xff, 0xff, 0xff, 0xfe, 0x00, + 0x07, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x0f, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0x0f, 0xff, 0xe0, 0x7f, 0xff, 0xf8, + 0x07, 0xff, 0x80, 0x1f, 0xff, 0xf8, + 0x03, 0xfe, 0x00, 0x0f, 0xff, 0xf8, + 0x01, 0xf8, 0x00, 0x0f, 0xff, 0xf8, + 0x01, 0xf0, 0x00, 0x0f, 0xff, 0xf8, + 0x00, 0xe0, 0x00, 0x0f, 0xff, 0xf8, + 0x00, 0x40, 0x00, 0x0f, 0xff, 0xf8, + 0x00, 0x00, 0x00, 0x0f, 0xff, 0xf8, + 0x00, 0x00, 0x00, 0x0f, 0xff, 0xf8, + 0x00, 0x00, 0x00, 0x1f, 0xff, 0xf8, + 0x00, 0x00, 0x00, 0x1f, 0xff, 0xf0, + 0x00, 0x00, 0x00, 0x3f, 0xff, 0xf0, + 0x00, 0x00, 0x00, 0x3f, 0xff, 0xf0, + 0x00, 0x00, 0x00, 0x7f, 0xff, 0xe0, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xe0, + 0x00, 0x00, 0x01, 0xff, 0xff, 0xc0, + 0x00, 0x00, 0x03, 0xff, 0xff, 0x80, + 0x00, 0x00, 0x07, 0xff, 0xff, 0x80, + 0x00, 0x00, 0x0f, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xfe, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xfc, 0x00, + 0x00, 0x00, 0x3f, 0xff, 0xfc, 0x00, + 0x00, 0x00, 0x7f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, + 0x00, 0x01, 0xff, 0xff, 0xe0, 0x00, + 0x00, 0x03, 0xff, 0xff, 0xc0, 0x00, + 0x00, 0x07, 0xff, 0xff, 0x80, 0x00, + 0x00, 0x0f, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x1f, 0xff, 0xfc, 0x00, 0x00, + 0x00, 0x3f, 0xff, 0xf8, 0x00, 0x00, + 0x00, 0x7f, 0xff, 0xf0, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xe0, 0x00, 0x00, + 0x01, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x03, 0xff, 0xff, 0x80, 0x00, 0x00, + 0x07, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x0f, 0xff, 0xfe, 0x00, 0x00, 0x00, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, +}; + +/** Kerning table for character '2'. */ +static const struct kerning kerning_OpenSansExtraBold_64_0032[] = { + { /* .left = '7' */ 55, /* .offset = */ -2 }, + { /* .left = '9' */ 57, /* .offset = */ -1 }, + { /* .left = ':' */ 58, /* .offset = */ -1 }, + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '2'. */ +static const struct glyph glyph_OpenSansExtraBold_64_0032 = { + .glyph = 50, + .left = 2, + .top = 64, + .advance = 52, + .cols = 47, + .rows = 64, + .bitmap = bitmap_OpenSansExtraBold_64_0032, + .kerning = kerning_OpenSansExtraBold_64_0032, +}; + +/** Bitmap definition for character '3'. */ +static const uint8_t bitmap_OpenSansExtraBold_64_0033[] = { + 0x00, 0x01, 0xff, 0xf8, 0x00, 0x00, + 0x00, 0x3f, 0xff, 0xff, 0x80, 0x00, + 0x01, 0xff, 0xff, 0xff, 0xe0, 0x00, + 0x07, 0xff, 0xff, 0xff, 0xf8, 0x00, + 0x1f, 0xff, 0xff, 0xff, 0xfe, 0x00, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0x07, 0xff, 0x01, 0xff, 0xff, 0xe0, + 0x03, 0xf0, 0x00, 0x7f, 0xff, 0xe0, + 0x03, 0xc0, 0x00, 0x3f, 0xff, 0xe0, + 0x01, 0x00, 0x00, 0x1f, 0xff, 0xe0, + 0x00, 0x00, 0x00, 0x1f, 0xff, 0xe0, + 0x00, 0x00, 0x00, 0x1f, 0xff, 0xe0, + 0x00, 0x00, 0x00, 0x3f, 0xff, 0xc0, + 0x00, 0x00, 0x00, 0x3f, 0xff, 0xc0, + 0x00, 0x00, 0x00, 0x7f, 0xff, 0x80, + 0x00, 0x00, 0x01, 0xff, 0xff, 0x80, + 0x00, 0x00, 0x0f, 0xff, 0xff, 0x00, + 0x00, 0x3f, 0xff, 0xff, 0xfe, 0x00, + 0x00, 0x3f, 0xff, 0xff, 0xfc, 0x00, + 0x00, 0x3f, 0xff, 0xff, 0xf0, 0x00, + 0x00, 0x3f, 0xff, 0xff, 0xe0, 0x00, + 0x00, 0x3f, 0xff, 0xff, 0x80, 0x00, + 0x00, 0x3f, 0xff, 0xfc, 0x00, 0x00, + 0x00, 0x3f, 0xff, 0xff, 0x80, 0x00, + 0x00, 0x3f, 0xff, 0xff, 0xf0, 0x00, + 0x00, 0x3f, 0xff, 0xff, 0xfc, 0x00, + 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x3f, 0xff, 0xff, 0xff, 0x80, + 0x00, 0x3f, 0xff, 0xff, 0xff, 0xc0, + 0x00, 0x3f, 0xff, 0xff, 0xff, 0xe0, + 0x00, 0x00, 0x0f, 0xff, 0xff, 0xf0, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, + 0x00, 0x00, 0x00, 0x3f, 0xff, 0xf8, + 0x00, 0x00, 0x00, 0x3f, 0xff, 0xf8, + 0x00, 0x00, 0x00, 0x1f, 0xff, 0xf8, + 0x00, 0x00, 0x00, 0x1f, 0xff, 0xf8, + 0x00, 0x00, 0x00, 0x1f, 0xff, 0xf8, + 0x00, 0x00, 0x00, 0x1f, 0xff, 0xf8, + 0x00, 0x00, 0x00, 0x1f, 0xff, 0xf8, + 0x80, 0x00, 0x00, 0x1f, 0xff, 0xf8, + 0xf0, 0x00, 0x00, 0x3f, 0xff, 0xf8, + 0xfe, 0x00, 0x00, 0x7f, 0xff, 0xf8, + 0xff, 0xe0, 0x03, 0xff, 0xff, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, + 0x1f, 0xff, 0xff, 0xff, 0xc0, 0x00, + 0x03, 0xff, 0xff, 0xfe, 0x00, 0x00, + 0x00, 0x1f, 0xff, 0xc0, 0x00, 0x00, +}; + +/** Kerning table for character '3'. */ +static const struct kerning kerning_OpenSansExtraBold_64_0033[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '3'. */ +static const struct glyph glyph_OpenSansExtraBold_64_0033 = { + .glyph = 51, + .left = 3, + .top = 64, + .advance = 52, + .cols = 45, + .rows = 65, + .bitmap = bitmap_OpenSansExtraBold_64_0033, + .kerning = kerning_OpenSansExtraBold_64_0033, +}; + +/** Bitmap definition for character '4'. */ +static const uint8_t bitmap_OpenSansExtraBold_64_0034[] = { + 0x00, 0x00, 0x00, 0x3f, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x01, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x01, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x03, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x07, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x07, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x7f, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x7f, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x01, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x01, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x03, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x07, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x07, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x0f, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x1f, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x1f, 0xff, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x3f, 0xff, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x7f, 0xfe, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x7f, 0xfe, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0xff, 0xfc, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x01, 0xff, 0xfc, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x01, 0xff, 0xf8, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x03, 0xff, 0xf8, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x07, 0xff, 0xf0, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x07, 0xff, 0xe0, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x0f, 0xff, 0xe0, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x1f, 0xff, 0xc0, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x1f, 0xff, 0x80, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x3f, 0xff, 0x80, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x7f, 0xff, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x7f, 0xfe, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0xff, 0xfe, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, +}; + +/** Kerning table for character '4'. */ +static const struct kerning kerning_OpenSansExtraBold_64_0034[] = { + { /* .left = '7' */ 55, /* .offset = */ -2 }, + { /* .left = '9' */ 57, /* .offset = */ -1 }, + { /* .left = ':' */ 58, /* .offset = */ -1 }, + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '4'. */ +static const struct glyph glyph_OpenSansExtraBold_64_0034 = { + .glyph = 52, + .left = 2, + .top = 64, + .advance = 52, + .cols = 49, + .rows = 64, + .bitmap = bitmap_OpenSansExtraBold_64_0034, + .kerning = kerning_OpenSansExtraBold_64_0034, +}; + +/** Bitmap definition for character '5'. */ +static const uint8_t bitmap_OpenSansExtraBold_64_0035[] = { + 0x1f, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x3f, 0xff, 0xc0, 0x00, 0x00, 0x00, + 0x3f, 0xff, 0xc0, 0x00, 0x00, 0x00, + 0x3f, 0xff, 0xc0, 0x00, 0x00, 0x00, + 0x3f, 0xff, 0xc0, 0x00, 0x00, 0x00, + 0x3f, 0xff, 0xc0, 0x00, 0x00, 0x00, + 0x3f, 0xff, 0xc0, 0x00, 0x00, 0x00, + 0x3f, 0xff, 0xc0, 0x00, 0x00, 0x00, + 0x3f, 0xff, 0x80, 0x00, 0x00, 0x00, + 0x3f, 0xff, 0x9f, 0xf8, 0x00, 0x00, + 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x3f, 0xff, 0xff, 0xff, 0xc0, 0x00, + 0x3f, 0xff, 0xff, 0xff, 0xf0, 0x00, + 0x3f, 0xff, 0xff, 0xff, 0xf8, 0x00, + 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x00, + 0x7f, 0xff, 0xff, 0xff, 0xfe, 0x00, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0x07, 0xe0, 0x07, 0xff, 0xff, 0xe0, + 0x00, 0x00, 0x01, 0xff, 0xff, 0xe0, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xe0, + 0x00, 0x00, 0x00, 0x7f, 0xff, 0xf0, + 0x00, 0x00, 0x00, 0x3f, 0xff, 0xf0, + 0x00, 0x00, 0x00, 0x3f, 0xff, 0xf0, + 0x00, 0x00, 0x00, 0x3f, 0xff, 0xf0, + 0x00, 0x00, 0x00, 0x1f, 0xff, 0xf0, + 0x00, 0x00, 0x00, 0x1f, 0xff, 0xf0, + 0x00, 0x00, 0x00, 0x3f, 0xff, 0xf0, + 0x00, 0x00, 0x00, 0x3f, 0xff, 0xf0, + 0x00, 0x00, 0x00, 0x3f, 0xff, 0xf0, + 0x80, 0x00, 0x00, 0x7f, 0xff, 0xf0, + 0xf0, 0x00, 0x00, 0x7f, 0xff, 0xe0, + 0xfe, 0x00, 0x01, 0xff, 0xff, 0xe0, + 0xff, 0xf0, 0x07, 0xff, 0xff, 0xe0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, + 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x07, 0xff, 0xff, 0xfc, 0x00, 0x00, + 0x00, 0x3f, 0xff, 0x80, 0x00, 0x00, +}; + +/** Kerning table for character '5'. */ +static const struct kerning kerning_OpenSansExtraBold_64_0035[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '5'. */ +static const struct glyph glyph_OpenSansExtraBold_64_0035 = { + .glyph = 53, + .left = 4, + .top = 64, + .advance = 52, + .cols = 44, + .rows = 65, + .bitmap = bitmap_OpenSansExtraBold_64_0035, + .kerning = kerning_OpenSansExtraBold_64_0035, +}; + +/** Bitmap definition for character '6'. */ +static const uint8_t bitmap_OpenSansExtraBold_64_0036[] = { + 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, + 0x00, 0x00, 0x07, 0xff, 0xff, 0xc0, + 0x00, 0x00, 0x3f, 0xff, 0xff, 0xc0, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xc0, + 0x00, 0x03, 0xff, 0xff, 0xff, 0xc0, + 0x00, 0x0f, 0xff, 0xff, 0xff, 0xc0, + 0x00, 0x1f, 0xff, 0xff, 0xff, 0xc0, + 0x00, 0x3f, 0xff, 0xff, 0xff, 0xc0, + 0x00, 0x7f, 0xff, 0xff, 0xff, 0xc0, + 0x00, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0x01, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0x03, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0x03, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0x07, 0xff, 0xff, 0xe0, 0x00, 0xc0, + 0x07, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x00, + 0x0f, 0xff, 0xf0, 0x00, 0x00, 0x00, + 0x1f, 0xff, 0xe0, 0x00, 0x00, 0x00, + 0x1f, 0xff, 0xe0, 0x00, 0x00, 0x00, + 0x3f, 0xff, 0xc0, 0x00, 0x00, 0x00, + 0x3f, 0xff, 0x80, 0x00, 0x00, 0x00, + 0x3f, 0xff, 0x80, 0x00, 0x00, 0x00, + 0x3f, 0xff, 0x80, 0xff, 0x80, 0x00, + 0x7f, 0xff, 0x03, 0xff, 0xf0, 0x00, + 0x7f, 0xff, 0x0f, 0xff, 0xfc, 0x00, + 0x7f, 0xff, 0x1f, 0xff, 0xff, 0x00, + 0x7f, 0xff, 0x3f, 0xff, 0xff, 0x80, + 0x7f, 0xff, 0x7f, 0xff, 0xff, 0xc0, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xf8, + 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xfc, + 0xff, 0xff, 0xc0, 0x07, 0xff, 0xfc, + 0xff, 0xff, 0xc0, 0x07, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x07, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x07, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x03, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x03, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x03, 0xff, 0xfc, + 0x7f, 0xff, 0x80, 0x03, 0xff, 0xfc, + 0x7f, 0xff, 0xc0, 0x07, 0xff, 0xfc, + 0x7f, 0xff, 0xc0, 0x07, 0xff, 0xfc, + 0x7f, 0xff, 0xc0, 0x07, 0xff, 0xfc, + 0x7f, 0xff, 0xe0, 0x0f, 0xff, 0xfc, + 0x3f, 0xff, 0xf0, 0x1f, 0xff, 0xf8, + 0x3f, 0xff, 0xf8, 0x3f, 0xff, 0xf8, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0x07, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0x03, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0x01, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x7f, 0xff, 0xff, 0xfe, 0x00, + 0x00, 0x1f, 0xff, 0xff, 0xf8, 0x00, + 0x00, 0x0f, 0xff, 0xff, 0xf0, 0x00, + 0x00, 0x01, 0xff, 0xff, 0x80, 0x00, + 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, +}; + +/** Kerning table for character '6'. */ +static const struct kerning kerning_OpenSansExtraBold_64_0036[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '6'. */ +static const struct glyph glyph_OpenSansExtraBold_64_0036 = { + .glyph = 54, + .left = 3, + .top = 64, + .advance = 52, + .cols = 46, + .rows = 65, + .bitmap = bitmap_OpenSansExtraBold_64_0036, + .kerning = kerning_OpenSansExtraBold_64_0036, +}; + +/** Bitmap definition for character '7'. */ +static const uint8_t bitmap_OpenSansExtraBold_64_0037[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0x00, 0x00, 0x00, 0x0f, 0xff, 0xf0, + 0x00, 0x00, 0x00, 0x1f, 0xff, 0xf0, + 0x00, 0x00, 0x00, 0x1f, 0xff, 0xe0, + 0x00, 0x00, 0x00, 0x3f, 0xff, 0xe0, + 0x00, 0x00, 0x00, 0x3f, 0xff, 0xe0, + 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, + 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x80, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x80, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x80, + 0x00, 0x00, 0x01, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x01, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x03, 0xff, 0xfe, 0x00, + 0x00, 0x00, 0x03, 0xff, 0xfe, 0x00, + 0x00, 0x00, 0x07, 0xff, 0xfc, 0x00, + 0x00, 0x00, 0x07, 0xff, 0xfc, 0x00, + 0x00, 0x00, 0x07, 0xff, 0xfc, 0x00, + 0x00, 0x00, 0x0f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x0f, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf0, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xf0, 0x00, + 0x00, 0x00, 0x3f, 0xff, 0xf0, 0x00, + 0x00, 0x00, 0x3f, 0xff, 0xe0, 0x00, + 0x00, 0x00, 0x3f, 0xff, 0xe0, 0x00, + 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, + 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, + 0x00, 0x01, 0xff, 0xff, 0x80, 0x00, + 0x00, 0x01, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x03, 0xff, 0xfe, 0x00, 0x00, + 0x00, 0x03, 0xff, 0xfe, 0x00, 0x00, + 0x00, 0x07, 0xff, 0xfe, 0x00, 0x00, + 0x00, 0x07, 0xff, 0xfc, 0x00, 0x00, + 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, + 0x00, 0x0f, 0xff, 0xf8, 0x00, 0x00, + 0x00, 0x1f, 0xff, 0xf8, 0x00, 0x00, + 0x00, 0x1f, 0xff, 0xf8, 0x00, 0x00, + 0x00, 0x1f, 0xff, 0xf0, 0x00, 0x00, + 0x00, 0x3f, 0xff, 0xf0, 0x00, 0x00, + 0x00, 0x3f, 0xff, 0xe0, 0x00, 0x00, + 0x00, 0x7f, 0xff, 0xe0, 0x00, 0x00, + 0x00, 0x7f, 0xff, 0xe0, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x80, 0x00, 0x00, + 0x01, 0xff, 0xff, 0x80, 0x00, 0x00, + 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, +}; + +/** Kerning table for character '7'. */ +static const struct kerning kerning_OpenSansExtraBold_64_0037[] = { + { /* .left = '2' */ 50, /* .offset = */ -3 }, + { /* .left = '4' */ 52, /* .offset = */ -3 }, + { /* .left = '7' */ 55, /* .offset = */ 2 }, + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '7'. */ +static const struct glyph glyph_OpenSansExtraBold_64_0037 = { + .glyph = 55, + .left = 3, + .top = 64, + .advance = 52, + .cols = 46, + .rows = 64, + .bitmap = bitmap_OpenSansExtraBold_64_0037, + .kerning = kerning_OpenSansExtraBold_64_0037, +}; + +/** Bitmap definition for character '8'. */ +static const uint8_t bitmap_OpenSansExtraBold_64_0038[] = { + 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00, + 0x00, 0x07, 0xff, 0xff, 0xc0, 0x00, + 0x00, 0x3f, 0xff, 0xff, 0xf0, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xfc, 0x00, + 0x01, 0xff, 0xff, 0xff, 0xfe, 0x00, + 0x03, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x07, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0f, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0x3f, 0xff, 0xf8, 0x7f, 0xff, 0xf0, + 0x3f, 0xff, 0xe0, 0x1f, 0xff, 0xf0, + 0x3f, 0xff, 0xc0, 0x0f, 0xff, 0xf0, + 0x3f, 0xff, 0xc0, 0x0f, 0xff, 0xf0, + 0x3f, 0xff, 0xc0, 0x0f, 0xff, 0xf0, + 0x3f, 0xff, 0xc0, 0x0f, 0xff, 0xf0, + 0x3f, 0xff, 0xc0, 0x0f, 0xff, 0xf0, + 0x3f, 0xff, 0xe0, 0x1f, 0xff, 0xf0, + 0x1f, 0xff, 0xe0, 0x1f, 0xff, 0xf0, + 0x1f, 0xff, 0xf0, 0x3f, 0xff, 0xe0, + 0x1f, 0xff, 0xf8, 0xff, 0xff, 0xe0, + 0x0f, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0x0f, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0x07, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x03, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x01, 0xff, 0xff, 0xff, 0xfe, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, + 0x00, 0x7f, 0xff, 0xff, 0xf0, 0x00, + 0x00, 0x1f, 0xff, 0xff, 0xc0, 0x00, + 0x00, 0x1f, 0xff, 0xff, 0xc0, 0x00, + 0x00, 0x7f, 0xff, 0xff, 0xf0, 0x00, + 0x01, 0xff, 0xff, 0xff, 0xfc, 0x00, + 0x03, 0xff, 0xff, 0xff, 0xfe, 0x00, + 0x07, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x0f, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0x3f, 0xff, 0xf8, 0xff, 0xff, 0xf0, + 0x7f, 0xff, 0xf0, 0x3f, 0xff, 0xf0, + 0x7f, 0xff, 0xc0, 0x1f, 0xff, 0xf8, + 0x7f, 0xff, 0x80, 0x0f, 0xff, 0xf8, + 0xff, 0xff, 0x80, 0x07, 0xff, 0xfc, + 0xff, 0xff, 0x00, 0x03, 0xff, 0xfc, + 0xff, 0xff, 0x00, 0x03, 0xff, 0xfc, + 0xff, 0xff, 0x00, 0x03, 0xff, 0xfc, + 0xff, 0xff, 0x00, 0x03, 0xff, 0xfc, + 0xff, 0xff, 0x00, 0x03, 0xff, 0xfc, + 0xff, 0xff, 0x00, 0x03, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x03, 0xff, 0xfc, + 0xff, 0xff, 0xc0, 0x07, 0xff, 0xfc, + 0x7f, 0xff, 0xf0, 0x1f, 0xff, 0xfc, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0x0f, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0x07, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x03, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x01, 0xff, 0xff, 0xff, 0xfc, 0x00, + 0x00, 0x7f, 0xff, 0xff, 0xf8, 0x00, + 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x00, + 0x00, 0x00, 0xff, 0xfc, 0x00, 0x00, +}; + +/** Kerning table for character '8'. */ +static const struct kerning kerning_OpenSansExtraBold_64_0038[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '8'. */ +static const struct glyph glyph_OpenSansExtraBold_64_0038 = { + .glyph = 56, + .left = 3, + .top = 64, + .advance = 52, + .cols = 46, + .rows = 65, + .bitmap = bitmap_OpenSansExtraBold_64_0038, + .kerning = kerning_OpenSansExtraBold_64_0038, +}; + +/** Bitmap definition for character '9'. */ +static const uint8_t bitmap_OpenSansExtraBold_64_0039[] = { + 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, + 0x00, 0x07, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x1f, 0xff, 0xff, 0xc0, 0x00, + 0x00, 0x7f, 0xff, 0xff, 0xf0, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, + 0x01, 0xff, 0xff, 0xff, 0xfe, 0x00, + 0x03, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x07, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0f, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0f, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0x7f, 0xff, 0xf8, 0x7f, 0xff, 0xf8, + 0x7f, 0xff, 0xe0, 0x1f, 0xff, 0xf8, + 0x7f, 0xff, 0xc0, 0x0f, 0xff, 0xf8, + 0x7f, 0xff, 0xc0, 0x07, 0xff, 0xfc, + 0x7f, 0xff, 0x80, 0x07, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x07, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x03, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x03, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x03, 0xff, 0xfe, + 0xff, 0xff, 0x80, 0x03, 0xff, 0xfe, + 0xff, 0xff, 0x80, 0x03, 0xff, 0xfe, + 0xff, 0xff, 0x80, 0x03, 0xff, 0xfe, + 0x7f, 0xff, 0xc0, 0x07, 0xff, 0xfe, + 0x7f, 0xff, 0xc0, 0x0f, 0xff, 0xfe, + 0x7f, 0xff, 0xe0, 0x1f, 0xff, 0xfe, + 0x7f, 0xff, 0xf0, 0x3f, 0xff, 0xfe, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x0f, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x07, 0xff, 0xff, 0xfd, 0xff, 0xfe, + 0x03, 0xff, 0xff, 0xf9, 0xff, 0xfe, + 0x01, 0xff, 0xff, 0xf1, 0xff, 0xfc, + 0x00, 0xff, 0xff, 0xe1, 0xff, 0xfc, + 0x00, 0x3f, 0xff, 0xc1, 0xff, 0xfc, + 0x00, 0x07, 0xfe, 0x03, 0xff, 0xfc, + 0x00, 0x00, 0x00, 0x03, 0xff, 0xfc, + 0x00, 0x00, 0x00, 0x07, 0xff, 0xf8, + 0x00, 0x00, 0x00, 0x07, 0xff, 0xf8, + 0x00, 0x00, 0x00, 0x0f, 0xff, 0xf8, + 0x00, 0x00, 0x00, 0x1f, 0xff, 0xf8, + 0x00, 0x00, 0x00, 0x3f, 0xff, 0xf0, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, + 0x00, 0x00, 0x03, 0xff, 0xff, 0xe0, + 0x04, 0x00, 0x3f, 0xff, 0xff, 0xe0, + 0x07, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0x07, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0x07, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x07, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x07, 0xff, 0xff, 0xff, 0xfe, 0x00, + 0x07, 0xff, 0xff, 0xff, 0xfc, 0x00, + 0x07, 0xff, 0xff, 0xff, 0xf8, 0x00, + 0x07, 0xff, 0xff, 0xff, 0xf0, 0x00, + 0x07, 0xff, 0xff, 0xff, 0xc0, 0x00, + 0x07, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x07, 0xff, 0xff, 0xfc, 0x00, 0x00, + 0x07, 0xff, 0xff, 0xe0, 0x00, 0x00, + 0x07, 0xff, 0xf8, 0x00, 0x00, 0x00, +}; + +/** Kerning table for character '9'. */ +static const struct kerning kerning_OpenSansExtraBold_64_0039[] = { + { /* .left = '2' */ 50, /* .offset = */ -1 }, + { /* .left = '4' */ 52, /* .offset = */ -1 }, + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character '9'. */ +static const struct glyph glyph_OpenSansExtraBold_64_0039 = { + .glyph = 57, + .left = 2, + .top = 64, + .advance = 52, + .cols = 47, + .rows = 65, + .bitmap = bitmap_OpenSansExtraBold_64_0039, + .kerning = kerning_OpenSansExtraBold_64_0039, +}; + +/** Bitmap definition for character ':'. */ +static const uint8_t bitmap_OpenSansExtraBold_64_003a[] = { + 0x07, 0xf8, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, + 0x3f, 0xff, 0x00, 0x00, + 0x7f, 0xff, 0x80, 0x00, + 0x7f, 0xff, 0x80, 0x00, + 0xff, 0xff, 0xc0, 0x00, + 0xff, 0xff, 0xc0, 0x00, + 0xff, 0xff, 0xc0, 0x00, + 0xff, 0xff, 0xc0, 0x00, + 0xff, 0xff, 0xc0, 0x00, + 0xff, 0xff, 0xc0, 0x00, + 0xff, 0xff, 0xc0, 0x00, + 0x7f, 0xff, 0x80, 0x00, + 0x7f, 0xff, 0x80, 0x00, + 0x3f, 0xff, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, + 0x07, 0xf8, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x07, 0xf8, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, + 0x3f, 0xff, 0x00, 0x00, + 0x7f, 0xff, 0x80, 0x00, + 0x7f, 0xff, 0x80, 0x00, + 0xff, 0xff, 0xc0, 0x00, + 0xff, 0xff, 0xc0, 0x00, + 0xff, 0xff, 0xc0, 0x00, + 0xff, 0xff, 0xc0, 0x00, + 0xff, 0xff, 0xc0, 0x00, + 0xff, 0xff, 0xc0, 0x00, + 0xff, 0xff, 0xc0, 0x00, + 0x7f, 0xff, 0x80, 0x00, + 0x7f, 0xff, 0x80, 0x00, + 0x3f, 0xff, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, + 0x07, 0xf8, 0x00, 0x00, +}; + +/** Kerning table for character ':'. */ +static const struct kerning kerning_OpenSansExtraBold_64_003a[] = { + { /* .left = '2' */ 50, /* .offset = */ -1 }, + { /* .left = '4' */ 52, /* .offset = */ -1 }, + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character ':'. */ +static const struct glyph glyph_OpenSansExtraBold_64_003a = { + .glyph = 58, + .left = 4, + .top = 50, + .advance = 26, + .cols = 18, + .rows = 51, + .bitmap = bitmap_OpenSansExtraBold_64_003a, + .kerning = kerning_OpenSansExtraBold_64_003a, +}; + +/** Bitmap definition for character 'A'. */ +static const uint8_t bitmap_OpenSansExtraBold_64_0041[] = { + 0x00, 0x00, 0x07, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0f, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0f, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7f, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7f, 0xff, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7f, 0xff, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x7f, 0xff, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xfe, 0x3f, 0xff, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xfe, 0x3f, 0xff, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x01, 0xff, 0xfe, 0x3f, 0xff, 0xc0, 0x00, 0x00, 0x00, + 0x00, 0x01, 0xff, 0xfe, 0x3f, 0xff, 0xc0, 0x00, 0x00, 0x00, + 0x00, 0x01, 0xff, 0xfe, 0x1f, 0xff, 0xc0, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xff, 0xfc, 0x1f, 0xff, 0xe0, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xff, 0xfc, 0x1f, 0xff, 0xe0, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xff, 0xfc, 0x1f, 0xff, 0xe0, 0x00, 0x00, 0x00, + 0x00, 0x07, 0xff, 0xfc, 0x0f, 0xff, 0xf0, 0x00, 0x00, 0x00, + 0x00, 0x07, 0xff, 0xf8, 0x0f, 0xff, 0xf0, 0x00, 0x00, 0x00, + 0x00, 0x07, 0xff, 0xf8, 0x0f, 0xff, 0xf0, 0x00, 0x00, 0x00, + 0x00, 0x0f, 0xff, 0xf8, 0x0f, 0xff, 0xf8, 0x00, 0x00, 0x00, + 0x00, 0x0f, 0xff, 0xf0, 0x07, 0xff, 0xf8, 0x00, 0x00, 0x00, + 0x00, 0x0f, 0xff, 0xf0, 0x07, 0xff, 0xf8, 0x00, 0x00, 0x00, + 0x00, 0x1f, 0xff, 0xf0, 0x07, 0xff, 0xfc, 0x00, 0x00, 0x00, + 0x00, 0x1f, 0xff, 0xf0, 0x07, 0xff, 0xfc, 0x00, 0x00, 0x00, + 0x00, 0x1f, 0xff, 0xe0, 0x03, 0xff, 0xfc, 0x00, 0x00, 0x00, + 0x00, 0x3f, 0xff, 0xe0, 0x03, 0xff, 0xfe, 0x00, 0x00, 0x00, + 0x00, 0x3f, 0xff, 0xe0, 0x03, 0xff, 0xfe, 0x00, 0x00, 0x00, + 0x00, 0x3f, 0xff, 0xe0, 0x01, 0xff, 0xfe, 0x00, 0x00, 0x00, + 0x00, 0x7f, 0xff, 0xc0, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x7f, 0xff, 0xc0, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x7f, 0xff, 0xc0, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, + 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, + 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, + 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, + 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, + 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, + 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, + 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, + 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, + 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, 0x00, + 0x1f, 0xff, 0xfc, 0x00, 0x00, 0x1f, 0xff, 0xfc, 0x00, 0x00, + 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, + 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, + 0x3f, 0xff, 0xf8, 0x00, 0x00, 0x0f, 0xff, 0xfe, 0x00, 0x00, + 0x3f, 0xff, 0xf8, 0x00, 0x00, 0x07, 0xff, 0xfe, 0x00, 0x00, + 0x3f, 0xff, 0xf0, 0x00, 0x00, 0x07, 0xff, 0xfe, 0x00, 0x00, + 0x7f, 0xff, 0xf0, 0x00, 0x00, 0x07, 0xff, 0xff, 0x00, 0x00, + 0x7f, 0xff, 0xf0, 0x00, 0x00, 0x07, 0xff, 0xff, 0x00, 0x00, + 0x7f, 0xff, 0xf0, 0x00, 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0xe0, 0x00, 0x00, 0x03, 0xff, 0xff, 0x80, 0x00, + 0xff, 0xff, 0xe0, 0x00, 0x00, 0x03, 0xff, 0xff, 0x80, 0x00, +}; + +/** Kerning table for character 'A'. */ +static const struct kerning kerning_OpenSansExtraBold_64_0041[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character 'A'. */ +static const struct glyph glyph_OpenSansExtraBold_64_0041 = { + .glyph = 65, + .left = 0, + .top = 64, + .advance = 65, + .cols = 65, + .rows = 64, + .bitmap = bitmap_OpenSansExtraBold_64_0041, + .kerning = kerning_OpenSansExtraBold_64_0041, +}; + +/** Bitmap definition for character 'M'. */ +static const uint8_t bitmap_OpenSansExtraBold_64_004d[] = { + 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x80, 0x00, 0x01, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x80, 0x00, 0x01, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x80, 0x00, 0x01, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x80, 0x00, 0x01, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0xc0, 0x00, 0x03, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0xc0, 0x00, 0x03, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0xc0, 0x00, 0x03, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0xe0, 0x00, 0x07, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0xe0, 0x00, 0x07, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0xe0, 0x00, 0x07, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0xf0, 0x00, 0x07, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xfd, 0xff, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xfd, 0xff, 0xf0, 0x00, 0x0f, 0xff, 0x7f, 0xff, 0x00, + 0xff, 0xfd, 0xff, 0xf8, 0x00, 0x1f, 0xff, 0x7f, 0xff, 0x00, + 0xff, 0xfc, 0xff, 0xf8, 0x00, 0x1f, 0xff, 0x7f, 0xff, 0x00, + 0xff, 0xfc, 0xff, 0xf8, 0x00, 0x1f, 0xfe, 0x7f, 0xff, 0x00, + 0xff, 0xfe, 0xff, 0xfc, 0x00, 0x1f, 0xfe, 0x7f, 0xff, 0x00, + 0xff, 0xfe, 0xff, 0xfc, 0x00, 0x3f, 0xfe, 0x7f, 0xff, 0x00, + 0xff, 0xfe, 0x7f, 0xfc, 0x00, 0x3f, 0xfe, 0x7f, 0xff, 0x00, + 0xff, 0xfe, 0x7f, 0xfc, 0x00, 0x3f, 0xfc, 0x7f, 0xff, 0x00, + 0xff, 0xfe, 0x7f, 0xfe, 0x00, 0x7f, 0xfc, 0x7f, 0xff, 0x00, + 0xff, 0xfe, 0x3f, 0xfe, 0x00, 0x7f, 0xfc, 0x7f, 0xff, 0x00, + 0xff, 0xfe, 0x3f, 0xfe, 0x00, 0x7f, 0xf8, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x3f, 0xff, 0x00, 0x7f, 0xf8, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x3f, 0xff, 0x00, 0xff, 0xf8, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x1f, 0xff, 0x00, 0xff, 0xf8, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x1f, 0xff, 0x00, 0xff, 0xf0, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x1f, 0xff, 0x81, 0xff, 0xf0, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x0f, 0xff, 0x81, 0xff, 0xf0, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x0f, 0xff, 0x81, 0xff, 0xf0, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x0f, 0xff, 0xc1, 0xff, 0xe0, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x0f, 0xff, 0xc3, 0xff, 0xe0, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x07, 0xff, 0xc3, 0xff, 0xe0, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x07, 0xff, 0xe3, 0xff, 0xc0, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x07, 0xff, 0xe7, 0xff, 0xc0, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x07, 0xff, 0xe7, 0xff, 0xc0, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x03, 0xff, 0xe7, 0xff, 0xc0, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x03, 0xff, 0xf7, 0xff, 0x80, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x03, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x01, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x00, 0xff, 0xff, 0xfe, 0x00, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x00, 0xff, 0xff, 0xfe, 0x00, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x00, 0x7f, 0xff, 0xfe, 0x00, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x00, 0x7f, 0xff, 0xfe, 0x00, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x00, 0x7f, 0xff, 0xfc, 0x00, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x00, 0x7f, 0xff, 0xfc, 0x00, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x00, 0x3f, 0xff, 0xfc, 0x00, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x00, 0x3f, 0xff, 0xf8, 0x00, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x00, 0x3f, 0xff, 0xf8, 0x00, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x00, 0x1f, 0xff, 0xf8, 0x00, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x00, 0x1f, 0xff, 0xf8, 0x00, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x00, 0x1f, 0xff, 0xf0, 0x00, 0xff, 0xff, 0x00, + 0xff, 0xfe, 0x00, 0x1f, 0xff, 0xf0, 0x00, 0xff, 0xff, 0x00, +}; + +/** Kerning table for character 'M'. */ +static const struct kerning kerning_OpenSansExtraBold_64_004d[] = { + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character 'M'. */ +static const struct glyph glyph_OpenSansExtraBold_64_004d = { + .glyph = 77, + .left = 7, + .top = 64, + .advance = 86, + .cols = 72, + .rows = 64, + .bitmap = bitmap_OpenSansExtraBold_64_004d, + .kerning = kerning_OpenSansExtraBold_64_004d, +}; + +/** Bitmap definition for character 'P'. */ +static const uint8_t bitmap_OpenSansExtraBold_64_0050[] = { + 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0xff, 0xff, 0x80, 0x7f, 0xff, 0xf8, + 0xff, 0xff, 0x80, 0x3f, 0xff, 0xf8, + 0xff, 0xff, 0x80, 0x1f, 0xff, 0xf8, + 0xff, 0xff, 0x80, 0x0f, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x0f, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x0f, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x0f, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x0f, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x0f, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x0f, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x0f, 0xff, 0xfc, + 0xff, 0xff, 0x80, 0x1f, 0xff, 0xf8, + 0xff, 0xff, 0x80, 0x3f, 0xff, 0xf8, + 0xff, 0xff, 0x80, 0x7f, 0xff, 0xf8, + 0xff, 0xff, 0x81, 0xff, 0xff, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, +}; + +/** Kerning table for character 'P'. */ +static const struct kerning kerning_OpenSansExtraBold_64_0050[] = { + { /* .left = '7' */ 55, /* .offset = */ -4 }, + { /* .left = '9' */ 57, /* .offset = */ -1 }, + { /* .left = ':' */ 58, /* .offset = */ -1 }, + { /* .left = */ 0, /* .offset = */ 0 }, +}; + +/** Glyph definition for character 'P'. */ +static const struct glyph glyph_OpenSansExtraBold_64_0050 = { + .glyph = 80, + .left = 7, + .top = 64, + .advance = 56, + .cols = 46, + .rows = 64, + .bitmap = bitmap_OpenSansExtraBold_64_0050, + .kerning = kerning_OpenSansExtraBold_64_0050, +}; + +/** Glyphs table for font "Open Sans". */ +static const struct glyph *glyphs_OpenSansExtraBold_64[] = { + &glyph_OpenSansExtraBold_64_0020, /* U+0020 ' ' */ + &glyph_OpenSansExtraBold_64_0030, /* U+0030 '0' */ + &glyph_OpenSansExtraBold_64_0031, /* U+0031 '1' */ + &glyph_OpenSansExtraBold_64_0032, /* U+0032 '2' */ + &glyph_OpenSansExtraBold_64_0033, /* U+0033 '3' */ + &glyph_OpenSansExtraBold_64_0034, /* U+0034 '4' */ + &glyph_OpenSansExtraBold_64_0035, /* U+0035 '5' */ + &glyph_OpenSansExtraBold_64_0036, /* U+0036 '6' */ + &glyph_OpenSansExtraBold_64_0037, /* U+0037 '7' */ + &glyph_OpenSansExtraBold_64_0038, /* U+0038 '8' */ + &glyph_OpenSansExtraBold_64_0039, /* U+0039 '9' */ + &glyph_OpenSansExtraBold_64_003a, /* U+003A ':' */ + &glyph_OpenSansExtraBold_64_0041, /* U+0041 'A' */ + &glyph_OpenSansExtraBold_64_004d, /* U+004D 'M' */ + &glyph_OpenSansExtraBold_64_0050, /* U+0050 'P' */ +}; + +/** Definition for font "Open Sans". */ +const struct font font_OpenSansExtraBold_64 = { + .name = "Open Sans", + .style = "ExtraBold", + .size = 64, + .dpi = 100, + .count = 15, + .max = 80, + .ascender = 96, + .descender = -27, + .height = 121, + .glyphs = glyphs_OpenSansExtraBold_64, + .compressed = 0, +}; + diff --git a/lib/fonts/font-OpenSansExtraBold-64.h b/lib/fonts/font-OpenSansExtraBold-64.h new file mode 100644 index 0000000..6b23ec3 --- /dev/null +++ b/lib/fonts/font-OpenSansExtraBold-64.h @@ -0,0 +1,15 @@ +/* AUTOMATICALLY GENERATED FILE! EDITING NOT RECOMMENDED! + * + * This file is distributed under the terms of the MIT License. + * See the LICENSE file at the top of this tree, or if it is missing a copy can + * be found at http://opensource.org/licenses/MIT + */ + +#ifndef _FONTEM_OpenSansExtraBold_64_H +#define _FONTEM_OpenSansExtraBold_64_H + +#include "fontem.h" + +extern const struct font font_OpenSansExtraBold_64; + +#endif /* _FONTEM_OpenSansExtraBold_64_H */ diff --git a/lib/fonts/font-notomono-10.c b/lib/fonts/font-notomono-10.c index fe9c439..3048130 100644 --- a/lib/fonts/font-notomono-10.c +++ b/lib/fonts/font-notomono-10.c @@ -1,5 +1,4 @@ -/* This generated file was hand-edited to remove the unnecesarry - * second byte for each row. +/* AUTOMATICALLY GENERATED FILE! EDITING NOT RECOMMENDED! * * This file is distributed under the terms of the MIT License. * See the LICENSE file at the top of this tree, or if it is missing a copy can @@ -27,16 +26,16 @@ static const struct glyph glyph_notomono_10_0020 = { /** Bitmap definition for character '!'. */ static const uint8_t bitmap_notomono_10_0021[] = { - 0xc0, - 0xc0, - 0xc0, - 0x80, - 0x80, - 0x80, - 0x80, - 0x00, - 0xc0, - 0xc0, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x00, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, }; /** Glyph definition for character '!'. */ @@ -53,16 +52,16 @@ static const struct glyph glyph_notomono_10_0021 = { /** Bitmap definition for character '#'. */ static const uint8_t bitmap_notomono_10_0023[] = { - 0x12, - 0x12, - 0x36, - 0x7f, - 0x24, - 0x24, - 0xfe, - 0x6c, - 0x48, - 0x48, + 0x12, 0x00, + 0x12, 0x00, + 0x36, 0x00, + 0x7f, 0x00, + 0x24, 0x00, + 0x24, 0x00, + 0xfe, 0x00, + 0x6c, 0x00, + 0x48, 0x00, + 0x48, 0x00, }; /** Glyph definition for character '#'. */ @@ -79,20 +78,20 @@ static const struct glyph glyph_notomono_10_0023 = { /** Bitmap definition for character '$'. */ static const uint8_t bitmap_notomono_10_0024[] = { - 0x20, - 0x20, - 0x78, - 0xa0, - 0xa0, - 0xa0, - 0x60, - 0x30, - 0x28, - 0x28, - 0x28, - 0xf0, - 0x20, - 0x20, + 0x20, 0x00, + 0x20, 0x00, + 0x78, 0x00, + 0xa0, 0x00, + 0xa0, 0x00, + 0xa0, 0x00, + 0x60, 0x00, + 0x30, 0x00, + 0x28, 0x00, + 0x28, 0x00, + 0x28, 0x00, + 0xf0, 0x00, + 0x20, 0x00, + 0x20, 0x00, }; /** Glyph definition for character '$'. */ @@ -109,16 +108,16 @@ static const struct glyph glyph_notomono_10_0024 = { /** Bitmap definition for character '%'. */ static const uint8_t bitmap_notomono_10_0025[] = { - 0x62, - 0x94, - 0x94, - 0x98, - 0x68, - 0x16, - 0x19, - 0x29, - 0x29, - 0x46, + 0x62, 0x00, + 0x94, 0x00, + 0x94, 0x00, + 0x98, 0x00, + 0x68, 0x00, + 0x16, 0x00, + 0x19, 0x00, + 0x29, 0x00, + 0x29, 0x00, + 0x46, 0x00, }; /** Glyph definition for character '%'. */ @@ -135,16 +134,16 @@ static const struct glyph glyph_notomono_10_0025 = { /** Bitmap definition for character '&'. */ static const uint8_t bitmap_notomono_10_0026[] = { - 0x30, - 0x48, - 0x48, - 0x58, - 0x30, - 0x54, - 0x94, - 0x8c, - 0xcc, - 0x76, + 0x30, 0x00, + 0x48, 0x00, + 0x48, 0x00, + 0x58, 0x00, + 0x30, 0x00, + 0x54, 0x00, + 0x94, 0x00, + 0x8c, 0x00, + 0xcc, 0x00, + 0x76, 0x00, }; /** Glyph definition for character '&'. */ @@ -161,9 +160,9 @@ static const struct glyph glyph_notomono_10_0026 = { /** Bitmap definition for character '''. */ static const uint8_t bitmap_notomono_10_0027[] = { - 0xc0, - 0x80, - 0x80, + 0xc0, 0x00, + 0x80, 0x00, + 0x80, 0x00, }; /** Glyph definition for character '''. */ @@ -180,18 +179,18 @@ static const struct glyph glyph_notomono_10_0027 = { /** Bitmap definition for character '('. */ static const uint8_t bitmap_notomono_10_0028[] = { - 0x20, - 0x60, - 0x40, - 0xc0, - 0x80, - 0x80, - 0x80, - 0x80, - 0xc0, - 0x40, - 0x60, - 0x20, + 0x20, 0x00, + 0x60, 0x00, + 0x40, 0x00, + 0xc0, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0xc0, 0x00, + 0x40, 0x00, + 0x60, 0x00, + 0x20, 0x00, }; /** Glyph definition for character '('. */ @@ -208,18 +207,18 @@ static const struct glyph glyph_notomono_10_0028 = { /** Bitmap definition for character ')'. */ static const uint8_t bitmap_notomono_10_0029[] = { - 0x40, - 0x60, - 0x20, - 0x30, - 0x10, - 0x10, - 0x10, - 0x10, - 0x30, - 0x20, - 0x60, - 0x40, + 0x40, 0x00, + 0x60, 0x00, + 0x20, 0x00, + 0x30, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x30, 0x00, + 0x20, 0x00, + 0x60, 0x00, + 0x40, 0x00, }; /** Glyph definition for character ')'. */ @@ -236,12 +235,12 @@ static const struct glyph glyph_notomono_10_0029 = { /** Bitmap definition for character '*'. */ static const uint8_t bitmap_notomono_10_002a[] = { - 0x10, - 0x10, - 0xfe, - 0x10, - 0x28, - 0x6c, + 0x10, 0x00, + 0x10, 0x00, + 0xfe, 0x00, + 0x10, 0x00, + 0x28, 0x00, + 0x6c, 0x00, }; /** Glyph definition for character '*'. */ @@ -258,13 +257,13 @@ static const struct glyph glyph_notomono_10_002a = { /** Bitmap definition for character '+'. */ static const uint8_t bitmap_notomono_10_002b[] = { - 0x10, - 0x10, - 0x10, - 0xfe, - 0x10, - 0x10, - 0x10, + 0x10, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0xfe, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x10, 0x00, }; /** Glyph definition for character '+'. */ @@ -281,9 +280,9 @@ static const struct glyph glyph_notomono_10_002b = { /** Bitmap definition for character ','. */ static const uint8_t bitmap_notomono_10_002c[] = { - 0xc0, - 0xc0, - 0x80, + 0xc0, 0x00, + 0xc0, 0x00, + 0x80, 0x00, }; /** Glyph definition for character ','. */ @@ -300,7 +299,7 @@ static const struct glyph glyph_notomono_10_002c = { /** Bitmap definition for character '-'. */ static const uint8_t bitmap_notomono_10_002d[] = { - 0xf0, + 0xf0, 0x00, }; /** Glyph definition for character '-'. */ @@ -317,8 +316,8 @@ static const struct glyph glyph_notomono_10_002d = { /** Bitmap definition for character '.'. */ static const uint8_t bitmap_notomono_10_002e[] = { - 0xc0, - 0xc0, + 0xc0, 0x00, + 0xc0, 0x00, }; /** Glyph definition for character '.'. */ @@ -335,16 +334,16 @@ static const struct glyph glyph_notomono_10_002e = { /** Bitmap definition for character '/'. */ static const uint8_t bitmap_notomono_10_002f[] = { - 0x04, - 0x08, - 0x08, - 0x10, - 0x10, - 0x20, - 0x20, - 0x40, - 0x40, - 0x80, + 0x04, 0x00, + 0x08, 0x00, + 0x08, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x40, 0x00, + 0x40, 0x00, + 0x80, 0x00, }; /** Glyph definition for character '/'. */ @@ -361,16 +360,16 @@ static const struct glyph glyph_notomono_10_002f = { /** Bitmap definition for character '0'. */ static const uint8_t bitmap_notomono_10_0030[] = { - 0x78, - 0x48, - 0xcc, - 0x84, - 0x84, - 0x84, - 0x84, - 0xcc, - 0x48, - 0x78, + 0x78, 0x00, + 0x48, 0x00, + 0xcc, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0xcc, 0x00, + 0x48, 0x00, + 0x78, 0x00, }; /** Glyph definition for character '0'. */ @@ -387,16 +386,16 @@ static const struct glyph glyph_notomono_10_0030 = { /** Bitmap definition for character '1'. */ static const uint8_t bitmap_notomono_10_0031[] = { - 0x20, - 0x60, - 0xa0, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, + 0x20, 0x00, + 0x60, 0x00, + 0xa0, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, }; /** Glyph definition for character '1'. */ @@ -413,16 +412,16 @@ static const struct glyph glyph_notomono_10_0031 = { /** Bitmap definition for character '2'. */ static const uint8_t bitmap_notomono_10_0032[] = { - 0x78, - 0x8c, - 0x04, - 0x04, - 0x08, - 0x18, - 0x30, - 0x60, - 0x40, - 0xfc, + 0x78, 0x00, + 0x8c, 0x00, + 0x04, 0x00, + 0x04, 0x00, + 0x08, 0x00, + 0x18, 0x00, + 0x30, 0x00, + 0x60, 0x00, + 0x40, 0x00, + 0xfc, 0x00, }; /** Glyph definition for character '2'. */ @@ -439,16 +438,16 @@ static const struct glyph glyph_notomono_10_0032 = { /** Bitmap definition for character '3'. */ static const uint8_t bitmap_notomono_10_0033[] = { - 0x78, - 0x8c, - 0x04, - 0x0c, - 0x30, - 0x0c, - 0x04, - 0x04, - 0x0c, - 0xf8, + 0x78, 0x00, + 0x8c, 0x00, + 0x04, 0x00, + 0x0c, 0x00, + 0x30, 0x00, + 0x0c, 0x00, + 0x04, 0x00, + 0x04, 0x00, + 0x0c, 0x00, + 0xf8, 0x00, }; /** Glyph definition for character '3'. */ @@ -465,16 +464,16 @@ static const struct glyph glyph_notomono_10_0033 = { /** Bitmap definition for character '4'. */ static const uint8_t bitmap_notomono_10_0034[] = { - 0x08, - 0x18, - 0x28, - 0x28, - 0x48, - 0x48, - 0x88, - 0xfc, - 0x08, - 0x08, + 0x08, 0x00, + 0x18, 0x00, + 0x28, 0x00, + 0x28, 0x00, + 0x48, 0x00, + 0x48, 0x00, + 0x88, 0x00, + 0xfc, 0x00, + 0x08, 0x00, + 0x08, 0x00, }; /** Glyph definition for character '4'. */ @@ -491,16 +490,16 @@ static const struct glyph glyph_notomono_10_0034 = { /** Bitmap definition for character '5'. */ static const uint8_t bitmap_notomono_10_0035[] = { - 0xfc, - 0x80, - 0x80, - 0x80, - 0xf8, - 0x0c, - 0x04, - 0x04, - 0x0c, - 0xf8, + 0xfc, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0xf8, 0x00, + 0x0c, 0x00, + 0x04, 0x00, + 0x04, 0x00, + 0x0c, 0x00, + 0xf8, 0x00, }; /** Glyph definition for character '5'. */ @@ -517,16 +516,16 @@ static const struct glyph glyph_notomono_10_0035 = { /** Bitmap definition for character '6'. */ static const uint8_t bitmap_notomono_10_0036[] = { - 0x3c, - 0x60, - 0x40, - 0xc0, - 0xb8, - 0xcc, - 0x84, - 0x84, - 0x4c, - 0x78, + 0x3c, 0x00, + 0x60, 0x00, + 0x40, 0x00, + 0xc0, 0x00, + 0xb8, 0x00, + 0xcc, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x4c, 0x00, + 0x78, 0x00, }; /** Glyph definition for character '6'. */ @@ -543,16 +542,16 @@ static const struct glyph glyph_notomono_10_0036 = { /** Bitmap definition for character '7'. */ static const uint8_t bitmap_notomono_10_0037[] = { - 0xfc, - 0x04, - 0x08, - 0x08, - 0x10, - 0x10, - 0x30, - 0x20, - 0x20, - 0x40, + 0xfc, 0x00, + 0x04, 0x00, + 0x08, 0x00, + 0x08, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x30, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x40, 0x00, }; /** Glyph definition for character '7'. */ @@ -569,16 +568,16 @@ static const struct glyph glyph_notomono_10_0037 = { /** Bitmap definition for character '8'. */ static const uint8_t bitmap_notomono_10_0038[] = { - 0x78, - 0xcc, - 0x84, - 0xcc, - 0x70, - 0x48, - 0x84, - 0x84, - 0xcc, - 0x78, + 0x78, 0x00, + 0xcc, 0x00, + 0x84, 0x00, + 0xcc, 0x00, + 0x70, 0x00, + 0x48, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0xcc, 0x00, + 0x78, 0x00, }; /** Glyph definition for character '8'. */ @@ -595,16 +594,16 @@ static const struct glyph glyph_notomono_10_0038 = { /** Bitmap definition for character '9'. */ static const uint8_t bitmap_notomono_10_0039[] = { - 0x78, - 0xc8, - 0x84, - 0x84, - 0xcc, - 0x74, - 0x0c, - 0x08, - 0x18, - 0xf0, + 0x78, 0x00, + 0xc8, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0xcc, 0x00, + 0x74, 0x00, + 0x0c, 0x00, + 0x08, 0x00, + 0x18, 0x00, + 0xf0, 0x00, }; /** Glyph definition for character '9'. */ @@ -621,14 +620,14 @@ static const struct glyph glyph_notomono_10_0039 = { /** Bitmap definition for character ':'. */ static const uint8_t bitmap_notomono_10_003a[] = { - 0xc0, - 0xc0, - 0x00, - 0x00, - 0x00, - 0x00, - 0xc0, - 0xc0, + 0xc0, 0x00, + 0xc0, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, }; /** Glyph definition for character ':'. */ @@ -645,15 +644,15 @@ static const struct glyph glyph_notomono_10_003a = { /** Bitmap definition for character ';'. */ static const uint8_t bitmap_notomono_10_003b[] = { - 0xc0, - 0xc0, - 0x00, - 0x00, - 0x00, - 0x00, - 0xc0, - 0xc0, - 0x80, + 0xc0, 0x00, + 0xc0, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0x80, 0x00, }; /** Glyph definition for character ';'. */ @@ -670,13 +669,13 @@ static const struct glyph glyph_notomono_10_003b = { /** Bitmap definition for character '<'. */ static const uint8_t bitmap_notomono_10_003c[] = { - 0x04, - 0x18, - 0x60, - 0x80, - 0x60, - 0x18, - 0x04, + 0x04, 0x00, + 0x18, 0x00, + 0x60, 0x00, + 0x80, 0x00, + 0x60, 0x00, + 0x18, 0x00, + 0x04, 0x00, }; /** Glyph definition for character '<'. */ @@ -693,9 +692,9 @@ static const struct glyph glyph_notomono_10_003c = { /** Bitmap definition for character '='. */ static const uint8_t bitmap_notomono_10_003d[] = { - 0xfc, - 0x00, - 0xfc, + 0xfc, 0x00, + 0x00, 0x00, + 0xfc, 0x00, }; /** Glyph definition for character '='. */ @@ -712,13 +711,13 @@ static const struct glyph glyph_notomono_10_003d = { /** Bitmap definition for character '>'. */ static const uint8_t bitmap_notomono_10_003e[] = { - 0x80, - 0x60, - 0x18, - 0x04, - 0x18, - 0x60, - 0x80, + 0x80, 0x00, + 0x60, 0x00, + 0x18, 0x00, + 0x04, 0x00, + 0x18, 0x00, + 0x60, 0x00, + 0x80, 0x00, }; /** Glyph definition for character '>'. */ @@ -735,16 +734,16 @@ static const struct glyph glyph_notomono_10_003e = { /** Bitmap definition for character '?'. */ static const uint8_t bitmap_notomono_10_003f[] = { - 0xf8, - 0x8c, - 0x04, - 0x0c, - 0x18, - 0x10, - 0x20, - 0x00, - 0x30, - 0x30, + 0xf8, 0x00, + 0x8c, 0x00, + 0x04, 0x00, + 0x0c, 0x00, + 0x18, 0x00, + 0x10, 0x00, + 0x20, 0x00, + 0x00, 0x00, + 0x30, 0x00, + 0x30, 0x00, }; /** Glyph definition for character '?'. */ @@ -761,17 +760,17 @@ static const struct glyph glyph_notomono_10_003f = { /** Bitmap definition for character '@'. */ static const uint8_t bitmap_notomono_10_0040[] = { - 0x3c, - 0x42, - 0x41, - 0x9d, - 0xa5, - 0xa5, - 0xa5, - 0x9a, - 0xc0, - 0x40, - 0x3e, + 0x3c, 0x00, + 0x42, 0x00, + 0x41, 0x00, + 0x9d, 0x00, + 0xa5, 0x00, + 0xa5, 0x00, + 0xa5, 0x00, + 0x9a, 0x00, + 0xc0, 0x00, + 0x40, 0x00, + 0x3e, 0x00, }; /** Glyph definition for character '@'. */ @@ -788,16 +787,16 @@ static const struct glyph glyph_notomono_10_0040 = { /** Bitmap definition for character 'A'. */ static const uint8_t bitmap_notomono_10_0041[] = { - 0x18, - 0x18, - 0x18, - 0x24, - 0x24, - 0x24, - 0x7e, - 0x42, - 0x42, - 0x81, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x24, 0x00, + 0x24, 0x00, + 0x24, 0x00, + 0x7e, 0x00, + 0x42, 0x00, + 0x42, 0x00, + 0x81, 0x00, }; /** Glyph definition for character 'A'. */ @@ -814,16 +813,16 @@ static const struct glyph glyph_notomono_10_0041 = { /** Bitmap definition for character 'B'. */ static const uint8_t bitmap_notomono_10_0042[] = { - 0xf8, - 0x8c, - 0x84, - 0x8c, - 0xf0, - 0x8c, - 0x84, - 0x84, - 0x8c, - 0xf8, + 0xf8, 0x00, + 0x8c, 0x00, + 0x84, 0x00, + 0x8c, 0x00, + 0xf0, 0x00, + 0x8c, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x8c, 0x00, + 0xf8, 0x00, }; /** Glyph definition for character 'B'. */ @@ -840,16 +839,16 @@ static const struct glyph glyph_notomono_10_0042 = { /** Bitmap definition for character 'C'. */ static const uint8_t bitmap_notomono_10_0043[] = { - 0x3c, - 0x64, - 0xc0, - 0x80, - 0x80, - 0x80, - 0x80, - 0xc0, - 0x60, - 0x3c, + 0x3c, 0x00, + 0x64, 0x00, + 0xc0, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0xc0, 0x00, + 0x60, 0x00, + 0x3c, 0x00, }; /** Glyph definition for character 'C'. */ @@ -866,16 +865,16 @@ static const struct glyph glyph_notomono_10_0043 = { /** Bitmap definition for character 'D'. */ static const uint8_t bitmap_notomono_10_0044[] = { - 0xf0, - 0x98, - 0x8c, - 0x84, - 0x84, - 0x84, - 0x84, - 0x8c, - 0x98, - 0xf0, + 0xf0, 0x00, + 0x98, 0x00, + 0x8c, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x8c, 0x00, + 0x98, 0x00, + 0xf0, 0x00, }; /** Glyph definition for character 'D'. */ @@ -892,16 +891,16 @@ static const struct glyph glyph_notomono_10_0044 = { /** Bitmap definition for character 'E'. */ static const uint8_t bitmap_notomono_10_0045[] = { - 0xfc, - 0x80, - 0x80, - 0x80, - 0xfc, - 0x80, - 0x80, - 0x80, - 0x80, - 0xfc, + 0xfc, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0xfc, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0xfc, 0x00, }; /** Glyph definition for character 'E'. */ @@ -918,16 +917,16 @@ static const struct glyph glyph_notomono_10_0045 = { /** Bitmap definition for character 'F'. */ static const uint8_t bitmap_notomono_10_0046[] = { - 0xfc, - 0x80, - 0x80, - 0x80, - 0xfc, - 0x80, - 0x80, - 0x80, - 0x80, - 0x80, + 0xfc, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0xfc, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, }; /** Glyph definition for character 'F'. */ @@ -944,16 +943,16 @@ static const struct glyph glyph_notomono_10_0046 = { /** Bitmap definition for character 'G'. */ static const uint8_t bitmap_notomono_10_0047[] = { - 0x3c, - 0x60, - 0xc0, - 0x80, - 0x9c, - 0x84, - 0x84, - 0xc4, - 0x44, - 0x3c, + 0x3c, 0x00, + 0x60, 0x00, + 0xc0, 0x00, + 0x80, 0x00, + 0x9c, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0xc4, 0x00, + 0x44, 0x00, + 0x3c, 0x00, }; /** Glyph definition for character 'G'. */ @@ -970,16 +969,16 @@ static const struct glyph glyph_notomono_10_0047 = { /** Bitmap definition for character 'H'. */ static const uint8_t bitmap_notomono_10_0048[] = { - 0x84, - 0x84, - 0x84, - 0x84, - 0xfc, - 0x84, - 0x84, - 0x84, - 0x84, - 0x84, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0xfc, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, }; /** Glyph definition for character 'H'. */ @@ -996,16 +995,16 @@ static const struct glyph glyph_notomono_10_0048 = { /** Bitmap definition for character 'I'. */ static const uint8_t bitmap_notomono_10_0049[] = { - 0xf8, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0xf8, + 0xf8, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0xf8, 0x00, }; /** Glyph definition for character 'I'. */ @@ -1022,16 +1021,16 @@ static const struct glyph glyph_notomono_10_0049 = { /** Bitmap definition for character 'J'. */ static const uint8_t bitmap_notomono_10_004a[] = { - 0x08, - 0x08, - 0x08, - 0x08, - 0x08, - 0x08, - 0x08, - 0x08, - 0x18, - 0xf0, + 0x08, 0x00, + 0x08, 0x00, + 0x08, 0x00, + 0x08, 0x00, + 0x08, 0x00, + 0x08, 0x00, + 0x08, 0x00, + 0x08, 0x00, + 0x18, 0x00, + 0xf0, 0x00, }; /** Glyph definition for character 'J'. */ @@ -1048,16 +1047,16 @@ static const struct glyph glyph_notomono_10_004a = { /** Bitmap definition for character 'K'. */ static const uint8_t bitmap_notomono_10_004b[] = { - 0x86, - 0x8c, - 0x88, - 0x90, - 0xa0, - 0xd0, - 0x98, - 0x88, - 0x84, - 0x86, + 0x86, 0x00, + 0x8c, 0x00, + 0x88, 0x00, + 0x90, 0x00, + 0xa0, 0x00, + 0xd0, 0x00, + 0x98, 0x00, + 0x88, 0x00, + 0x84, 0x00, + 0x86, 0x00, }; /** Glyph definition for character 'K'. */ @@ -1074,16 +1073,16 @@ static const struct glyph glyph_notomono_10_004b = { /** Bitmap definition for character 'L'. */ static const uint8_t bitmap_notomono_10_004c[] = { - 0x80, - 0x80, - 0x80, - 0x80, - 0x80, - 0x80, - 0x80, - 0x80, - 0x80, - 0xfc, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0xfc, 0x00, }; /** Glyph definition for character 'L'. */ @@ -1100,16 +1099,16 @@ static const struct glyph glyph_notomono_10_004c = { /** Bitmap definition for character 'M'. */ static const uint8_t bitmap_notomono_10_004d[] = { - 0x82, - 0xc6, - 0xc6, - 0xc6, - 0xaa, - 0xaa, - 0xaa, - 0xb2, - 0x92, - 0x92, + 0x82, 0x00, + 0xc6, 0x00, + 0xc6, 0x00, + 0xc6, 0x00, + 0xaa, 0x00, + 0xaa, 0x00, + 0xaa, 0x00, + 0xb2, 0x00, + 0x92, 0x00, + 0x92, 0x00, }; /** Glyph definition for character 'M'. */ @@ -1126,16 +1125,16 @@ static const struct glyph glyph_notomono_10_004d = { /** Bitmap definition for character 'N'. */ static const uint8_t bitmap_notomono_10_004e[] = { - 0x84, - 0xc4, - 0xc4, - 0xa4, - 0xa4, - 0x94, - 0x94, - 0x8c, - 0x8c, - 0x84, + 0x84, 0x00, + 0xc4, 0x00, + 0xc4, 0x00, + 0xa4, 0x00, + 0xa4, 0x00, + 0x94, 0x00, + 0x94, 0x00, + 0x8c, 0x00, + 0x8c, 0x00, + 0x84, 0x00, }; /** Glyph definition for character 'N'. */ @@ -1152,16 +1151,16 @@ static const struct glyph glyph_notomono_10_004e = { /** Bitmap definition for character 'O'. */ static const uint8_t bitmap_notomono_10_004f[] = { - 0x78, - 0x48, - 0xcc, - 0x84, - 0x84, - 0x84, - 0x84, - 0xcc, - 0x48, - 0x78, + 0x78, 0x00, + 0x48, 0x00, + 0xcc, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0xcc, 0x00, + 0x48, 0x00, + 0x78, 0x00, }; /** Glyph definition for character 'O'. */ @@ -1178,16 +1177,16 @@ static const struct glyph glyph_notomono_10_004f = { /** Bitmap definition for character 'P'. */ static const uint8_t bitmap_notomono_10_0050[] = { - 0xf8, - 0x8c, - 0x84, - 0x84, - 0x8c, - 0xf8, - 0x80, - 0x80, - 0x80, - 0x80, + 0xf8, 0x00, + 0x8c, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x8c, 0x00, + 0xf8, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, }; /** Glyph definition for character 'P'. */ @@ -1204,19 +1203,19 @@ static const struct glyph glyph_notomono_10_0050 = { /** Bitmap definition for character 'Q'. */ static const uint8_t bitmap_notomono_10_0051[] = { - 0x78, - 0x48, - 0xcc, - 0x84, - 0x84, - 0x84, - 0x84, - 0xcc, - 0x48, - 0x70, - 0x08, - 0x0c, - 0x04, + 0x78, 0x00, + 0x48, 0x00, + 0xcc, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0xcc, 0x00, + 0x48, 0x00, + 0x70, 0x00, + 0x08, 0x00, + 0x0c, 0x00, + 0x04, 0x00, }; /** Glyph definition for character 'Q'. */ @@ -1233,16 +1232,16 @@ static const struct glyph glyph_notomono_10_0051 = { /** Bitmap definition for character 'R'. */ static const uint8_t bitmap_notomono_10_0052[] = { - 0xf8, - 0x8c, - 0x84, - 0x84, - 0x8c, - 0xf8, - 0x98, - 0x88, - 0x84, - 0x86, + 0xf8, 0x00, + 0x8c, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x8c, 0x00, + 0xf8, 0x00, + 0x98, 0x00, + 0x88, 0x00, + 0x84, 0x00, + 0x86, 0x00, }; /** Glyph definition for character 'R'. */ @@ -1259,16 +1258,16 @@ static const struct glyph glyph_notomono_10_0052 = { /** Bitmap definition for character 'S'. */ static const uint8_t bitmap_notomono_10_0053[] = { - 0x7c, - 0xc4, - 0x80, - 0xc0, - 0x70, - 0x18, - 0x04, - 0x04, - 0x0c, - 0xf8, + 0x7c, 0x00, + 0xc4, 0x00, + 0x80, 0x00, + 0xc0, 0x00, + 0x70, 0x00, + 0x18, 0x00, + 0x04, 0x00, + 0x04, 0x00, + 0x0c, 0x00, + 0xf8, 0x00, }; /** Glyph definition for character 'S'. */ @@ -1285,16 +1284,16 @@ static const struct glyph glyph_notomono_10_0053 = { /** Bitmap definition for character 'T'. */ static const uint8_t bitmap_notomono_10_0054[] = { - 0xfe, - 0x10, - 0x10, - 0x10, - 0x10, - 0x10, - 0x10, - 0x10, - 0x10, - 0x10, + 0xfe, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x10, 0x00, }; /** Glyph definition for character 'T'. */ @@ -1311,16 +1310,16 @@ static const struct glyph glyph_notomono_10_0054 = { /** Bitmap definition for character 'U'. */ static const uint8_t bitmap_notomono_10_0055[] = { - 0x84, - 0x84, - 0x84, - 0x84, - 0x84, - 0x84, - 0x84, - 0x84, - 0xcc, - 0x78, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0xcc, 0x00, + 0x78, 0x00, }; /** Glyph definition for character 'U'. */ @@ -1337,16 +1336,16 @@ static const struct glyph glyph_notomono_10_0055 = { /** Bitmap definition for character 'V'. */ static const uint8_t bitmap_notomono_10_0056[] = { - 0x81, - 0x42, - 0x42, - 0x42, - 0x24, - 0x24, - 0x24, - 0x18, - 0x18, - 0x18, + 0x81, 0x00, + 0x42, 0x00, + 0x42, 0x00, + 0x42, 0x00, + 0x24, 0x00, + 0x24, 0x00, + 0x24, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, }; /** Glyph definition for character 'V'. */ @@ -1363,16 +1362,16 @@ static const struct glyph glyph_notomono_10_0056 = { /** Bitmap definition for character 'W'. */ static const uint8_t bitmap_notomono_10_0057[] = { - 0x81, - 0x81, - 0x81, - 0xd1, - 0x5a, - 0x5a, - 0x66, - 0x66, - 0x62, - 0x42, + 0x81, 0x00, + 0x81, 0x00, + 0x81, 0x00, + 0xd1, 0x00, + 0x5a, 0x00, + 0x5a, 0x00, + 0x66, 0x00, + 0x66, 0x00, + 0x62, 0x00, + 0x42, 0x00, }; /** Glyph definition for character 'W'. */ @@ -1389,16 +1388,16 @@ static const struct glyph glyph_notomono_10_0057 = { /** Bitmap definition for character 'X'. */ static const uint8_t bitmap_notomono_10_0058[] = { - 0xc3, - 0x42, - 0x24, - 0x3c, - 0x18, - 0x18, - 0x2c, - 0x24, - 0x42, - 0x83, + 0xc3, 0x00, + 0x42, 0x00, + 0x24, 0x00, + 0x3c, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x2c, 0x00, + 0x24, 0x00, + 0x42, 0x00, + 0x83, 0x00, }; /** Glyph definition for character 'X'. */ @@ -1415,16 +1414,16 @@ static const struct glyph glyph_notomono_10_0058 = { /** Bitmap definition for character 'Y'. */ static const uint8_t bitmap_notomono_10_0059[] = { - 0xc2, - 0x44, - 0x64, - 0x28, - 0x28, - 0x10, - 0x10, - 0x10, - 0x10, - 0x10, + 0xc2, 0x00, + 0x44, 0x00, + 0x64, 0x00, + 0x28, 0x00, + 0x28, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x10, 0x00, }; /** Glyph definition for character 'Y'. */ @@ -1441,16 +1440,16 @@ static const struct glyph glyph_notomono_10_0059 = { /** Bitmap definition for character 'Z'. */ static const uint8_t bitmap_notomono_10_005a[] = { - 0xfc, - 0x0c, - 0x08, - 0x18, - 0x10, - 0x20, - 0x60, - 0x40, - 0xc0, - 0xfc, + 0xfc, 0x00, + 0x0c, 0x00, + 0x08, 0x00, + 0x18, 0x00, + 0x10, 0x00, + 0x20, 0x00, + 0x60, 0x00, + 0x40, 0x00, + 0xc0, 0x00, + 0xfc, 0x00, }; /** Glyph definition for character 'Z'. */ @@ -1467,18 +1466,18 @@ static const struct glyph glyph_notomono_10_005a = { /** Bitmap definition for character '['. */ static const uint8_t bitmap_notomono_10_005b[] = { - 0xe0, - 0x80, - 0x80, - 0x80, - 0x80, - 0x80, - 0x80, - 0x80, - 0x80, - 0x80, - 0x80, - 0xe0, + 0xe0, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0xe0, 0x00, }; /** Glyph definition for character '['. */ @@ -1495,16 +1494,16 @@ static const struct glyph glyph_notomono_10_005b = { /** Bitmap definition for character '\'. */ static const uint8_t bitmap_notomono_10_005c[] = { - 0x80, - 0x40, - 0x40, - 0x20, - 0x20, - 0x10, - 0x10, - 0x08, - 0x08, - 0x04, + 0x80, 0x00, + 0x40, 0x00, + 0x40, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x08, 0x00, + 0x08, 0x00, + 0x04, 0x00, }; /** Glyph definition for character '\'. */ @@ -1521,18 +1520,18 @@ static const struct glyph glyph_notomono_10_005c = { /** Bitmap definition for character ']'. */ static const uint8_t bitmap_notomono_10_005d[] = { - 0xe0, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0xe0, + 0xe0, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0xe0, 0x00, }; /** Glyph definition for character ']'. */ @@ -1549,12 +1548,12 @@ static const struct glyph glyph_notomono_10_005d = { /** Bitmap definition for character '^'. */ static const uint8_t bitmap_notomono_10_005e[] = { - 0x30, - 0x30, - 0x30, - 0x48, - 0x48, - 0x84, + 0x30, 0x00, + 0x30, 0x00, + 0x30, 0x00, + 0x48, 0x00, + 0x48, 0x00, + 0x84, 0x00, }; /** Glyph definition for character '^'. */ @@ -1571,7 +1570,7 @@ static const struct glyph glyph_notomono_10_005e = { /** Bitmap definition for character '_'. */ static const uint8_t bitmap_notomono_10_005f[] = { - 0xff, + 0xff, 0x00, }; /** Glyph definition for character '_'. */ @@ -1588,14 +1587,14 @@ static const struct glyph glyph_notomono_10_005f = { /** Bitmap definition for character 'a'. */ static const uint8_t bitmap_notomono_10_0061[] = { - 0x78, - 0x0c, - 0x04, - 0x7c, - 0xc4, - 0x84, - 0x8c, - 0x74, + 0x78, 0x00, + 0x0c, 0x00, + 0x04, 0x00, + 0x7c, 0x00, + 0xc4, 0x00, + 0x84, 0x00, + 0x8c, 0x00, + 0x74, 0x00, }; /** Glyph definition for character 'a'. */ @@ -1612,17 +1611,17 @@ static const struct glyph glyph_notomono_10_0061 = { /** Bitmap definition for character 'b'. */ static const uint8_t bitmap_notomono_10_0062[] = { - 0x80, - 0x80, - 0x80, - 0xb8, - 0xcc, - 0x84, - 0x84, - 0x84, - 0x84, - 0xcc, - 0xb8, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0xb8, 0x00, + 0xcc, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0xcc, 0x00, + 0xb8, 0x00, }; /** Glyph definition for character 'b'. */ @@ -1639,14 +1638,14 @@ static const struct glyph glyph_notomono_10_0062 = { /** Bitmap definition for character 'c'. */ static const uint8_t bitmap_notomono_10_0063[] = { - 0x3c, - 0x40, - 0xc0, - 0x80, - 0x80, - 0x80, - 0x40, - 0x3c, + 0x3c, 0x00, + 0x40, 0x00, + 0xc0, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x40, 0x00, + 0x3c, 0x00, }; /** Glyph definition for character 'c'. */ @@ -1663,17 +1662,17 @@ static const struct glyph glyph_notomono_10_0063 = { /** Bitmap definition for character 'd'. */ static const uint8_t bitmap_notomono_10_0064[] = { - 0x04, - 0x04, - 0x04, - 0x74, - 0xcc, - 0x84, - 0x84, - 0x84, - 0x84, - 0xcc, - 0x74, + 0x04, 0x00, + 0x04, 0x00, + 0x04, 0x00, + 0x74, 0x00, + 0xcc, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0xcc, 0x00, + 0x74, 0x00, }; /** Glyph definition for character 'd'. */ @@ -1690,14 +1689,14 @@ static const struct glyph glyph_notomono_10_0064 = { /** Bitmap definition for character 'e'. */ static const uint8_t bitmap_notomono_10_0065[] = { - 0x78, - 0x4c, - 0x84, - 0xfc, - 0x80, - 0x80, - 0x44, - 0x3c, + 0x78, 0x00, + 0x4c, 0x00, + 0x84, 0x00, + 0xfc, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x44, 0x00, + 0x3c, 0x00, }; /** Glyph definition for character 'e'. */ @@ -1714,17 +1713,17 @@ static const struct glyph glyph_notomono_10_0065 = { /** Bitmap definition for character 'f'. */ static const uint8_t bitmap_notomono_10_0066[] = { - 0x1c, - 0x20, - 0x20, - 0xfc, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, + 0x1c, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0xfc, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, }; /** Glyph definition for character 'f'. */ @@ -1741,17 +1740,17 @@ static const struct glyph glyph_notomono_10_0066 = { /** Bitmap definition for character 'g'. */ static const uint8_t bitmap_notomono_10_0067[] = { - 0x7e, - 0x84, - 0x84, - 0x84, - 0x78, - 0x80, - 0xfc, - 0xc2, - 0x82, - 0x86, - 0x7c, + 0x7e, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x78, 0x00, + 0x80, 0x00, + 0xfc, 0x00, + 0xc2, 0x00, + 0x82, 0x00, + 0x86, 0x00, + 0x7c, 0x00, }; /** Glyph definition for character 'g'. */ @@ -1768,17 +1767,17 @@ static const struct glyph glyph_notomono_10_0067 = { /** Bitmap definition for character 'h'. */ static const uint8_t bitmap_notomono_10_0068[] = { - 0x80, - 0x80, - 0x80, - 0xb8, - 0xcc, - 0x84, - 0x84, - 0x84, - 0x84, - 0x84, - 0x84, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0xb8, 0x00, + 0xcc, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, }; /** Glyph definition for character 'h'. */ @@ -1795,17 +1794,17 @@ static const struct glyph glyph_notomono_10_0068 = { /** Bitmap definition for character 'i'. */ static const uint8_t bitmap_notomono_10_0069[] = { - 0x10, - 0x10, - 0x00, - 0x70, - 0x10, - 0x10, - 0x10, - 0x10, - 0x10, - 0x10, - 0xfc, + 0x10, 0x00, + 0x10, 0x00, + 0x00, 0x00, + 0x70, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0xfc, 0x00, }; /** Glyph definition for character 'i'. */ @@ -1822,20 +1821,20 @@ static const struct glyph glyph_notomono_10_0069 = { /** Bitmap definition for character 'j'. */ static const uint8_t bitmap_notomono_10_006a[] = { - 0x08, - 0x08, - 0x00, - 0x78, - 0x08, - 0x08, - 0x08, - 0x08, - 0x08, - 0x08, - 0x08, - 0x08, - 0x18, - 0xf0, + 0x08, 0x00, + 0x08, 0x00, + 0x00, 0x00, + 0x78, 0x00, + 0x08, 0x00, + 0x08, 0x00, + 0x08, 0x00, + 0x08, 0x00, + 0x08, 0x00, + 0x08, 0x00, + 0x08, 0x00, + 0x08, 0x00, + 0x18, 0x00, + 0xf0, 0x00, }; /** Glyph definition for character 'j'. */ @@ -1852,17 +1851,17 @@ static const struct glyph glyph_notomono_10_006a = { /** Bitmap definition for character 'k'. */ static const uint8_t bitmap_notomono_10_006b[] = { - 0x80, - 0x80, - 0x80, - 0x84, - 0x88, - 0x90, - 0xa0, - 0xf0, - 0x98, - 0x8c, - 0x86, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x84, 0x00, + 0x88, 0x00, + 0x90, 0x00, + 0xa0, 0x00, + 0xf0, 0x00, + 0x98, 0x00, + 0x8c, 0x00, + 0x86, 0x00, }; /** Glyph definition for character 'k'. */ @@ -1879,17 +1878,17 @@ static const struct glyph glyph_notomono_10_006b = { /** Bitmap definition for character 'l'. */ static const uint8_t bitmap_notomono_10_006c[] = { - 0x70, - 0x10, - 0x10, - 0x10, - 0x10, - 0x10, - 0x10, - 0x10, - 0x10, - 0x10, - 0xfc, + 0x70, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0x10, 0x00, + 0xfc, 0x00, }; /** Glyph definition for character 'l'. */ @@ -1906,14 +1905,14 @@ static const struct glyph glyph_notomono_10_006c = { /** Bitmap definition for character 'm'. */ static const uint8_t bitmap_notomono_10_006d[] = { - 0xac, - 0xd2, - 0x92, - 0x92, - 0x92, - 0x92, - 0x92, - 0x92, + 0xac, 0x00, + 0xd2, 0x00, + 0x92, 0x00, + 0x92, 0x00, + 0x92, 0x00, + 0x92, 0x00, + 0x92, 0x00, + 0x92, 0x00, }; /** Glyph definition for character 'm'. */ @@ -1930,14 +1929,14 @@ static const struct glyph glyph_notomono_10_006d = { /** Bitmap definition for character 'n'. */ static const uint8_t bitmap_notomono_10_006e[] = { - 0xb8, - 0xcc, - 0x84, - 0x84, - 0x84, - 0x84, - 0x84, - 0x84, + 0xb8, 0x00, + 0xcc, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, }; /** Glyph definition for character 'n'. */ @@ -1954,14 +1953,14 @@ static const struct glyph glyph_notomono_10_006e = { /** Bitmap definition for character 'o'. */ static const uint8_t bitmap_notomono_10_006f[] = { - 0x78, - 0x48, - 0x84, - 0x84, - 0x84, - 0x84, - 0x48, - 0x78, + 0x78, 0x00, + 0x48, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x48, 0x00, + 0x78, 0x00, }; /** Glyph definition for character 'o'. */ @@ -1978,17 +1977,17 @@ static const struct glyph glyph_notomono_10_006f = { /** Bitmap definition for character 'p'. */ static const uint8_t bitmap_notomono_10_0070[] = { - 0xb8, - 0xcc, - 0x84, - 0x84, - 0x84, - 0x84, - 0xcc, - 0xb8, - 0x80, - 0x80, - 0x80, + 0xb8, 0x00, + 0xcc, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0xcc, 0x00, + 0xb8, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, }; /** Glyph definition for character 'p'. */ @@ -2005,17 +2004,17 @@ static const struct glyph glyph_notomono_10_0070 = { /** Bitmap definition for character 'q'. */ static const uint8_t bitmap_notomono_10_0071[] = { - 0x74, - 0xcc, - 0x84, - 0x84, - 0x84, - 0x84, - 0xcc, - 0x74, - 0x04, - 0x04, - 0x04, + 0x74, 0x00, + 0xcc, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0xcc, 0x00, + 0x74, 0x00, + 0x04, 0x00, + 0x04, 0x00, + 0x04, 0x00, }; /** Glyph definition for character 'q'. */ @@ -2032,14 +2031,14 @@ static const struct glyph glyph_notomono_10_0071 = { /** Bitmap definition for character 'r'. */ static const uint8_t bitmap_notomono_10_0072[] = { - 0xb8, - 0xc0, - 0x80, - 0x80, - 0x80, - 0x80, - 0x80, - 0x80, + 0xb8, 0x00, + 0xc0, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, }; /** Glyph definition for character 'r'. */ @@ -2056,14 +2055,14 @@ static const struct glyph glyph_notomono_10_0072 = { /** Bitmap definition for character 's'. */ static const uint8_t bitmap_notomono_10_0073[] = { - 0x7c, - 0x84, - 0x80, - 0x70, - 0x1c, - 0x04, - 0x04, - 0xf8, + 0x7c, 0x00, + 0x84, 0x00, + 0x80, 0x00, + 0x70, 0x00, + 0x1c, 0x00, + 0x04, 0x00, + 0x04, 0x00, + 0xf8, 0x00, }; /** Glyph definition for character 's'. */ @@ -2080,16 +2079,16 @@ static const struct glyph glyph_notomono_10_0073 = { /** Bitmap definition for character 't'. */ static const uint8_t bitmap_notomono_10_0074[] = { - 0x20, - 0x20, - 0xfc, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x1c, + 0x20, 0x00, + 0x20, 0x00, + 0xfc, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x1c, 0x00, }; /** Glyph definition for character 't'. */ @@ -2106,14 +2105,14 @@ static const struct glyph glyph_notomono_10_0074 = { /** Bitmap definition for character 'u'. */ static const uint8_t bitmap_notomono_10_0075[] = { - 0x84, - 0x84, - 0x84, - 0x84, - 0x84, - 0x84, - 0xcc, - 0x74, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0x84, 0x00, + 0xcc, 0x00, + 0x74, 0x00, }; /** Glyph definition for character 'u'. */ @@ -2130,14 +2129,14 @@ static const struct glyph glyph_notomono_10_0075 = { /** Bitmap definition for character 'v'. */ static const uint8_t bitmap_notomono_10_0076[] = { - 0x84, - 0xcc, - 0x48, - 0x48, - 0x48, - 0x30, - 0x30, - 0x30, + 0x84, 0x00, + 0xcc, 0x00, + 0x48, 0x00, + 0x48, 0x00, + 0x48, 0x00, + 0x30, 0x00, + 0x30, 0x00, + 0x30, 0x00, }; /** Glyph definition for character 'v'. */ @@ -2154,14 +2153,14 @@ static const struct glyph glyph_notomono_10_0076 = { /** Bitmap definition for character 'w'. */ static const uint8_t bitmap_notomono_10_0077[] = { - 0x99, - 0x99, - 0x99, - 0xa5, - 0xa5, - 0x66, - 0x46, - 0x42, + 0x99, 0x00, + 0x99, 0x00, + 0x99, 0x00, + 0xa5, 0x00, + 0xa5, 0x00, + 0x66, 0x00, + 0x46, 0x00, + 0x42, 0x00, }; /** Glyph definition for character 'w'. */ @@ -2178,14 +2177,14 @@ static const struct glyph glyph_notomono_10_0077 = { /** Bitmap definition for character 'x'. */ static const uint8_t bitmap_notomono_10_0078[] = { - 0xcc, - 0x48, - 0x30, - 0x30, - 0x30, - 0x78, - 0x48, - 0x84, + 0xcc, 0x00, + 0x48, 0x00, + 0x30, 0x00, + 0x30, 0x00, + 0x30, 0x00, + 0x78, 0x00, + 0x48, 0x00, + 0x84, 0x00, }; /** Glyph definition for character 'x'. */ @@ -2202,17 +2201,17 @@ static const struct glyph glyph_notomono_10_0078 = { /** Bitmap definition for character 'y'. */ static const uint8_t bitmap_notomono_10_0079[] = { - 0x84, - 0xcc, - 0x48, - 0x48, - 0x48, - 0x30, - 0x30, - 0x30, - 0x20, - 0x20, - 0xc0, + 0x84, 0x00, + 0xcc, 0x00, + 0x48, 0x00, + 0x48, 0x00, + 0x48, 0x00, + 0x30, 0x00, + 0x30, 0x00, + 0x30, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0xc0, 0x00, }; /** Glyph definition for character 'y'. */ @@ -2229,14 +2228,14 @@ static const struct glyph glyph_notomono_10_0079 = { /** Bitmap definition for character 'z'. */ static const uint8_t bitmap_notomono_10_007a[] = { - 0xfc, - 0x0c, - 0x08, - 0x10, - 0x20, - 0x60, - 0xc0, - 0xfc, + 0xfc, 0x00, + 0x0c, 0x00, + 0x08, 0x00, + 0x10, 0x00, + 0x20, 0x00, + 0x60, 0x00, + 0xc0, 0x00, + 0xfc, 0x00, }; /** Glyph definition for character 'z'. */ @@ -2253,18 +2252,18 @@ static const struct glyph glyph_notomono_10_007a = { /** Bitmap definition for character '{'. */ static const uint8_t bitmap_notomono_10_007b[] = { - 0x18, - 0x20, - 0x20, - 0x20, - 0x20, - 0xc0, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x18, + 0x18, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0xc0, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x18, 0x00, }; /** Glyph definition for character '{'. */ @@ -2281,20 +2280,20 @@ static const struct glyph glyph_notomono_10_007b = { /** Bitmap definition for character '|'. */ static const uint8_t bitmap_notomono_10_007c[] = { - 0x80, - 0x80, - 0x80, - 0x80, - 0x80, - 0x80, - 0x80, - 0x80, - 0x80, - 0x80, - 0x80, - 0x80, - 0x80, - 0x80, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, + 0x80, 0x00, }; /** Glyph definition for character '|'. */ @@ -2311,18 +2310,18 @@ static const struct glyph glyph_notomono_10_007c = { /** Bitmap definition for character '}'. */ static const uint8_t bitmap_notomono_10_007d[] = { - 0xc0, - 0x20, - 0x20, - 0x20, - 0x20, - 0x18, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0xc0, + 0xc0, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x18, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0xc0, 0x00, }; /** Glyph definition for character '}'. */ @@ -2339,8 +2338,8 @@ static const struct glyph glyph_notomono_10_007d = { /** Bitmap definition for character '~'. */ static const uint8_t bitmap_notomono_10_007e[] = { - 0xe0, - 0x1c, + 0xe0, 0x00, + 0x1c, 0x00, }; /** Glyph definition for character '~'. */ diff --git a/lib/fonts/font-notomono-16.c b/lib/fonts/font-notomono-16.c new file mode 100644 index 0000000..6320480 --- /dev/null +++ b/lib/fonts/font-notomono-16.c @@ -0,0 +1,2955 @@ +/* AUTOMATICALLY GENERATED FILE! EDITING NOT RECOMMENDED! + * + * This file is distributed under the terms of the MIT License. + * See the LICENSE file at the top of this tree, or if it is missing a copy can + * be found at http://opensource.org/licenses/MIT + */ + +#include +#include +#include "fontem.h" +#include "font-notomono-16.h" + +/* Character list: @#$%^&*()_+-={}|[]\:;<>?,./~ ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'! */ + +/** Glyph definition for character ' '. */ +static const struct glyph glyph_notomono_16_0020 = { + .glyph = 32, + .left = 0, + .top = 0, + .advance = 13, + .cols = 0, + .rows = 0, + .bitmap = NULL, + .kerning = NULL, +}; + +/** Bitmap definition for character '!'. */ +static const uint8_t bitmap_notomono_16_0021[] = { + 0xe0, 0x00, + 0xe0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0x40, 0x00, + 0x40, 0x00, + 0x40, 0x00, + 0x40, 0x00, + 0x40, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0xc0, 0x00, + 0xe0, 0x00, + 0xc0, 0x00, +}; + +/** Glyph definition for character '!'. */ +static const struct glyph glyph_notomono_16_0021 = { + .glyph = 33, + .left = 5, + .top = 16, + .advance = 13, + .cols = 3, + .rows = 16, + .bitmap = bitmap_notomono_16_0021, + .kerning = NULL, +}; + +/** Bitmap definition for character '#'. */ +static const uint8_t bitmap_notomono_16_0023[] = { + 0x0c, 0x60, + 0x0c, 0x60, + 0x0c, 0x60, + 0x08, 0x40, + 0x18, 0xc0, + 0x7f, 0xf0, + 0x7f, 0xf0, + 0x18, 0x80, + 0x10, 0x80, + 0x31, 0x80, + 0xff, 0xe0, + 0xff, 0xe0, + 0x21, 0x00, + 0x21, 0x00, + 0x63, 0x00, + 0x63, 0x00, +}; + +/** Glyph definition for character '#'. */ +static const struct glyph glyph_notomono_16_0023 = { + .glyph = 35, + .left = 0, + .top = 16, + .advance = 13, + .cols = 12, + .rows = 16, + .bitmap = bitmap_notomono_16_0023, + .kerning = NULL, +}; + +/** Bitmap definition for character '$'. */ +static const uint8_t bitmap_notomono_16_0024[] = { + 0x08, 0x00, + 0x08, 0x00, + 0x3f, 0x80, + 0x7f, 0x80, + 0xc8, 0x00, + 0xc8, 0x00, + 0xc8, 0x00, + 0x68, 0x00, + 0x3c, 0x00, + 0x0f, 0x00, + 0x09, 0xc0, + 0x08, 0xc0, + 0x08, 0xc0, + 0x08, 0xc0, + 0xff, 0x80, + 0x7e, 0x00, + 0x08, 0x00, + 0x08, 0x00, +}; + +/** Glyph definition for character '$'. */ +static const struct glyph glyph_notomono_16_0024 = { + .glyph = 36, + .left = 1, + .top = 17, + .advance = 13, + .cols = 10, + .rows = 18, + .bitmap = bitmap_notomono_16_0024, + .kerning = NULL, +}; + +/** Bitmap definition for character '%'. */ +static const uint8_t bitmap_notomono_16_0025[] = { + 0x78, 0x60, + 0xcc, 0x40, + 0xcc, 0xc0, + 0xcd, 0x80, + 0xcd, 0x80, + 0xcf, 0x00, + 0x7b, 0x00, + 0x06, 0x00, + 0x06, 0x00, + 0x0d, 0xe0, + 0x0f, 0x30, + 0x1b, 0x30, + 0x1b, 0x30, + 0x33, 0x30, + 0x23, 0x30, + 0x61, 0xe0, +}; + +/** Glyph definition for character '%'. */ +static const struct glyph glyph_notomono_16_0025 = { + .glyph = 37, + .left = 0, + .top = 16, + .advance = 13, + .cols = 12, + .rows = 16, + .bitmap = bitmap_notomono_16_0025, + .kerning = NULL, +}; + +/** Bitmap definition for character '&'. */ +static const uint8_t bitmap_notomono_16_0026[] = { + 0x3e, 0x00, + 0x7f, 0x00, + 0x63, 0x00, + 0x63, 0x00, + 0x63, 0x00, + 0x36, 0x00, + 0x3e, 0x00, + 0x3c, 0x00, + 0x7c, 0x60, + 0x6e, 0x60, + 0xc7, 0x40, + 0xc3, 0xc0, + 0xc1, 0xc0, + 0xe1, 0xc0, + 0x7f, 0xe0, + 0x3c, 0x70, +}; + +/** Glyph definition for character '&'. */ +static const struct glyph glyph_notomono_16_0026 = { + .glyph = 38, + .left = 1, + .top = 16, + .advance = 13, + .cols = 12, + .rows = 16, + .bitmap = bitmap_notomono_16_0026, + .kerning = NULL, +}; + +/** Bitmap definition for character '''. */ +static const uint8_t bitmap_notomono_16_0027[] = { + 0xe0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, +}; + +/** Glyph definition for character '''. */ +static const struct glyph glyph_notomono_16_0027 = { + .glyph = 39, + .left = 5, + .top = 16, + .advance = 13, + .cols = 3, + .rows = 5, + .bitmap = bitmap_notomono_16_0027, + .kerning = NULL, +}; + +/** Bitmap definition for character '('. */ +static const uint8_t bitmap_notomono_16_0028[] = { + 0x0c, 0x00, + 0x18, 0x00, + 0x30, 0x00, + 0x30, 0x00, + 0x60, 0x00, + 0x60, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0x60, 0x00, + 0x60, 0x00, + 0x30, 0x00, + 0x30, 0x00, + 0x18, 0x00, + 0x0c, 0x00, +}; + +/** Glyph definition for character '('. */ +static const struct glyph glyph_notomono_16_0028 = { + .glyph = 40, + .left = 3, + .top = 16, + .advance = 13, + .cols = 7, + .rows = 19, + .bitmap = bitmap_notomono_16_0028, + .kerning = NULL, +}; + +/** Bitmap definition for character ')'. */ +static const uint8_t bitmap_notomono_16_0029[] = { + 0x60, 0x00, + 0x30, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x06, 0x00, + 0x06, 0x00, + 0x06, 0x00, + 0x06, 0x00, + 0x06, 0x00, + 0x06, 0x00, + 0x06, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x30, 0x00, + 0x60, 0x00, +}; + +/** Glyph definition for character ')'. */ +static const struct glyph glyph_notomono_16_0029 = { + .glyph = 41, + .left = 3, + .top = 16, + .advance = 13, + .cols = 7, + .rows = 19, + .bitmap = bitmap_notomono_16_0029, + .kerning = NULL, +}; + +/** Bitmap definition for character '*'. */ +static const uint8_t bitmap_notomono_16_002a[] = { + 0x06, 0x00, + 0x04, 0x00, + 0x04, 0x00, + 0x44, 0x60, + 0xff, 0xe0, + 0x0e, 0x00, + 0x0a, 0x00, + 0x1b, 0x00, + 0x31, 0x80, + 0x11, 0x00, +}; + +/** Glyph definition for character '*'. */ +static const struct glyph glyph_notomono_16_002a = { + .glyph = 42, + .left = 1, + .top = 17, + .advance = 13, + .cols = 11, + .rows = 10, + .bitmap = bitmap_notomono_16_002a, + .kerning = NULL, +}; + +/** Bitmap definition for character '+'. */ +static const uint8_t bitmap_notomono_16_002b[] = { + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0xff, 0xc0, + 0xff, 0xc0, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, +}; + +/** Glyph definition for character '+'. */ +static const struct glyph glyph_notomono_16_002b = { + .glyph = 43, + .left = 1, + .top = 13, + .advance = 13, + .cols = 10, + .rows = 10, + .bitmap = bitmap_notomono_16_002b, + .kerning = NULL, +}; + +/** Bitmap definition for character ','. */ +static const uint8_t bitmap_notomono_16_002c[] = { + 0x70, 0x00, + 0x70, 0x00, + 0x60, 0x00, + 0xe0, 0x00, + 0xc0, 0x00, +}; + +/** Glyph definition for character ','. */ +static const struct glyph glyph_notomono_16_002c = { + .glyph = 44, + .left = 4, + .top = 3, + .advance = 13, + .cols = 4, + .rows = 5, + .bitmap = bitmap_notomono_16_002c, + .kerning = NULL, +}; + +/** Bitmap definition for character '-'. */ +static const uint8_t bitmap_notomono_16_002d[] = { + 0xfe, 0x00, + 0xfe, 0x00, +}; + +/** Glyph definition for character '-'. */ +static const struct glyph glyph_notomono_16_002d = { + .glyph = 45, + .left = 3, + .top = 7, + .advance = 13, + .cols = 7, + .rows = 2, + .bitmap = bitmap_notomono_16_002d, + .kerning = NULL, +}; + +/** Bitmap definition for character '.'. */ +static const uint8_t bitmap_notomono_16_002e[] = { + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, +}; + +/** Glyph definition for character '.'. */ +static const struct glyph glyph_notomono_16_002e = { + .glyph = 46, + .left = 5, + .top = 3, + .advance = 13, + .cols = 3, + .rows = 3, + .bitmap = bitmap_notomono_16_002e, + .kerning = NULL, +}; + +/** Bitmap definition for character '/'. */ +static const uint8_t bitmap_notomono_16_002f[] = { + 0x01, 0x80, + 0x03, 0x00, + 0x03, 0x00, + 0x02, 0x00, + 0x06, 0x00, + 0x06, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x30, 0x00, + 0x30, 0x00, + 0x20, 0x00, + 0x60, 0x00, + 0x60, 0x00, + 0xc0, 0x00, +}; + +/** Glyph definition for character '/'. */ +static const struct glyph glyph_notomono_16_002f = { + .glyph = 47, + .left = 2, + .top = 16, + .advance = 13, + .cols = 9, + .rows = 16, + .bitmap = bitmap_notomono_16_002f, + .kerning = NULL, +}; + +/** Bitmap definition for character '0'. */ +static const uint8_t bitmap_notomono_16_0030[] = { + 0x1e, 0x00, + 0x3f, 0x00, + 0x61, 0x80, + 0x61, 0x80, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0x61, 0x80, + 0x61, 0x80, + 0x3f, 0x00, + 0x1e, 0x00, +}; + +/** Glyph definition for character '0'. */ +static const struct glyph glyph_notomono_16_0030 = { + .glyph = 48, + .left = 1, + .top = 16, + .advance = 13, + .cols = 10, + .rows = 16, + .bitmap = bitmap_notomono_16_0030, + .kerning = NULL, +}; + +/** Bitmap definition for character '1'. */ +static const uint8_t bitmap_notomono_16_0031[] = { + 0x0c, 0x00, + 0x3c, 0x00, + 0x7c, 0x00, + 0xec, 0x00, + 0x4c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, +}; + +/** Glyph definition for character '1'. */ +static const struct glyph glyph_notomono_16_0031 = { + .glyph = 49, + .left = 2, + .top = 16, + .advance = 13, + .cols = 6, + .rows = 16, + .bitmap = bitmap_notomono_16_0031, + .kerning = NULL, +}; + +/** Bitmap definition for character '2'. */ +static const uint8_t bitmap_notomono_16_0032[] = { + 0x3e, 0x00, + 0x7f, 0x00, + 0x43, 0x80, + 0x01, 0x80, + 0x01, 0x80, + 0x01, 0x80, + 0x01, 0x80, + 0x03, 0x00, + 0x06, 0x00, + 0x0e, 0x00, + 0x1c, 0x00, + 0x18, 0x00, + 0x30, 0x00, + 0x60, 0x00, + 0xff, 0xc0, + 0xff, 0xc0, +}; + +/** Glyph definition for character '2'. */ +static const struct glyph glyph_notomono_16_0032 = { + .glyph = 50, + .left = 2, + .top = 16, + .advance = 13, + .cols = 10, + .rows = 16, + .bitmap = bitmap_notomono_16_0032, + .kerning = NULL, +}; + +/** Bitmap definition for character '3'. */ +static const uint8_t bitmap_notomono_16_0033[] = { + 0x3e, 0x00, + 0xff, 0x00, + 0x41, 0x80, + 0x01, 0x80, + 0x01, 0x80, + 0x01, 0x80, + 0x03, 0x00, + 0x3c, 0x00, + 0x3f, 0x00, + 0x03, 0x80, + 0x01, 0x80, + 0x01, 0x80, + 0x01, 0x80, + 0x03, 0x80, + 0xff, 0x00, + 0x7e, 0x00, +}; + +/** Glyph definition for character '3'. */ +static const struct glyph glyph_notomono_16_0033 = { + .glyph = 51, + .left = 2, + .top = 16, + .advance = 13, + .cols = 9, + .rows = 16, + .bitmap = bitmap_notomono_16_0033, + .kerning = NULL, +}; + +/** Bitmap definition for character '4'. */ +static const uint8_t bitmap_notomono_16_0034[] = { + 0x01, 0x80, + 0x03, 0x80, + 0x07, 0x80, + 0x07, 0x80, + 0x0d, 0x80, + 0x19, 0x80, + 0x19, 0x80, + 0x31, 0x80, + 0x21, 0x80, + 0x61, 0x80, + 0xc1, 0x80, + 0xff, 0xe0, + 0xff, 0xe0, + 0x01, 0x80, + 0x01, 0x80, + 0x01, 0x80, +}; + +/** Glyph definition for character '4'. */ +static const struct glyph glyph_notomono_16_0034 = { + .glyph = 52, + .left = 1, + .top = 16, + .advance = 13, + .cols = 11, + .rows = 16, + .bitmap = bitmap_notomono_16_0034, + .kerning = NULL, +}; + +/** Bitmap definition for character '5'. */ +static const uint8_t bitmap_notomono_16_0035[] = { + 0x7f, 0x00, + 0xff, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xfe, 0x00, + 0xff, 0x00, + 0x03, 0x80, + 0x01, 0x80, + 0x01, 0x80, + 0x01, 0x80, + 0x01, 0x80, + 0x03, 0x00, + 0xff, 0x00, + 0x7c, 0x00, +}; + +/** Glyph definition for character '5'. */ +static const struct glyph glyph_notomono_16_0035 = { + .glyph = 53, + .left = 2, + .top = 16, + .advance = 13, + .cols = 9, + .rows = 16, + .bitmap = bitmap_notomono_16_0035, + .kerning = NULL, +}; + +/** Bitmap definition for character '6'. */ +static const uint8_t bitmap_notomono_16_0036[] = { + 0x0f, 0x80, + 0x1f, 0x80, + 0x30, 0x00, + 0x60, 0x00, + 0x60, 0x00, + 0xc0, 0x00, + 0xdf, 0x00, + 0xff, 0x80, + 0xe1, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0x61, 0x80, + 0x3f, 0x80, + 0x1e, 0x00, +}; + +/** Glyph definition for character '6'. */ +static const struct glyph glyph_notomono_16_0036 = { + .glyph = 54, + .left = 1, + .top = 16, + .advance = 13, + .cols = 10, + .rows = 16, + .bitmap = bitmap_notomono_16_0036, + .kerning = NULL, +}; + +/** Bitmap definition for character '7'. */ +static const uint8_t bitmap_notomono_16_0037[] = { + 0xff, 0xc0, + 0xff, 0xc0, + 0x00, 0xc0, + 0x01, 0x80, + 0x01, 0x80, + 0x03, 0x00, + 0x03, 0x00, + 0x03, 0x00, + 0x06, 0x00, + 0x06, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x30, 0x00, +}; + +/** Glyph definition for character '7'. */ +static const struct glyph glyph_notomono_16_0037 = { + .glyph = 55, + .left = 1, + .top = 16, + .advance = 13, + .cols = 10, + .rows = 16, + .bitmap = bitmap_notomono_16_0037, + .kerning = NULL, +}; + +/** Bitmap definition for character '8'. */ +static const uint8_t bitmap_notomono_16_0038[] = { + 0x1e, 0x00, + 0x3f, 0x00, + 0x61, 0x80, + 0x61, 0x80, + 0x61, 0x80, + 0x61, 0x80, + 0x3b, 0x00, + 0x1e, 0x00, + 0x3f, 0x00, + 0x61, 0x80, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc1, 0xc0, + 0x7f, 0x80, + 0x3f, 0x00, +}; + +/** Glyph definition for character '8'. */ +static const struct glyph glyph_notomono_16_0038 = { + .glyph = 56, + .left = 1, + .top = 16, + .advance = 13, + .cols = 10, + .rows = 16, + .bitmap = bitmap_notomono_16_0038, + .kerning = NULL, +}; + +/** Bitmap definition for character '9'. */ +static const uint8_t bitmap_notomono_16_0039[] = { + 0x1e, 0x00, + 0x7f, 0x00, + 0x61, 0x80, + 0xc0, 0x80, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xe1, 0xc0, + 0x7f, 0xc0, + 0x3e, 0xc0, + 0x00, 0xc0, + 0x01, 0x80, + 0x01, 0x80, + 0x03, 0x00, + 0x7e, 0x00, + 0x7c, 0x00, +}; + +/** Glyph definition for character '9'. */ +static const struct glyph glyph_notomono_16_0039 = { + .glyph = 57, + .left = 1, + .top = 16, + .advance = 13, + .cols = 10, + .rows = 16, + .bitmap = bitmap_notomono_16_0039, + .kerning = NULL, +}; + +/** Bitmap definition for character ':'. */ +static const uint8_t bitmap_notomono_16_003a[] = { + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, +}; + +/** Glyph definition for character ':'. */ +static const struct glyph glyph_notomono_16_003a = { + .glyph = 58, + .left = 5, + .top = 12, + .advance = 13, + .cols = 3, + .rows = 12, + .bitmap = bitmap_notomono_16_003a, + .kerning = NULL, +}; + +/** Bitmap definition for character ';'. */ +static const uint8_t bitmap_notomono_16_003b[] = { + 0x70, 0x00, + 0x70, 0x00, + 0x70, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x70, 0x00, + 0x70, 0x00, + 0x60, 0x00, + 0x60, 0x00, + 0xc0, 0x00, +}; + +/** Glyph definition for character ';'. */ +static const struct glyph glyph_notomono_16_003b = { + .glyph = 59, + .left = 4, + .top = 12, + .advance = 13, + .cols = 4, + .rows = 14, + .bitmap = bitmap_notomono_16_003b, + .kerning = NULL, +}; + +/** Bitmap definition for character '<'. */ +static const uint8_t bitmap_notomono_16_003c[] = { + 0x00, 0x80, + 0x03, 0x80, + 0x0e, 0x00, + 0x38, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0x38, 0x00, + 0x0e, 0x00, + 0x03, 0x80, + 0x00, 0x80, +}; + +/** Glyph definition for character '<'. */ +static const struct glyph glyph_notomono_16_003c = { + .glyph = 60, + .left = 2, + .top = 13, + .advance = 13, + .cols = 9, + .rows = 10, + .bitmap = bitmap_notomono_16_003c, + .kerning = NULL, +}; + +/** Bitmap definition for character '='. */ +static const uint8_t bitmap_notomono_16_003d[] = { + 0xff, 0x80, + 0xff, 0x80, + 0x00, 0x00, + 0x00, 0x00, + 0xff, 0x80, + 0xff, 0x80, +}; + +/** Glyph definition for character '='. */ +static const struct glyph glyph_notomono_16_003d = { + .glyph = 61, + .left = 2, + .top = 11, + .advance = 13, + .cols = 9, + .rows = 6, + .bitmap = bitmap_notomono_16_003d, + .kerning = NULL, +}; + +/** Bitmap definition for character '>'. */ +static const uint8_t bitmap_notomono_16_003e[] = { + 0x80, 0x00, + 0xe0, 0x00, + 0x38, 0x00, + 0x0e, 0x00, + 0x03, 0x80, + 0x03, 0x80, + 0x0e, 0x00, + 0x38, 0x00, + 0xe0, 0x00, + 0x80, 0x00, +}; + +/** Glyph definition for character '>'. */ +static const struct glyph glyph_notomono_16_003e = { + .glyph = 62, + .left = 2, + .top = 13, + .advance = 13, + .cols = 9, + .rows = 10, + .bitmap = bitmap_notomono_16_003e, + .kerning = NULL, +}; + +/** Bitmap definition for character '?'. */ +static const uint8_t bitmap_notomono_16_003f[] = { + 0x7e, 0x00, + 0xff, 0x00, + 0x01, 0x80, + 0x01, 0x80, + 0x01, 0x80, + 0x01, 0x80, + 0x03, 0x00, + 0x06, 0x00, + 0x0c, 0x00, + 0x08, 0x00, + 0x18, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x1c, 0x00, + 0x1c, 0x00, + 0x1c, 0x00, +}; + +/** Glyph definition for character '?'. */ +static const struct glyph glyph_notomono_16_003f = { + .glyph = 63, + .left = 2, + .top = 16, + .advance = 13, + .cols = 9, + .rows = 16, + .bitmap = bitmap_notomono_16_003f, + .kerning = NULL, +}; + +/** Bitmap definition for character '@'. */ +static const uint8_t bitmap_notomono_16_0040[] = { + 0x0f, 0x80, + 0x1c, 0xe0, + 0x30, 0x30, + 0x60, 0x10, + 0x40, 0x18, + 0xc7, 0xd8, + 0xcc, 0xd8, + 0xd8, 0xd8, + 0xd8, 0xd8, + 0xd8, 0xd8, + 0xd8, 0xd8, + 0xdd, 0x50, + 0xcf, 0x70, + 0x40, 0x00, + 0x60, 0x00, + 0x30, 0x00, + 0x1c, 0xe0, + 0x0f, 0xc0, +}; + +/** Glyph definition for character '@'. */ +static const struct glyph glyph_notomono_16_0040 = { + .glyph = 64, + .left = 0, + .top = 16, + .advance = 13, + .cols = 13, + .rows = 18, + .bitmap = bitmap_notomono_16_0040, + .kerning = NULL, +}; + +/** Bitmap definition for character 'A'. */ +static const uint8_t bitmap_notomono_16_0041[] = { + 0x07, 0x00, + 0x07, 0x00, + 0x05, 0x00, + 0x0d, 0x80, + 0x0d, 0x80, + 0x08, 0x80, + 0x18, 0xc0, + 0x18, 0xc0, + 0x10, 0x40, + 0x3f, 0xe0, + 0x3f, 0xe0, + 0x20, 0x20, + 0x60, 0x30, + 0x60, 0x30, + 0x60, 0x30, + 0xc0, 0x18, +}; + +/** Glyph definition for character 'A'. */ +static const struct glyph glyph_notomono_16_0041 = { + .glyph = 65, + .left = 0, + .top = 16, + .advance = 13, + .cols = 13, + .rows = 16, + .bitmap = bitmap_notomono_16_0041, + .kerning = NULL, +}; + +/** Bitmap definition for character 'B'. */ +static const uint8_t bitmap_notomono_16_0042[] = { + 0xff, 0x80, + 0xff, 0xc0, + 0xc0, 0xe0, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0xc0, + 0xff, 0x80, + 0xff, 0xc0, + 0xc0, 0xe0, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0xe0, + 0xff, 0xc0, + 0xff, 0x00, +}; + +/** Glyph definition for character 'B'. */ +static const struct glyph glyph_notomono_16_0042 = { + .glyph = 66, + .left = 1, + .top = 16, + .advance = 13, + .cols = 11, + .rows = 16, + .bitmap = bitmap_notomono_16_0042, + .kerning = NULL, +}; + +/** Bitmap definition for character 'C'. */ +static const uint8_t bitmap_notomono_16_0043[] = { + 0x0f, 0xc0, + 0x1f, 0xe0, + 0x30, 0x00, + 0x60, 0x00, + 0x60, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xe0, 0x00, + 0x60, 0x00, + 0x70, 0x00, + 0x3f, 0xe0, + 0x0f, 0xe0, +}; + +/** Glyph definition for character 'C'. */ +static const struct glyph glyph_notomono_16_0043 = { + .glyph = 67, + .left = 1, + .top = 16, + .advance = 13, + .cols = 11, + .rows = 16, + .bitmap = bitmap_notomono_16_0043, + .kerning = NULL, +}; + +/** Bitmap definition for character 'D'. */ +static const uint8_t bitmap_notomono_16_0044[] = { + 0xfe, 0x00, + 0xff, 0x00, + 0xc1, 0x80, + 0xc0, 0xc0, + 0xc0, 0xe0, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc3, 0x80, + 0xff, 0x00, + 0xfe, 0x00, +}; + +/** Glyph definition for character 'D'. */ +static const struct glyph glyph_notomono_16_0044 = { + .glyph = 68, + .left = 1, + .top = 16, + .advance = 13, + .cols = 11, + .rows = 16, + .bitmap = bitmap_notomono_16_0044, + .kerning = NULL, +}; + +/** Bitmap definition for character 'E'. */ +static const uint8_t bitmap_notomono_16_0045[] = { + 0xff, 0xc0, + 0xff, 0xc0, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xff, 0xc0, + 0xff, 0xc0, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xff, 0xc0, + 0xff, 0xc0, +}; + +/** Glyph definition for character 'E'. */ +static const struct glyph glyph_notomono_16_0045 = { + .glyph = 69, + .left = 2, + .top = 16, + .advance = 13, + .cols = 10, + .rows = 16, + .bitmap = bitmap_notomono_16_0045, + .kerning = NULL, +}; + +/** Bitmap definition for character 'F'. */ +static const uint8_t bitmap_notomono_16_0046[] = { + 0xff, 0xc0, + 0xff, 0xc0, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xff, 0xc0, + 0xff, 0xc0, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, +}; + +/** Glyph definition for character 'F'. */ +static const struct glyph glyph_notomono_16_0046 = { + .glyph = 70, + .left = 2, + .top = 16, + .advance = 13, + .cols = 10, + .rows = 16, + .bitmap = bitmap_notomono_16_0046, + .kerning = NULL, +}; + +/** Bitmap definition for character 'G'. */ +static const uint8_t bitmap_notomono_16_0047[] = { + 0x0f, 0xc0, + 0x3f, 0xc0, + 0x30, 0x00, + 0x60, 0x00, + 0x60, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc3, 0xe0, + 0xc3, 0xe0, + 0xc0, 0x60, + 0xc0, 0x60, + 0xe0, 0x60, + 0x60, 0x60, + 0x70, 0x60, + 0x3f, 0xe0, + 0x0f, 0xc0, +}; + +/** Glyph definition for character 'G'. */ +static const struct glyph glyph_notomono_16_0047 = { + .glyph = 71, + .left = 1, + .top = 16, + .advance = 13, + .cols = 11, + .rows = 16, + .bitmap = bitmap_notomono_16_0047, + .kerning = NULL, +}; + +/** Bitmap definition for character 'H'. */ +static const uint8_t bitmap_notomono_16_0048[] = { + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xff, 0xe0, + 0xff, 0xe0, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, +}; + +/** Glyph definition for character 'H'. */ +static const struct glyph glyph_notomono_16_0048 = { + .glyph = 72, + .left = 1, + .top = 16, + .advance = 13, + .cols = 11, + .rows = 16, + .bitmap = bitmap_notomono_16_0048, + .kerning = NULL, +}; + +/** Bitmap definition for character 'I'. */ +static const uint8_t bitmap_notomono_16_0049[] = { + 0xff, 0x00, + 0xff, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0xff, 0x00, + 0xff, 0x00, +}; + +/** Glyph definition for character 'I'. */ +static const struct glyph glyph_notomono_16_0049 = { + .glyph = 73, + .left = 2, + .top = 16, + .advance = 13, + .cols = 8, + .rows = 16, + .bitmap = bitmap_notomono_16_0049, + .kerning = NULL, +}; + +/** Bitmap definition for character 'J'. */ +static const uint8_t bitmap_notomono_16_004a[] = { + 0x01, 0x80, + 0x01, 0x80, + 0x01, 0x80, + 0x01, 0x80, + 0x01, 0x80, + 0x01, 0x80, + 0x01, 0x80, + 0x01, 0x80, + 0x01, 0x80, + 0x01, 0x80, + 0x01, 0x80, + 0x01, 0x80, + 0x01, 0x80, + 0x03, 0x00, + 0xff, 0x00, + 0xfc, 0x00, +}; + +/** Glyph definition for character 'J'. */ +static const struct glyph glyph_notomono_16_004a = { + .glyph = 74, + .left = 1, + .top = 16, + .advance = 13, + .cols = 9, + .rows = 16, + .bitmap = bitmap_notomono_16_004a, + .kerning = NULL, +}; + +/** Bitmap definition for character 'K'. */ +static const uint8_t bitmap_notomono_16_004b[] = { + 0xc0, 0xc0, + 0xc1, 0x80, + 0xc3, 0x00, + 0xc6, 0x00, + 0xc6, 0x00, + 0xcc, 0x00, + 0xd8, 0x00, + 0xf8, 0x00, + 0xe8, 0x00, + 0xcc, 0x00, + 0xc6, 0x00, + 0xc6, 0x00, + 0xc3, 0x00, + 0xc1, 0x80, + 0xc1, 0x80, + 0xc0, 0xc0, +}; + +/** Glyph definition for character 'K'. */ +static const struct glyph glyph_notomono_16_004b = { + .glyph = 75, + .left = 2, + .top = 16, + .advance = 13, + .cols = 10, + .rows = 16, + .bitmap = bitmap_notomono_16_004b, + .kerning = NULL, +}; + +/** Bitmap definition for character 'L'. */ +static const uint8_t bitmap_notomono_16_004c[] = { + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xff, 0xc0, + 0xff, 0xc0, +}; + +/** Glyph definition for character 'L'. */ +static const struct glyph glyph_notomono_16_004c = { + .glyph = 76, + .left = 2, + .top = 16, + .advance = 13, + .cols = 10, + .rows = 16, + .bitmap = bitmap_notomono_16_004c, + .kerning = NULL, +}; + +/** Bitmap definition for character 'M'. */ +static const uint8_t bitmap_notomono_16_004d[] = { + 0xc0, 0x60, + 0xe0, 0xe0, + 0xe0, 0xe0, + 0xe0, 0xe0, + 0xe0, 0xe0, + 0xd1, 0x60, + 0xd1, 0x60, + 0xd1, 0x60, + 0xd1, 0x60, + 0xdb, 0x60, + 0xca, 0x60, + 0xca, 0x60, + 0xca, 0x60, + 0xce, 0x60, + 0xce, 0x60, + 0xc4, 0x60, +}; + +/** Glyph definition for character 'M'. */ +static const struct glyph glyph_notomono_16_004d = { + .glyph = 77, + .left = 1, + .top = 16, + .advance = 13, + .cols = 11, + .rows = 16, + .bitmap = bitmap_notomono_16_004d, + .kerning = NULL, +}; + +/** Bitmap definition for character 'N'. */ +static const uint8_t bitmap_notomono_16_004e[] = { + 0xc0, 0x60, + 0xe0, 0x60, + 0xe0, 0x60, + 0xf0, 0x60, + 0xd0, 0x60, + 0xd8, 0x60, + 0xcc, 0x60, + 0xcc, 0x60, + 0xc6, 0x60, + 0xc6, 0x60, + 0xc3, 0x60, + 0xc1, 0x60, + 0xc1, 0xe0, + 0xc0, 0xe0, + 0xc0, 0xe0, + 0xc0, 0x60, +}; + +/** Glyph definition for character 'N'. */ +static const struct glyph glyph_notomono_16_004e = { + .glyph = 78, + .left = 1, + .top = 16, + .advance = 13, + .cols = 11, + .rows = 16, + .bitmap = bitmap_notomono_16_004e, + .kerning = NULL, +}; + +/** Bitmap definition for character 'O'. */ +static const uint8_t bitmap_notomono_16_004f[] = { + 0x1f, 0x00, + 0x3f, 0x80, + 0x70, 0xc0, + 0x60, 0xc0, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0x60, 0xc0, + 0x70, 0xc0, + 0x3f, 0x80, + 0x1f, 0x00, +}; + +/** Glyph definition for character 'O'. */ +static const struct glyph glyph_notomono_16_004f = { + .glyph = 79, + .left = 1, + .top = 16, + .advance = 13, + .cols = 11, + .rows = 16, + .bitmap = bitmap_notomono_16_004f, + .kerning = NULL, +}; + +/** Bitmap definition for character 'P'. */ +static const uint8_t bitmap_notomono_16_0050[] = { + 0xfe, 0x00, + 0xff, 0x80, + 0xc1, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc1, 0x80, + 0xff, 0x00, + 0xfc, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, +}; + +/** Glyph definition for character 'P'. */ +static const struct glyph glyph_notomono_16_0050 = { + .glyph = 80, + .left = 2, + .top = 16, + .advance = 13, + .cols = 10, + .rows = 16, + .bitmap = bitmap_notomono_16_0050, + .kerning = NULL, +}; + +/** Bitmap definition for character 'Q'. */ +static const uint8_t bitmap_notomono_16_0051[] = { + 0x1f, 0x00, + 0x3f, 0x80, + 0x70, 0xc0, + 0x60, 0xc0, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0x60, 0xc0, + 0x70, 0xc0, + 0x3f, 0x80, + 0x1f, 0x00, + 0x01, 0x80, + 0x01, 0xc0, + 0x00, 0xe0, + 0x00, 0x40, +}; + +/** Glyph definition for character 'Q'. */ +static const struct glyph glyph_notomono_16_0051 = { + .glyph = 81, + .left = 1, + .top = 16, + .advance = 13, + .cols = 11, + .rows = 20, + .bitmap = bitmap_notomono_16_0051, + .kerning = NULL, +}; + +/** Bitmap definition for character 'R'. */ +static const uint8_t bitmap_notomono_16_0052[] = { + 0xfe, 0x00, + 0xff, 0x80, + 0xc1, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc1, 0x80, + 0xff, 0x00, + 0xfe, 0x00, + 0xc7, 0x00, + 0xc3, 0x00, + 0xc1, 0x80, + 0xc1, 0xc0, + 0xc0, 0xc0, + 0xc0, 0x60, +}; + +/** Glyph definition for character 'R'. */ +static const struct glyph glyph_notomono_16_0052 = { + .glyph = 82, + .left = 2, + .top = 16, + .advance = 13, + .cols = 11, + .rows = 16, + .bitmap = bitmap_notomono_16_0052, + .kerning = NULL, +}; + +/** Bitmap definition for character 'S'. */ +static const uint8_t bitmap_notomono_16_0053[] = { + 0x3f, 0x00, + 0x7f, 0x80, + 0xe0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0x70, 0x00, + 0x3c, 0x00, + 0x1f, 0x00, + 0x03, 0x80, + 0x01, 0x80, + 0x01, 0x80, + 0x01, 0x80, + 0x03, 0x80, + 0xff, 0x00, + 0x7e, 0x00, +}; + +/** Glyph definition for character 'S'. */ +static const struct glyph glyph_notomono_16_0053 = { + .glyph = 83, + .left = 2, + .top = 16, + .advance = 13, + .cols = 9, + .rows = 16, + .bitmap = bitmap_notomono_16_0053, + .kerning = NULL, +}; + +/** Bitmap definition for character 'T'. */ +static const uint8_t bitmap_notomono_16_0054[] = { + 0xff, 0xc0, + 0xff, 0xc0, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, +}; + +/** Glyph definition for character 'T'. */ +static const struct glyph glyph_notomono_16_0054 = { + .glyph = 84, + .left = 1, + .top = 16, + .advance = 13, + .cols = 10, + .rows = 16, + .bitmap = bitmap_notomono_16_0054, + .kerning = NULL, +}; + +/** Bitmap definition for character 'U'. */ +static const uint8_t bitmap_notomono_16_0055[] = { + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0x60, 0xc0, + 0x7f, 0xc0, + 0x1f, 0x00, +}; + +/** Glyph definition for character 'U'. */ +static const struct glyph glyph_notomono_16_0055 = { + .glyph = 85, + .left = 1, + .top = 16, + .advance = 13, + .cols = 11, + .rows = 16, + .bitmap = bitmap_notomono_16_0055, + .kerning = NULL, +}; + +/** Bitmap definition for character 'V'. */ +static const uint8_t bitmap_notomono_16_0056[] = { + 0xc0, 0x18, + 0x60, 0x30, + 0x60, 0x30, + 0x60, 0x30, + 0x30, 0x60, + 0x30, 0x60, + 0x30, 0x60, + 0x18, 0xc0, + 0x18, 0xc0, + 0x18, 0xc0, + 0x0d, 0x80, + 0x0d, 0x80, + 0x0d, 0x80, + 0x05, 0x00, + 0x07, 0x00, + 0x07, 0x00, +}; + +/** Glyph definition for character 'V'. */ +static const struct glyph glyph_notomono_16_0056 = { + .glyph = 86, + .left = 0, + .top = 16, + .advance = 13, + .cols = 13, + .rows = 16, + .bitmap = bitmap_notomono_16_0056, + .kerning = NULL, +}; + +/** Bitmap definition for character 'W'. */ +static const uint8_t bitmap_notomono_16_0057[] = { + 0xc0, 0x18, + 0xc0, 0x18, + 0xc0, 0x18, + 0x40, 0x18, + 0x40, 0x10, + 0x62, 0x10, + 0x67, 0x30, + 0x65, 0x30, + 0x65, 0x30, + 0x65, 0x30, + 0x2d, 0xb0, + 0x28, 0xa0, + 0x28, 0xa0, + 0x28, 0xa0, + 0x30, 0x60, + 0x30, 0x60, +}; + +/** Glyph definition for character 'W'. */ +static const struct glyph glyph_notomono_16_0057 = { + .glyph = 87, + .left = 0, + .top = 16, + .advance = 13, + .cols = 13, + .rows = 16, + .bitmap = bitmap_notomono_16_0057, + .kerning = NULL, +}; + +/** Bitmap definition for character 'X'. */ +static const uint8_t bitmap_notomono_16_0058[] = { + 0xc0, 0x60, + 0x60, 0xc0, + 0x60, 0xc0, + 0x31, 0x80, + 0x3b, 0x00, + 0x1b, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x1b, 0x00, + 0x33, 0x80, + 0x31, 0x80, + 0x61, 0xc0, + 0x60, 0xc0, + 0xc0, 0xe0, +}; + +/** Glyph definition for character 'X'. */ +static const struct glyph glyph_notomono_16_0058 = { + .glyph = 88, + .left = 1, + .top = 16, + .advance = 13, + .cols = 11, + .rows = 16, + .bitmap = bitmap_notomono_16_0058, + .kerning = NULL, +}; + +/** Bitmap definition for character 'Y'. */ +static const uint8_t bitmap_notomono_16_0059[] = { + 0xc0, 0x30, + 0x60, 0x60, + 0x60, 0x60, + 0x30, 0xc0, + 0x30, 0xc0, + 0x19, 0x80, + 0x19, 0x80, + 0x0f, 0x00, + 0x0f, 0x00, + 0x06, 0x00, + 0x06, 0x00, + 0x06, 0x00, + 0x06, 0x00, + 0x06, 0x00, + 0x06, 0x00, + 0x06, 0x00, +}; + +/** Glyph definition for character 'Y'. */ +static const struct glyph glyph_notomono_16_0059 = { + .glyph = 89, + .left = 0, + .top = 16, + .advance = 13, + .cols = 12, + .rows = 16, + .bitmap = bitmap_notomono_16_0059, + .kerning = NULL, +}; + +/** Bitmap definition for character 'Z'. */ +static const uint8_t bitmap_notomono_16_005a[] = { + 0xff, 0xe0, + 0xff, 0xe0, + 0x00, 0xc0, + 0x00, 0xc0, + 0x01, 0x80, + 0x03, 0x00, + 0x07, 0x00, + 0x06, 0x00, + 0x0c, 0x00, + 0x1c, 0x00, + 0x18, 0x00, + 0x30, 0x00, + 0x60, 0x00, + 0x60, 0x00, + 0xff, 0xe0, + 0xff, 0xe0, +}; + +/** Glyph definition for character 'Z'. */ +static const struct glyph glyph_notomono_16_005a = { + .glyph = 90, + .left = 1, + .top = 16, + .advance = 13, + .cols = 11, + .rows = 16, + .bitmap = bitmap_notomono_16_005a, + .kerning = NULL, +}; + +/** Bitmap definition for character '['. */ +static const uint8_t bitmap_notomono_16_005b[] = { + 0xf8, 0x00, + 0xf8, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xf8, 0x00, + 0xf8, 0x00, +}; + +/** Glyph definition for character '['. */ +static const struct glyph glyph_notomono_16_005b = { + .glyph = 91, + .left = 5, + .top = 16, + .advance = 13, + .cols = 5, + .rows = 19, + .bitmap = bitmap_notomono_16_005b, + .kerning = NULL, +}; + +/** Bitmap definition for character '\'. */ +static const uint8_t bitmap_notomono_16_005c[] = { + 0xc0, 0x00, + 0x60, 0x00, + 0x60, 0x00, + 0x20, 0x00, + 0x30, 0x00, + 0x30, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x06, 0x00, + 0x06, 0x00, + 0x02, 0x00, + 0x03, 0x00, + 0x03, 0x00, + 0x01, 0x80, +}; + +/** Glyph definition for character '\'. */ +static const struct glyph glyph_notomono_16_005c = { + .glyph = 92, + .left = 2, + .top = 16, + .advance = 13, + .cols = 9, + .rows = 16, + .bitmap = bitmap_notomono_16_005c, + .kerning = NULL, +}; + +/** Bitmap definition for character ']'. */ +static const uint8_t bitmap_notomono_16_005d[] = { + 0xf8, 0x00, + 0xf8, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0xf8, 0x00, + 0xf8, 0x00, +}; + +/** Glyph definition for character ']'. */ +static const struct glyph glyph_notomono_16_005d = { + .glyph = 93, + .left = 3, + .top = 16, + .advance = 13, + .cols = 5, + .rows = 19, + .bitmap = bitmap_notomono_16_005d, + .kerning = NULL, +}; + +/** Bitmap definition for character '^'. */ +static const uint8_t bitmap_notomono_16_005e[] = { + 0x04, 0x00, + 0x0e, 0x00, + 0x0a, 0x00, + 0x1b, 0x00, + 0x11, 0x00, + 0x31, 0x80, + 0x20, 0x80, + 0x60, 0xc0, + 0x40, 0x40, + 0xc0, 0x60, +}; + +/** Glyph definition for character '^'. */ +static const struct glyph glyph_notomono_16_005e = { + .glyph = 94, + .left = 1, + .top = 16, + .advance = 13, + .cols = 11, + .rows = 10, + .bitmap = bitmap_notomono_16_005e, + .kerning = NULL, +}; + +/** Bitmap definition for character '_'. */ +static const uint8_t bitmap_notomono_16_005f[] = { + 0xff, 0xf8, +}; + +/** Glyph definition for character '_'. */ +static const struct glyph glyph_notomono_16_005f = { + .glyph = 95, + .left = 0, + .top = -2, + .advance = 13, + .cols = 13, + .rows = 1, + .bitmap = bitmap_notomono_16_005f, + .kerning = NULL, +}; + +/** Bitmap definition for character 'a'. */ +static const uint8_t bitmap_notomono_16_0061[] = { + 0x3f, 0x00, + 0x7f, 0x80, + 0x00, 0xc0, + 0x00, 0xc0, + 0x00, 0xc0, + 0x1f, 0xc0, + 0x78, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc1, 0xc0, + 0xff, 0xc0, + 0x3e, 0xc0, +}; + +/** Glyph definition for character 'a'. */ +static const struct glyph glyph_notomono_16_0061 = { + .glyph = 97, + .left = 1, + .top = 12, + .advance = 13, + .cols = 10, + .rows = 12, + .bitmap = bitmap_notomono_16_0061, + .kerning = NULL, +}; + +/** Bitmap definition for character 'b'. */ +static const uint8_t bitmap_notomono_16_0062[] = { + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xdf, 0x00, + 0xff, 0x80, + 0xe1, 0x80, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xe1, 0x80, + 0xff, 0x80, + 0xdf, 0x00, +}; + +/** Glyph definition for character 'b'. */ +static const struct glyph glyph_notomono_16_0062 = { + .glyph = 98, + .left = 2, + .top = 17, + .advance = 13, + .cols = 10, + .rows = 17, + .bitmap = bitmap_notomono_16_0062, + .kerning = NULL, +}; + +/** Bitmap definition for character 'c'. */ +static const uint8_t bitmap_notomono_16_0063[] = { + 0x1f, 0x80, + 0x3f, 0x80, + 0x60, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0x60, 0x00, + 0x7f, 0x80, + 0x1f, 0x80, +}; + +/** Glyph definition for character 'c'. */ +static const struct glyph glyph_notomono_16_0063 = { + .glyph = 99, + .left = 2, + .top = 12, + .advance = 13, + .cols = 9, + .rows = 12, + .bitmap = bitmap_notomono_16_0063, + .kerning = NULL, +}; + +/** Bitmap definition for character 'd'. */ +static const uint8_t bitmap_notomono_16_0064[] = { + 0x00, 0xc0, + 0x00, 0xc0, + 0x00, 0xc0, + 0x00, 0xc0, + 0x00, 0xc0, + 0x3e, 0xc0, + 0x7f, 0xc0, + 0x61, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0x61, 0xc0, + 0x7f, 0xc0, + 0x3e, 0xc0, +}; + +/** Glyph definition for character 'd'. */ +static const struct glyph glyph_notomono_16_0064 = { + .glyph = 100, + .left = 1, + .top = 17, + .advance = 13, + .cols = 10, + .rows = 17, + .bitmap = bitmap_notomono_16_0064, + .kerning = NULL, +}; + +/** Bitmap definition for character 'e'. */ +static const uint8_t bitmap_notomono_16_0065[] = { + 0x1f, 0x00, + 0x3f, 0xc0, + 0x60, 0xc0, + 0xc0, 0x60, + 0xc0, 0x60, + 0xff, 0xe0, + 0xff, 0xe0, + 0xc0, 0x00, + 0xc0, 0x00, + 0x60, 0x00, + 0x3f, 0xc0, + 0x1f, 0xc0, +}; + +/** Glyph definition for character 'e'. */ +static const struct glyph glyph_notomono_16_0065 = { + .glyph = 101, + .left = 1, + .top = 12, + .advance = 13, + .cols = 11, + .rows = 12, + .bitmap = bitmap_notomono_16_0065, + .kerning = NULL, +}; + +/** Bitmap definition for character 'f'. */ +static const uint8_t bitmap_notomono_16_0066[] = { + 0x07, 0xc0, + 0x0f, 0xc0, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0xff, 0x80, + 0xff, 0x80, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, +}; + +/** Glyph definition for character 'f'. */ +static const struct glyph glyph_notomono_16_0066 = { + .glyph = 102, + .left = 2, + .top = 17, + .advance = 13, + .cols = 10, + .rows = 17, + .bitmap = bitmap_notomono_16_0066, + .kerning = NULL, +}; + +/** Bitmap definition for character 'g'. */ +static const uint8_t bitmap_notomono_16_0067[] = { + 0x1f, 0xe0, + 0x3b, 0x80, + 0x60, 0xc0, + 0x60, 0xc0, + 0x60, 0xc0, + 0x60, 0xc0, + 0x31, 0x80, + 0x1f, 0x00, + 0x30, 0x00, + 0x30, 0x00, + 0x3f, 0xc0, + 0x7f, 0xe0, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0x7f, 0xc0, + 0x3f, 0x00, +}; + +/** Glyph definition for character 'g'. */ +static const struct glyph glyph_notomono_16_0067 = { + .glyph = 103, + .left = 1, + .top = 12, + .advance = 13, + .cols = 11, + .rows = 17, + .bitmap = bitmap_notomono_16_0067, + .kerning = NULL, +}; + +/** Bitmap definition for character 'h'. */ +static const uint8_t bitmap_notomono_16_0068[] = { + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xde, 0x00, + 0xff, 0x00, + 0xe1, 0x80, + 0xc1, 0x80, + 0xc1, 0x80, + 0xc1, 0x80, + 0xc1, 0x80, + 0xc1, 0x80, + 0xc1, 0x80, + 0xc1, 0x80, + 0xc1, 0x80, + 0xc1, 0x80, +}; + +/** Glyph definition for character 'h'. */ +static const struct glyph glyph_notomono_16_0068 = { + .glyph = 104, + .left = 2, + .top = 17, + .advance = 13, + .cols = 9, + .rows = 17, + .bitmap = bitmap_notomono_16_0068, + .kerning = NULL, +}; + +/** Bitmap definition for character 'i'. */ +static const uint8_t bitmap_notomono_16_0069[] = { + 0x0c, 0x00, + 0x0c, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x7c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x1c, 0x00, + 0xff, 0xc0, +}; + +/** Glyph definition for character 'i'. */ +static const struct glyph glyph_notomono_16_0069 = { + .glyph = 105, + .left = 2, + .top = 17, + .advance = 13, + .cols = 10, + .rows = 17, + .bitmap = bitmap_notomono_16_0069, + .kerning = NULL, +}; + +/** Bitmap definition for character 'j'. */ +static const uint8_t bitmap_notomono_16_006a[] = { + 0x03, 0x00, + 0x03, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x7f, 0x00, + 0x07, 0x00, + 0x03, 0x00, + 0x03, 0x00, + 0x03, 0x00, + 0x03, 0x00, + 0x03, 0x00, + 0x03, 0x00, + 0x03, 0x00, + 0x03, 0x00, + 0x03, 0x00, + 0x03, 0x00, + 0x03, 0x00, + 0x03, 0x00, + 0x03, 0x00, + 0xfe, 0x00, + 0xfc, 0x00, +}; + +/** Glyph definition for character 'j'. */ +static const struct glyph glyph_notomono_16_006a = { + .glyph = 106, + .left = 1, + .top = 17, + .advance = 13, + .cols = 8, + .rows = 22, + .bitmap = bitmap_notomono_16_006a, + .kerning = NULL, +}; + +/** Bitmap definition for character 'k'. */ +static const uint8_t bitmap_notomono_16_006b[] = { + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc1, 0x80, + 0xc3, 0x00, + 0xc6, 0x00, + 0xcc, 0x00, + 0xd8, 0x00, + 0xf8, 0x00, + 0xfc, 0x00, + 0xcc, 0x00, + 0xc6, 0x00, + 0xc3, 0x00, + 0xc1, 0x80, + 0xc1, 0xc0, +}; + +/** Glyph definition for character 'k'. */ +static const struct glyph glyph_notomono_16_006b = { + .glyph = 107, + .left = 2, + .top = 17, + .advance = 13, + .cols = 10, + .rows = 17, + .bitmap = bitmap_notomono_16_006b, + .kerning = NULL, +}; + +/** Bitmap definition for character 'l'. */ +static const uint8_t bitmap_notomono_16_006c[] = { + 0x7c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x1c, 0x00, + 0xff, 0xc0, +}; + +/** Glyph definition for character 'l'. */ +static const struct glyph glyph_notomono_16_006c = { + .glyph = 108, + .left = 2, + .top = 17, + .advance = 13, + .cols = 10, + .rows = 17, + .bitmap = bitmap_notomono_16_006c, + .kerning = NULL, +}; + +/** Bitmap definition for character 'm'. */ +static const uint8_t bitmap_notomono_16_006d[] = { + 0xd9, 0x80, + 0xff, 0xc0, + 0xcc, 0xc0, + 0xcc, 0xc0, + 0xcc, 0xc0, + 0xcc, 0xc0, + 0xcc, 0xc0, + 0xcc, 0xc0, + 0xcc, 0xc0, + 0xcc, 0xc0, + 0xcc, 0xc0, + 0xcc, 0xc0, +}; + +/** Glyph definition for character 'm'. */ +static const struct glyph glyph_notomono_16_006d = { + .glyph = 109, + .left = 1, + .top = 12, + .advance = 13, + .cols = 10, + .rows = 12, + .bitmap = bitmap_notomono_16_006d, + .kerning = NULL, +}; + +/** Bitmap definition for character 'n'. */ +static const uint8_t bitmap_notomono_16_006e[] = { + 0xde, 0x00, + 0xff, 0x00, + 0xe1, 0x80, + 0xc1, 0x80, + 0xc1, 0x80, + 0xc1, 0x80, + 0xc1, 0x80, + 0xc1, 0x80, + 0xc1, 0x80, + 0xc1, 0x80, + 0xc1, 0x80, + 0xc1, 0x80, +}; + +/** Glyph definition for character 'n'. */ +static const struct glyph glyph_notomono_16_006e = { + .glyph = 110, + .left = 2, + .top = 12, + .advance = 13, + .cols = 9, + .rows = 12, + .bitmap = bitmap_notomono_16_006e, + .kerning = NULL, +}; + +/** Bitmap definition for character 'o'. */ +static const uint8_t bitmap_notomono_16_006f[] = { + 0x1f, 0x00, + 0x3f, 0x80, + 0x60, 0xc0, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0xc0, 0x60, + 0x60, 0xc0, + 0x3f, 0x80, + 0x1f, 0x00, +}; + +/** Glyph definition for character 'o'. */ +static const struct glyph glyph_notomono_16_006f = { + .glyph = 111, + .left = 1, + .top = 12, + .advance = 13, + .cols = 11, + .rows = 12, + .bitmap = bitmap_notomono_16_006f, + .kerning = NULL, +}; + +/** Bitmap definition for character 'p'. */ +static const uint8_t bitmap_notomono_16_0070[] = { + 0xdf, 0x00, + 0xff, 0x80, + 0xe1, 0x80, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xe1, 0x80, + 0xff, 0x80, + 0xdf, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, +}; + +/** Glyph definition for character 'p'. */ +static const struct glyph glyph_notomono_16_0070 = { + .glyph = 112, + .left = 2, + .top = 12, + .advance = 13, + .cols = 10, + .rows = 17, + .bitmap = bitmap_notomono_16_0070, + .kerning = NULL, +}; + +/** Bitmap definition for character 'q'. */ +static const uint8_t bitmap_notomono_16_0071[] = { + 0x3e, 0xc0, + 0x7f, 0xc0, + 0x61, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0xc0, 0xc0, + 0x61, 0xc0, + 0x7f, 0xc0, + 0x3e, 0xc0, + 0x00, 0xc0, + 0x00, 0xc0, + 0x00, 0xc0, + 0x00, 0xc0, + 0x00, 0xc0, +}; + +/** Glyph definition for character 'q'. */ +static const struct glyph glyph_notomono_16_0071 = { + .glyph = 113, + .left = 1, + .top = 12, + .advance = 13, + .cols = 10, + .rows = 17, + .bitmap = bitmap_notomono_16_0071, + .kerning = NULL, +}; + +/** Bitmap definition for character 'r'. */ +static const uint8_t bitmap_notomono_16_0072[] = { + 0xcf, 0x00, + 0xff, 0x00, + 0xe0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, +}; + +/** Glyph definition for character 'r'. */ +static const struct glyph glyph_notomono_16_0072 = { + .glyph = 114, + .left = 3, + .top = 12, + .advance = 13, + .cols = 8, + .rows = 12, + .bitmap = bitmap_notomono_16_0072, + .kerning = NULL, +}; + +/** Bitmap definition for character 's'. */ +static const uint8_t bitmap_notomono_16_0073[] = { + 0x3f, 0x00, + 0x7f, 0x80, + 0xc0, 0x00, + 0xc0, 0x00, + 0xe0, 0x00, + 0x3c, 0x00, + 0x0f, 0x00, + 0x03, 0x80, + 0x01, 0x80, + 0x01, 0x80, + 0xff, 0x00, + 0x7e, 0x00, +}; + +/** Glyph definition for character 's'. */ +static const struct glyph glyph_notomono_16_0073 = { + .glyph = 115, + .left = 2, + .top = 12, + .advance = 13, + .cols = 9, + .rows = 12, + .bitmap = bitmap_notomono_16_0073, + .kerning = NULL, +}; + +/** Bitmap definition for character 't'. */ +static const uint8_t bitmap_notomono_16_0074[] = { + 0x08, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0xff, 0x80, + 0xff, 0x80, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x1f, 0x80, + 0x0f, 0x80, +}; + +/** Glyph definition for character 't'. */ +static const struct glyph glyph_notomono_16_0074 = { + .glyph = 116, + .left = 2, + .top = 15, + .advance = 13, + .cols = 9, + .rows = 15, + .bitmap = bitmap_notomono_16_0074, + .kerning = NULL, +}; + +/** Bitmap definition for character 'u'. */ +static const uint8_t bitmap_notomono_16_0075[] = { + 0xc1, 0x80, + 0xc1, 0x80, + 0xc1, 0x80, + 0xc1, 0x80, + 0xc1, 0x80, + 0xc1, 0x80, + 0xc1, 0x80, + 0xc1, 0x80, + 0xc1, 0x80, + 0xc3, 0x80, + 0x7f, 0x80, + 0x3d, 0x80, +}; + +/** Glyph definition for character 'u'. */ +static const struct glyph glyph_notomono_16_0075 = { + .glyph = 117, + .left = 2, + .top = 12, + .advance = 13, + .cols = 9, + .rows = 12, + .bitmap = bitmap_notomono_16_0075, + .kerning = NULL, +}; + +/** Bitmap definition for character 'v'. */ +static const uint8_t bitmap_notomono_16_0076[] = { + 0xc0, 0x60, + 0x60, 0xc0, + 0x60, 0xc0, + 0x60, 0xc0, + 0x31, 0x80, + 0x31, 0x80, + 0x31, 0x80, + 0x1b, 0x00, + 0x1b, 0x00, + 0x1b, 0x00, + 0x0a, 0x00, + 0x0e, 0x00, +}; + +/** Glyph definition for character 'v'. */ +static const struct glyph glyph_notomono_16_0076 = { + .glyph = 118, + .left = 1, + .top = 12, + .advance = 13, + .cols = 11, + .rows = 12, + .bitmap = bitmap_notomono_16_0076, + .kerning = NULL, +}; + +/** Bitmap definition for character 'w'. */ +static const uint8_t bitmap_notomono_16_0077[] = { + 0xc2, 0x18, + 0xc7, 0x18, + 0x45, 0x10, + 0x45, 0x10, + 0x65, 0x30, + 0x6d, 0xb0, + 0x6d, 0xb0, + 0x28, 0xa0, + 0x28, 0xa0, + 0x28, 0xa0, + 0x38, 0xe0, + 0x10, 0x40, +}; + +/** Glyph definition for character 'w'. */ +static const struct glyph glyph_notomono_16_0077 = { + .glyph = 119, + .left = 0, + .top = 12, + .advance = 13, + .cols = 13, + .rows = 12, + .bitmap = bitmap_notomono_16_0077, + .kerning = NULL, +}; + +/** Bitmap definition for character 'x'. */ +static const uint8_t bitmap_notomono_16_0078[] = { + 0x60, 0xc0, + 0x60, 0xc0, + 0x31, 0x80, + 0x1b, 0x00, + 0x1b, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x1b, 0x00, + 0x19, 0x80, + 0x31, 0x80, + 0x60, 0xc0, + 0xc0, 0x60, +}; + +/** Glyph definition for character 'x'. */ +static const struct glyph glyph_notomono_16_0078 = { + .glyph = 120, + .left = 1, + .top = 12, + .advance = 13, + .cols = 11, + .rows = 12, + .bitmap = bitmap_notomono_16_0078, + .kerning = NULL, +}; + +/** Bitmap definition for character 'y'. */ +static const uint8_t bitmap_notomono_16_0079[] = { + 0xc0, 0x60, + 0x60, 0xc0, + 0x60, 0xc0, + 0x60, 0xc0, + 0x31, 0x80, + 0x31, 0x80, + 0x11, 0x80, + 0x1b, 0x00, + 0x1b, 0x00, + 0x0a, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x18, 0x00, + 0xf8, 0x00, + 0xf0, 0x00, +}; + +/** Glyph definition for character 'y'. */ +static const struct glyph glyph_notomono_16_0079 = { + .glyph = 121, + .left = 1, + .top = 12, + .advance = 13, + .cols = 11, + .rows = 17, + .bitmap = bitmap_notomono_16_0079, + .kerning = NULL, +}; + +/** Bitmap definition for character 'z'. */ +static const uint8_t bitmap_notomono_16_007a[] = { + 0xff, 0x80, + 0xff, 0x80, + 0x03, 0x00, + 0x03, 0x00, + 0x06, 0x00, + 0x0c, 0x00, + 0x18, 0x00, + 0x30, 0x00, + 0x30, 0x00, + 0x60, 0x00, + 0xff, 0x80, + 0xff, 0x80, +}; + +/** Glyph definition for character 'z'. */ +static const struct glyph glyph_notomono_16_007a = { + .glyph = 122, + .left = 2, + .top = 12, + .advance = 13, + .cols = 9, + .rows = 12, + .bitmap = bitmap_notomono_16_007a, + .kerning = NULL, +}; + +/** Bitmap definition for character '{'. */ +static const uint8_t bitmap_notomono_16_007b[] = { + 0x03, 0x80, + 0x0f, 0x80, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x38, 0x00, + 0xe0, 0x00, + 0x38, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0c, 0x00, + 0x0f, 0x80, + 0x03, 0x80, +}; + +/** Glyph definition for character '{'. */ +static const struct glyph glyph_notomono_16_007b = { + .glyph = 123, + .left = 2, + .top = 16, + .advance = 13, + .cols = 9, + .rows = 19, + .bitmap = bitmap_notomono_16_007b, + .kerning = NULL, +}; + +/** Bitmap definition for character '|'. */ +static const uint8_t bitmap_notomono_16_007c[] = { + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, +}; + +/** Glyph definition for character '|'. */ +static const struct glyph glyph_notomono_16_007c = { + .glyph = 124, + .left = 6, + .top = 17, + .advance = 13, + .cols = 2, + .rows = 22, + .bitmap = bitmap_notomono_16_007c, + .kerning = NULL, +}; + +/** Bitmap definition for character '}'. */ +static const uint8_t bitmap_notomono_16_007d[] = { + 0xe0, 0x00, + 0xf8, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x0e, 0x00, + 0x03, 0x80, + 0x0e, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0xf8, 0x00, + 0xe0, 0x00, +}; + +/** Glyph definition for character '}'. */ +static const struct glyph glyph_notomono_16_007d = { + .glyph = 125, + .left = 2, + .top = 16, + .advance = 13, + .cols = 9, + .rows = 19, + .bitmap = bitmap_notomono_16_007d, + .kerning = NULL, +}; + +/** Bitmap definition for character '~'. */ +static const uint8_t bitmap_notomono_16_007e[] = { + 0x70, 0x00, + 0xff, 0x80, + 0x07, 0x00, +}; + +/** Glyph definition for character '~'. */ +static const struct glyph glyph_notomono_16_007e = { + .glyph = 126, + .left = 2, + .top = 10, + .advance = 13, + .cols = 9, + .rows = 3, + .bitmap = bitmap_notomono_16_007e, + .kerning = NULL, +}; + +/** Glyphs table for font "Noto Mono". */ +static const struct glyph *glyphs_notomono_16[] = { + &glyph_notomono_16_0020, /* U+0020 ' ' */ + &glyph_notomono_16_0021, /* U+0021 '!' */ + &glyph_notomono_16_0023, /* U+0023 '#' */ + &glyph_notomono_16_0024, /* U+0024 '$' */ + &glyph_notomono_16_0025, /* U+0025 '%' */ + &glyph_notomono_16_0026, /* U+0026 '&' */ + &glyph_notomono_16_0027, /* U+0027 ''' */ + &glyph_notomono_16_0028, /* U+0028 '(' */ + &glyph_notomono_16_0029, /* U+0029 ')' */ + &glyph_notomono_16_002a, /* U+002A '*' */ + &glyph_notomono_16_002b, /* U+002B '+' */ + &glyph_notomono_16_002c, /* U+002C ',' */ + &glyph_notomono_16_002d, /* U+002D '-' */ + &glyph_notomono_16_002e, /* U+002E '.' */ + &glyph_notomono_16_002f, /* U+002F '/' */ + &glyph_notomono_16_0030, /* U+0030 '0' */ + &glyph_notomono_16_0031, /* U+0031 '1' */ + &glyph_notomono_16_0032, /* U+0032 '2' */ + &glyph_notomono_16_0033, /* U+0033 '3' */ + &glyph_notomono_16_0034, /* U+0034 '4' */ + &glyph_notomono_16_0035, /* U+0035 '5' */ + &glyph_notomono_16_0036, /* U+0036 '6' */ + &glyph_notomono_16_0037, /* U+0037 '7' */ + &glyph_notomono_16_0038, /* U+0038 '8' */ + &glyph_notomono_16_0039, /* U+0039 '9' */ + &glyph_notomono_16_003a, /* U+003A ':' */ + &glyph_notomono_16_003b, /* U+003B ';' */ + &glyph_notomono_16_003c, /* U+003C '<' */ + &glyph_notomono_16_003d, /* U+003D '=' */ + &glyph_notomono_16_003e, /* U+003E '>' */ + &glyph_notomono_16_003f, /* U+003F '?' */ + &glyph_notomono_16_0040, /* U+0040 '@' */ + &glyph_notomono_16_0041, /* U+0041 'A' */ + &glyph_notomono_16_0042, /* U+0042 'B' */ + &glyph_notomono_16_0043, /* U+0043 'C' */ + &glyph_notomono_16_0044, /* U+0044 'D' */ + &glyph_notomono_16_0045, /* U+0045 'E' */ + &glyph_notomono_16_0046, /* U+0046 'F' */ + &glyph_notomono_16_0047, /* U+0047 'G' */ + &glyph_notomono_16_0048, /* U+0048 'H' */ + &glyph_notomono_16_0049, /* U+0049 'I' */ + &glyph_notomono_16_004a, /* U+004A 'J' */ + &glyph_notomono_16_004b, /* U+004B 'K' */ + &glyph_notomono_16_004c, /* U+004C 'L' */ + &glyph_notomono_16_004d, /* U+004D 'M' */ + &glyph_notomono_16_004e, /* U+004E 'N' */ + &glyph_notomono_16_004f, /* U+004F 'O' */ + &glyph_notomono_16_0050, /* U+0050 'P' */ + &glyph_notomono_16_0051, /* U+0051 'Q' */ + &glyph_notomono_16_0052, /* U+0052 'R' */ + &glyph_notomono_16_0053, /* U+0053 'S' */ + &glyph_notomono_16_0054, /* U+0054 'T' */ + &glyph_notomono_16_0055, /* U+0055 'U' */ + &glyph_notomono_16_0056, /* U+0056 'V' */ + &glyph_notomono_16_0057, /* U+0057 'W' */ + &glyph_notomono_16_0058, /* U+0058 'X' */ + &glyph_notomono_16_0059, /* U+0059 'Y' */ + &glyph_notomono_16_005a, /* U+005A 'Z' */ + &glyph_notomono_16_005b, /* U+005B '[' */ + &glyph_notomono_16_005c, /* U+005C '\' */ + &glyph_notomono_16_005d, /* U+005D ']' */ + &glyph_notomono_16_005e, /* U+005E '^' */ + &glyph_notomono_16_005f, /* U+005F '_' */ + &glyph_notomono_16_0061, /* U+0061 'a' */ + &glyph_notomono_16_0062, /* U+0062 'b' */ + &glyph_notomono_16_0063, /* U+0063 'c' */ + &glyph_notomono_16_0064, /* U+0064 'd' */ + &glyph_notomono_16_0065, /* U+0065 'e' */ + &glyph_notomono_16_0066, /* U+0066 'f' */ + &glyph_notomono_16_0067, /* U+0067 'g' */ + &glyph_notomono_16_0068, /* U+0068 'h' */ + &glyph_notomono_16_0069, /* U+0069 'i' */ + &glyph_notomono_16_006a, /* U+006A 'j' */ + &glyph_notomono_16_006b, /* U+006B 'k' */ + &glyph_notomono_16_006c, /* U+006C 'l' */ + &glyph_notomono_16_006d, /* U+006D 'm' */ + &glyph_notomono_16_006e, /* U+006E 'n' */ + &glyph_notomono_16_006f, /* U+006F 'o' */ + &glyph_notomono_16_0070, /* U+0070 'p' */ + &glyph_notomono_16_0071, /* U+0071 'q' */ + &glyph_notomono_16_0072, /* U+0072 'r' */ + &glyph_notomono_16_0073, /* U+0073 's' */ + &glyph_notomono_16_0074, /* U+0074 't' */ + &glyph_notomono_16_0075, /* U+0075 'u' */ + &glyph_notomono_16_0076, /* U+0076 'v' */ + &glyph_notomono_16_0077, /* U+0077 'w' */ + &glyph_notomono_16_0078, /* U+0078 'x' */ + &glyph_notomono_16_0079, /* U+0079 'y' */ + &glyph_notomono_16_007a, /* U+007A 'z' */ + &glyph_notomono_16_007b, /* U+007B '{' */ + &glyph_notomono_16_007c, /* U+007C '|' */ + &glyph_notomono_16_007d, /* U+007D '}' */ + &glyph_notomono_16_007e, /* U+007E '~' */ +}; + +/** Definition for font "Noto Mono". */ +const struct font font_notomono_16 = { + .name = "Noto Mono", + .style = "Regular", + .size = 16, + .dpi = 100, + .count = 93, + .max = 126, + .ascender = 21, + .descender = -6, + .height = 26, + .glyphs = glyphs_notomono_16, + .compressed = 0, +}; + diff --git a/lib/fonts/font-notomono-16.h b/lib/fonts/font-notomono-16.h new file mode 100644 index 0000000..8769dc9 --- /dev/null +++ b/lib/fonts/font-notomono-16.h @@ -0,0 +1,15 @@ +/* AUTOMATICALLY GENERATED FILE! EDITING NOT RECOMMENDED! + * + * This file is distributed under the terms of the MIT License. + * See the LICENSE file at the top of this tree, or if it is missing a copy can + * be found at http://opensource.org/licenses/MIT + */ + +#ifndef _FONTEM_notomono_16_H +#define _FONTEM_notomono_16_H + +#include "fontem.h" + +extern const struct font font_notomono_16; + +#endif /* _FONTEM_notomono_16_H */ diff --git a/lib/fonts/font-notomono-24.c b/lib/fonts/font-notomono-24.c new file mode 100644 index 0000000..fc16e22 --- /dev/null +++ b/lib/fonts/font-notomono-24.c @@ -0,0 +1,3636 @@ +/* AUTOMATICALLY GENERATED FILE! EDITING NOT RECOMMENDED! + * + * This file is distributed under the terms of the MIT License. + * See the LICENSE file at the top of this tree, or if it is missing a copy can + * be found at http://opensource.org/licenses/MIT + */ + +#include +#include +#include "fontem.h" +#include "font-notomono-24.h" + +/* Character list: @#$%^&*()_+-={}|[]\:;<>?,./~ ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'! */ + +/** Glyph definition for character ' '. */ +static const struct glyph glyph_notomono_24_0020 = { + .glyph = 32, + .left = 0, + .top = 0, + .advance = 20, + .cols = 0, + .rows = 0, + .bitmap = NULL, + .kerning = NULL, +}; + +/** Bitmap definition for character '!'. */ +static const uint8_t bitmap_notomono_24_0021[] = { + 0xf0, 0x00, + 0xf0, 0x00, + 0xf0, 0x00, + 0xf0, 0x00, + 0xf0, 0x00, + 0x70, 0x00, + 0x70, 0x00, + 0x70, 0x00, + 0x60, 0x00, + 0x60, 0x00, + 0x60, 0x00, + 0x60, 0x00, + 0x60, 0x00, + 0x60, 0x00, + 0x60, 0x00, + 0x60, 0x00, + 0x60, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0xf0, 0x00, + 0xf0, 0x00, + 0xf0, 0x00, + 0x60, 0x00, +}; + +/** Glyph definition for character '!'. */ +static const struct glyph glyph_notomono_24_0021 = { + .glyph = 33, + .left = 8, + .top = 24, + .advance = 20, + .cols = 4, + .rows = 24, + .bitmap = bitmap_notomono_24_0021, + .kerning = NULL, +}; + +/** Bitmap definition for character '#'. */ +static const uint8_t bitmap_notomono_24_0023[] = { + 0x03, 0x83, 0x00, 0x00, + 0x03, 0x87, 0x00, 0x00, + 0x03, 0x87, 0x00, 0x00, + 0x03, 0x06, 0x00, 0x00, + 0x03, 0x06, 0x00, 0x00, + 0x07, 0x06, 0x00, 0x00, + 0x07, 0x0e, 0x00, 0x00, + 0x7f, 0xff, 0xc0, 0x00, + 0x7f, 0xff, 0xc0, 0x00, + 0x06, 0x0c, 0x00, 0x00, + 0x06, 0x0c, 0x00, 0x00, + 0x0e, 0x1c, 0x00, 0x00, + 0x0e, 0x1c, 0x00, 0x00, + 0x0c, 0x18, 0x00, 0x00, + 0x0c, 0x18, 0x00, 0x00, + 0xff, 0xff, 0x80, 0x00, + 0xff, 0xff, 0x80, 0x00, + 0x1c, 0x38, 0x00, 0x00, + 0x18, 0x38, 0x00, 0x00, + 0x18, 0x30, 0x00, 0x00, + 0x18, 0x30, 0x00, 0x00, + 0x38, 0x30, 0x00, 0x00, + 0x38, 0x70, 0x00, 0x00, + 0x30, 0x70, 0x00, 0x00, +}; + +/** Glyph definition for character '#'. */ +static const struct glyph glyph_notomono_24_0023 = { + .glyph = 35, + .left = 1, + .top = 24, + .advance = 20, + .cols = 18, + .rows = 24, + .bitmap = bitmap_notomono_24_0023, + .kerning = NULL, +}; + +/** Bitmap definition for character '$'. */ +static const uint8_t bitmap_notomono_24_0024[] = { + 0x03, 0x00, + 0x03, 0x00, + 0x03, 0x00, + 0x0f, 0xf0, + 0x3f, 0xf8, + 0x7f, 0x78, + 0xf3, 0x08, + 0xe3, 0x00, + 0xe3, 0x00, + 0xe3, 0x00, + 0x73, 0x00, + 0x7f, 0x00, + 0x1f, 0xc0, + 0x07, 0xf0, + 0x03, 0xf8, + 0x03, 0x3c, + 0x03, 0x1c, + 0x03, 0x1c, + 0x03, 0x1c, + 0x83, 0x3c, + 0xff, 0xf8, + 0xff, 0xf0, + 0x3f, 0xc0, + 0x03, 0x00, + 0x03, 0x00, + 0x03, 0x00, + 0x03, 0x00, +}; + +/** Glyph definition for character '$'. */ +static const struct glyph glyph_notomono_24_0024 = { + .glyph = 36, + .left = 3, + .top = 25, + .advance = 20, + .cols = 14, + .rows = 27, + .bitmap = bitmap_notomono_24_0024, + .kerning = NULL, +}; + +/** Bitmap definition for character '%'. */ +static const uint8_t bitmap_notomono_24_0025[] = { + 0x3e, 0x03, 0x80, 0x00, + 0x7f, 0x03, 0x00, 0x00, + 0x63, 0x07, 0x00, 0x00, + 0xe3, 0x86, 0x00, 0x00, + 0xe3, 0x8e, 0x00, 0x00, + 0xc1, 0x8c, 0x00, 0x00, + 0xe3, 0x9c, 0x00, 0x00, + 0xe3, 0x98, 0x00, 0x00, + 0x63, 0x38, 0x00, 0x00, + 0x7f, 0x30, 0x00, 0x00, + 0x3e, 0x70, 0x00, 0x00, + 0x00, 0x70, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, + 0x00, 0xe7, 0xc0, 0x00, + 0x00, 0xcf, 0xe0, 0x00, + 0x01, 0xcc, 0x60, 0x00, + 0x01, 0x9c, 0x70, 0x00, + 0x03, 0x9c, 0x70, 0x00, + 0x03, 0x18, 0x30, 0x00, + 0x07, 0x1c, 0x70, 0x00, + 0x06, 0x1c, 0x70, 0x00, + 0x0e, 0x0c, 0x60, 0x00, + 0x0c, 0x0f, 0xe0, 0x00, + 0x1c, 0x07, 0xc0, 0x00, +}; + +/** Glyph definition for character '%'. */ +static const struct glyph glyph_notomono_24_0025 = { + .glyph = 37, + .left = 0, + .top = 24, + .advance = 20, + .cols = 20, + .rows = 24, + .bitmap = bitmap_notomono_24_0025, + .kerning = NULL, +}; + +/** Bitmap definition for character '&'. */ +static const uint8_t bitmap_notomono_24_0026[] = { + 0x07, 0xe0, 0x00, 0x00, + 0x1f, 0xf8, 0x00, 0x00, + 0x1f, 0xf8, 0x00, 0x00, + 0x38, 0x3c, 0x00, 0x00, + 0x38, 0x1c, 0x00, 0x00, + 0x38, 0x1c, 0x00, 0x00, + 0x38, 0x1c, 0x00, 0x00, + 0x3c, 0x38, 0x00, 0x00, + 0x1c, 0x78, 0x00, 0x00, + 0x0f, 0xf0, 0x00, 0x00, + 0x0f, 0xc0, 0x00, 0x00, + 0x0f, 0x80, 0x00, 0x00, + 0x3f, 0xc0, 0x00, 0x00, + 0x79, 0xc1, 0xc0, 0x00, + 0x70, 0xe1, 0xc0, 0x00, + 0xf0, 0xf3, 0x80, 0x00, + 0xe0, 0x7b, 0x80, 0x00, + 0xe0, 0x3f, 0x00, 0x00, + 0xe0, 0x1f, 0x00, 0x00, + 0xe0, 0x1e, 0x00, 0x00, + 0x70, 0x3f, 0x00, 0x00, + 0x7f, 0xff, 0x80, 0x00, + 0x3f, 0xf3, 0xc0, 0x00, + 0x0f, 0xc1, 0xe0, 0x00, +}; + +/** Glyph definition for character '&'. */ +static const struct glyph glyph_notomono_24_0026 = { + .glyph = 38, + .left = 1, + .top = 24, + .advance = 20, + .cols = 19, + .rows = 24, + .bitmap = bitmap_notomono_24_0026, + .kerning = NULL, +}; + +/** Bitmap definition for character '''. */ +static const uint8_t bitmap_notomono_24_0027[] = { + 0xf0, 0x00, + 0xf0, 0x00, + 0xf0, 0x00, + 0xf0, 0x00, + 0xf0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0x60, 0x00, + 0x60, 0x00, +}; + +/** Glyph definition for character '''. */ +static const struct glyph glyph_notomono_24_0027 = { + .glyph = 39, + .left = 8, + .top = 24, + .advance = 20, + .cols = 4, + .rows = 9, + .bitmap = bitmap_notomono_24_0027, + .kerning = NULL, +}; + +/** Bitmap definition for character '('. */ +static const uint8_t bitmap_notomono_24_0028[] = { + 0x03, 0x80, + 0x07, 0x00, + 0x0f, 0x00, + 0x0e, 0x00, + 0x1c, 0x00, + 0x38, 0x00, + 0x38, 0x00, + 0x70, 0x00, + 0x70, 0x00, + 0x70, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0x70, 0x00, + 0x70, 0x00, + 0x70, 0x00, + 0x38, 0x00, + 0x38, 0x00, + 0x1c, 0x00, + 0x1e, 0x00, + 0x0e, 0x00, + 0x07, 0x00, + 0x03, 0x80, +}; + +/** Glyph definition for character '('. */ +static const struct glyph glyph_notomono_24_0028 = { + .glyph = 40, + .left = 5, + .top = 24, + .advance = 20, + .cols = 10, + .rows = 29, + .bitmap = bitmap_notomono_24_0028, + .kerning = NULL, +}; + +/** Bitmap definition for character ')'. */ +static const uint8_t bitmap_notomono_24_0029[] = { + 0x70, 0x00, + 0x38, 0x00, + 0x3c, 0x00, + 0x1c, 0x00, + 0x0e, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x01, 0xc0, + 0x01, 0xc0, + 0x01, 0xc0, + 0x01, 0xc0, + 0x01, 0xc0, + 0x01, 0xc0, + 0x01, 0xc0, + 0x01, 0xc0, + 0x01, 0xc0, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x07, 0x00, + 0x07, 0x00, + 0x0e, 0x00, + 0x1c, 0x00, + 0x1c, 0x00, + 0x38, 0x00, + 0x70, 0x00, +}; + +/** Glyph definition for character ')'. */ +static const struct glyph glyph_notomono_24_0029 = { + .glyph = 41, + .left = 5, + .top = 24, + .advance = 20, + .cols = 10, + .rows = 29, + .bitmap = bitmap_notomono_24_0029, + .kerning = NULL, +}; + +/** Bitmap definition for character '*'. */ +static const uint8_t bitmap_notomono_24_002a[] = { + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0xf1, 0x8e, + 0xff, 0xfe, + 0xff, 0xfe, + 0x03, 0xc0, + 0x06, 0xc0, + 0x0e, 0xe0, + 0x1e, 0x70, + 0x1c, 0x78, + 0x3c, 0x38, + 0x08, 0x20, +}; + +/** Glyph definition for character '*'. */ +static const struct glyph glyph_notomono_24_002a = { + .glyph = 42, + .left = 2, + .top = 25, + .advance = 20, + .cols = 15, + .rows = 15, + .bitmap = bitmap_notomono_24_002a, + .kerning = NULL, +}; + +/** Bitmap definition for character '+'. */ +static const uint8_t bitmap_notomono_24_002b[] = { + 0x03, 0x00, + 0x03, 0x00, + 0x03, 0x00, + 0x03, 0x00, + 0x03, 0x00, + 0x03, 0x00, + 0xff, 0xfe, + 0xff, 0xfe, + 0x03, 0x00, + 0x03, 0x00, + 0x03, 0x00, + 0x03, 0x00, + 0x03, 0x00, + 0x03, 0x00, + 0x03, 0x00, +}; + +/** Glyph definition for character '+'. */ +static const struct glyph glyph_notomono_24_002b = { + .glyph = 43, + .left = 3, + .top = 19, + .advance = 20, + .cols = 15, + .rows = 15, + .bitmap = bitmap_notomono_24_002b, + .kerning = NULL, +}; + +/** Bitmap definition for character ','. */ +static const uint8_t bitmap_notomono_24_002c[] = { + 0x78, 0x00, + 0x78, 0x00, + 0x70, 0x00, + 0x70, 0x00, + 0x70, 0x00, + 0xf0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xc0, 0x00, +}; + +/** Glyph definition for character ','. */ +static const struct glyph glyph_notomono_24_002c = { + .glyph = 44, + .left = 7, + .top = 4, + .advance = 20, + .cols = 5, + .rows = 9, + .bitmap = bitmap_notomono_24_002c, + .kerning = NULL, +}; + +/** Bitmap definition for character '-'. */ +static const uint8_t bitmap_notomono_24_002d[] = { + 0xff, 0xc0, + 0xff, 0xc0, + 0xff, 0xc0, +}; + +/** Glyph definition for character '-'. */ +static const struct glyph glyph_notomono_24_002d = { + .glyph = 45, + .left = 5, + .top = 10, + .advance = 20, + .cols = 10, + .rows = 3, + .bitmap = bitmap_notomono_24_002d, + .kerning = NULL, +}; + +/** Bitmap definition for character '.'. */ +static const uint8_t bitmap_notomono_24_002e[] = { + 0x70, 0x00, + 0xf8, 0x00, + 0xf8, 0x00, + 0xf8, 0x00, + 0x70, 0x00, +}; + +/** Glyph definition for character '.'. */ +static const struct glyph glyph_notomono_24_002e = { + .glyph = 46, + .left = 8, + .top = 5, + .advance = 20, + .cols = 5, + .rows = 5, + .bitmap = bitmap_notomono_24_002e, + .kerning = NULL, +}; + +/** Bitmap definition for character '/'. */ +static const uint8_t bitmap_notomono_24_002f[] = { + 0x00, 0x1c, + 0x00, 0x38, + 0x00, 0x38, + 0x00, 0x70, + 0x00, 0x70, + 0x00, 0x60, + 0x00, 0xe0, + 0x00, 0xe0, + 0x01, 0xc0, + 0x01, 0xc0, + 0x03, 0x80, + 0x03, 0x80, + 0x07, 0x00, + 0x07, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x1c, 0x00, + 0x1c, 0x00, + 0x18, 0x00, + 0x38, 0x00, + 0x30, 0x00, + 0x70, 0x00, + 0x70, 0x00, + 0xe0, 0x00, +}; + +/** Glyph definition for character '/'. */ +static const struct glyph glyph_notomono_24_002f = { + .glyph = 47, + .left = 3, + .top = 24, + .advance = 20, + .cols = 14, + .rows = 24, + .bitmap = bitmap_notomono_24_002f, + .kerning = NULL, +}; + +/** Bitmap definition for character '0'. */ +static const uint8_t bitmap_notomono_24_0030[] = { + 0x07, 0xe0, + 0x1f, 0xf8, + 0x3f, 0xfc, + 0x38, 0x1c, + 0x70, 0x0e, + 0x70, 0x0e, + 0x70, 0x0e, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0x60, 0x0e, + 0x70, 0x0e, + 0x70, 0x0e, + 0x38, 0x1c, + 0x3f, 0xfc, + 0x1f, 0xf8, + 0x07, 0xe0, +}; + +/** Glyph definition for character '0'. */ +static const struct glyph glyph_notomono_24_0030 = { + .glyph = 48, + .left = 2, + .top = 24, + .advance = 20, + .cols = 16, + .rows = 24, + .bitmap = bitmap_notomono_24_0030, + .kerning = NULL, +}; + +/** Bitmap definition for character '1'. */ +static const uint8_t bitmap_notomono_24_0031[] = { + 0x03, 0x80, + 0x0f, 0x80, + 0x1f, 0x80, + 0x3f, 0x80, + 0x7b, 0x80, + 0xe3, 0x80, + 0x43, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, +}; + +/** Glyph definition for character '1'. */ +static const struct glyph glyph_notomono_24_0031 = { + .glyph = 49, + .left = 3, + .top = 24, + .advance = 20, + .cols = 9, + .rows = 24, + .bitmap = bitmap_notomono_24_0031, + .kerning = NULL, +}; + +/** Bitmap definition for character '2'. */ +static const uint8_t bitmap_notomono_24_0032[] = { + 0x0f, 0x80, + 0x3f, 0xe0, + 0xff, 0xf0, + 0x60, 0x70, + 0x00, 0x38, + 0x00, 0x38, + 0x00, 0x38, + 0x00, 0x38, + 0x00, 0x38, + 0x00, 0x70, + 0x00, 0x70, + 0x00, 0xe0, + 0x01, 0xe0, + 0x01, 0xc0, + 0x03, 0x80, + 0x07, 0x80, + 0x0f, 0x00, + 0x1e, 0x00, + 0x1c, 0x00, + 0x38, 0x00, + 0x70, 0x00, + 0xff, 0xfc, + 0xff, 0xfc, + 0xff, 0xfc, +}; + +/** Glyph definition for character '2'. */ +static const struct glyph glyph_notomono_24_0032 = { + .glyph = 50, + .left = 3, + .top = 24, + .advance = 20, + .cols = 14, + .rows = 24, + .bitmap = bitmap_notomono_24_0032, + .kerning = NULL, +}; + +/** Bitmap definition for character '3'. */ +static const uint8_t bitmap_notomono_24_0033[] = { + 0x0f, 0xc0, + 0x7f, 0xf0, + 0xff, 0xf8, + 0x60, 0x3c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x38, + 0x00, 0x70, + 0x0f, 0xe0, + 0x0f, 0xe0, + 0x0f, 0xf8, + 0x00, 0x3c, + 0x00, 0x1e, + 0x00, 0x0e, + 0x00, 0x0e, + 0x00, 0x0e, + 0x00, 0x0e, + 0x00, 0x1e, + 0x80, 0x3c, + 0xff, 0xf8, + 0xff, 0xf0, + 0x3f, 0xc0, +}; + +/** Glyph definition for character '3'. */ +static const struct glyph glyph_notomono_24_0033 = { + .glyph = 51, + .left = 2, + .top = 24, + .advance = 20, + .cols = 15, + .rows = 24, + .bitmap = bitmap_notomono_24_0033, + .kerning = NULL, +}; + +/** Bitmap definition for character '4'. */ +static const uint8_t bitmap_notomono_24_0034[] = { + 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x3c, 0x00, 0x00, + 0x00, 0x7c, 0x00, 0x00, + 0x00, 0x7c, 0x00, 0x00, + 0x00, 0xfc, 0x00, 0x00, + 0x01, 0xdc, 0x00, 0x00, + 0x01, 0x9c, 0x00, 0x00, + 0x03, 0x9c, 0x00, 0x00, + 0x07, 0x1c, 0x00, 0x00, + 0x0e, 0x1c, 0x00, 0x00, + 0x0e, 0x1c, 0x00, 0x00, + 0x1c, 0x1c, 0x00, 0x00, + 0x38, 0x1c, 0x00, 0x00, + 0x38, 0x1c, 0x00, 0x00, + 0x70, 0x1c, 0x00, 0x00, + 0xe0, 0x1c, 0x00, 0x00, + 0xff, 0xff, 0x80, 0x00, + 0xff, 0xff, 0x80, 0x00, + 0xff, 0xff, 0x80, 0x00, + 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, +}; + +/** Glyph definition for character '4'. */ +static const struct glyph glyph_notomono_24_0034 = { + .glyph = 52, + .left = 1, + .top = 24, + .advance = 20, + .cols = 17, + .rows = 24, + .bitmap = bitmap_notomono_24_0034, + .kerning = NULL, +}; + +/** Bitmap definition for character '5'. */ +static const uint8_t bitmap_notomono_24_0035[] = { + 0x3f, 0xf0, + 0x3f, 0xf0, + 0x3f, 0xf0, + 0x30, 0x00, + 0x30, 0x00, + 0x70, 0x00, + 0x70, 0x00, + 0x70, 0x00, + 0x70, 0x00, + 0x7f, 0xc0, + 0x7f, 0xf0, + 0x3f, 0xf8, + 0x00, 0x78, + 0x00, 0x3c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x38, + 0x80, 0x78, + 0xff, 0xf0, + 0xff, 0xe0, + 0x3f, 0x80, +}; + +/** Glyph definition for character '5'. */ +static const struct glyph glyph_notomono_24_0035 = { + .glyph = 53, + .left = 3, + .top = 24, + .advance = 20, + .cols = 14, + .rows = 24, + .bitmap = bitmap_notomono_24_0035, + .kerning = NULL, +}; + +/** Bitmap definition for character '6'. */ +static const uint8_t bitmap_notomono_24_0036[] = { + 0x01, 0xfc, + 0x07, 0xfc, + 0x0f, 0xfc, + 0x1e, 0x00, + 0x38, 0x00, + 0x78, 0x00, + 0x70, 0x00, + 0x70, 0x00, + 0xe0, 0x00, + 0xe3, 0xf0, + 0xef, 0xfc, + 0xfe, 0x3e, + 0xf8, 0x0e, + 0xf0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0x70, 0x07, + 0x70, 0x0e, + 0x38, 0x1e, + 0x3f, 0xfc, + 0x1f, 0xf8, + 0x07, 0xe0, +}; + +/** Glyph definition for character '6'. */ +static const struct glyph glyph_notomono_24_0036 = { + .glyph = 54, + .left = 2, + .top = 24, + .advance = 20, + .cols = 16, + .rows = 24, + .bitmap = bitmap_notomono_24_0036, + .kerning = NULL, +}; + +/** Bitmap definition for character '7'. */ +static const uint8_t bitmap_notomono_24_0037[] = { + 0xff, 0xff, + 0xff, 0xff, + 0xff, 0xff, + 0x00, 0x06, + 0x00, 0x0e, + 0x00, 0x0e, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x38, + 0x00, 0x38, + 0x00, 0x70, + 0x00, 0x70, + 0x00, 0xe0, + 0x00, 0xe0, + 0x01, 0xc0, + 0x01, 0xc0, + 0x01, 0xc0, + 0x03, 0x80, + 0x03, 0x80, + 0x07, 0x00, + 0x07, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x1c, 0x00, +}; + +/** Glyph definition for character '7'. */ +static const struct glyph glyph_notomono_24_0037 = { + .glyph = 55, + .left = 2, + .top = 24, + .advance = 20, + .cols = 16, + .rows = 24, + .bitmap = bitmap_notomono_24_0037, + .kerning = NULL, +}; + +/** Bitmap definition for character '8'. */ +static const uint8_t bitmap_notomono_24_0038[] = { + 0x0f, 0xc0, + 0x1f, 0xe0, + 0x3f, 0xf0, + 0x78, 0x78, + 0x70, 0x38, + 0x70, 0x38, + 0x70, 0x38, + 0x70, 0x38, + 0x38, 0x70, + 0x3c, 0xf0, + 0x1f, 0xe0, + 0x0f, 0xc0, + 0x1f, 0xe0, + 0x38, 0xf0, + 0x70, 0x38, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0x70, 0x38, + 0x7f, 0xf8, + 0x3f, 0xf0, + 0x0f, 0xc0, +}; + +/** Glyph definition for character '8'. */ +static const struct glyph glyph_notomono_24_0038 = { + .glyph = 56, + .left = 3, + .top = 24, + .advance = 20, + .cols = 14, + .rows = 24, + .bitmap = bitmap_notomono_24_0038, + .kerning = NULL, +}; + +/** Bitmap definition for character '9'. */ +static const uint8_t bitmap_notomono_24_0039[] = { + 0x07, 0xe0, + 0x1f, 0xf0, + 0x3f, 0xfc, + 0x78, 0x1c, + 0x70, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x0f, + 0x70, 0x1f, + 0x7c, 0x7f, + 0x3f, 0xf7, + 0x0f, 0xc7, + 0x00, 0x06, + 0x00, 0x0e, + 0x00, 0x0e, + 0x00, 0x1e, + 0x00, 0x1c, + 0x00, 0x38, + 0x21, 0xf0, + 0x3f, 0xe0, + 0x3f, 0x80, +}; + +/** Glyph definition for character '9'. */ +static const struct glyph glyph_notomono_24_0039 = { + .glyph = 57, + .left = 2, + .top = 24, + .advance = 20, + .cols = 16, + .rows = 24, + .bitmap = bitmap_notomono_24_0039, + .kerning = NULL, +}; + +/** Bitmap definition for character ':'. */ +static const uint8_t bitmap_notomono_24_003a[] = { + 0xf0, 0x00, + 0xf0, 0x00, + 0xf0, 0x00, + 0xf0, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0xf0, 0x00, + 0xf0, 0x00, + 0xf0, 0x00, + 0xf0, 0x00, +}; + +/** Glyph definition for character ':'. */ +static const struct glyph glyph_notomono_24_003a = { + .glyph = 58, + .left = 8, + .top = 18, + .advance = 20, + .cols = 4, + .rows = 18, + .bitmap = bitmap_notomono_24_003a, + .kerning = NULL, +}; + +/** Bitmap definition for character ';'. */ +static const uint8_t bitmap_notomono_24_003b[] = { + 0x78, 0x00, + 0x78, 0x00, + 0x78, 0x00, + 0x78, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x78, 0x00, + 0x78, 0x00, + 0x70, 0x00, + 0x70, 0x00, + 0x70, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xc0, 0x00, +}; + +/** Glyph definition for character ';'. */ +static const struct glyph glyph_notomono_24_003b = { + .glyph = 59, + .left = 7, + .top = 18, + .advance = 20, + .cols = 5, + .rows = 22, + .bitmap = bitmap_notomono_24_003b, + .kerning = NULL, +}; + +/** Bitmap definition for character '<'. */ +static const uint8_t bitmap_notomono_24_003c[] = { + 0x00, 0x01, + 0x00, 0x07, + 0x00, 0x3f, + 0x00, 0xfc, + 0x03, 0xf0, + 0x0f, 0x80, + 0x3e, 0x00, + 0xf8, 0x00, + 0xf8, 0x00, + 0x3e, 0x00, + 0x0f, 0x80, + 0x03, 0xf0, + 0x00, 0xfc, + 0x00, 0x3f, + 0x00, 0x07, + 0x00, 0x01, +}; + +/** Glyph definition for character '<'. */ +static const struct glyph glyph_notomono_24_003c = { + .glyph = 60, + .left = 2, + .top = 20, + .advance = 20, + .cols = 16, + .rows = 16, + .bitmap = bitmap_notomono_24_003c, + .kerning = NULL, +}; + +/** Bitmap definition for character '='. */ +static const uint8_t bitmap_notomono_24_003d[] = { + 0xff, 0xff, + 0xff, 0xff, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0xff, 0xff, + 0xff, 0xff, +}; + +/** Glyph definition for character '='. */ +static const struct glyph glyph_notomono_24_003d = { + .glyph = 61, + .left = 2, + .top = 16, + .advance = 20, + .cols = 16, + .rows = 9, + .bitmap = bitmap_notomono_24_003d, + .kerning = NULL, +}; + +/** Bitmap definition for character '>'. */ +static const uint8_t bitmap_notomono_24_003e[] = { + 0x80, 0x00, + 0xe0, 0x00, + 0xfc, 0x00, + 0x3f, 0x00, + 0x0f, 0xc0, + 0x01, 0xf0, + 0x00, 0x7c, + 0x00, 0x1f, + 0x00, 0x1f, + 0x00, 0x7e, + 0x01, 0xf0, + 0x0f, 0xc0, + 0x3f, 0x00, + 0xfc, 0x00, + 0xe0, 0x00, + 0x80, 0x00, +}; + +/** Glyph definition for character '>'. */ +static const struct glyph glyph_notomono_24_003e = { + .glyph = 62, + .left = 2, + .top = 20, + .advance = 20, + .cols = 16, + .rows = 16, + .bitmap = bitmap_notomono_24_003e, + .kerning = NULL, +}; + +/** Bitmap definition for character '?'. */ +static const uint8_t bitmap_notomono_24_003f[] = { + 0x1f, 0xc0, + 0xff, 0xf0, + 0xff, 0xf8, + 0x40, 0x3c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x3c, + 0x00, 0x78, + 0x00, 0xf0, + 0x01, 0xe0, + 0x03, 0xc0, + 0x07, 0x80, + 0x07, 0x00, + 0x06, 0x00, + 0x06, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x0f, 0x00, + 0x0f, 0x00, + 0x0f, 0x00, + 0x06, 0x00, +}; + +/** Glyph definition for character '?'. */ +static const struct glyph glyph_notomono_24_003f = { + .glyph = 63, + .left = 3, + .top = 24, + .advance = 20, + .cols = 14, + .rows = 24, + .bitmap = bitmap_notomono_24_003f, + .kerning = NULL, +}; + +/** Bitmap definition for character '@'. */ +static const uint8_t bitmap_notomono_24_0040[] = { + 0x01, 0xf0, 0x00, 0x00, + 0x07, 0xfc, 0x00, 0x00, + 0x0e, 0x0e, 0x00, 0x00, + 0x1c, 0x07, 0x00, 0x00, + 0x38, 0x03, 0x00, 0x00, + 0x30, 0x03, 0x80, 0x00, + 0x70, 0x01, 0x80, 0x00, + 0x61, 0xf9, 0x80, 0x00, + 0x63, 0xf9, 0xc0, 0x00, + 0xe7, 0x18, 0xc0, 0x00, + 0xc6, 0x18, 0xc0, 0x00, + 0xce, 0x18, 0xc0, 0x00, + 0xce, 0x38, 0xc0, 0x00, + 0xce, 0x38, 0xc0, 0x00, + 0xce, 0x38, 0xc0, 0x00, + 0xce, 0x38, 0xc0, 0x00, + 0xce, 0x39, 0xc0, 0x00, + 0xce, 0x39, 0x80, 0x00, + 0xe6, 0x69, 0x80, 0x00, + 0x67, 0xef, 0x00, 0x00, + 0x63, 0xc7, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, + 0x1e, 0x06, 0x00, 0x00, + 0x0f, 0xfe, 0x00, 0x00, + 0x03, 0xf8, 0x00, 0x00, +}; + +/** Glyph definition for character '@'. */ +static const struct glyph glyph_notomono_24_0040 = { + .glyph = 64, + .left = 1, + .top = 24, + .advance = 20, + .cols = 18, + .rows = 27, + .bitmap = bitmap_notomono_24_0040, + .kerning = NULL, +}; + +/** Bitmap definition for character 'A'. */ +static const uint8_t bitmap_notomono_24_0041[] = { + 0x01, 0xe0, 0x00, 0x00, + 0x01, 0xe0, 0x00, 0x00, + 0x01, 0xe0, 0x00, 0x00, + 0x03, 0xf0, 0x00, 0x00, + 0x03, 0xf0, 0x00, 0x00, + 0x03, 0xb0, 0x00, 0x00, + 0x07, 0x38, 0x00, 0x00, + 0x07, 0x38, 0x00, 0x00, + 0x07, 0x38, 0x00, 0x00, + 0x0e, 0x1c, 0x00, 0x00, + 0x0e, 0x1c, 0x00, 0x00, + 0x0e, 0x1c, 0x00, 0x00, + 0x0e, 0x0c, 0x00, 0x00, + 0x1c, 0x0e, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, + 0x3f, 0xff, 0x00, 0x00, + 0x38, 0x07, 0x00, 0x00, + 0x38, 0x07, 0x00, 0x00, + 0x70, 0x03, 0x80, 0x00, + 0x70, 0x03, 0x80, 0x00, + 0x70, 0x03, 0x80, 0x00, + 0xf0, 0x03, 0xc0, 0x00, + 0xe0, 0x01, 0xc0, 0x00, +}; + +/** Glyph definition for character 'A'. */ +static const struct glyph glyph_notomono_24_0041 = { + .glyph = 65, + .left = 1, + .top = 24, + .advance = 20, + .cols = 18, + .rows = 24, + .bitmap = bitmap_notomono_24_0041, + .kerning = NULL, +}; + +/** Bitmap definition for character 'B'. */ +static const uint8_t bitmap_notomono_24_0042[] = { + 0xff, 0xf0, 0x00, 0x00, + 0xff, 0xfc, 0x00, 0x00, + 0xff, 0xfe, 0x00, 0x00, + 0xe0, 0x0f, 0x00, 0x00, + 0xe0, 0x0f, 0x00, 0x00, + 0xe0, 0x07, 0x00, 0x00, + 0xe0, 0x07, 0x00, 0x00, + 0xe0, 0x07, 0x00, 0x00, + 0xe0, 0x0e, 0x00, 0x00, + 0xe0, 0x1e, 0x00, 0x00, + 0xff, 0xf8, 0x00, 0x00, + 0xff, 0xf0, 0x00, 0x00, + 0xff, 0xfe, 0x00, 0x00, + 0xe0, 0x0f, 0x00, 0x00, + 0xe0, 0x07, 0x00, 0x00, + 0xe0, 0x03, 0x80, 0x00, + 0xe0, 0x03, 0x80, 0x00, + 0xe0, 0x03, 0x80, 0x00, + 0xe0, 0x03, 0x80, 0x00, + 0xe0, 0x07, 0x80, 0x00, + 0xe0, 0x0f, 0x00, 0x00, + 0xff, 0xfe, 0x00, 0x00, + 0xff, 0xfc, 0x00, 0x00, + 0xff, 0xf0, 0x00, 0x00, +}; + +/** Glyph definition for character 'B'. */ +static const struct glyph glyph_notomono_24_0042 = { + .glyph = 66, + .left = 2, + .top = 24, + .advance = 20, + .cols = 17, + .rows = 24, + .bitmap = bitmap_notomono_24_0042, + .kerning = NULL, +}; + +/** Bitmap definition for character 'C'. */ +static const uint8_t bitmap_notomono_24_0043[] = { + 0x01, 0xfe, 0x00, 0x00, + 0x07, 0xff, 0x80, 0x00, + 0x0f, 0xff, 0x00, 0x00, + 0x1e, 0x01, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x00, + 0x78, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, + 0xf0, 0x00, 0x00, 0x00, + 0xe0, 0x00, 0x00, 0x00, + 0xe0, 0x00, 0x00, 0x00, + 0xe0, 0x00, 0x00, 0x00, + 0xe0, 0x00, 0x00, 0x00, + 0xe0, 0x00, 0x00, 0x00, + 0xe0, 0x00, 0x00, 0x00, + 0xe0, 0x00, 0x00, 0x00, + 0xf0, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, + 0x78, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x00, 0x00, + 0x1f, 0xff, 0x00, 0x00, + 0x0f, 0xff, 0x00, 0x00, + 0x01, 0xfe, 0x00, 0x00, +}; + +/** Glyph definition for character 'C'. */ +static const struct glyph glyph_notomono_24_0043 = { + .glyph = 67, + .left = 2, + .top = 24, + .advance = 20, + .cols = 17, + .rows = 24, + .bitmap = bitmap_notomono_24_0043, + .kerning = NULL, +}; + +/** Bitmap definition for character 'D'. */ +static const uint8_t bitmap_notomono_24_0044[] = { + 0xff, 0xc0, 0x00, 0x00, + 0xff, 0xf0, 0x00, 0x00, + 0xff, 0xf8, 0x00, 0x00, + 0xe0, 0x3c, 0x00, 0x00, + 0xe0, 0x1e, 0x00, 0x00, + 0xe0, 0x0f, 0x00, 0x00, + 0xe0, 0x07, 0x00, 0x00, + 0xe0, 0x07, 0x00, 0x00, + 0xe0, 0x07, 0x80, 0x00, + 0xe0, 0x03, 0x80, 0x00, + 0xe0, 0x03, 0x80, 0x00, + 0xe0, 0x03, 0x80, 0x00, + 0xe0, 0x03, 0x80, 0x00, + 0xe0, 0x03, 0x80, 0x00, + 0xe0, 0x03, 0x80, 0x00, + 0xe0, 0x07, 0x80, 0x00, + 0xe0, 0x07, 0x00, 0x00, + 0xe0, 0x07, 0x00, 0x00, + 0xe0, 0x0f, 0x00, 0x00, + 0xe0, 0x1e, 0x00, 0x00, + 0xe0, 0x7c, 0x00, 0x00, + 0xff, 0xf8, 0x00, 0x00, + 0xff, 0xf0, 0x00, 0x00, + 0xff, 0x80, 0x00, 0x00, +}; + +/** Glyph definition for character 'D'. */ +static const struct glyph glyph_notomono_24_0044 = { + .glyph = 68, + .left = 2, + .top = 24, + .advance = 20, + .cols = 17, + .rows = 24, + .bitmap = bitmap_notomono_24_0044, + .kerning = NULL, +}; + +/** Bitmap definition for character 'E'. */ +static const uint8_t bitmap_notomono_24_0045[] = { + 0xff, 0xf8, + 0xff, 0xf8, + 0xff, 0xf8, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xff, 0xf0, + 0xff, 0xf0, + 0xff, 0xf0, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xff, 0xf8, + 0xff, 0xf8, + 0xff, 0xf8, +}; + +/** Glyph definition for character 'E'. */ +static const struct glyph glyph_notomono_24_0045 = { + .glyph = 69, + .left = 4, + .top = 24, + .advance = 20, + .cols = 13, + .rows = 24, + .bitmap = bitmap_notomono_24_0045, + .kerning = NULL, +}; + +/** Bitmap definition for character 'F'. */ +static const uint8_t bitmap_notomono_24_0046[] = { + 0xff, 0xfc, + 0xff, 0xfc, + 0xff, 0xfc, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xff, 0xf8, + 0xff, 0xf8, + 0xff, 0xf8, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, +}; + +/** Glyph definition for character 'F'. */ +static const struct glyph glyph_notomono_24_0046 = { + .glyph = 70, + .left = 4, + .top = 24, + .advance = 20, + .cols = 14, + .rows = 24, + .bitmap = bitmap_notomono_24_0046, + .kerning = NULL, +}; + +/** Bitmap definition for character 'G'. */ +static const uint8_t bitmap_notomono_24_0047[] = { + 0x01, 0xf8, + 0x0f, 0xff, + 0x1f, 0xfe, + 0x3e, 0x06, + 0x38, 0x00, + 0x78, 0x00, + 0x70, 0x00, + 0xf0, 0x00, + 0xf0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x7f, + 0xe0, 0x7f, + 0xe0, 0x7f, + 0xe0, 0x07, + 0xe0, 0x07, + 0xf0, 0x07, + 0x70, 0x07, + 0x70, 0x07, + 0x38, 0x07, + 0x3c, 0x07, + 0x1f, 0xff, + 0x0f, 0xff, + 0x03, 0xfc, +}; + +/** Glyph definition for character 'G'. */ +static const struct glyph glyph_notomono_24_0047 = { + .glyph = 71, + .left = 2, + .top = 24, + .advance = 20, + .cols = 16, + .rows = 24, + .bitmap = bitmap_notomono_24_0047, + .kerning = NULL, +}; + +/** Bitmap definition for character 'H'. */ +static const uint8_t bitmap_notomono_24_0048[] = { + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xff, 0xff, + 0xff, 0xff, + 0xff, 0xff, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, +}; + +/** Glyph definition for character 'H'. */ +static const struct glyph glyph_notomono_24_0048 = { + .glyph = 72, + .left = 2, + .top = 24, + .advance = 20, + .cols = 16, + .rows = 24, + .bitmap = bitmap_notomono_24_0048, + .kerning = NULL, +}; + +/** Bitmap definition for character 'I'. */ +static const uint8_t bitmap_notomono_24_0049[] = { + 0xff, 0xf8, + 0xff, 0xf8, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0xff, 0xf8, + 0xff, 0xf8, +}; + +/** Glyph definition for character 'I'. */ +static const struct glyph glyph_notomono_24_0049 = { + .glyph = 73, + .left = 3, + .top = 24, + .advance = 20, + .cols = 13, + .rows = 24, + .bitmap = bitmap_notomono_24_0049, + .kerning = NULL, +}; + +/** Bitmap definition for character 'J'. */ +static const uint8_t bitmap_notomono_24_004a[] = { + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x1c, + 0x00, 0x38, + 0x00, 0x78, + 0xff, 0xf0, + 0xff, 0xe0, + 0x7f, 0x80, +}; + +/** Glyph definition for character 'J'. */ +static const struct glyph glyph_notomono_24_004a = { + .glyph = 74, + .left = 2, + .top = 24, + .advance = 20, + .cols = 14, + .rows = 24, + .bitmap = bitmap_notomono_24_004a, + .kerning = NULL, +}; + +/** Bitmap definition for character 'K'. */ +static const uint8_t bitmap_notomono_24_004b[] = { + 0xe0, 0x0f, + 0xe0, 0x1e, + 0xe0, 0x1c, + 0xe0, 0x38, + 0xe0, 0x70, + 0xe0, 0xf0, + 0xe1, 0xe0, + 0xe3, 0xc0, + 0xe3, 0x80, + 0xe7, 0x00, + 0xee, 0x00, + 0xff, 0x00, + 0xff, 0x80, + 0xf3, 0x80, + 0xe1, 0xc0, + 0xe1, 0xe0, + 0xe0, 0xe0, + 0xe0, 0x70, + 0xe0, 0x78, + 0xe0, 0x38, + 0xe0, 0x3c, + 0xe0, 0x1e, + 0xe0, 0x0e, + 0xe0, 0x0f, +}; + +/** Glyph definition for character 'K'. */ +static const struct glyph glyph_notomono_24_004b = { + .glyph = 75, + .left = 3, + .top = 24, + .advance = 20, + .cols = 16, + .rows = 24, + .bitmap = bitmap_notomono_24_004b, + .kerning = NULL, +}; + +/** Bitmap definition for character 'L'. */ +static const uint8_t bitmap_notomono_24_004c[] = { + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xff, 0xf8, + 0xff, 0xf8, + 0xff, 0xf8, +}; + +/** Glyph definition for character 'L'. */ +static const struct glyph glyph_notomono_24_004c = { + .glyph = 76, + .left = 4, + .top = 24, + .advance = 20, + .cols = 13, + .rows = 24, + .bitmap = bitmap_notomono_24_004c, + .kerning = NULL, +}; + +/** Bitmap definition for character 'M'. */ +static const uint8_t bitmap_notomono_24_004d[] = { + 0xf0, 0x0f, + 0xf0, 0x0f, + 0xf0, 0x1f, + 0xf8, 0x1f, + 0xd8, 0x1b, + 0xd8, 0x1b, + 0xd8, 0x1b, + 0xd8, 0x3b, + 0xdc, 0x3b, + 0xcc, 0x33, + 0xcc, 0x33, + 0xcc, 0x33, + 0xcc, 0x73, + 0xc6, 0x63, + 0xc6, 0x63, + 0xc6, 0x63, + 0xc6, 0x63, + 0xc6, 0xe3, + 0xc3, 0xc3, + 0xc3, 0xc3, + 0xc3, 0xc3, + 0xc3, 0xc3, + 0xc3, 0xc3, + 0xc1, 0x83, +}; + +/** Glyph definition for character 'M'. */ +static const struct glyph glyph_notomono_24_004d = { + .glyph = 77, + .left = 2, + .top = 24, + .advance = 20, + .cols = 16, + .rows = 24, + .bitmap = bitmap_notomono_24_004d, + .kerning = NULL, +}; + +/** Bitmap definition for character 'N'. */ +static const uint8_t bitmap_notomono_24_004e[] = { + 0xf0, 0x07, + 0xf0, 0x07, + 0xf8, 0x07, + 0xf8, 0x07, + 0xdc, 0x07, + 0xfc, 0x07, + 0xee, 0x07, + 0xee, 0x07, + 0xe7, 0x07, + 0xe7, 0x07, + 0xe3, 0x87, + 0xe3, 0x87, + 0xe1, 0xc7, + 0xe1, 0xc7, + 0xe0, 0xe7, + 0xe0, 0xe7, + 0xe0, 0x77, + 0xe0, 0x77, + 0xe0, 0x3f, + 0xe0, 0x3f, + 0xe0, 0x1f, + 0xe0, 0x1f, + 0xe0, 0x0f, + 0xe0, 0x0f, +}; + +/** Glyph definition for character 'N'. */ +static const struct glyph glyph_notomono_24_004e = { + .glyph = 78, + .left = 2, + .top = 24, + .advance = 20, + .cols = 16, + .rows = 24, + .bitmap = bitmap_notomono_24_004e, + .kerning = NULL, +}; + +/** Bitmap definition for character 'O'. */ +static const uint8_t bitmap_notomono_24_004f[] = { + 0x03, 0xf0, 0x00, 0x00, + 0x0f, 0xfc, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, + 0x3c, 0x0f, 0x00, 0x00, + 0x78, 0x07, 0x80, 0x00, + 0x70, 0x03, 0x80, 0x00, + 0x70, 0x03, 0x80, 0x00, + 0xf0, 0x03, 0xc0, 0x00, + 0xe0, 0x01, 0xc0, 0x00, + 0xe0, 0x01, 0xc0, 0x00, + 0xe0, 0x01, 0xc0, 0x00, + 0xe0, 0x01, 0xc0, 0x00, + 0xe0, 0x01, 0xc0, 0x00, + 0xe0, 0x01, 0xc0, 0x00, + 0xe0, 0x01, 0xc0, 0x00, + 0xe0, 0x01, 0xc0, 0x00, + 0xf0, 0x03, 0xc0, 0x00, + 0x70, 0x03, 0x80, 0x00, + 0x70, 0x03, 0x80, 0x00, + 0x78, 0x07, 0x80, 0x00, + 0x3c, 0x0f, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, + 0x0f, 0xfc, 0x00, 0x00, + 0x03, 0xf0, 0x00, 0x00, +}; + +/** Glyph definition for character 'O'. */ +static const struct glyph glyph_notomono_24_004f = { + .glyph = 79, + .left = 1, + .top = 24, + .advance = 20, + .cols = 18, + .rows = 24, + .bitmap = bitmap_notomono_24_004f, + .kerning = NULL, +}; + +/** Bitmap definition for character 'P'. */ +static const uint8_t bitmap_notomono_24_0050[] = { + 0xff, 0xc0, + 0xff, 0xf8, + 0xff, 0xfc, + 0xe0, 0x3c, + 0xe0, 0x1e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x1e, + 0xe0, 0x1c, + 0xe0, 0x7c, + 0xff, 0xf8, + 0xff, 0xe0, + 0xfe, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, +}; + +/** Glyph definition for character 'P'. */ +static const struct glyph glyph_notomono_24_0050 = { + .glyph = 80, + .left = 3, + .top = 24, + .advance = 20, + .cols = 15, + .rows = 24, + .bitmap = bitmap_notomono_24_0050, + .kerning = NULL, +}; + +/** Bitmap definition for character 'Q'. */ +static const uint8_t bitmap_notomono_24_0051[] = { + 0x03, 0xf0, 0x00, 0x00, + 0x0f, 0xfc, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, + 0x3c, 0x0f, 0x00, 0x00, + 0x78, 0x07, 0x80, 0x00, + 0x70, 0x03, 0x80, 0x00, + 0x70, 0x03, 0x80, 0x00, + 0xf0, 0x03, 0xc0, 0x00, + 0xe0, 0x01, 0xc0, 0x00, + 0xe0, 0x01, 0xc0, 0x00, + 0xe0, 0x01, 0xc0, 0x00, + 0xe0, 0x01, 0xc0, 0x00, + 0xe0, 0x01, 0xc0, 0x00, + 0xe0, 0x01, 0xc0, 0x00, + 0xe0, 0x01, 0xc0, 0x00, + 0xe0, 0x01, 0xc0, 0x00, + 0xf0, 0x03, 0xc0, 0x00, + 0x70, 0x03, 0x80, 0x00, + 0x70, 0x03, 0x80, 0x00, + 0x78, 0x07, 0x80, 0x00, + 0x3c, 0x0f, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, + 0x0f, 0xfc, 0x00, 0x00, + 0x03, 0xf8, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x1e, 0x00, 0x00, + 0x00, 0x0f, 0x00, 0x00, + 0x00, 0x07, 0xc0, 0x00, + 0x00, 0x03, 0x80, 0x00, + 0x00, 0x01, 0x80, 0x00, +}; + +/** Glyph definition for character 'Q'. */ +static const struct glyph glyph_notomono_24_0051 = { + .glyph = 81, + .left = 1, + .top = 24, + .advance = 20, + .cols = 18, + .rows = 30, + .bitmap = bitmap_notomono_24_0051, + .kerning = NULL, +}; + +/** Bitmap definition for character 'R'. */ +static const uint8_t bitmap_notomono_24_0052[] = { + 0xff, 0xc0, + 0xff, 0xf0, + 0xff, 0xf8, + 0xe0, 0x38, + 0xe0, 0x3c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x38, + 0xe0, 0x78, + 0xff, 0xf0, + 0xff, 0xc0, + 0xff, 0xc0, + 0xe1, 0xc0, + 0xe0, 0xe0, + 0xe0, 0xf0, + 0xe0, 0x70, + 0xe0, 0x38, + 0xe0, 0x3c, + 0xe0, 0x1c, + 0xe0, 0x1e, + 0xe0, 0x0e, + 0xe0, 0x0f, +}; + +/** Glyph definition for character 'R'. */ +static const struct glyph glyph_notomono_24_0052 = { + .glyph = 82, + .left = 3, + .top = 24, + .advance = 20, + .cols = 16, + .rows = 24, + .bitmap = bitmap_notomono_24_0052, + .kerning = NULL, +}; + +/** Bitmap definition for character 'S'. */ +static const uint8_t bitmap_notomono_24_0053[] = { + 0x0f, 0xf8, + 0x3f, 0xfe, + 0x7f, 0xfc, + 0xf0, 0x04, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xf0, 0x00, + 0x78, 0x00, + 0x3f, 0x00, + 0x1f, 0xc0, + 0x07, 0xf0, + 0x00, 0xfc, + 0x00, 0x3c, + 0x00, 0x1e, + 0x00, 0x0e, + 0x00, 0x0e, + 0x00, 0x0e, + 0x00, 0x0e, + 0x80, 0x1c, + 0xff, 0xfc, + 0xff, 0xf0, + 0x3f, 0xc0, +}; + +/** Glyph definition for character 'S'. */ +static const struct glyph glyph_notomono_24_0053 = { + .glyph = 83, + .left = 3, + .top = 24, + .advance = 20, + .cols = 15, + .rows = 24, + .bitmap = bitmap_notomono_24_0053, + .kerning = NULL, +}; + +/** Bitmap definition for character 'T'. */ +static const uint8_t bitmap_notomono_24_0054[] = { + 0xff, 0xff, 0x80, 0x00, + 0xff, 0xff, 0x80, 0x00, + 0xff, 0xff, 0x80, 0x00, + 0x01, 0xc0, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, +}; + +/** Glyph definition for character 'T'. */ +static const struct glyph glyph_notomono_24_0054 = { + .glyph = 84, + .left = 1, + .top = 24, + .advance = 20, + .cols = 17, + .rows = 24, + .bitmap = bitmap_notomono_24_0054, + .kerning = NULL, +}; + +/** Bitmap definition for character 'U'. */ +static const uint8_t bitmap_notomono_24_0055[] = { + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xf0, 0x0f, + 0x70, 0x0e, + 0x78, 0x1e, + 0x3f, 0xfc, + 0x1f, 0xf8, + 0x07, 0xe0, +}; + +/** Glyph definition for character 'U'. */ +static const struct glyph glyph_notomono_24_0055 = { + .glyph = 85, + .left = 2, + .top = 24, + .advance = 20, + .cols = 16, + .rows = 24, + .bitmap = bitmap_notomono_24_0055, + .kerning = NULL, +}; + +/** Bitmap definition for character 'V'. */ +static const uint8_t bitmap_notomono_24_0056[] = { + 0xe0, 0x01, 0xc0, 0x00, + 0xf0, 0x03, 0xc0, 0x00, + 0x70, 0x03, 0x80, 0x00, + 0x70, 0x03, 0x80, 0x00, + 0x70, 0x07, 0x80, 0x00, + 0x38, 0x07, 0x00, 0x00, + 0x38, 0x07, 0x00, 0x00, + 0x38, 0x07, 0x00, 0x00, + 0x1c, 0x0e, 0x00, 0x00, + 0x1c, 0x0e, 0x00, 0x00, + 0x1c, 0x0e, 0x00, 0x00, + 0x0e, 0x1c, 0x00, 0x00, + 0x0e, 0x1c, 0x00, 0x00, + 0x0e, 0x1c, 0x00, 0x00, + 0x06, 0x1c, 0x00, 0x00, + 0x07, 0x38, 0x00, 0x00, + 0x07, 0x38, 0x00, 0x00, + 0x07, 0x38, 0x00, 0x00, + 0x03, 0x70, 0x00, 0x00, + 0x03, 0xf0, 0x00, 0x00, + 0x03, 0xf0, 0x00, 0x00, + 0x01, 0xe0, 0x00, 0x00, + 0x01, 0xe0, 0x00, 0x00, + 0x01, 0xe0, 0x00, 0x00, +}; + +/** Glyph definition for character 'V'. */ +static const struct glyph glyph_notomono_24_0056 = { + .glyph = 86, + .left = 1, + .top = 24, + .advance = 20, + .cols = 18, + .rows = 24, + .bitmap = bitmap_notomono_24_0056, + .kerning = NULL, +}; + +/** Bitmap definition for character 'W'. */ +static const uint8_t bitmap_notomono_24_0057[] = { + 0xe0, 0x00, 0x70, 0x00, + 0xe0, 0x00, 0x70, 0x00, + 0xe0, 0x00, 0x70, 0x00, + 0xe0, 0x00, 0x70, 0x00, + 0x60, 0x00, 0x60, 0x00, + 0x60, 0x00, 0x60, 0x00, + 0x70, 0x00, 0x60, 0x00, + 0x70, 0xf0, 0xe0, 0x00, + 0x70, 0xf0, 0xe0, 0x00, + 0x70, 0xf0, 0xe0, 0x00, + 0x70, 0xf0, 0xe0, 0x00, + 0x31, 0xf8, 0xe0, 0x00, + 0x31, 0x98, 0xc0, 0x00, + 0x31, 0x98, 0xc0, 0x00, + 0x31, 0x98, 0xc0, 0x00, + 0x3b, 0x9c, 0xc0, 0x00, + 0x3b, 0x0d, 0xc0, 0x00, + 0x3b, 0x0d, 0xc0, 0x00, + 0x3f, 0x0d, 0xc0, 0x00, + 0x1e, 0x07, 0xc0, 0x00, + 0x1e, 0x07, 0x80, 0x00, + 0x1e, 0x07, 0x80, 0x00, + 0x1e, 0x07, 0x80, 0x00, + 0x1c, 0x03, 0x80, 0x00, +}; + +/** Glyph definition for character 'W'. */ +static const struct glyph glyph_notomono_24_0057 = { + .glyph = 87, + .left = 0, + .top = 24, + .advance = 20, + .cols = 20, + .rows = 24, + .bitmap = bitmap_notomono_24_0057, + .kerning = NULL, +}; + +/** Bitmap definition for character 'X'. */ +static const uint8_t bitmap_notomono_24_0058[] = { + 0x70, 0x03, 0x80, 0x00, + 0x38, 0x07, 0x00, 0x00, + 0x3c, 0x0f, 0x00, 0x00, + 0x1c, 0x0e, 0x00, 0x00, + 0x0e, 0x1c, 0x00, 0x00, + 0x0e, 0x1c, 0x00, 0x00, + 0x07, 0x38, 0x00, 0x00, + 0x07, 0x38, 0x00, 0x00, + 0x03, 0xf0, 0x00, 0x00, + 0x03, 0xf0, 0x00, 0x00, + 0x01, 0xe0, 0x00, 0x00, + 0x01, 0xe0, 0x00, 0x00, + 0x03, 0xf0, 0x00, 0x00, + 0x03, 0xf0, 0x00, 0x00, + 0x07, 0x38, 0x00, 0x00, + 0x07, 0x38, 0x00, 0x00, + 0x0e, 0x1c, 0x00, 0x00, + 0x0e, 0x1c, 0x00, 0x00, + 0x1c, 0x0e, 0x00, 0x00, + 0x1c, 0x0e, 0x00, 0x00, + 0x38, 0x07, 0x00, 0x00, + 0x70, 0x07, 0x80, 0x00, + 0x70, 0x03, 0x80, 0x00, + 0xe0, 0x03, 0xc0, 0x00, +}; + +/** Glyph definition for character 'X'. */ +static const struct glyph glyph_notomono_24_0058 = { + .glyph = 88, + .left = 1, + .top = 24, + .advance = 20, + .cols = 18, + .rows = 24, + .bitmap = bitmap_notomono_24_0058, + .kerning = NULL, +}; + +/** Bitmap definition for character 'Y'. */ +static const uint8_t bitmap_notomono_24_0059[] = { + 0xf0, 0x00, 0xe0, 0x00, + 0x70, 0x01, 0xc0, 0x00, + 0x78, 0x03, 0xc0, 0x00, + 0x38, 0x03, 0x80, 0x00, + 0x38, 0x07, 0x80, 0x00, + 0x1c, 0x07, 0x00, 0x00, + 0x1c, 0x0f, 0x00, 0x00, + 0x0e, 0x0e, 0x00, 0x00, + 0x06, 0x1c, 0x00, 0x00, + 0x07, 0x1c, 0x00, 0x00, + 0x03, 0x38, 0x00, 0x00, + 0x03, 0xb8, 0x00, 0x00, + 0x01, 0xf0, 0x00, 0x00, + 0x01, 0xf0, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, +}; + +/** Glyph definition for character 'Y'. */ +static const struct glyph glyph_notomono_24_0059 = { + .glyph = 89, + .left = 0, + .top = 24, + .advance = 20, + .cols = 19, + .rows = 24, + .bitmap = bitmap_notomono_24_0059, + .kerning = NULL, +}; + +/** Bitmap definition for character 'Z'. */ +static const uint8_t bitmap_notomono_24_005a[] = { + 0xff, 0xff, + 0xff, 0xff, + 0xff, 0xff, + 0x00, 0x0e, + 0x00, 0x1e, + 0x00, 0x1c, + 0x00, 0x38, + 0x00, 0x78, + 0x00, 0x70, + 0x00, 0xe0, + 0x01, 0xe0, + 0x01, 0xc0, + 0x03, 0x80, + 0x07, 0x80, + 0x07, 0x00, + 0x0e, 0x00, + 0x1e, 0x00, + 0x1c, 0x00, + 0x38, 0x00, + 0x78, 0x00, + 0x70, 0x00, + 0xff, 0xff, + 0xff, 0xff, + 0xff, 0xff, +}; + +/** Glyph definition for character 'Z'. */ +static const struct glyph glyph_notomono_24_005a = { + .glyph = 90, + .left = 2, + .top = 24, + .advance = 20, + .cols = 16, + .rows = 24, + .bitmap = bitmap_notomono_24_005a, + .kerning = NULL, +}; + +/** Bitmap definition for character '['. */ +static const uint8_t bitmap_notomono_24_005b[] = { + 0xff, 0x00, + 0xff, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xff, 0x00, + 0xff, 0x00, +}; + +/** Glyph definition for character '['. */ +static const struct glyph glyph_notomono_24_005b = { + .glyph = 91, + .left = 7, + .top = 24, + .advance = 20, + .cols = 8, + .rows = 29, + .bitmap = bitmap_notomono_24_005b, + .kerning = NULL, +}; + +/** Bitmap definition for character '\'. */ +static const uint8_t bitmap_notomono_24_005c[] = { + 0xe0, 0x00, + 0x70, 0x00, + 0x70, 0x00, + 0x30, 0x00, + 0x38, 0x00, + 0x18, 0x00, + 0x1c, 0x00, + 0x1c, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x03, 0x80, + 0x03, 0x80, + 0x01, 0xc0, + 0x01, 0xc0, + 0x00, 0xe0, + 0x00, 0xe0, + 0x00, 0x60, + 0x00, 0x70, + 0x00, 0x70, + 0x00, 0x38, + 0x00, 0x38, + 0x00, 0x1c, +}; + +/** Glyph definition for character '\'. */ +static const struct glyph glyph_notomono_24_005c = { + .glyph = 92, + .left = 3, + .top = 24, + .advance = 20, + .cols = 14, + .rows = 24, + .bitmap = bitmap_notomono_24_005c, + .kerning = NULL, +}; + +/** Bitmap definition for character ']'. */ +static const uint8_t bitmap_notomono_24_005d[] = { + 0xff, 0x00, + 0xff, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0xff, 0x00, + 0xff, 0x00, +}; + +/** Glyph definition for character ']'. */ +static const struct glyph glyph_notomono_24_005d = { + .glyph = 93, + .left = 5, + .top = 24, + .advance = 20, + .cols = 8, + .rows = 29, + .bitmap = bitmap_notomono_24_005d, + .kerning = NULL, +}; + +/** Bitmap definition for character '^'. */ +static const uint8_t bitmap_notomono_24_005e[] = { + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0xc0, + 0x06, 0xc0, + 0x06, 0xe0, + 0x0e, 0x60, + 0x0c, 0x70, + 0x1c, 0x30, + 0x18, 0x38, + 0x38, 0x18, + 0x30, 0x1c, + 0x30, 0x0c, + 0x70, 0x0e, + 0x60, 0x06, + 0xe0, 0x07, +}; + +/** Glyph definition for character '^'. */ +static const struct glyph glyph_notomono_24_005e = { + .glyph = 94, + .left = 2, + .top = 24, + .advance = 20, + .cols = 16, + .rows = 15, + .bitmap = bitmap_notomono_24_005e, + .kerning = NULL, +}; + +/** Bitmap definition for character '_'. */ +static const uint8_t bitmap_notomono_24_005f[] = { + 0xff, 0xff, 0xf0, 0x00, + 0xff, 0xff, 0xf0, 0x00, +}; + +/** Glyph definition for character '_'. */ +static const struct glyph glyph_notomono_24_005f = { + .glyph = 95, + .left = 0, + .top = -3, + .advance = 20, + .cols = 20, + .rows = 2, + .bitmap = bitmap_notomono_24_005f, + .kerning = NULL, +}; + +/** Bitmap definition for character 'a'. */ +static const uint8_t bitmap_notomono_24_0061[] = { + 0x0f, 0xe0, + 0x7f, 0xf8, + 0x3e, 0xfc, + 0x20, 0x1e, + 0x00, 0x0e, + 0x00, 0x0e, + 0x00, 0x0e, + 0x07, 0xfe, + 0x3f, 0xfe, + 0x7c, 0x0e, + 0xf0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x1e, + 0xe0, 0x3e, + 0x78, 0xfe, + 0x7f, 0xe6, + 0x1f, 0x86, +}; + +/** Glyph definition for character 'a'. */ +static const struct glyph glyph_notomono_24_0061 = { + .glyph = 97, + .left = 2, + .top = 18, + .advance = 20, + .cols = 15, + .rows = 18, + .bitmap = bitmap_notomono_24_0061, + .kerning = NULL, +}; + +/** Bitmap definition for character 'b'. */ +static const uint8_t bitmap_notomono_24_0062[] = { + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe7, 0xe0, + 0xef, 0xf0, + 0xfe, 0xf8, + 0xf0, 0x3c, + 0xf0, 0x1c, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x1e, + 0xf0, 0x1c, + 0xf0, 0x3c, + 0xfe, 0xf8, + 0xef, 0xf0, + 0xc3, 0xe0, +}; + +/** Glyph definition for character 'b'. */ +static const struct glyph glyph_notomono_24_0062 = { + .glyph = 98, + .left = 3, + .top = 25, + .advance = 20, + .cols = 15, + .rows = 25, + .bitmap = bitmap_notomono_24_0062, + .kerning = NULL, +}; + +/** Bitmap definition for character 'c'. */ +static const uint8_t bitmap_notomono_24_0063[] = { + 0x07, 0xf8, + 0x1f, 0xfc, + 0x3f, 0xf8, + 0x78, 0x00, + 0x70, 0x00, + 0xf0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xf0, 0x00, + 0x70, 0x00, + 0x78, 0x00, + 0x3f, 0xfc, + 0x1f, 0xfc, + 0x07, 0xf8, +}; + +/** Glyph definition for character 'c'. */ +static const struct glyph glyph_notomono_24_0063 = { + .glyph = 99, + .left = 3, + .top = 18, + .advance = 20, + .cols = 14, + .rows = 18, + .bitmap = bitmap_notomono_24_0063, + .kerning = NULL, +}; + +/** Bitmap definition for character 'd'. */ +static const uint8_t bitmap_notomono_24_0064[] = { + 0x00, 0x0e, + 0x00, 0x0e, + 0x00, 0x0e, + 0x00, 0x0e, + 0x00, 0x0e, + 0x00, 0x0e, + 0x00, 0x0e, + 0x0f, 0x8e, + 0x1f, 0xee, + 0x3e, 0xfe, + 0x78, 0x1e, + 0x70, 0x1e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0x70, 0x1e, + 0x78, 0x1e, + 0x3e, 0xfe, + 0x1f, 0xee, + 0x0f, 0x86, +}; + +/** Glyph definition for character 'd'. */ +static const struct glyph glyph_notomono_24_0064 = { + .glyph = 100, + .left = 2, + .top = 25, + .advance = 20, + .cols = 15, + .rows = 25, + .bitmap = bitmap_notomono_24_0064, + .kerning = NULL, +}; + +/** Bitmap definition for character 'e'. */ +static const uint8_t bitmap_notomono_24_0065[] = { + 0x07, 0xe0, + 0x1f, 0xf8, + 0x3f, 0x7c, + 0x78, 0x0e, + 0x70, 0x0e, + 0x60, 0x07, + 0xe0, 0x07, + 0xff, 0xff, + 0xff, 0xff, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0x70, 0x00, + 0x70, 0x00, + 0x78, 0x02, + 0x3f, 0xfe, + 0x1f, 0xfe, + 0x03, 0xf8, +}; + +/** Glyph definition for character 'e'. */ +static const struct glyph glyph_notomono_24_0065 = { + .glyph = 101, + .left = 2, + .top = 18, + .advance = 20, + .cols = 16, + .rows = 18, + .bitmap = bitmap_notomono_24_0065, + .kerning = NULL, +}; + +/** Bitmap definition for character 'f'. */ +static const uint8_t bitmap_notomono_24_0066[] = { + 0x00, 0xfe, + 0x03, 0xfe, + 0x03, 0xec, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0xff, 0xfc, + 0xff, 0xfc, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, +}; + +/** Glyph definition for character 'f'. */ +static const struct glyph glyph_notomono_24_0066 = { + .glyph = 102, + .left = 3, + .top = 25, + .advance = 20, + .cols = 15, + .rows = 25, + .bitmap = bitmap_notomono_24_0066, + .kerning = NULL, +}; + +/** Bitmap definition for character 'g'. */ +static const uint8_t bitmap_notomono_24_0067[] = { + 0x07, 0xff, + 0x1f, 0xff, + 0x3c, 0x78, + 0x78, 0x3c, + 0x70, 0x1c, + 0x70, 0x1c, + 0x70, 0x1c, + 0x70, 0x1c, + 0x70, 0x1c, + 0x38, 0x38, + 0x1f, 0xf0, + 0x0f, 0xc0, + 0x18, 0x00, + 0x38, 0x00, + 0x38, 0x00, + 0x3f, 0xf8, + 0x0f, 0xfe, + 0x7f, 0xfe, + 0x70, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x0e, + 0x78, 0x3e, + 0x3f, 0xfc, + 0x1f, 0xe0, +}; + +/** Glyph definition for character 'g'. */ +static const struct glyph glyph_notomono_24_0067 = { + .glyph = 103, + .left = 2, + .top = 18, + .advance = 20, + .cols = 16, + .rows = 26, + .bitmap = bitmap_notomono_24_0067, + .kerning = NULL, +}; + +/** Bitmap definition for character 'h'. */ +static const uint8_t bitmap_notomono_24_0068[] = { + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe7, 0xe0, + 0xef, 0xf0, + 0xfe, 0xf8, + 0xf8, 0x3c, + 0xf0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, +}; + +/** Glyph definition for character 'h'. */ +static const struct glyph glyph_notomono_24_0068 = { + .glyph = 104, + .left = 3, + .top = 25, + .advance = 20, + .cols = 14, + .rows = 25, + .bitmap = bitmap_notomono_24_0068, + .kerning = NULL, +}; + +/** Bitmap definition for character 'i'. */ +static const uint8_t bitmap_notomono_24_0069[] = { + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x3f, 0x80, + 0x3f, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0xff, 0xfe, + 0xff, 0xfe, +}; + +/** Glyph definition for character 'i'. */ +static const struct glyph glyph_notomono_24_0069 = { + .glyph = 105, + .left = 3, + .top = 25, + .advance = 20, + .cols = 15, + .rows = 25, + .bitmap = bitmap_notomono_24_0069, + .kerning = NULL, +}; + +/** Bitmap definition for character 'j'. */ +static const uint8_t bitmap_notomono_24_006a[] = { + 0x00, 0x70, + 0x00, 0x70, + 0x00, 0x70, + 0x00, 0x70, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x3f, 0xf0, + 0x3f, 0xf0, + 0x00, 0x70, + 0x00, 0x70, + 0x00, 0x70, + 0x00, 0x70, + 0x00, 0x70, + 0x00, 0x70, + 0x00, 0x70, + 0x00, 0x70, + 0x00, 0x70, + 0x00, 0x70, + 0x00, 0x70, + 0x00, 0x70, + 0x00, 0x70, + 0x00, 0x70, + 0x00, 0x70, + 0x00, 0x70, + 0x00, 0x70, + 0x00, 0x70, + 0x00, 0x70, + 0x00, 0x70, + 0x00, 0xf0, + 0xf7, 0xe0, + 0xff, 0xc0, + 0xff, 0x00, +}; + +/** Glyph definition for character 'j'. */ +static const struct glyph glyph_notomono_24_006a = { + .glyph = 106, + .left = 2, + .top = 25, + .advance = 20, + .cols = 12, + .rows = 33, + .bitmap = bitmap_notomono_24_006a, + .kerning = NULL, +}; + +/** Bitmap definition for character 'k'. */ +static const uint8_t bitmap_notomono_24_006b[] = { + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x0e, + 0xe0, 0x1c, + 0xe0, 0x38, + 0xe0, 0xf0, + 0xe1, 0xe0, + 0xe3, 0xc0, + 0xe7, 0x80, + 0xef, 0x00, + 0xff, 0x00, + 0xff, 0x80, + 0xf3, 0xc0, + 0xe1, 0xc0, + 0xe0, 0xe0, + 0xe0, 0x70, + 0xe0, 0x78, + 0xe0, 0x3c, + 0xe0, 0x1e, + 0xe0, 0x0f, +}; + +/** Glyph definition for character 'k'. */ +static const struct glyph glyph_notomono_24_006b = { + .glyph = 107, + .left = 3, + .top = 25, + .advance = 20, + .cols = 16, + .rows = 25, + .bitmap = bitmap_notomono_24_006b, + .kerning = NULL, +}; + +/** Bitmap definition for character 'l'. */ +static const uint8_t bitmap_notomono_24_006c[] = { + 0x3f, 0x80, + 0x3f, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0x03, 0x80, + 0xff, 0xfe, + 0xff, 0xfe, +}; + +/** Glyph definition for character 'l'. */ +static const struct glyph glyph_notomono_24_006c = { + .glyph = 108, + .left = 3, + .top = 25, + .advance = 20, + .cols = 15, + .rows = 25, + .bitmap = bitmap_notomono_24_006c, + .kerning = NULL, +}; + +/** Bitmap definition for character 'm'. */ +static const uint8_t bitmap_notomono_24_006d[] = { + 0xc7, 0x8f, 0x00, 0x00, + 0xef, 0xdf, 0x80, 0x00, + 0xff, 0xdb, 0x80, 0x00, + 0xf1, 0xf1, 0xc0, 0x00, + 0xe0, 0xe1, 0xc0, 0x00, + 0xe0, 0xe1, 0xc0, 0x00, + 0xe0, 0xe1, 0xc0, 0x00, + 0xe0, 0xe1, 0xc0, 0x00, + 0xe0, 0xe1, 0xc0, 0x00, + 0xe0, 0xe1, 0xc0, 0x00, + 0xe0, 0xe1, 0xc0, 0x00, + 0xe0, 0xe1, 0xc0, 0x00, + 0xe0, 0xe1, 0xc0, 0x00, + 0xe0, 0xe1, 0xc0, 0x00, + 0xe0, 0xe1, 0xc0, 0x00, + 0xe0, 0xe1, 0xc0, 0x00, + 0xe0, 0xe1, 0xc0, 0x00, + 0xe0, 0xe1, 0xc0, 0x00, +}; + +/** Glyph definition for character 'm'. */ +static const struct glyph glyph_notomono_24_006d = { + .glyph = 109, + .left = 1, + .top = 18, + .advance = 20, + .cols = 18, + .rows = 18, + .bitmap = bitmap_notomono_24_006d, + .kerning = NULL, +}; + +/** Bitmap definition for character 'n'. */ +static const uint8_t bitmap_notomono_24_006e[] = { + 0xc7, 0xe0, + 0xef, 0xf0, + 0xfe, 0xf8, + 0xf8, 0x3c, + 0xf0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, +}; + +/** Glyph definition for character 'n'. */ +static const struct glyph glyph_notomono_24_006e = { + .glyph = 110, + .left = 3, + .top = 18, + .advance = 20, + .cols = 14, + .rows = 18, + .bitmap = bitmap_notomono_24_006e, + .kerning = NULL, +}; + +/** Bitmap definition for character 'o'. */ +static const uint8_t bitmap_notomono_24_006f[] = { + 0x07, 0xe0, + 0x1f, 0xf8, + 0x3f, 0xfc, + 0x78, 0x1e, + 0x70, 0x0e, + 0xf0, 0x0e, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0xe0, 0x07, + 0x70, 0x0f, + 0x70, 0x0e, + 0x78, 0x1e, + 0x3f, 0xfc, + 0x1f, 0xf8, + 0x07, 0xe0, +}; + +/** Glyph definition for character 'o'. */ +static const struct glyph glyph_notomono_24_006f = { + .glyph = 111, + .left = 2, + .top = 18, + .advance = 20, + .cols = 16, + .rows = 18, + .bitmap = bitmap_notomono_24_006f, + .kerning = NULL, +}; + +/** Bitmap definition for character 'p'. */ +static const uint8_t bitmap_notomono_24_0070[] = { + 0xc7, 0xe0, + 0xef, 0xf0, + 0xfe, 0xf8, + 0xf0, 0x3c, + 0xf0, 0x1c, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x1e, + 0xf0, 0x1c, + 0xf0, 0x3c, + 0xfe, 0xf8, + 0xef, 0xf0, + 0xe3, 0xe0, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, +}; + +/** Glyph definition for character 'p'. */ +static const struct glyph glyph_notomono_24_0070 = { + .glyph = 112, + .left = 3, + .top = 18, + .advance = 20, + .cols = 15, + .rows = 26, + .bitmap = bitmap_notomono_24_0070, + .kerning = NULL, +}; + +/** Bitmap definition for character 'q'. */ +static const uint8_t bitmap_notomono_24_0071[] = { + 0x0f, 0x86, + 0x1f, 0xee, + 0x3e, 0xfe, + 0x78, 0x1e, + 0x70, 0x1e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0xe0, 0x0e, + 0x70, 0x1e, + 0x78, 0x1e, + 0x3e, 0xfe, + 0x1f, 0xee, + 0x0f, 0x8e, + 0x00, 0x0e, + 0x00, 0x0e, + 0x00, 0x0e, + 0x00, 0x0e, + 0x00, 0x0e, + 0x00, 0x0e, + 0x00, 0x0e, + 0x00, 0x0e, +}; + +/** Glyph definition for character 'q'. */ +static const struct glyph glyph_notomono_24_0071 = { + .glyph = 113, + .left = 2, + .top = 18, + .advance = 20, + .cols = 15, + .rows = 26, + .bitmap = bitmap_notomono_24_0071, + .kerning = NULL, +}; + +/** Bitmap definition for character 'r'. */ +static const uint8_t bitmap_notomono_24_0072[] = { + 0xc3, 0xf0, + 0xe7, 0xf8, + 0xef, 0xf0, + 0xf8, 0x00, + 0xf0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, +}; + +/** Glyph definition for character 'r'. */ +static const struct glyph glyph_notomono_24_0072 = { + .glyph = 114, + .left = 4, + .top = 18, + .advance = 20, + .cols = 13, + .rows = 18, + .bitmap = bitmap_notomono_24_0072, + .kerning = NULL, +}; + +/** Bitmap definition for character 's'. */ +static const uint8_t bitmap_notomono_24_0073[] = { + 0x1f, 0xe0, + 0x7f, 0xf8, + 0x7d, 0xf0, + 0xe0, 0x00, + 0xe0, 0x00, + 0xe0, 0x00, + 0xf8, 0x00, + 0x7e, 0x00, + 0x1f, 0x80, + 0x07, 0xe0, + 0x01, 0xf0, + 0x00, 0x78, + 0x00, 0x38, + 0x00, 0x38, + 0x80, 0x38, + 0xf9, 0xf0, + 0xff, 0xe0, + 0x3f, 0x80, +}; + +/** Glyph definition for character 's'. */ +static const struct glyph glyph_notomono_24_0073 = { + .glyph = 115, + .left = 4, + .top = 18, + .advance = 20, + .cols = 13, + .rows = 18, + .bitmap = bitmap_notomono_24_0073, + .kerning = NULL, +}; + +/** Bitmap definition for character 't'. */ +static const uint8_t bitmap_notomono_24_0074[] = { + 0x06, 0x00, + 0x06, 0x00, + 0x06, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x7f, 0xfc, + 0xff, 0xfc, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x07, 0xdc, + 0x07, 0xfc, + 0x01, 0xfc, +}; + +/** Glyph definition for character 't'. */ +static const struct glyph glyph_notomono_24_0074 = { + .glyph = 116, + .left = 3, + .top = 23, + .advance = 20, + .cols = 14, + .rows = 23, + .bitmap = bitmap_notomono_24_0074, + .kerning = NULL, +}; + +/** Bitmap definition for character 'u'. */ +static const uint8_t bitmap_notomono_24_0075[] = { + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x1c, + 0xe0, 0x3c, + 0xf0, 0x3c, + 0x7d, 0xfc, + 0x3f, 0xdc, + 0x1f, 0x8c, +}; + +/** Glyph definition for character 'u'. */ +static const struct glyph glyph_notomono_24_0075 = { + .glyph = 117, + .left = 3, + .top = 18, + .advance = 20, + .cols = 14, + .rows = 18, + .bitmap = bitmap_notomono_24_0075, + .kerning = NULL, +}; + +/** Bitmap definition for character 'v'. */ +static const uint8_t bitmap_notomono_24_0076[] = { + 0xe0, 0x01, 0xc0, 0x00, + 0x70, 0x03, 0x80, 0x00, + 0x70, 0x03, 0x80, 0x00, + 0x70, 0x03, 0x80, 0x00, + 0x38, 0x07, 0x00, 0x00, + 0x38, 0x07, 0x00, 0x00, + 0x1c, 0x0e, 0x00, 0x00, + 0x1c, 0x0e, 0x00, 0x00, + 0x1c, 0x0e, 0x00, 0x00, + 0x0e, 0x1c, 0x00, 0x00, + 0x0e, 0x1c, 0x00, 0x00, + 0x07, 0x18, 0x00, 0x00, + 0x07, 0x38, 0x00, 0x00, + 0x07, 0x38, 0x00, 0x00, + 0x03, 0xb0, 0x00, 0x00, + 0x03, 0xf0, 0x00, 0x00, + 0x01, 0xf0, 0x00, 0x00, + 0x01, 0xe0, 0x00, 0x00, +}; + +/** Glyph definition for character 'v'. */ +static const struct glyph glyph_notomono_24_0076 = { + .glyph = 118, + .left = 1, + .top = 18, + .advance = 20, + .cols = 18, + .rows = 18, + .bitmap = bitmap_notomono_24_0076, + .kerning = NULL, +}; + +/** Bitmap definition for character 'w'. */ +static const uint8_t bitmap_notomono_24_0077[] = { + 0xe0, 0xf0, 0x70, 0x00, + 0xe0, 0xf0, 0x70, 0x00, + 0xe0, 0xf0, 0x70, 0x00, + 0x60, 0xf0, 0x60, 0x00, + 0x61, 0xf8, 0x60, 0x00, + 0x71, 0x98, 0xe0, 0x00, + 0x71, 0x98, 0xe0, 0x00, + 0x71, 0x98, 0xe0, 0x00, + 0x33, 0x9c, 0xc0, 0x00, + 0x33, 0x9c, 0xc0, 0x00, + 0x33, 0x0c, 0xc0, 0x00, + 0x3b, 0x0d, 0xc0, 0x00, + 0x3b, 0x0d, 0xc0, 0x00, + 0x1f, 0x0f, 0x80, 0x00, + 0x1e, 0x07, 0x80, 0x00, + 0x1e, 0x07, 0x80, 0x00, + 0x1e, 0x07, 0x80, 0x00, + 0x1e, 0x07, 0x80, 0x00, +}; + +/** Glyph definition for character 'w'. */ +static const struct glyph glyph_notomono_24_0077 = { + .glyph = 119, + .left = 0, + .top = 18, + .advance = 20, + .cols = 20, + .rows = 18, + .bitmap = bitmap_notomono_24_0077, + .kerning = NULL, +}; + +/** Bitmap definition for character 'x'. */ +static const uint8_t bitmap_notomono_24_0078[] = { + 0x70, 0x0e, + 0x78, 0x1e, + 0x38, 0x1c, + 0x1c, 0x38, + 0x1e, 0x78, + 0x0e, 0x70, + 0x07, 0xe0, + 0x03, 0xe0, + 0x03, 0xc0, + 0x03, 0xc0, + 0x07, 0xe0, + 0x0f, 0xf0, + 0x0e, 0x70, + 0x1c, 0x38, + 0x3c, 0x3c, + 0x38, 0x1c, + 0x70, 0x0e, + 0xf0, 0x0f, +}; + +/** Glyph definition for character 'x'. */ +static const struct glyph glyph_notomono_24_0078 = { + .glyph = 120, + .left = 2, + .top = 18, + .advance = 20, + .cols = 16, + .rows = 18, + .bitmap = bitmap_notomono_24_0078, + .kerning = NULL, +}; + +/** Bitmap definition for character 'y'. */ +static const uint8_t bitmap_notomono_24_0079[] = { + 0xe0, 0x01, 0xc0, 0x00, + 0x70, 0x03, 0x80, 0x00, + 0x70, 0x03, 0x80, 0x00, + 0x70, 0x03, 0x80, 0x00, + 0x38, 0x07, 0x00, 0x00, + 0x38, 0x07, 0x00, 0x00, + 0x1c, 0x0e, 0x00, 0x00, + 0x1c, 0x0e, 0x00, 0x00, + 0x0e, 0x0e, 0x00, 0x00, + 0x0e, 0x1c, 0x00, 0x00, + 0x0e, 0x1c, 0x00, 0x00, + 0x07, 0x38, 0x00, 0x00, + 0x07, 0x38, 0x00, 0x00, + 0x03, 0xb8, 0x00, 0x00, + 0x03, 0xf0, 0x00, 0x00, + 0x01, 0xf0, 0x00, 0x00, + 0x01, 0xe0, 0x00, 0x00, + 0x01, 0xe0, 0x00, 0x00, + 0x01, 0xe0, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, + 0x03, 0x80, 0x00, 0x00, + 0x07, 0x80, 0x00, 0x00, + 0xdf, 0x00, 0x00, 0x00, + 0xfe, 0x00, 0x00, 0x00, + 0xfc, 0x00, 0x00, 0x00, +}; + +/** Glyph definition for character 'y'. */ +static const struct glyph glyph_notomono_24_0079 = { + .glyph = 121, + .left = 1, + .top = 18, + .advance = 20, + .cols = 18, + .rows = 26, + .bitmap = bitmap_notomono_24_0079, + .kerning = NULL, +}; + +/** Bitmap definition for character 'z'. */ +static const uint8_t bitmap_notomono_24_007a[] = { + 0x7f, 0xfc, + 0x7f, 0xfc, + 0x00, 0x1c, + 0x00, 0x38, + 0x00, 0x70, + 0x00, 0xf0, + 0x00, 0xe0, + 0x01, 0xc0, + 0x03, 0x80, + 0x07, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x1c, 0x00, + 0x38, 0x00, + 0x70, 0x00, + 0xe0, 0x00, + 0xff, 0xfc, + 0xff, 0xfc, +}; + +/** Glyph definition for character 'z'. */ +static const struct glyph glyph_notomono_24_007a = { + .glyph = 122, + .left = 3, + .top = 18, + .advance = 20, + .cols = 14, + .rows = 18, + .bitmap = bitmap_notomono_24_007a, + .kerning = NULL, +}; + +/** Bitmap definition for character '{'. */ +static const uint8_t bitmap_notomono_24_007b[] = { + 0x00, 0xf0, + 0x03, 0xf0, + 0x03, 0xe0, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x1e, 0x00, + 0xfc, 0x00, + 0xf8, 0x00, + 0x7e, 0x00, + 0x0f, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x07, 0x00, + 0x03, 0xe0, + 0x03, 0xf0, + 0x00, 0xf0, +}; + +/** Glyph definition for character '{'. */ +static const struct glyph glyph_notomono_24_007b = { + .glyph = 123, + .left = 4, + .top = 24, + .advance = 20, + .cols = 12, + .rows = 29, + .bitmap = bitmap_notomono_24_007b, + .kerning = NULL, +}; + +/** Bitmap definition for character '|'. */ +static const uint8_t bitmap_notomono_24_007c[] = { + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, + 0xc0, 0x00, +}; + +/** Glyph definition for character '|'. */ +static const struct glyph glyph_notomono_24_007c = { + .glyph = 124, + .left = 9, + .top = 25, + .advance = 20, + .cols = 2, + .rows = 33, + .bitmap = bitmap_notomono_24_007c, + .kerning = NULL, +}; + +/** Bitmap definition for character '}'. */ +static const uint8_t bitmap_notomono_24_007d[] = { + 0xf0, 0x00, + 0xfc, 0x00, + 0x7c, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x07, 0x80, + 0x03, 0xf0, + 0x01, 0xf0, + 0x07, 0xe0, + 0x0f, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x0e, 0x00, + 0x7c, 0x00, + 0xfc, 0x00, + 0xf0, 0x00, +}; + +/** Glyph definition for character '}'. */ +static const struct glyph glyph_notomono_24_007d = { + .glyph = 125, + .left = 4, + .top = 24, + .advance = 20, + .cols = 12, + .rows = 29, + .bitmap = bitmap_notomono_24_007d, + .kerning = NULL, +}; + +/** Bitmap definition for character '~'. */ +static const uint8_t bitmap_notomono_24_007e[] = { + 0x3e, 0x01, + 0xff, 0xef, + 0xf7, 0xff, + 0x80, 0x7c, +}; + +/** Glyph definition for character '~'. */ +static const struct glyph glyph_notomono_24_007e = { + .glyph = 126, + .left = 2, + .top = 13, + .advance = 20, + .cols = 16, + .rows = 4, + .bitmap = bitmap_notomono_24_007e, + .kerning = NULL, +}; + +/** Glyphs table for font "Noto Mono". */ +static const struct glyph *glyphs_notomono_24[] = { + &glyph_notomono_24_0020, /* U+0020 ' ' */ + &glyph_notomono_24_0021, /* U+0021 '!' */ + &glyph_notomono_24_0023, /* U+0023 '#' */ + &glyph_notomono_24_0024, /* U+0024 '$' */ + &glyph_notomono_24_0025, /* U+0025 '%' */ + &glyph_notomono_24_0026, /* U+0026 '&' */ + &glyph_notomono_24_0027, /* U+0027 ''' */ + &glyph_notomono_24_0028, /* U+0028 '(' */ + &glyph_notomono_24_0029, /* U+0029 ')' */ + &glyph_notomono_24_002a, /* U+002A '*' */ + &glyph_notomono_24_002b, /* U+002B '+' */ + &glyph_notomono_24_002c, /* U+002C ',' */ + &glyph_notomono_24_002d, /* U+002D '-' */ + &glyph_notomono_24_002e, /* U+002E '.' */ + &glyph_notomono_24_002f, /* U+002F '/' */ + &glyph_notomono_24_0030, /* U+0030 '0' */ + &glyph_notomono_24_0031, /* U+0031 '1' */ + &glyph_notomono_24_0032, /* U+0032 '2' */ + &glyph_notomono_24_0033, /* U+0033 '3' */ + &glyph_notomono_24_0034, /* U+0034 '4' */ + &glyph_notomono_24_0035, /* U+0035 '5' */ + &glyph_notomono_24_0036, /* U+0036 '6' */ + &glyph_notomono_24_0037, /* U+0037 '7' */ + &glyph_notomono_24_0038, /* U+0038 '8' */ + &glyph_notomono_24_0039, /* U+0039 '9' */ + &glyph_notomono_24_003a, /* U+003A ':' */ + &glyph_notomono_24_003b, /* U+003B ';' */ + &glyph_notomono_24_003c, /* U+003C '<' */ + &glyph_notomono_24_003d, /* U+003D '=' */ + &glyph_notomono_24_003e, /* U+003E '>' */ + &glyph_notomono_24_003f, /* U+003F '?' */ + &glyph_notomono_24_0040, /* U+0040 '@' */ + &glyph_notomono_24_0041, /* U+0041 'A' */ + &glyph_notomono_24_0042, /* U+0042 'B' */ + &glyph_notomono_24_0043, /* U+0043 'C' */ + &glyph_notomono_24_0044, /* U+0044 'D' */ + &glyph_notomono_24_0045, /* U+0045 'E' */ + &glyph_notomono_24_0046, /* U+0046 'F' */ + &glyph_notomono_24_0047, /* U+0047 'G' */ + &glyph_notomono_24_0048, /* U+0048 'H' */ + &glyph_notomono_24_0049, /* U+0049 'I' */ + &glyph_notomono_24_004a, /* U+004A 'J' */ + &glyph_notomono_24_004b, /* U+004B 'K' */ + &glyph_notomono_24_004c, /* U+004C 'L' */ + &glyph_notomono_24_004d, /* U+004D 'M' */ + &glyph_notomono_24_004e, /* U+004E 'N' */ + &glyph_notomono_24_004f, /* U+004F 'O' */ + &glyph_notomono_24_0050, /* U+0050 'P' */ + &glyph_notomono_24_0051, /* U+0051 'Q' */ + &glyph_notomono_24_0052, /* U+0052 'R' */ + &glyph_notomono_24_0053, /* U+0053 'S' */ + &glyph_notomono_24_0054, /* U+0054 'T' */ + &glyph_notomono_24_0055, /* U+0055 'U' */ + &glyph_notomono_24_0056, /* U+0056 'V' */ + &glyph_notomono_24_0057, /* U+0057 'W' */ + &glyph_notomono_24_0058, /* U+0058 'X' */ + &glyph_notomono_24_0059, /* U+0059 'Y' */ + &glyph_notomono_24_005a, /* U+005A 'Z' */ + &glyph_notomono_24_005b, /* U+005B '[' */ + &glyph_notomono_24_005c, /* U+005C '\' */ + &glyph_notomono_24_005d, /* U+005D ']' */ + &glyph_notomono_24_005e, /* U+005E '^' */ + &glyph_notomono_24_005f, /* U+005F '_' */ + &glyph_notomono_24_0061, /* U+0061 'a' */ + &glyph_notomono_24_0062, /* U+0062 'b' */ + &glyph_notomono_24_0063, /* U+0063 'c' */ + &glyph_notomono_24_0064, /* U+0064 'd' */ + &glyph_notomono_24_0065, /* U+0065 'e' */ + &glyph_notomono_24_0066, /* U+0066 'f' */ + &glyph_notomono_24_0067, /* U+0067 'g' */ + &glyph_notomono_24_0068, /* U+0068 'h' */ + &glyph_notomono_24_0069, /* U+0069 'i' */ + &glyph_notomono_24_006a, /* U+006A 'j' */ + &glyph_notomono_24_006b, /* U+006B 'k' */ + &glyph_notomono_24_006c, /* U+006C 'l' */ + &glyph_notomono_24_006d, /* U+006D 'm' */ + &glyph_notomono_24_006e, /* U+006E 'n' */ + &glyph_notomono_24_006f, /* U+006F 'o' */ + &glyph_notomono_24_0070, /* U+0070 'p' */ + &glyph_notomono_24_0071, /* U+0071 'q' */ + &glyph_notomono_24_0072, /* U+0072 'r' */ + &glyph_notomono_24_0073, /* U+0073 's' */ + &glyph_notomono_24_0074, /* U+0074 't' */ + &glyph_notomono_24_0075, /* U+0075 'u' */ + &glyph_notomono_24_0076, /* U+0076 'v' */ + &glyph_notomono_24_0077, /* U+0077 'w' */ + &glyph_notomono_24_0078, /* U+0078 'x' */ + &glyph_notomono_24_0079, /* U+0079 'y' */ + &glyph_notomono_24_007a, /* U+007A 'z' */ + &glyph_notomono_24_007b, /* U+007B '{' */ + &glyph_notomono_24_007c, /* U+007C '|' */ + &glyph_notomono_24_007d, /* U+007D '}' */ + &glyph_notomono_24_007e, /* U+007E '~' */ +}; + +/** Definition for font "Noto Mono". */ +const struct font font_notomono_24 = { + .name = "Noto Mono", + .style = "Regular", + .size = 24, + .dpi = 100, + .count = 93, + .max = 126, + .ascender = 31, + .descender = -9, + .height = 39, + .glyphs = glyphs_notomono_24, + .compressed = 0, +}; + diff --git a/lib/fonts/font-notomono-24.h b/lib/fonts/font-notomono-24.h new file mode 100644 index 0000000..8b92090 --- /dev/null +++ b/lib/fonts/font-notomono-24.h @@ -0,0 +1,15 @@ +/* AUTOMATICALLY GENERATED FILE! EDITING NOT RECOMMENDED! + * + * This file is distributed under the terms of the MIT License. + * See the LICENSE file at the top of this tree, or if it is missing a copy can + * be found at http://opensource.org/licenses/MIT + */ + +#ifndef _FONTEM_notomono_24_H +#define _FONTEM_notomono_24_H + +#include "fontem.h" + +extern const struct font font_notomono_24; + +#endif /* _FONTEM_notomono_24_H */ diff --git a/lib/fonts/font-notomono-64.c b/lib/fonts/font-notomono-64.c new file mode 100644 index 0000000..aeba4e5 --- /dev/null +++ b/lib/fonts/font-notomono-64.c @@ -0,0 +1,868 @@ +/* AUTOMATICALLY GENERATED FILE! EDITING NOT RECOMMENDED! + * + * This file is distributed under the terms of the MIT License. + * See the LICENSE file at the top of this tree, or if it is missing a copy can + * be found at http://opensource.org/licenses/MIT + */ + +#include +#include +#include "fontem.h" +#include "font-notomono-64.h" + +/* Character list: 0123456789 */ + +/** Glyph definition for character ' '. */ +static const struct glyph glyph_notomono_64_0020 = { + .glyph = 32, + .left = 0, + .top = 0, + .advance = 53, + .cols = 0, + .rows = 0, + .bitmap = NULL, + .kerning = NULL, +}; + +/** Bitmap definition for character '0'. */ +static const uint8_t bitmap_notomono_64_0030[] = { + 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, + 0x00, 0x07, 0xff, 0xf0, 0x00, 0x00, + 0x00, 0x1f, 0xff, 0xfc, 0x00, 0x00, + 0x00, 0x7f, 0xff, 0xfe, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xff, 0x80, 0x00, + 0x01, 0xff, 0xff, 0xff, 0xc0, 0x00, + 0x03, 0xff, 0xff, 0xff, 0xc0, 0x00, + 0x03, 0xff, 0x00, 0xff, 0xe0, 0x00, + 0x07, 0xfe, 0x00, 0x3f, 0xf0, 0x00, + 0x0f, 0xf8, 0x00, 0x1f, 0xf0, 0x00, + 0x0f, 0xf0, 0x00, 0x0f, 0xf8, 0x00, + 0x1f, 0xf0, 0x00, 0x07, 0xf8, 0x00, + 0x1f, 0xe0, 0x00, 0x03, 0xfc, 0x00, + 0x1f, 0xe0, 0x00, 0x03, 0xfc, 0x00, + 0x3f, 0xc0, 0x00, 0x01, 0xfc, 0x00, + 0x3f, 0xc0, 0x00, 0x01, 0xfe, 0x00, + 0x3f, 0xc0, 0x00, 0x01, 0xfe, 0x00, + 0x7f, 0x80, 0x00, 0x01, 0xfe, 0x00, + 0x7f, 0x80, 0x00, 0x00, 0xff, 0x00, + 0x7f, 0x80, 0x00, 0x00, 0xff, 0x00, + 0x7f, 0x80, 0x00, 0x00, 0xff, 0x00, + 0x7f, 0x80, 0x00, 0x00, 0xff, 0x00, + 0x7f, 0x80, 0x00, 0x00, 0xff, 0x00, + 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, + 0xff, 0x00, 0x00, 0x00, 0x7f, 0x80, + 0xff, 0x00, 0x00, 0x00, 0x7f, 0x80, + 0xff, 0x00, 0x00, 0x00, 0x7f, 0x80, + 0xff, 0x00, 0x00, 0x00, 0x7f, 0x80, + 0xff, 0x00, 0x00, 0x00, 0x7f, 0x80, + 0xff, 0x00, 0x00, 0x00, 0x7f, 0x80, + 0xff, 0x00, 0x00, 0x00, 0x7f, 0x80, + 0xff, 0x00, 0x00, 0x00, 0x7f, 0x80, + 0xff, 0x00, 0x00, 0x00, 0x7f, 0x80, + 0xff, 0x00, 0x00, 0x00, 0x7f, 0x80, + 0xff, 0x00, 0x00, 0x00, 0x7f, 0x80, + 0xff, 0x00, 0x00, 0x00, 0x7f, 0x80, + 0xff, 0x00, 0x00, 0x00, 0x7f, 0x80, + 0xff, 0x00, 0x00, 0x00, 0x7f, 0x80, + 0xff, 0x00, 0x00, 0x00, 0x7f, 0x80, + 0xff, 0x00, 0x00, 0x00, 0x7f, 0x80, + 0xff, 0x00, 0x00, 0x00, 0x7f, 0x80, + 0xff, 0x00, 0x00, 0x00, 0x7f, 0x80, + 0x7f, 0x00, 0x00, 0x00, 0xff, 0x00, + 0x7f, 0x80, 0x00, 0x00, 0xff, 0x00, + 0x7f, 0x80, 0x00, 0x00, 0xff, 0x00, + 0x7f, 0x80, 0x00, 0x00, 0xff, 0x00, + 0x7f, 0x80, 0x00, 0x00, 0xff, 0x00, + 0x7f, 0x80, 0x00, 0x00, 0xff, 0x00, + 0x3f, 0x80, 0x00, 0x01, 0xfe, 0x00, + 0x3f, 0xc0, 0x00, 0x01, 0xfe, 0x00, + 0x3f, 0xc0, 0x00, 0x01, 0xfe, 0x00, + 0x3f, 0xc0, 0x00, 0x01, 0xfe, 0x00, + 0x1f, 0xe0, 0x00, 0x03, 0xfc, 0x00, + 0x1f, 0xe0, 0x00, 0x03, 0xfc, 0x00, + 0x0f, 0xf0, 0x00, 0x07, 0xfc, 0x00, + 0x0f, 0xf0, 0x00, 0x0f, 0xf8, 0x00, + 0x07, 0xf8, 0x00, 0x0f, 0xf8, 0x00, + 0x07, 0xfc, 0x00, 0x3f, 0xf0, 0x00, + 0x03, 0xff, 0x00, 0x7f, 0xe0, 0x00, + 0x01, 0xff, 0xff, 0xff, 0xe0, 0x00, + 0x01, 0xff, 0xff, 0xff, 0xc0, 0x00, + 0x00, 0xff, 0xff, 0xff, 0x80, 0x00, + 0x00, 0x7f, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x1f, 0xff, 0xfc, 0x00, 0x00, + 0x00, 0x07, 0xff, 0xf0, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, +}; + +/** Glyph definition for character '0'. */ +static const struct glyph glyph_notomono_64_0030 = { + .glyph = 48, + .left = 6, + .top = 65, + .advance = 53, + .cols = 41, + .rows = 66, + .bitmap = bitmap_notomono_64_0030, + .kerning = NULL, +}; + +/** Bitmap definition for character '1'. */ +static const uint8_t bitmap_notomono_64_0031[] = { + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x01, 0xff, 0x00, + 0x00, 0x03, 0xff, 0x00, + 0x00, 0x0f, 0xff, 0x00, + 0x00, 0x1f, 0xff, 0x00, + 0x00, 0x3f, 0xff, 0x00, + 0x00, 0xff, 0xff, 0x00, + 0x01, 0xff, 0xff, 0x00, + 0x03, 0xff, 0xff, 0x00, + 0x0f, 0xfe, 0xff, 0x00, + 0x1f, 0xfc, 0xff, 0x00, + 0x3f, 0xf8, 0xff, 0x00, + 0xff, 0xe0, 0xff, 0x00, + 0x7f, 0xc0, 0xff, 0x00, + 0x7f, 0x80, 0xff, 0x00, + 0x3f, 0x00, 0xff, 0x00, + 0x1c, 0x00, 0xff, 0x00, + 0x08, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, +}; + +/** Glyph definition for character '1'. */ +static const struct glyph glyph_notomono_64_0031 = { + .glyph = 49, + .left = 9, + .top = 64, + .advance = 53, + .cols = 24, + .rows = 64, + .bitmap = bitmap_notomono_64_0031, + .kerning = NULL, +}; + +/** Bitmap definition for character '2'. */ +static const uint8_t bitmap_notomono_64_0032[] = { + 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x3f, 0xff, 0xe0, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xf8, 0x00, 0x00, + 0x03, 0xff, 0xff, 0xfe, 0x00, 0x00, + 0x0f, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x1f, 0xff, 0xff, 0xff, 0x80, 0x00, + 0x3f, 0xff, 0xff, 0xff, 0xc0, 0x00, + 0x7f, 0xfc, 0x01, 0xff, 0xc0, 0x00, + 0x7f, 0xe0, 0x00, 0x7f, 0xe0, 0x00, + 0x3f, 0x80, 0x00, 0x3f, 0xf0, 0x00, + 0x1f, 0x00, 0x00, 0x1f, 0xf0, 0x00, + 0x0c, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, + 0x00, 0x00, 0x00, 0x3f, 0xe0, 0x00, + 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0xff, 0x80, 0x00, + 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x01, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x03, 0xfe, 0x00, 0x00, + 0x00, 0x00, 0x07, 0xfc, 0x00, 0x00, + 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, + 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, + 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, + 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, + 0x00, 0x01, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x07, 0xfe, 0x00, 0x00, 0x00, + 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, + 0x00, 0x0f, 0xf8, 0x00, 0x00, 0x00, + 0x00, 0x1f, 0xf0, 0x00, 0x00, 0x00, + 0x00, 0x3f, 0xe0, 0x00, 0x00, 0x00, + 0x00, 0x7f, 0xc0, 0x00, 0x00, 0x00, + 0x00, 0xff, 0x80, 0x00, 0x00, 0x00, + 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x03, 0xfe, 0x00, 0x00, 0x00, 0x00, + 0x07, 0xfc, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0xe0, 0x00, 0x00, 0x00, 0x00, + 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, +}; + +/** Glyph definition for character '2'. */ +static const struct glyph glyph_notomono_64_0032 = { + .glyph = 50, + .left = 7, + .top = 65, + .advance = 53, + .cols = 39, + .rows = 65, + .bitmap = bitmap_notomono_64_0032, + .kerning = NULL, +}; + +/** Bitmap definition for character '3'. */ +static const uint8_t bitmap_notomono_64_0033[] = { + 0x00, 0x07, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x7f, 0xff, 0xe0, 0x00, 0x00, + 0x01, 0xff, 0xff, 0xf8, 0x00, 0x00, + 0x07, 0xff, 0xff, 0xfe, 0x00, 0x00, + 0x1f, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x3f, 0xff, 0xff, 0xff, 0x80, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, + 0x7f, 0xf8, 0x01, 0xff, 0xe0, 0x00, + 0x3f, 0xc0, 0x00, 0x7f, 0xe0, 0x00, + 0x3f, 0x00, 0x00, 0x3f, 0xf0, 0x00, + 0x1c, 0x00, 0x00, 0x1f, 0xf0, 0x00, + 0x08, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, + 0x00, 0x00, 0x00, 0x3f, 0xe0, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0xff, 0x80, 0x00, + 0x00, 0x00, 0x03, 0xff, 0x80, 0x00, + 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x00, 0x7f, 0xff, 0xfc, 0x00, 0x00, + 0x00, 0x7f, 0xff, 0xf0, 0x00, 0x00, + 0x00, 0x7f, 0xff, 0x80, 0x00, 0x00, + 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x7f, 0xff, 0xfc, 0x00, 0x00, + 0x00, 0x7f, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x7f, 0xff, 0xff, 0xc0, 0x00, + 0x00, 0x00, 0x03, 0xff, 0xe0, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xfe, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xfe, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xfc, 0x00, + 0x80, 0x00, 0x00, 0x0f, 0xf8, 0x00, + 0xe0, 0x00, 0x00, 0x1f, 0xf8, 0x00, + 0xf8, 0x00, 0x00, 0x7f, 0xf0, 0x00, + 0xff, 0x80, 0x01, 0xff, 0xe0, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, + 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, + 0x3f, 0xff, 0xff, 0xf8, 0x00, 0x00, + 0x07, 0xff, 0xff, 0xe0, 0x00, 0x00, + 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, +}; + +/** Glyph definition for character '3'. */ +static const struct glyph glyph_notomono_64_0033 = { + .glyph = 51, + .left = 6, + .top = 65, + .advance = 53, + .cols = 39, + .rows = 66, + .bitmap = bitmap_notomono_64_0033, + .kerning = NULL, +}; + +/** Bitmap definition for character '4'. */ +static const uint8_t bitmap_notomono_64_0034[] = { + 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xf0, 0x00, + 0x00, 0x00, 0x01, 0xff, 0xf0, 0x00, + 0x00, 0x00, 0x03, 0xf7, 0xf0, 0x00, + 0x00, 0x00, 0x03, 0xf7, 0xf0, 0x00, + 0x00, 0x00, 0x07, 0xf7, 0xf0, 0x00, + 0x00, 0x00, 0x0f, 0xe7, 0xf0, 0x00, + 0x00, 0x00, 0x0f, 0xe7, 0xf0, 0x00, + 0x00, 0x00, 0x1f, 0xc7, 0xf0, 0x00, + 0x00, 0x00, 0x3f, 0xc7, 0xf0, 0x00, + 0x00, 0x00, 0x3f, 0x87, 0xf0, 0x00, + 0x00, 0x00, 0x7f, 0x07, 0xf0, 0x00, + 0x00, 0x00, 0xff, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0xfe, 0x0f, 0xf0, 0x00, + 0x00, 0x01, 0xfc, 0x0f, 0xf0, 0x00, + 0x00, 0x03, 0xfc, 0x0f, 0xf0, 0x00, + 0x00, 0x03, 0xf8, 0x0f, 0xf0, 0x00, + 0x00, 0x07, 0xf0, 0x0f, 0xf0, 0x00, + 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, + 0x00, 0x0f, 0xe0, 0x0f, 0xf0, 0x00, + 0x00, 0x1f, 0xe0, 0x0f, 0xf0, 0x00, + 0x00, 0x3f, 0xc0, 0x0f, 0xf0, 0x00, + 0x00, 0x3f, 0x80, 0x0f, 0xf0, 0x00, + 0x00, 0x7f, 0x80, 0x0f, 0xf0, 0x00, + 0x00, 0xff, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0xfe, 0x00, 0x0f, 0xf0, 0x00, + 0x01, 0xfe, 0x00, 0x0f, 0xf0, 0x00, + 0x03, 0xfc, 0x00, 0x0f, 0xf0, 0x00, + 0x03, 0xf8, 0x00, 0x0f, 0xf0, 0x00, + 0x07, 0xf8, 0x00, 0x0f, 0xf0, 0x00, + 0x0f, 0xf0, 0x00, 0x0f, 0xf0, 0x00, + 0x0f, 0xe0, 0x00, 0x0f, 0xf0, 0x00, + 0x1f, 0xe0, 0x00, 0x0f, 0xf0, 0x00, + 0x3f, 0xc0, 0x00, 0x0f, 0xf0, 0x00, + 0x3f, 0x80, 0x00, 0x0f, 0xf0, 0x00, + 0x7f, 0x80, 0x00, 0x0f, 0xf0, 0x00, + 0x7f, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, +}; + +/** Glyph definition for character '4'. */ +static const struct glyph glyph_notomono_64_0034 = { + .glyph = 52, + .left = 3, + .top = 64, + .advance = 53, + .cols = 45, + .rows = 64, + .bitmap = bitmap_notomono_64_0034, + .kerning = NULL, +}; + +/** Bitmap definition for character '5'. */ +static const uint8_t bitmap_notomono_64_0035[] = { + 0x1f, 0xff, 0xff, 0xff, 0x80, 0x00, + 0x1f, 0xff, 0xff, 0xff, 0x80, 0x00, + 0x1f, 0xff, 0xff, 0xff, 0x80, 0x00, + 0x1f, 0xff, 0xff, 0xff, 0x80, 0x00, + 0x1f, 0xff, 0xff, 0xff, 0x80, 0x00, + 0x1f, 0xff, 0xff, 0xff, 0x80, 0x00, + 0x1f, 0xff, 0xff, 0xff, 0x80, 0x00, + 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x7f, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x7f, 0x9f, 0xfe, 0x00, 0x00, 0x00, + 0x7f, 0xff, 0xff, 0xe0, 0x00, 0x00, + 0x7f, 0xff, 0xff, 0xf8, 0x00, 0x00, + 0x7f, 0xff, 0xff, 0xfc, 0x00, 0x00, + 0x7f, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x7f, 0xff, 0xff, 0xff, 0x80, 0x00, + 0x1f, 0xff, 0xff, 0xff, 0xc0, 0x00, + 0x0e, 0x00, 0x07, 0xff, 0xe0, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xe0, 0x00, + 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x80, 0x00, 0x00, 0x1f, 0xf0, 0x00, + 0xc0, 0x00, 0x00, 0x3f, 0xe0, 0x00, + 0xf8, 0x00, 0x00, 0xff, 0xe0, 0x00, + 0xff, 0x00, 0x03, 0xff, 0xc0, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, + 0x3f, 0xff, 0xff, 0xf0, 0x00, 0x00, + 0x0f, 0xff, 0xff, 0x80, 0x00, 0x00, + 0x00, 0x7f, 0xf8, 0x00, 0x00, 0x00, +}; + +/** Glyph definition for character '5'. */ +static const struct glyph glyph_notomono_64_0035 = { + .glyph = 53, + .left = 7, + .top = 64, + .advance = 53, + .cols = 38, + .rows = 65, + .bitmap = bitmap_notomono_64_0035, + .kerning = NULL, +}; + +/** Bitmap definition for character '6'. */ +static const uint8_t bitmap_notomono_64_0036[] = { + 0x00, 0x00, 0x07, 0xff, 0x80, 0x00, + 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, + 0x00, 0x01, 0xff, 0xff, 0xc0, 0x00, + 0x00, 0x07, 0xff, 0xff, 0xc0, 0x00, + 0x00, 0x1f, 0xff, 0xff, 0xc0, 0x00, + 0x00, 0x3f, 0xff, 0xff, 0xc0, 0x00, + 0x00, 0x7f, 0xff, 0xff, 0xc0, 0x00, + 0x00, 0xff, 0xf8, 0x00, 0x00, 0x00, + 0x01, 0xff, 0xe0, 0x00, 0x00, 0x00, + 0x01, 0xff, 0x80, 0x00, 0x00, 0x00, + 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x07, 0xfc, 0x00, 0x00, 0x00, 0x00, + 0x07, 0xfc, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00, + 0x7f, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x7f, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x7f, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x7f, 0x80, 0x7f, 0xc0, 0x00, 0x00, + 0x7f, 0x81, 0xff, 0xf8, 0x00, 0x00, + 0x7f, 0x87, 0xff, 0xfe, 0x00, 0x00, + 0xff, 0x0f, 0xff, 0xff, 0x80, 0x00, + 0xff, 0x1f, 0xff, 0xff, 0xc0, 0x00, + 0xff, 0x3f, 0xff, 0xff, 0xe0, 0x00, + 0xff, 0x7f, 0xc1, 0xff, 0xe0, 0x00, + 0xff, 0xfe, 0x00, 0x3f, 0xf0, 0x00, + 0xff, 0xf8, 0x00, 0x1f, 0xf8, 0x00, + 0xff, 0xf0, 0x00, 0x0f, 0xf8, 0x00, + 0xff, 0xe0, 0x00, 0x07, 0xfc, 0x00, + 0xff, 0xc0, 0x00, 0x03, 0xfc, 0x00, + 0xff, 0xc0, 0x00, 0x03, 0xfc, 0x00, + 0xff, 0x80, 0x00, 0x01, 0xfc, 0x00, + 0xff, 0x80, 0x00, 0x01, 0xfe, 0x00, + 0xff, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0xff, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0xff, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0xff, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0xff, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0x7f, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0x7f, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0x7f, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0x7f, 0x80, 0x00, 0x01, 0xfe, 0x00, + 0x7f, 0x80, 0x00, 0x01, 0xfe, 0x00, + 0x3f, 0x80, 0x00, 0x01, 0xfc, 0x00, + 0x3f, 0xc0, 0x00, 0x03, 0xfc, 0x00, + 0x3f, 0xc0, 0x00, 0x03, 0xfc, 0x00, + 0x1f, 0xe0, 0x00, 0x03, 0xfc, 0x00, + 0x1f, 0xe0, 0x00, 0x07, 0xf8, 0x00, + 0x0f, 0xf0, 0x00, 0x0f, 0xf8, 0x00, + 0x0f, 0xf8, 0x00, 0x1f, 0xf0, 0x00, + 0x07, 0xfc, 0x00, 0x3f, 0xf0, 0x00, + 0x07, 0xff, 0x00, 0xff, 0xe0, 0x00, + 0x03, 0xff, 0xff, 0xff, 0xc0, 0x00, + 0x01, 0xff, 0xff, 0xff, 0xc0, 0x00, + 0x00, 0xff, 0xff, 0xff, 0x80, 0x00, + 0x00, 0x7f, 0xff, 0xfe, 0x00, 0x00, + 0x00, 0x1f, 0xff, 0xfc, 0x00, 0x00, + 0x00, 0x07, 0xff, 0xf0, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, +}; + +/** Glyph definition for character '6'. */ +static const struct glyph glyph_notomono_64_0036 = { + .glyph = 54, + .left = 7, + .top = 65, + .advance = 53, + .cols = 39, + .rows = 66, + .bitmap = bitmap_notomono_64_0036, + .kerning = NULL, +}; + +/** Bitmap definition for character '7'. */ +static const uint8_t bitmap_notomono_64_0037[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x7f, 0x80, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, + 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, + 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, + 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, + 0x00, 0x00, 0x03, 0xfc, 0x00, 0x00, + 0x00, 0x00, 0x03, 0xfc, 0x00, 0x00, + 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, + 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, + 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, + 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, + 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, + 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, + 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x7f, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x7f, 0x80, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, + 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xfe, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xfc, 0x00, 0x00, 0x00, + 0x00, 0x07, 0xfc, 0x00, 0x00, 0x00, + 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, + 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, + 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, + 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, + 0x00, 0x1f, 0xf0, 0x00, 0x00, 0x00, + 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, + 0x00, 0x3f, 0xe0, 0x00, 0x00, 0x00, + 0x00, 0x3f, 0xc0, 0x00, 0x00, 0x00, + 0x00, 0x3f, 0xc0, 0x00, 0x00, 0x00, + 0x00, 0x7f, 0xc0, 0x00, 0x00, 0x00, + 0x00, 0x7f, 0x80, 0x00, 0x00, 0x00, + 0x00, 0xff, 0x80, 0x00, 0x00, 0x00, +}; + +/** Glyph definition for character '7'. */ +static const struct glyph glyph_notomono_64_0037 = { + .glyph = 55, + .left = 6, + .top = 64, + .advance = 53, + .cols = 41, + .rows = 64, + .bitmap = bitmap_notomono_64_0037, + .kerning = NULL, +}; + +/** Bitmap definition for character '8'. */ +static const uint8_t bitmap_notomono_64_0038[] = { + 0x00, 0x01, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x1f, 0xff, 0xf0, 0x00, 0x00, + 0x00, 0x7f, 0xff, 0xfc, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00, + 0x01, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x07, 0xff, 0xff, 0xff, 0x80, 0x00, + 0x07, 0xff, 0xff, 0xff, 0xc0, 0x00, + 0x0f, 0xfe, 0x00, 0xff, 0xe0, 0x00, + 0x1f, 0xf8, 0x00, 0x3f, 0xf0, 0x00, + 0x1f, 0xf0, 0x00, 0x1f, 0xf0, 0x00, + 0x1f, 0xe0, 0x00, 0x0f, 0xf0, 0x00, + 0x3f, 0xc0, 0x00, 0x0f, 0xf8, 0x00, + 0x3f, 0xc0, 0x00, 0x07, 0xf8, 0x00, + 0x3f, 0xc0, 0x00, 0x07, 0xf8, 0x00, + 0x3f, 0xc0, 0x00, 0x07, 0xf8, 0x00, + 0x3f, 0xc0, 0x00, 0x07, 0xf8, 0x00, + 0x3f, 0xc0, 0x00, 0x07, 0xf8, 0x00, + 0x3f, 0xc0, 0x00, 0x07, 0xf8, 0x00, + 0x3f, 0xc0, 0x00, 0x07, 0xf8, 0x00, + 0x3f, 0xc0, 0x00, 0x07, 0xf0, 0x00, + 0x1f, 0xe0, 0x00, 0x0f, 0xf0, 0x00, + 0x1f, 0xe0, 0x00, 0x0f, 0xf0, 0x00, + 0x0f, 0xf0, 0x00, 0x1f, 0xe0, 0x00, + 0x0f, 0xf8, 0x00, 0x3f, 0xe0, 0x00, + 0x07, 0xfc, 0x00, 0x7f, 0xc0, 0x00, + 0x07, 0xfe, 0x00, 0xff, 0x80, 0x00, + 0x03, 0xff, 0x83, 0xff, 0x00, 0x00, + 0x01, 0xff, 0xef, 0xfe, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xfc, 0x00, 0x00, + 0x00, 0x7f, 0xff, 0xf8, 0x00, 0x00, + 0x00, 0x1f, 0xff, 0xe0, 0x00, 0x00, + 0x00, 0x0f, 0xff, 0xe0, 0x00, 0x00, + 0x00, 0x3f, 0xff, 0xf0, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xfc, 0x00, 0x00, + 0x01, 0xff, 0xff, 0xfe, 0x00, 0x00, + 0x03, 0xff, 0x8f, 0xff, 0x00, 0x00, + 0x07, 0xfe, 0x03, 0xff, 0x80, 0x00, + 0x0f, 0xfc, 0x00, 0xff, 0xc0, 0x00, + 0x1f, 0xf0, 0x00, 0x7f, 0xe0, 0x00, + 0x3f, 0xe0, 0x00, 0x1f, 0xf0, 0x00, + 0x3f, 0xe0, 0x00, 0x0f, 0xf8, 0x00, + 0x7f, 0xc0, 0x00, 0x07, 0xf8, 0x00, + 0x7f, 0x80, 0x00, 0x07, 0xfc, 0x00, + 0x7f, 0x80, 0x00, 0x03, 0xfc, 0x00, + 0xff, 0x00, 0x00, 0x01, 0xfc, 0x00, + 0xff, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0xff, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0xff, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0xff, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0xff, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0xff, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0xff, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0xff, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0xff, 0x00, 0x00, 0x03, 0xfc, 0x00, + 0x7f, 0x80, 0x00, 0x03, 0xfc, 0x00, + 0x7f, 0x80, 0x00, 0x07, 0xfc, 0x00, + 0x7f, 0xc0, 0x00, 0x0f, 0xf8, 0x00, + 0x3f, 0xf0, 0x00, 0x1f, 0xf8, 0x00, + 0x1f, 0xfc, 0x00, 0x7f, 0xf0, 0x00, + 0x1f, 0xff, 0xff, 0xff, 0xe0, 0x00, + 0x0f, 0xff, 0xff, 0xff, 0xc0, 0x00, + 0x07, 0xff, 0xff, 0xff, 0x80, 0x00, + 0x03, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xfc, 0x00, 0x00, + 0x00, 0x3f, 0xff, 0xf0, 0x00, 0x00, + 0x00, 0x03, 0xff, 0x80, 0x00, 0x00, +}; + +/** Glyph definition for character '8'. */ +static const struct glyph glyph_notomono_64_0038 = { + .glyph = 56, + .left = 7, + .top = 65, + .advance = 53, + .cols = 39, + .rows = 66, + .bitmap = bitmap_notomono_64_0038, + .kerning = NULL, +}; + +/** Bitmap definition for character '9'. */ +static const uint8_t bitmap_notomono_64_0039[] = { + 0x00, 0x03, 0xfe, 0x00, 0x00, 0x00, + 0x00, 0x1f, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x7f, 0xff, 0xf0, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xfc, 0x00, 0x00, + 0x03, 0xff, 0xff, 0xfe, 0x00, 0x00, + 0x07, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x0f, 0xff, 0xff, 0xff, 0x80, 0x00, + 0x0f, 0xfe, 0x01, 0xff, 0xc0, 0x00, + 0x1f, 0xf8, 0x00, 0x7f, 0xc0, 0x00, + 0x1f, 0xf0, 0x00, 0x3f, 0xe0, 0x00, + 0x3f, 0xe0, 0x00, 0x1f, 0xe0, 0x00, + 0x3f, 0xc0, 0x00, 0x0f, 0xf0, 0x00, + 0x7f, 0x80, 0x00, 0x0f, 0xf0, 0x00, + 0x7f, 0x80, 0x00, 0x07, 0xf8, 0x00, + 0x7f, 0x80, 0x00, 0x07, 0xf8, 0x00, + 0x7f, 0x00, 0x00, 0x03, 0xf8, 0x00, + 0xff, 0x00, 0x00, 0x03, 0xfc, 0x00, + 0xff, 0x00, 0x00, 0x03, 0xfc, 0x00, + 0xff, 0x00, 0x00, 0x03, 0xfc, 0x00, + 0xff, 0x00, 0x00, 0x01, 0xfc, 0x00, + 0xff, 0x00, 0x00, 0x01, 0xfc, 0x00, + 0xff, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0xff, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0xff, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0xff, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0xff, 0x00, 0x00, 0x01, 0xfe, 0x00, + 0xff, 0x00, 0x00, 0x03, 0xfe, 0x00, + 0x7f, 0x00, 0x00, 0x03, 0xfe, 0x00, + 0x7f, 0x80, 0x00, 0x07, 0xfe, 0x00, + 0x7f, 0x80, 0x00, 0x07, 0xfe, 0x00, + 0x7f, 0xc0, 0x00, 0x0f, 0xfe, 0x00, + 0x3f, 0xe0, 0x00, 0x1f, 0xfe, 0x00, + 0x3f, 0xf0, 0x00, 0x3f, 0xfe, 0x00, + 0x1f, 0xf8, 0x00, 0xff, 0xfe, 0x00, + 0x0f, 0xff, 0x07, 0xfd, 0xfe, 0x00, + 0x0f, 0xff, 0xff, 0xf9, 0xfe, 0x00, + 0x07, 0xff, 0xff, 0xf1, 0xfe, 0x00, + 0x03, 0xff, 0xff, 0xe1, 0xfe, 0x00, + 0x00, 0xff, 0xff, 0xc3, 0xfc, 0x00, + 0x00, 0x3f, 0xff, 0x03, 0xfc, 0x00, + 0x00, 0x07, 0xfc, 0x03, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, + 0x00, 0x00, 0x00, 0x3f, 0xe0, 0x00, + 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0xff, 0x80, 0x00, + 0x00, 0x00, 0x01, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x07, 0x81, 0xff, 0xfc, 0x00, 0x00, + 0x07, 0xff, 0xff, 0xf8, 0x00, 0x00, + 0x07, 0xff, 0xff, 0xf0, 0x00, 0x00, + 0x07, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x07, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x07, 0xff, 0xfc, 0x00, 0x00, 0x00, + 0x03, 0xff, 0xc0, 0x00, 0x00, 0x00, +}; + +/** Glyph definition for character '9'. */ +static const struct glyph glyph_notomono_64_0039 = { + .glyph = 57, + .left = 7, + .top = 65, + .advance = 53, + .cols = 39, + .rows = 66, + .bitmap = bitmap_notomono_64_0039, + .kerning = NULL, +}; + +/** Glyphs table for font "Noto Mono". */ +static const struct glyph *glyphs_notomono_64[] = { + &glyph_notomono_64_0020, /* U+0020 ' ' */ + &glyph_notomono_64_0030, /* U+0030 '0' */ + &glyph_notomono_64_0031, /* U+0031 '1' */ + &glyph_notomono_64_0032, /* U+0032 '2' */ + &glyph_notomono_64_0033, /* U+0033 '3' */ + &glyph_notomono_64_0034, /* U+0034 '4' */ + &glyph_notomono_64_0035, /* U+0035 '5' */ + &glyph_notomono_64_0036, /* U+0036 '6' */ + &glyph_notomono_64_0037, /* U+0037 '7' */ + &glyph_notomono_64_0038, /* U+0038 '8' */ + &glyph_notomono_64_0039, /* U+0039 '9' */ +}; + +/** Definition for font "Noto Mono". */ +const struct font font_notomono_64 = { + .name = "Noto Mono", + .style = "Regular", + .size = 64, + .dpi = 100, + .count = 11, + .max = 57, + .ascender = 83, + .descender = -22, + .height = 104, + .glyphs = glyphs_notomono_64, + .compressed = 0, +}; + diff --git a/lib/fonts/font-notomono-64.h b/lib/fonts/font-notomono-64.h new file mode 100644 index 0000000..0428f9d --- /dev/null +++ b/lib/fonts/font-notomono-64.h @@ -0,0 +1,15 @@ +/* AUTOMATICALLY GENERATED FILE! EDITING NOT RECOMMENDED! + * + * This file is distributed under the terms of the MIT License. + * See the LICENSE file at the top of this tree, or if it is missing a copy can + * be found at http://opensource.org/licenses/MIT + */ + +#ifndef _FONTEM_notomono_64_H +#define _FONTEM_notomono_64_H + +#include "fontem.h" + +extern const struct font font_notomono_64; + +#endif /* _FONTEM_notomono_64_H */ diff --git a/lib/fonts/open_sans/LICENSE.txt b/lib/fonts/open_sans/LICENSE.txt new file mode 100644 index 0000000..75b5248 --- /dev/null +++ b/lib/fonts/open_sans/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/lib/fonts/open_sans/OpenSans-Bold.ttf b/lib/fonts/open_sans/OpenSans-Bold.ttf new file mode 100644 index 0000000..7b52945 Binary files /dev/null and b/lib/fonts/open_sans/OpenSans-Bold.ttf differ diff --git a/lib/fonts/open_sans/OpenSans-BoldItalic.ttf b/lib/fonts/open_sans/OpenSans-BoldItalic.ttf new file mode 100644 index 0000000..a670e14 Binary files /dev/null and b/lib/fonts/open_sans/OpenSans-BoldItalic.ttf differ diff --git a/lib/fonts/open_sans/OpenSans-ExtraBold.ttf b/lib/fonts/open_sans/OpenSans-ExtraBold.ttf new file mode 100644 index 0000000..3660681 Binary files /dev/null and b/lib/fonts/open_sans/OpenSans-ExtraBold.ttf differ diff --git a/lib/fonts/open_sans/OpenSans-ExtraBoldItalic.ttf b/lib/fonts/open_sans/OpenSans-ExtraBoldItalic.ttf new file mode 100644 index 0000000..8c4c15d Binary files /dev/null and b/lib/fonts/open_sans/OpenSans-ExtraBoldItalic.ttf differ diff --git a/lib/fonts/open_sans/OpenSans-Italic.ttf b/lib/fonts/open_sans/OpenSans-Italic.ttf new file mode 100644 index 0000000..e6c5414 Binary files /dev/null and b/lib/fonts/open_sans/OpenSans-Italic.ttf differ diff --git a/lib/fonts/open_sans/OpenSans-Light.ttf b/lib/fonts/open_sans/OpenSans-Light.ttf new file mode 100644 index 0000000..563872c Binary files /dev/null and b/lib/fonts/open_sans/OpenSans-Light.ttf differ diff --git a/lib/fonts/open_sans/OpenSans-LightItalic.ttf b/lib/fonts/open_sans/OpenSans-LightItalic.ttf new file mode 100644 index 0000000..5ebe2a2 Binary files /dev/null and b/lib/fonts/open_sans/OpenSans-LightItalic.ttf differ diff --git a/lib/fonts/open_sans/OpenSans-Regular.ttf b/lib/fonts/open_sans/OpenSans-Regular.ttf new file mode 100644 index 0000000..2e31d02 Binary files /dev/null and b/lib/fonts/open_sans/OpenSans-Regular.ttf differ diff --git a/lib/fonts/open_sans/OpenSans-SemiBold.ttf b/lib/fonts/open_sans/OpenSans-SemiBold.ttf new file mode 100644 index 0000000..99db86a Binary files /dev/null and b/lib/fonts/open_sans/OpenSans-SemiBold.ttf differ diff --git a/lib/fonts/open_sans/OpenSans-SemiBoldItalic.ttf b/lib/fonts/open_sans/OpenSans-SemiBoldItalic.ttf new file mode 100644 index 0000000..8cad4e3 Binary files /dev/null and b/lib/fonts/open_sans/OpenSans-SemiBoldItalic.ttf differ diff --git a/lib/stm32/stm32l0xx/Include/#stm32l031xx.h# b/lib/stm32/stm32l0xx/Include/#stm32l031xx.h# deleted file mode 100644 index 5c58db4..0000000 --- a/lib/stm32/stm32l0xx/Include/#stm32l031xx.h# +++ /dev/null @@ -1,6094 +0,0 @@ -/** - ****************************************************************************** - * @file stm32l031xx.h - * @author MCD Application Team - * @brief CMSIS Cortex-M0+ Device Peripheral Access Layer Header File. - * This file contains all the peripheral register's definitions, bits - * definitions and memory mapping for stm32l031xx devices. - * - * This file contains: - * - Data structures and the address mapping for all peripherals - * - Peripheral's registers declarations and bits definition - * - Macros to access peripheral's registers hardware - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2016 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ - -/** @addtogroup CMSIS - * @{ - */ - -/** @addtogroup stm32l031xx - * @{ - */ - -#ifndef __STM32L031xx_H -#define __STM32L031xx_H - -#ifdef __cplusplus - extern "C" { -#endif - - -/** @addtogroup Configuration_section_for_CMSIS - * @{ - */ -/** - * @brief Configuration of the Cortex-M0+ Processor and Core Peripherals - */ -#define __CM0PLUS_REV 0 /*!< Core Revision r0p0 */ -#define __MPU_PRESENT 0 /*!< STM32L0xx provides no MPU */ -#define __VTOR_PRESENT 1 /*!< Vector Table Register supported */ -#define __NVIC_PRIO_BITS 2 /*!< STM32L0xx uses 2 Bits for the Priority Levels */ -#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ - -/** - * @} - */ - -/** @addtogroup Peripheral_interrupt_number_definition - * @{ - */ - -/** - * @brief stm32l031xx Interrupt Number Definition, according to the selected device - * in @ref Library_configuration_section - */ - -/*!< Interrupt Number Definition */ -typedef enum -{ -/****** Cortex-M0 Processor Exceptions Numbers ******************************************************/ - NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */ - HardFault_IRQn = -13, /*!< 3 Cortex-M0+ Hard Fault Interrupt */ - SVC_IRQn = -5, /*!< 11 Cortex-M0+ SV Call Interrupt */ - PendSV_IRQn = -2, /*!< 14 Cortex-M0+ Pend SV Interrupt */ - SysTick_IRQn = -1, /*!< 15 Cortex-M0+ System Tick Interrupt */ - -/****** STM32L-0 specific Interrupt Numbers *********************************************************/ - WWDG_IRQn = 0, /*!< Window WatchDog Interrupt */ - PVD_IRQn = 1, /*!< PVD through EXTI Line detect Interrupt */ - RTC_IRQn = 2, /*!< RTC through EXTI Line Interrupt */ - FLASH_IRQn = 3, /*!< FLASH Interrupt */ - RCC_IRQn = 4, /*!< RCC Interrupt */ - EXTI0_1_IRQn = 5, /*!< EXTI Line 0 and 1 Interrupts */ - EXTI2_3_IRQn = 6, /*!< EXTI Line 2 and 3 Interrupts */ - EXTI4_15_IRQn = 7, /*!< EXTI Line 4 to 15 Interrupts */ - DMA1_Channel1_IRQn = 9, /*!< DMA1 Channel 1 Interrupt */ - DMA1_Channel2_3_IRQn = 10, /*!< DMA1 Channel 2 and Channel 3 Interrupts */ - DMA1_Channel4_5_6_7_IRQn = 11, /*!< DMA1 Channel 4, Channel 5, Channel 6 and Channel 7 Interrupts */ - ADC1_COMP_IRQn = 12, /*!< ADC1, COMP1 and COMP2 Interrupts */ - LPTIM1_IRQn = 13, /*!< LPTIM1 Interrupt */ - TIM2_IRQn = 15, /*!< TIM2 Interrupt */ - TIM21_IRQn = 20, /*!< TIM21 Interrupt */ - TIM22_IRQn = 22, /*!< TIM22 Interrupt */ - I2C1_IRQn = 23, /*!< I2C1 Interrupt */ - SPI1_IRQn = 25, /*!< SPI1 Interrupt */ - USART2_IRQn = 28, /*!< USART2 Interrupt */ - LPUART1_IRQn = 29, /*!< LPUART1 Interrupt */ -} IRQn_Type; - -/** - * @} - */ - -#include "core_cm0plus.h" -#include "system_stm32l0xx.h" -#include - -/** @addtogroup Peripheral_registers_structures - * @{ - */ - -/** - * @brief Analog to Digital Converter - */ - -typedef struct -{ - __IO uint32_t ISR; /*!< ADC Interrupt and Status register, Address offset:0x00 */ - __IO uint32_t IER; /*!< ADC Interrupt Enable register, Address offset:0x04 */ - __IO uint32_t CR; /*!< ADC Control register, Address offset:0x08 */ - __IO uint32_t CFGR1; /*!< ADC Configuration register 1, Address offset:0x0C */ - __IO uint32_t CFGR2; /*!< ADC Configuration register 2, Address offset:0x10 */ - __IO uint32_t SMPR; /*!< ADC Sampling time register, Address offset:0x14 */ - uint32_t RESERVED1; /*!< Reserved, 0x18 */ - uint32_t RESERVED2; /*!< Reserved, 0x1C */ - __IO uint32_t TR; /*!< ADC watchdog threshold register, Address offset:0x20 */ - uint32_t RESERVED3; /*!< Reserved, 0x24 */ - __IO uint32_t CHSELR; /*!< ADC channel selection register, Address offset:0x28 */ - uint32_t RESERVED4[5]; /*!< Reserved, 0x2C */ - __IO uint32_t DR; /*!< ADC data register, Address offset:0x40 */ - uint32_t RESERVED5[28]; /*!< Reserved, 0x44 - 0xB0 */ - __IO uint32_t CALFACT; /*!< ADC data register, Address offset:0xB4 */ -} ADC_TypeDef; - -typedef struct -{ - __IO uint32_t CCR; -} ADC_Common_TypeDef; - - -/** - * @brief Comparator - */ - -typedef struct -{ - __IO uint32_t CSR; /*!< COMP comparator control and status register, Address offset: 0x18 */ -} COMP_TypeDef; - -typedef struct -{ - __IO uint32_t CSR; /*!< COMP control and status register, used for bits common to several COMP instances, Address offset: 0x00 */ -} COMP_Common_TypeDef; - - -/** -* @brief CRC calculation unit -*/ - -typedef struct -{ -__IO uint32_t DR; /*!< CRC Data register, Address offset: 0x00 */ -__IO uint8_t IDR; /*!< CRC Independent data register, Address offset: 0x04 */ -uint8_t RESERVED0; /*!< Reserved, 0x05 */ -uint16_t RESERVED1; /*!< Reserved, 0x06 */ -__IO uint32_t CR; /*!< CRC Control register, Address offset: 0x08 */ -uint32_t RESERVED2; /*!< Reserved, 0x0C */ -__IO uint32_t INIT; /*!< Initial CRC value register, Address offset: 0x10 */ -__IO uint32_t POL; /*!< CRC polynomial register, Address offset: 0x14 */ -} CRC_TypeDef; - -/** - * @brief Debug MCU - */ - -typedef struct -{ - __IO uint32_t IDCODE; /*!< MCU device ID code, Address offset: 0x00 */ - __IO uint32_t CR; /*!< Debug MCU configuration register, Address offset: 0x04 */ - __IO uint32_t APB1FZ; /*!< Debug MCU APB1 freeze register, Address offset: 0x08 */ - __IO uint32_t APB2FZ; /*!< Debug MCU APB2 freeze register, Address offset: 0x0C */ -}DBGMCU_TypeDef; - -/** - * @brief DMA Controller - */ - -typedef struct -{ - __IO uint32_t CCR; /*!< DMA channel x configuration register */ - __IO uint32_t CNDTR; /*!< DMA channel x number of data register */ - __IO uint32_t CPAR; /*!< DMA channel x peripheral address register */ - __IO uint32_t CMAR; /*!< DMA channel x memory address register */ -} DMA_Channel_TypeDef; - -typedef struct -{ - __IO uint32_t ISR; /*!< DMA interrupt status register, Address offset: 0x00 */ - __IO uint32_t IFCR; /*!< DMA interrupt flag clear register, Address offset: 0x04 */ -} DMA_TypeDef; - -typedef struct -{ - __IO uint32_t CSELR; /*!< DMA channel selection register, Address offset: 0xA8 */ -} DMA_Request_TypeDef; - -/** - * @brief External Interrupt/Event Controller - */ - -typedef struct -{ - __IO uint32_t IMR; /*!> (name##_Pos) /* diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..b142193 --- /dev/null +++ b/main.cpp @@ -0,0 +1,140 @@ +/* + * Copyright (C) 2019 Max Regan + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "ConcreteTaskScheduler.h" +#include "DisplayDriver.h" +#include "SpiDriver.h" +#include "BlinkTask.h" +#include "LowPowerDelay.h" +#include "DisplayTimeTask.h" + +#include "stm32l0xx.h" + +#include "macros.h" + +using Common::Time; + +static Common::Schedule::ConcreteTaskScheduler<10> g_sched; +static BSP::SpiDriver g_spi(g_sched); +static BSP::DisplayDriver g_display(g_sched, g_spi); +//static BlinkTask g_blink(Common::Time::seconds(2)); +static DisplayTimeTask g_display_time(g_display); +//static LowPowerDelay g_lp_delay; + +extern "C" void __cxa_pure_virtual() { while(1) {} } + +void SystemInit() +{ + /** + * Use the MSI for the system clock, and disable all other clocks. + */ + + /*!< Set MSION bit. Set by hardware to force the MSI oscillator ON + * when exiting from Stop or Standby mode, or in case of a failure + * of the HSE oscillator used directly or indirectly as system + * clock. This bit cannot be cleared if the MSI is used as system + * clock. */ + SET(RCC->CR, + RCC_CR_MSION); + + SET_TO(RCC->ICSCR, + RCC_ICSCR_MSIRANGE, + RCC_ICSCR_MSIRANGE_6); + + /*!< Set internal representation of clock frequency to 4MHz */ + // system_clk_freq = 4u << 22; + + /*!< Reset + * SW[1:0] (use MSI oscillator as system clock), + * HPRE[3:0] (do not divide AHB clock in prescaler) , + * PPRE1[2:0] (do not divide APB low-speed clock) + * PPRE2[2:0] (do not divide APB high-speed clock), + * MCOSEL[2:0] (disable MCO clock), + * MCOPRE[2:0] (disable MCO prescaler) */ + CLR(RCC->CFGR, + RCC_CFGR_SW | ~RCC_CFGR_HPRE | RCC_CFGR_PPRE1 | RCC_CFGR_PPRE2 | + RCC_CFGR_MCOSEL | RCC_CFGR_MCOPRE); + + /*!< Reset + * HSION (disable HSI), + * HSIDIVEN (disable 18MHz HSI division) + * HSEON (disable HSE clock) + * CSSHSEON (disable HSE clock monitoring) + * PLLON (disable PLL) + */ + CLR(RCC->CR, + RCC_CR_HSION | RCC_CR_HSIDIVEN | RCC_CR_HSEON | + RCC_CR_CSSHSEON | RCC_CR_PLLON); + + /*!< Reset HSEBYP bit (disable HSE bypass) */ + CLR(RCC->CR, + RCC_CR_HSEBYP); + + /*!< Reset + * PLLSRC (HSI16 is the PLL source), + * PLLMUL[3:0] (3x PLL multiplication) + * Don't touch PLLDIV[1:0], since 0 is undefined + */ + CLR(RCC->CFGR, + RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL | RCC_CFGR_PLLDIV); + + + /*!< Disable all interrupts */ + RCC->CIER = 0x00000000; + + /* Vector Table Relocation in Internal FLASH */ + SCB->VTOR = FLASH_BASE; +} + +extern "C" { + +typedef void (*func_ptr)(void); +extern func_ptr __init_array_start[], __init_array_end[]; + +static void _init(void) +{ + + for (func_ptr* func = __init_array_start; func != __init_array_end; func++) { + (*func)(); + } +} + +} + +[[noreturn]] void main() { + + _init(); + + BSP::SystemTimer::init(RTC); + g_spi.init(); + g_display.init(); + //g_blink.init(); + g_display_time.init(); + + Common::Schedule::NextTime asap = Common::Schedule::NextTime::asap(); + //g_sched.add_task(g_blink, asap); + //g_sched.add_task(g_lp_delay, asap); + g_sched.add_task(g_spi, asap); + g_sched.add_task(g_display, asap); + g_sched.add_task(g_display_time, asap); + + g_sched.run(); +} diff --git a/rtc.c b/rtc.c index 4b75197..f5fe09b 100644 --- a/rtc.c +++ b/rtc.c @@ -36,18 +36,34 @@ static void disable_rtc_write() RTC->WPR = 0x00; } +uint32_t bin_to_bcd(uint32_t bin) +{ + uint32_t bcd = 0; + while (bin > 0) { + bcd <<= 4; + bcd |= bin % 10; + bin /= 10; + } + + return bcd; +} + void rtc_init() { uint32_t temp = RCC->CSR; + SET(RCC->CSR, RCC_CSR_RTCRST); SET(RCC->APB1ENR, RCC_APB1ENR_PWREN); SET(PWR->CR, PWR_CR_DBP); /*CSR = temp; + while (!(RCC->CSR & RCC_CSR_LSERDY)) {} + enable_rtc_write(); RTC->ISR = RTC_ISR_INIT; @@ -59,6 +75,7 @@ void rtc_init() /*PRER, RTC_PRER_PREDIV_S, 255); + /*CR, RTC_CR_FMT); + + uint32_t time = 0; + SET(time, RTC_TR_PM); + SET_TO(time, RTC_TR_HT, 1 << RTC_TR_HT_Pos); + SET_TO(time, RTC_TR_HU, 2 << RTC_TR_HU_Pos); + SET_TO(time, RTC_TR_MNT, 5 << RTC_TR_MNT_Pos); + SET_TO(time, RTC_TR_MNU, 9 << RTC_TR_MNU_Pos); + SET_TO(time, RTC_TR_ST, 0 << RTC_TR_ST_Pos); + SET_TO(time, RTC_TR_SU, 0 << RTC_TR_SU_Pos); + RTC->TR = time; + + CLR(RTC->ISR, RTC_ISR_INIT); disable_rtc_write(); @@ -76,14 +107,14 @@ void rtc_get_time_bcd(struct time_bcd *tm_bcd) { uint32_t time = RTC->TR; - tm_bcd->hour_tens = STM32_FIELD(time, RTC_TR_HT); - tm_bcd->hour_ones = STM32_FIELD(time, RTC_TR_HU); + tm_bcd->hour_tens = STM32_GET_FIELD(time, RTC_TR_HT); + tm_bcd->hour_ones = STM32_GET_FIELD(time, RTC_TR_HU); - tm_bcd->minute_tens = STM32_FIELD(time, RTC_TR_MNT); - tm_bcd->minute_ones = STM32_FIELD(time, RTC_TR_MNU); + tm_bcd->minute_tens = STM32_GET_FIELD(time, RTC_TR_MNT); + tm_bcd->minute_ones = STM32_GET_FIELD(time, RTC_TR_MNU); - tm_bcd->second_tens = STM32_FIELD(time, RTC_TR_ST); - tm_bcd->second_ones = STM32_FIELD(time, RTC_TR_SU); + tm_bcd->second_tens = STM32_GET_FIELD(time, RTC_TR_ST); + tm_bcd->second_ones = STM32_GET_FIELD(time, RTC_TR_SU); - tm_bcd->pm = STM32_FIELD(time, RTC_TR_PM); + tm_bcd->pm = STM32_GET_FIELD(time, RTC_TR_PM); } diff --git a/stm32l031k6.S b/stm32l031k6.S index bdd4d79..79a9840 100644 --- a/stm32l031k6.S +++ b/stm32l031k6.S @@ -90,39 +90,40 @@ __Vectors: .long SysTick_Handler /* SysTick Handler */ /* External interrupts */ - .long WDT_IRQHandler /* 0: Watchdog Timer */ - .long RTC_IRQHandler /* 1: Real Time Clock */ - .long TIM0_IRQHandler /* 2: Timer0 / Timer1 */ - .long TIM2_IRQHandler /* 3: Timer2 / Timer3 */ - .long MCIA_IRQHandler /* 4: MCIa */ - .long MCIB_IRQHandler /* 5: MCIb */ - .long UART0_IRQHandler /* 6: UART0 - DUT FPGA */ - .long UART1_IRQHandler /* 7: UART1 - DUT FPGA */ - .long UART2_IRQHandler /* 8: UART2 - DUT FPGA */ - .long UART4_IRQHandler /* 9: UART4 - not connected */ - .long AACI_IRQHandler /* 10: AACI / AC97 */ - .long CLCD_IRQHandler /* 11: CLCD Combined Interrupt */ - .long ENET_IRQHandler /* 12: Ethernet */ - .long USBDC_IRQHandler /* 13: USB Device */ - .long USBHC_IRQHandler /* 14: USB Host Controller */ - .long CHLCD_IRQHandler /* 15: Character LCD */ - .long FLEXRAY_IRQHandler /* 16: Flexray */ - .long CAN_IRQHandler /* 17: CAN */ - .long LIN_IRQHandler /* 18: LIN */ - .long I2C_IRQHandler /* 19: I2C ADC/DAC */ - .long 0 /* 20: Reserved */ - .long 0 /* 21: Reserved */ - .long 0 /* 22: Reserved */ - .long 0 /* 23: Reserved */ - .long 0 /* 24: Reserved */ - .long 0 /* 25: Reserved */ - .long 0 /* 26: Reserved */ - .long 0 /* 27: Reserved */ - .long CPU_CLCD_IRQHandler /* 28: Reserved - CPU FPGA CLCD */ - .long 0 /* 29: Reserved - CPU FPGA */ - .long UART3_IRQHandler /* 30: UART3 - CPU FPGA */ - .long SPI_IRQHandler /* 31: SPI Touchscreen - CPU FPGA */ + .long WWDG_IRQHandler /* 0: Watchdog Timer */ + .long PVD_IRQHandler /* 1: Real Time Clock */ + .long RTC_IRQHandler /* 2: Timer0 / Timer1 */ + .long FLASH_IRQHandler /* 3: Timer2 / Timer3 */ + .long RCC_CRS_IRQHandler /* 4: MCIa */ + .long EXTI_1_0_IRQHandler /* 5: MCIb */ + .long EXTI_3_2_IRQHandler /* 6: UART0 - DUT FPGA */ + .long EXTI_15_4_IRQHandler /* 7: UART1 - DUT FPGA */ + .long 0 /* 8: UART2 - reserved */ + .long DMA1_CHANNEL1_IRQHandler /* 8: UART2 - DUT FPGA */ + .long DMA1_CHANNEL3_2_IRQHandler /* 9: UART4 - not connected */ + .long DMA_CHANNEL_7_4_IRQHandler /* 10: AACI / AC97 */ + .long ADC_COMP_IRQHandler /* 11: CLCD Combined Interrupt */ + .long LPTIM1_IRQHandler /* 12: Ethernet */ + .long USART4_USART5_IRQHandler /* 13: USB Device */ + .long TIM2_IRQHandler /* 14: USB Host Controller */ + .long TIM3_IRQHandler /* 15: Character LCD */ + .long TIM6_IRQHandler /* 16: Flexray */ + .long TIM7_IRQHandler /* 17: CAN */ + .long 0 /* 18: LIN */ + .long TIM21_IRQHandler /* 19: I2C ADC/DAC */ + .long I2C3_IRQHandler /* 20: Reserved */ + .long TIM22_IRQHandler /* 21: Reserved */ + /* TODO: There are more but I'm lazy */ + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 .size __Vectors, . - __Vectors .text @@ -293,28 +294,27 @@ Default_Handler: def_irq_handler PendSV_Handler def_irq_handler SysTick_Handler + def_irq_handler WWDG_IRQHandler + def_irq_handler PVD_IRQHandler def_irq_handler WDT_IRQHandler def_irq_handler RTC_IRQHandler - def_irq_handler TIM0_IRQHandler + def_irq_handler FLASH_IRQHandler + def_irq_handler RCC_CRS_IRQHandler + def_irq_handler EXTI_1_0_IRQHandler + def_irq_handler EXTI_3_2_IRQHandler + def_irq_handler EXTI_15_4_IRQHandler + def_irq_handler DMA1_CHANNEL1_IRQHandler + def_irq_handler DMA1_CHANNEL3_2_IRQHandler + def_irq_handler DMA_CHANNEL_7_4_IRQHandler + def_irq_handler ADC_COMP_IRQHandler + def_irq_handler LPTIM1_IRQHandler + def_irq_handler USART4_USART5_IRQHandler def_irq_handler TIM2_IRQHandler - def_irq_handler MCIA_IRQHandler - def_irq_handler MCIB_IRQHandler - def_irq_handler UART0_IRQHandler - def_irq_handler UART1_IRQHandler - def_irq_handler UART2_IRQHandler - def_irq_handler UART3_IRQHandler - def_irq_handler UART4_IRQHandler - def_irq_handler AACI_IRQHandler - def_irq_handler CLCD_IRQHandler - def_irq_handler ENET_IRQHandler - def_irq_handler USBDC_IRQHandler - def_irq_handler USBHC_IRQHandler - def_irq_handler CHLCD_IRQHandler - def_irq_handler FLEXRAY_IRQHandler - def_irq_handler CAN_IRQHandler - def_irq_handler LIN_IRQHandler - def_irq_handler I2C_IRQHandler - def_irq_handler CPU_CLCD_IRQHandler - def_irq_handler SPI_IRQHandler + def_irq_handler TIM3_IRQHandler + def_irq_handler TIM6_IRQHandler + def_irq_handler TIM7_IRQHandler + def_irq_handler TIM21_IRQHandler + def_irq_handler I2C3_IRQHandler + def_irq_handler TIM22_IRQHandler .end diff --git a/system.h b/system.h index c3f77e0..3d8008a 100644 --- a/system.h +++ b/system.h @@ -19,11 +19,13 @@ * THE SOFTWARE. */ + #ifndef _SYSTEM_H_ #define _SYSTEM_H_ #include uint32_t system_get_clk_freq(void); +uint64_t system_get_time_micros(void); #endif diff --git a/test.c b/test.c deleted file mode 100644 index 906e3f3..0000000 --- a/test.c +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Copyright (C) 2019 Max Regan - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#include -#include -#include - -#include "stm32l0xx.h" - -#include "macros.h" -#include "rtc.h" -#include "spi.h" -#include "display.h" -#include "font-notomono-10.h" - -/* TODO: Start cleaning up code and adding bounds checking! */ -extern uint32_t system_clk_freq; - -void SystemInit() -{ - /** - * Use the MSI for the system clock, and disable all other clocks. - */ - - /*!< Set MSION bit. Set by hardware to force the MSI oscillator ON - * when exiting from Stop or Standby mode, or in case of a failure - * of the HSE oscillator used directly or indirectly as system - * clock. This bit cannot be cleared if the MSI is used as system - * clock. */ - SET(RCC->CR, - RCC_CR_MSION); - - SET_TO(RCC->ICSCR, - RCC_ICSCR_MSIRANGE, - RCC_ICSCR_MSIRANGE_6); - - /*!< Set internal representation of clock frequency to 4MHz */ - system_clk_freq = 4u << 22; - - /*!< Reset - * SW[1:0] (use MSI oscillator as system clock), - * HPRE[3:0] (do not divide AHB clock in prescaler) , - * PPRE1[2:0] (do not divide APB low-speed clock) - * PPRE2[2:0] (do not divide APB high-speed clock), - * MCOSEL[2:0] (disable MCO clock), - * MCOPRE[2:0] (disable MCO prescaler) */ - CLR(RCC->CFGR, - RCC_CFGR_SW | ~RCC_CFGR_HPRE | RCC_CFGR_PPRE1 | RCC_CFGR_PPRE2 | - RCC_CFGR_MCOSEL | RCC_CFGR_MCOPRE); - - /*!< Reset - * HSION (disable HSI), - * HSIDIVEN (disable 18MHz HSI division) - * HSEON (disable HSE clock) - * CSSHSEON (disable HSE clock monitoring) - * PLLON (disable PLL) - */ - CLR(RCC->CR, - RCC_CR_HSION | RCC_CR_HSIDIVEN | RCC_CR_HSEON | - RCC_CR_CSSHSEON | RCC_CR_PLLON); - - /*!< Reset HSEBYP bit (disable HSE bypass) */ - CLR(RCC->CR, - RCC_CR_HSEBYP); - - /*!< Reset - * PLLSRC (HSI16 is the PLL source), - * PLLMUL[3:0] (3x PLL multiplication) - * Don't touch PLLDIV[1:0], since 0 is undefined - */ - CLR(RCC->CFGR, - RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL | RCC_CFGR_PLLDIV); - - - /*!< Disable all interrupts */ - RCC->CIER = 0x00000000; - - /* Vector Table Relocation in Internal FLASH */ - SCB->VTOR = FLASH_BASE; -} - -void init_lptim() -{ - /* Enable APB1 for LPTIM */ - SET(RCC->APB1ENR, - RCC_APB1ENR_LPTIM1EN); - - // Enable low-speed internal - RCC->CSR |= RCC_CSR_LSION; - while (!(RCC->CSR & RCC_CSR_LSIRDY)) {}; - - /*!< Set the LSI clock to be the source of the LPTIM */ - SET_TO(RCC->CCIPR, - RCC_CCIPR_LPTIM1SEL, - RCC_CCIPR_LPTIM1SEL_0); - - /** Write CR CFGR and IER while LPTIM is disabled (LPTIM_CR_ENABLE not yet set) */ - - /*!< Disable Interrupts (not needed, this is the default */ - LPTIM1->IER = 0; - - /*!< Reset - * ENC (Disable encoder mode) - * TIMOUT (disable timeout mode) - * TRIGEN (Trigger count start with software only) - * PRELOAD (Update ARR and CMP registers immediately after write) - * CKSEL (LPTIM is using internal clock source) - * COUNTMODE (LPTIM counter updated on every clock pulse) - * TRGFLT (Do not debounce triggers) - */ - CLR(LPTIM1->CFGR, - LPTIM_CFGR_ENC | LPTIM_CFGR_TIMOUT | LPTIM_CFGR_TRIGEN | - LPTIM_CFGR_TRIGSEL | LPTIM_CFGR_PRELOAD | LPTIM_CFGR_CKSEL | - LPTIM_CFGR_COUNTMODE); - - /*!< Set - * PRESC (Set prescaler to 128. Using 32kHz LSI as input, this should - * correspond to 250Hz counting. - */ - SET_TO(LPTIM1->CFGR, - LPTIM_CFGR_PRESC, - 7u << LPTIM_CFGR_PRESC_Pos); - - SET(LPTIM1->CR, LPTIM_CR_ENABLE); - - /*!< Do not modify ARR and CMP until after ENABLE bit is set */ - /*!< Produce a 60Hz, 50% duty cycle square wave. These values were - * determined experimentally. */ - LPTIM1->ARR = 9; - LPTIM1->CMP = 4; - while(!(LPTIM1->ISR & LPTIM_ISR_ARROK)) {} - while(!(LPTIM1->ISR & LPTIM_ISR_CMPOK)) {} - - /*!< Enable and start the timer */ - SET(LPTIM1->CR, LPTIM_CR_CNTSTRT); -} - -static struct display display; - -void init_lptim_toggler() -{ - init_lptim(); - - /* Assign LPTIM1_OUT to PA7 */ - SET_TO(GPIOA->AFR[0], - GPIO_AFRL_AFRL7, - 1u << GPIO_AFRL_AFRL7_Pos); - - SET_TO(GPIOA->MODER, - GPIO_MODER_MODE7, - 2u << GPIO_MODER_MODE7_Pos); - - CLR(GPIOA->OTYPER, GPIO_OTYPER_OT_7); - CLR(GPIOA->PUPDR, GPIO_PUPDR_PUPD7); -} - -static char get_char_for_digit(uint8_t bcd_digit) -{ - return bcd_digit + '0'; -} - -struct time_bcd time; -char time_str[11] = { 0 }; - -int main() -{ - /** Enable Port A,B clock */ - SET(RCC->IOPENR, RCC_IOPENR_IOPAEN); - SET(RCC->IOPENR, RCC_IOPENR_IOPBEN); - - /** Enable pin P3 for output */ - SET_TO(GPIOB->MODER, - GPIO_MODER_MODE3, - GPIO_MODER_MODE3_0); - - CLR(GPIOB->OTYPER, GPIO_OTYPER_OT_3); - CLR(GPIOB->PUPDR, GPIO_PUPDR_PUPD3); - - init_lptim_toggler(); - - display_init(&display, SPI1); - rtc_init(); - - int x = 0; - while (1) { - - rtc_get_time_bcd(&time); - - time_str[0] = get_char_for_digit(time.hour_tens); - time_str[1] = get_char_for_digit(time.hour_ones); - time_str[2] = ':'; - - time_str[3] = get_char_for_digit(time.minute_tens); - time_str[4] = get_char_for_digit(time.minute_ones); - time_str[5] = ':'; - - time_str[6] = get_char_for_digit(time.second_tens); - time_str[7] = get_char_for_digit(time.second_ones); - time_str[8] = time.pm ? 'P' : 'A'; - time_str[9] = 'M'; - time_str[10] = '\0'; - - FLIP(GPIOB->ODR, GPIO_ODR_OD3); - // for (int i = 0; i < 10000; i++); - display_clear(&display); - display_string_at(&display, 32, font_notomono_10.height * 0, time_str, &font_notomono_10); - display_string_at(&display, 0, font_notomono_10.height * 2, "> Option 1", &font_notomono_10); - display_string_at(&display, 0, font_notomono_10.height * 3, " Option 2", &font_notomono_10); - display_string_at(&display, 0, font_notomono_10.height * 4, " Option 3", &font_notomono_10); - display_refresh(&display); - x++; - if (x == DISPLAY_WIDTH) { - x = 0; - } - } -}