diff --git a/firmware/func_gen_stm32f303re_nucleo/Makefile b/firmware/func_gen_stm32f303re_nucleo/Makefile index f848428..16938dd 100644 --- a/firmware/func_gen_stm32f303re_nucleo/Makefile +++ b/firmware/func_gen_stm32f303re_nucleo/Makefile @@ -80,6 +80,9 @@ C_SOURCES += ../shared_libs/drivers/hw_button/hw_button.c # display C_SOURCES += ../shared_libs/display/display_gfx.c C_SOURCES += ../shared_libs/display/font_gfx.c +# bitmaps +C_SOURCES += ../shared_libs/bitmaps/bitmap_disp_buttons.c +C_SOURCES += ../shared_libs/bitmaps/bitmap_font_5x7.c # ASM sources ASM_SOURCES = \ @@ -154,6 +157,8 @@ C_INCLUDES += -I../shared_libs/drivers/st7565 C_INCLUDES += -I../shared_libs/drivers/hw_button # display includes C_INCLUDES += -I../shared_libs/display +# bitmaps includes +C_INCLUDES += -I../shared_libs/bitmaps # compile gcc flags ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections diff --git a/firmware/shared_libs/bitmaps/bitmap_disp_buttons.c b/firmware/shared_libs/bitmaps/bitmap_disp_buttons.c new file mode 100644 index 0000000..65cd622 --- /dev/null +++ b/firmware/shared_libs/bitmaps/bitmap_disp_buttons.c @@ -0,0 +1,231 @@ +#include "main.h" +#include "display_gfx.h" +#include "bitmap_disp_buttons.h" + +// clang-format off + +const uint8_t btn_fre[] = { + // res: 25x11 - 50 bytes + 0xFC,0x02,0x01,0x01,0xFD,0x25,0x25,0x25,0x05,0x01,0xFD,0x25,0x65,0xA5,0x19,0x01, + 0xFD,0x25,0x25,0x25,0x05,0x01,0x01,0x02,0xFC,0xF9,0xFA,0xFC,0xFC,0xFD,0xFC,0xFC, + 0xFC,0xFC,0xFC,0xFD,0xFC,0xFC,0xFC,0xFD,0xFC,0xFD,0xFD,0xFD,0xFD,0xFD,0xFC,0xFC, + 0xFA,0xF9, +}; + +const uint8_t btn_fre_inverse[] = { + // res: 25x11 - 50 bytes + 0xFC,0xFE,0xFF,0xFF,0x03,0xDB,0xDB,0xDB,0xFB,0xFF,0x03,0xDB,0x9B,0x5B,0xE7,0xFF, + 0x03,0xDB,0xDB,0xDB,0xFB,0xFF,0xFF,0xFE,0xFC,0xF9,0xFB,0xFF,0xFF,0xFE,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFE,0xFF,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,0xFF, + 0xFB,0xF9, + +}; + +const uint8_t btn_amp[] = { + // res: 25x11 - 50 bytes + 0xFC,0x02,0x01,0x01,0xF1,0x49,0x45,0x49,0xF1,0x01,0xFD,0x09,0x11,0x09,0xFD,0x01, + 0xFD,0x25,0x25,0x25,0x19,0x01,0x01,0x02,0xFC,0xF9,0xFA,0xFC,0xFC,0xFD,0xFC,0xFC, + 0xFC,0xFD,0xFC,0xFD,0xFC,0xFC,0xFC,0xFD,0xFC,0xFD,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC, + 0xFA,0xF9, +}; + +const uint8_t btn_amp_inverse[] = { + // res: 25x11 - 50 bytes + 0xFC,0xFE,0xFF,0xFF,0x0F,0xB7,0xBB,0xB7,0x0F,0xFF,0x03,0xF7,0xEF,0xF7,0x03,0xFF, + 0x03,0xDB,0xDB,0xDB,0xE7,0xFF,0xFF,0xFE,0xFC,0xF9,0xFB,0xFF,0xFF,0xFE,0xFF,0xFF, + 0xFF,0xFE,0xFF,0xFE,0xFF,0xFF,0xFF,0xFE,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFB,0xF9, +}; + +const uint8_t btn_off[] = { + // res: 25x11 - 50 bytes + 0xFC,0x02,0x01,0x01,0xF9,0x05,0x05,0x05,0xF9,0x01,0xFD,0x25,0x25,0x25,0x05,0x01, + 0xFD,0x25,0x25,0x25,0x05,0x01,0x01,0x02,0xFC,0xF9,0xFA,0xFC,0xFC,0xFC,0xFD,0xFD, + 0xFD,0xFC,0xFC,0xFD,0xFC,0xFC,0xFC,0xFC,0xFC,0xFD,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC, + 0xFA,0xF9, +}; + +const uint8_t btn_off_inverse[] = { + // res: 25x11 - 50 bytes + 0xFC,0xFE,0xFF,0xFF,0x07,0xFB,0xFB,0xFB,0x07,0xFF,0x03,0xDB,0xDB,0xDB,0xFB,0xFF, + 0x03,0xDB,0xDB,0xDB,0xFB,0xFF,0xFF,0xFE,0xFC,0xF9,0xFB,0xFF,0xFF,0xFF,0xFE,0xFE, + 0xFE,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFB,0xF9, +}; + +const uint8_t btn_pha[] = { + // res: 25x11 - 50 bytes + 0xFC,0x02,0x01,0x01,0xFD,0x25,0x25,0x25,0x19,0x01,0xFD,0x21,0x21,0x21,0xFD,0x01, + 0xF1,0x49,0x45,0x49,0xF1,0x01,0x01,0x02,0xFC,0xF9,0xFA,0xFC,0xFC,0xFD,0xFC,0xFC, + 0xFC,0xFC,0xFC,0xFD,0xFC,0xFC,0xFC,0xFD,0xFC,0xFD,0xFC,0xFC,0xFC,0xFD,0xFC,0xFC, + 0xFA,0xF9, +}; + +const uint8_t btn_pha_inverse[] = { + // res: 25x11 - 50 bytes + 0xFC,0xFE,0xFF,0xFF,0x03,0xDB,0xDB,0xDB,0xE7,0xFF,0x03,0xDF,0xDF,0xDF,0x03,0xFF, + 0x0F,0xB7,0xBB,0xB7,0x0F,0xFF,0xFF,0xFE,0xFC,0xF9,0xFB,0xFF,0xFF,0xFE,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFE,0xFF,0xFE,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF, + 0xFB,0xF9, +}; + +const uint8_t btn_wav_noraml[] = { + // res: 25x11 - 50 bytes + 0x3F,0x40,0x80,0x80,0xBF,0x80,0x87,0x80,0xBF,0x80,0x8F,0x92,0xA2,0x92,0x8F,0x80, + 0xBE,0x81,0x80,0x81,0xBE,0x80,0x80,0x40,0x3F,0x9F,0x5F,0x3F,0x3F,0x3F,0xBF,0x3F, + 0xBF,0x3F,0x3F,0xBF,0x3F,0x3F,0x3F,0xBF,0x3F,0x3F,0x3F,0xBF,0x3F,0x3F,0x3F,0x3F, + 0x5F,0x9F, +}; + +const uint8_t btn_wav_inverse[] = { + // res: 25x11 - 50 bytes + 0x3F,0x7F,0xFF,0xFF,0xC0,0xFF,0xF8,0xFF,0xC0,0xFF,0xF0,0xED,0xDD,0xED,0xF0,0xFF, + 0xC1,0xFE,0xFF,0xFE,0xC1,0xFF,0xFF,0x7F,0x3F,0x9F,0xDF,0xFF,0xFF,0xFF,0x7F,0xFF, + 0x7F,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF, + 0xDF,0x9F, +}; + +const uint8_t btn_wav_short[] = { + // res: 24x11 - 48 bytes + 0xFC,0x02,0x01,0x01,0xFD,0x01,0xE1,0x01,0xFD,0x01,0xF1,0x49,0x45,0x49,0xF1,0x01, + 0x7D,0x81,0x01,0x81,0x7D,0x01,0x02,0xFC,0xF9,0xFA,0xFC,0xFC,0xFC,0xFD,0xFC,0xFD, + 0xFC,0xFC,0xFD,0xFC,0xFC,0xFC,0xFD,0xFC,0xFC,0xFC,0xFD,0xFC,0xFC,0xFC,0xFA,0xF9, +}; + +const uint8_t btn_wav_inverse_short[] = { + // res: 24x11 - 48 bytes + 0xFC,0xFE,0xFF,0xFF,0x03,0xFF,0x1F,0xFF,0x03,0xFF,0x0F,0xB7,0xBB,0xB7,0x0F,0xFF, + 0x83,0x7F,0xFF,0x7F,0x83,0xFF,0xFE,0xFC,0xF9,0xFB,0xFF,0xFF,0xFF,0xFE,0xFF,0xFE, + 0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFB,0xF9, +}; + +const uint8_t btn_back_short[] = { + // res: 24x11 - 48 bytes + 0xFC,0x02,0x01,0x01,0x01,0x01,0x01,0x21,0x71,0xA9,0x21,0x21,0x21,0x21,0x21,0x21, + 0x3D,0x01,0x01,0x01,0x01,0x01,0x02,0xFC,0xF9,0xFA,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC, + 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFA,0xF9, +}; + +const uint8_t btn_back_inverse_short[] = { + // res: 24x11 - 48 bytes + 0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0x8F,0x57,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF, + 0xC3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF9,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0xF9, +}; + +const uint8_t btn_left[] = { + // res: 25x11 - 50 bytes + 0xFC,0x02,0x01,0x01,0x21,0x21,0x71,0x71,0xF9,0xF9,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x21,0x01,0x01,0x01,0x02,0xFC,0xF9,0xFA,0xFC,0xFC,0xFC,0xFC,0xFC, + 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC, + 0xFA,0xF9, +}; + +const uint8_t btn_left_inverse[] = { + // res: 25x11 - 50 bytes + 0xFC,0xFE,0xFF,0xFF,0xDF,0xDF,0x8F,0x8F,0x07,0x07,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF, + 0xDF,0xDF,0xDF,0xDF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF9,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFB,0xF9, +}; +const uint8_t btn_right[] = { + // res: 25x11 - 50 bytes + 0xFC,0x02,0x01,0x01,0x01,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0xF9,0xF9, + 0x71,0x71,0x21,0x21,0x01,0x01,0x01,0x02,0xFC,0xF9,0xFA,0xFC,0xFC,0xFC,0xFC,0xFC, + 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC, + 0xFA,0xF9, +}; +const uint8_t btn_right_inverse[] = { + // res: 25x11 - 50 bytes + 0xFC,0xFE,0xFF,0xFF,0xFF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0x07,0x07, + 0x8F,0x8F,0xDF,0xDF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF9,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFB,0xF9, +}; +const uint8_t btn_x0_01[] = { + // res: 25x11 - 50 bytes + 0xFC,0x02,0x01,0x89,0x51,0x21,0x51,0x89,0x01,0x01,0x81,0x81,0x01,0xF9,0x45,0x25, + 0x15,0xF9,0x01,0x09,0xFD,0x01,0x01,0x02,0xFC,0xF9,0xFA,0xFC,0xFC,0xFC,0xFC,0xFC, + 0xFC,0xFC,0xFC,0xFD,0xFD,0xFC,0xFC,0xFD,0xFD,0xFD,0xFC,0xFC,0xFD,0xFD,0xFD,0xFC, + 0xFA,0xF9, +}; +const uint8_t btn_x0_01_inverse[] = { + // res: 25x11 - 50 bytes + 0xFC,0xFE,0xFF,0x77,0xAF,0xDF,0xAF,0x77,0xFF,0xFF,0x7F,0x7F,0xFF,0x07,0xBB,0xDB, + 0xEB,0x07,0xFF,0xF7,0x03,0xFF,0xFF,0xFE,0xFC,0xF9,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFE,0xFE,0xFF,0xFF,0xFE,0xFE,0xFE,0xFF,0xFF,0xFE,0xFE,0xFE,0xFF, + 0xFB,0xF9, +}; +const uint8_t btn_x0_1[] = { + // res: 25x11 - 50 bytes + 0xFC,0x02,0x01,0x01,0x01,0x89,0x51,0x21,0x51,0x89,0x01,0x01,0x81,0x81,0x01,0x01, + 0x09,0xFD,0x01,0x01,0x01,0x01,0x01,0x02,0xFC,0xF9,0xFA,0xFC,0xFC,0xFC,0xFC,0xFC, + 0xFC,0xFC,0xFC,0xFC,0xFC,0xFD,0xFD,0xFC,0xFC,0xFD,0xFD,0xFD,0xFC,0xFC,0xFC,0xFC, + 0xFA,0xF9, +}; +const uint8_t btn_x0_1_inverse[] = { + // res: 25x11 - 50 bytes + 0xFC,0xFE,0xFF,0xFF,0xFF,0x77,0xAF,0xDF,0xAF,0x77,0xFF,0xFF,0x7F,0x7F,0xFF,0xFF, + 0xF7,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF9,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFF,0xFF,0xFE,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF, + 0xFB,0xF9, +}; +const uint8_t btn_x1[] = { + // res: 25x11 - 50 bytes + 0xFC,0x02,0x01,0x01,0x01,0x01,0x89,0x51,0x21,0x51,0x89,0x01,0x01,0x01,0x01,0x09, + 0xFD,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0xFC,0xF9,0xFA,0xFC,0xFC,0xFC,0xFC,0xFC, + 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFD,0xFD,0xFD,0xFC,0xFC,0xFC,0xFC,0xFC, + 0xFA,0xF9, +}; +const uint8_t btn_x1_inverse[] = { + // res: 25x11 - 50 bytes + 0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0x77,0xAF,0xDF,0xAF,0x77,0xFF,0xFF,0xFF,0xFF,0xF7, + 0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF9,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFB,0xF9, +}; +const uint8_t btn_x10[] = { + // res: 25x11 - 50 bytes + 0xFC,0x02,0x01,0x01,0x89,0x51,0x21,0x51,0x89,0x01,0x01,0x01,0x09,0xFD,0x01,0x01, + 0xF9,0x45,0x25,0x15,0xF9,0x01,0x01,0x02,0xFC,0xF9,0xFA,0xFC,0xFC,0xFC,0xFC,0xFC, + 0xFC,0xFC,0xFC,0xFC,0xFC,0xFD,0xFD,0xFD,0xFC,0xFC,0xFD,0xFD,0xFD,0xFC,0xFC,0xFC, + 0xFA,0xF9, +}; +const uint8_t btn_x10_inverse[] = { + // res: 25x11 - 50 bytes + 0xFC,0xFE,0xFF,0xFF,0x77,0xAF,0xDF,0xAF,0x77,0xFF,0xFF,0xFF,0xF7,0x03,0xFF,0xFF, + 0x07,0xBB,0xDB,0xEB,0x07,0xFF,0xFF,0xFE,0xFC,0xF9,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFE,0xFF,0xFF,0xFE,0xFE,0xFE,0xFF,0xFF,0xFF, + 0xFB,0xF9, +}; + +// clang-format on + +GFX_bitmap_t btn_bottom[DISP_BTN_MAX] = { + {25, 11, btn_fre}, + {25, 11, btn_fre_inverse}, + {25, 11, btn_amp}, + {25, 11, btn_amp_inverse}, + {25, 11, btn_off}, + {25, 11, btn_off_inverse}, + {25, 11, btn_pha}, + {25, 11, btn_pha_inverse}, + {24, 11, btn_wav_short}, + {24, 11, btn_wav_inverse_short}, + {24, 11, btn_back_short}, + {24, 11, btn_back_inverse_short}, + {25, 11, btn_left}, + {25, 11, btn_left_inverse}, + {25, 11, btn_right}, + {25, 11, btn_right_inverse}, + {25, 11, btn_x0_01}, + {25, 11, btn_x0_01_inverse}, + {25, 11, btn_x0_1}, + {25, 11, btn_x0_1_inverse}, + {25, 11, btn_x1}, + {25, 11, btn_x1_inverse}, + {25, 11, btn_x10}, + {25, 11, btn_x10_inverse}, + + {0, 0, NULL}, +}; diff --git a/firmware/shared_libs/bitmaps/bitmap_disp_buttons.h b/firmware/shared_libs/bitmaps/bitmap_disp_buttons.h new file mode 100644 index 0000000..99366e4 --- /dev/null +++ b/firmware/shared_libs/bitmaps/bitmap_disp_buttons.h @@ -0,0 +1,33 @@ +#pragma once + +typedef enum +{ + DISP_BTN_FREQ, + DISP_BTN_FREQ_INVERSE, + DISP_BTN_AMPL, + DISP_BTN_AMPL_INVERSE, + DISP_BTN_OFFS, + DISP_BTN_OFFS_INVERSE, + DISP_BTN_PHAS, + DISP_BTN_PHAS_INVERSE, + DISP_BTN_WAVE, + DISP_BTN_WAVE_INVERSE, + DISP_BTN_BACK, + DISP_BTN_BACK_INVERSE, + DISP_BTN_LEFT, + DISP_BTN_LEFT_INVERSE, + DISP_BTN_RIGHT, + DISP_BTN_RIGHT_INVERSE, + DISP_BTN_X0_01, + DISP_BTN_X0_01_INVERSE, + DISP_BTN_X0_1, + DISP_BTN_X0_1_INVERSE, + DISP_BTN_X1, + DISP_BTN_X1_INVERSE, + DISP_BTN_X10, + DISP_BTN_X10_INVERSE, + DISP_BTN_NONE, + DISP_BTN_MAX, +} DISP_buttonName_t; + +extern GFX_bitmap_t btn_bottom[DISP_BTN_MAX]; diff --git a/firmware/shared_libs/bitmaps/bitmap_font_5x7.c b/firmware/shared_libs/bitmaps/bitmap_font_5x7.c new file mode 100644 index 0000000..e1a0d83 --- /dev/null +++ b/firmware/shared_libs/bitmaps/bitmap_font_5x7.c @@ -0,0 +1,211 @@ +#include "main.h" +#include "font_gfx.h" +#include "bitmap_fonts.h" + +// clang-format off +const uint8_t font5x7[] = { + 0x00, 0x00, 0x5F, 0x00, 0x00, // 0x21 ! + 0x00, 0x07, 0x00, 0x07, 0x00, // 0x22 " + 0x14, 0x7F, 0x14, 0x7F, 0x14, // 0x23 # + 0x24, 0x2A, 0x7F, 0x2A, 0x12, // 0x24 $ + 0x23, 0x13, 0x08, 0x64, 0x62, // 0x25 % + 0x36, 0x49, 0x56, 0x20, 0x50, // 0x26 & + 0x00, 0x08, 0x07, 0x03, 0x00, // 0x27 ' + 0x00, 0x1C, 0x22, 0x41, 0x00, // 0x28 ( + 0x00, 0x41, 0x22, 0x1C, 0x00, // 0x29 ) + 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, // 0x2A * + 0x08, 0x08, 0x3E, 0x08, 0x08, // 0x2B + + 0x00, 0x80, 0x70, 0x30, 0x00, // 0x2C , + 0x08, 0x08, 0x08, 0x08, 0x08, // 0x2D - + 0x00, 0x00, 0x60, 0x60, 0x00, // 0x2E . + 0x20, 0x10, 0x08, 0x04, 0x02, // 0x2F / + 0x3E, 0x51, 0x49, 0x45, 0x3E, // 0x30 0 + 0x00, 0x42, 0x7F, 0x40, 0x00, // 0x31 1 + 0x72, 0x49, 0x49, 0x49, 0x46, // 0x32 2 + 0x21, 0x41, 0x49, 0x4D, 0x33, // 0x33 3 + 0x18, 0x14, 0x12, 0x7F, 0x10, // 0x34 4 + 0x27, 0x45, 0x45, 0x45, 0x39, // 0x35 5 + 0x3C, 0x4A, 0x49, 0x49, 0x31, // 0x36 6 + 0x41, 0x21, 0x11, 0x09, 0x07, // 0x37 7 + 0x36, 0x49, 0x49, 0x49, 0x36, // 0x38 8 + 0x46, 0x49, 0x49, 0x29, 0x1E, // 0x39 9 + 0x00, 0x00, 0x14, 0x00, 0x00, // 0x3A : + 0x00, 0x40, 0x34, 0x00, 0x00, // 0x3B ; + 0x00, 0x08, 0x14, 0x22, 0x41, // 0x3C < + 0x14, 0x14, 0x14, 0x14, 0x14, // 0x3D = + 0x00, 0x41, 0x22, 0x14, 0x08, // 0x3E > + 0x02, 0x01, 0x59, 0x09, 0x06, // 0x3F ? + 0x3E, 0x41, 0x5D, 0x59, 0x4E, // 0x40 @ + 0x7C, 0x12, 0x11, 0x12, 0x7C, // 0x41 A + 0x7F, 0x49, 0x49, 0x49, 0x36, // 0x42 B + 0x3E, 0x41, 0x41, 0x41, 0x22, // 0x43 C + 0x7F, 0x41, 0x41, 0x41, 0x3E, // 0x44 D + 0x7F, 0x49, 0x49, 0x49, 0x41, // 0x45 E + 0x7F, 0x09, 0x09, 0x09, 0x01, // 0x46 F + 0x3E, 0x41, 0x41, 0x51, 0x73, // 0x47 G + 0x7F, 0x08, 0x08, 0x08, 0x7F, // 0x48 H + 0x00, 0x41, 0x7F, 0x41, 0x00, // 0x49 I + 0x20, 0x40, 0x41, 0x3F, 0x01, // 0x4A J + 0x7F, 0x08, 0x14, 0x22, 0x41, // 0x4B K + 0x7F, 0x40, 0x40, 0x40, 0x40, // 0x4C L + 0x7F, 0x02, 0x1C, 0x02, 0x7F, // 0x4D M + 0x7F, 0x04, 0x08, 0x10, 0x7F, // 0x4E N + 0x3E, 0x41, 0x41, 0x41, 0x3E, // 0x4F O + 0x7F, 0x09, 0x09, 0x09, 0x06, // 0x50 P + 0x3E, 0x41, 0x51, 0x21, 0x5E, // 0x51 Q + 0x7F, 0x09, 0x19, 0x29, 0x46, // 0x52 R + 0x26, 0x49, 0x49, 0x49, 0x32, // 0x53 S + 0x03, 0x01, 0x7F, 0x01, 0x03, // 0x54 T + 0x3F, 0x40, 0x40, 0x40, 0x3F, // 0x55 U + 0x1F, 0x20, 0x40, 0x20, 0x1F, // 0x56 V + 0x3F, 0x40, 0x38, 0x40, 0x3F, // 0x57 W + 0x63, 0x14, 0x08, 0x14, 0x63, // 0x58 X + 0x03, 0x04, 0x78, 0x04, 0x03, // 0x59 Y + 0x61, 0x59, 0x49, 0x4D, 0x43, // 0x5A Z + 0x00, 0x7F, 0x41, 0x41, 0x41, // 0x5B [ + 0x02, 0x04, 0x08, 0x10, 0x20, // 0x5C backslash + 0x00, 0x41, 0x41, 0x41, 0x7F, // 0x5D ] + 0x04, 0x02, 0x01, 0x02, 0x04, // 0x5E ^ + 0x40, 0x40, 0x40, 0x40, 0x40, // 0x5F _ + 0x00, 0x03, 0x07, 0x08, 0x00, // 0x60 ` + 0x20, 0x54, 0x54, 0x78, 0x40, // 0x61 a + 0x7F, 0x28, 0x44, 0x44, 0x38, // 0x62 b + 0x38, 0x44, 0x44, 0x44, 0x28, // 0x63 c + 0x38, 0x44, 0x44, 0x28, 0x7F, // 0x64 d + 0x38, 0x54, 0x54, 0x54, 0x18, // 0x65 e + 0x00, 0x08, 0x7E, 0x09, 0x02, // 0x66 f + 0x18, 0xA4, 0xA4, 0x9C, 0x78, // 0x67 g + 0x7F, 0x08, 0x04, 0x04, 0x78, // 0x68 h + 0x00, 0x44, 0x7D, 0x40, 0x00, // 0x69 i + 0x20, 0x40, 0x40, 0x3D, 0x00, // 0x6A j + 0x7F, 0x10, 0x28, 0x44, 0x00, // 0x6B k + 0x00, 0x41, 0x7F, 0x40, 0x00, // 0x6C l + 0x7C, 0x04, 0x78, 0x04, 0x78, // 0x6D m + 0x7C, 0x08, 0x04, 0x04, 0x78, // 0x6E n + 0x38, 0x44, 0x44, 0x44, 0x38, // 0x6F o + 0xFC, 0x18, 0x24, 0x24, 0x18, // 0x70 p + 0x18, 0x24, 0x24, 0x18, 0xFC, // 0x71 q + 0x7C, 0x08, 0x04, 0x04, 0x08, // 0x72 r + 0x48, 0x54, 0x54, 0x54, 0x24, // 0x73 s + 0x04, 0x04, 0x3F, 0x44, 0x24, // 0x74 t + 0x3C, 0x40, 0x40, 0x20, 0x7C, // 0x75 u + 0x1C, 0x20, 0x40, 0x20, 0x1C, // 0x76 v + 0x3C, 0x40, 0x30, 0x40, 0x3C, // 0x77 w + 0x44, 0x28, 0x10, 0x28, 0x44, // 0x78 x + 0x4C, 0x90, 0x90, 0x90, 0x7C, // 0x79 y + 0x44, 0x64, 0x54, 0x4C, 0x44, // 0x7A z + 0x00, 0x08, 0x36, 0x41, 0x00, // 0x7B { + 0x00, 0x00, 0x77, 0x00, 0x00, // 0x7C | + 0x00, 0x41, 0x36, 0x08, 0x00, // 0x7D } + 0x02, 0x01, 0x02, 0x04, 0x02, // 0x7E ~ +}; +// clang-format on + +/* { [Char width in bits], [Offset into arial_6ptCharBitmaps in bytes] } */ +const GFX_fontChar_t font5x7Descriptors[] = { + {5, 00}, // 0x21 ! + {5, 05}, // 0x22 " + {5, 10}, // 0x23 # + {5, 15}, // 0x24 $ + {5, 20}, // 0x25 % + {5, 25}, // 0x26 & + {5, 30}, // 0x27 ' + {5, 35}, // 0x28 ( + {5, 40}, // 0x29 ) + {5, 45}, // 0x2A * + {5, 50}, // 0x2B + + {5, 55}, // 0x2C , + {5, 60}, // 0x2D - + {5, 65}, // 0x2E . + {5, 70}, // 0x2F / + {5, 75}, // 0x30 0 + {5, 80}, // 0x31 1 + {5, 85}, // 0x32 2 + {5, 90}, // 0x33 3 + {5, 95}, // 0x34 4 + {5, 100}, // 0x35 5 + {5, 105}, // 0x36 6 + {5, 110}, // 0x37 7 + {5, 115}, // 0x38 8 + {5, 120}, // 0x39 9 + {5, 125}, // 0x3A : + {5, 130}, // 0x3B ; + {5, 135}, // 0x3C < + {5, 140}, // 0x3D = + {5, 145}, // 0x3E > + {5, 150}, // 0x3F ? + {5, 155}, // 0x40 @ + {5, 160}, // 0x41 A + {5, 165}, // 0x42 B + {5, 170}, // 0x43 C + {5, 175}, // 0x44 D + {5, 180}, // 0x45 E + {5, 185}, // 0x46 F + {5, 190}, // 0x47 G + {5, 195}, // 0x48 H + {5, 200}, // 0x49 I + {5, 205}, // 0x4A J + {5, 210}, // 0x4B K + {5, 215}, // 0x4C L + {5, 220}, // 0x4D M + {5, 225}, // 0x4E N + {5, 230}, // 0x4F O + {5, 235}, // 0x50 P + {5, 240}, // 0x51 Q + {5, 245}, // 0x52 R + {5, 250}, // 0x53 S + {5, 255}, // 0x54 T + {5, 260}, // 0x55 U + {5, 265}, // 0x56 V + {5, 270}, // 0x57 W + {5, 275}, // 0x58 X + {5, 280}, // 0x59 Y + {5, 285}, // 0x5A Z + {5, 290}, // 0x5B [ + {5, 295}, // 0x5C back + {5, 300}, // 0x5D ] + {5, 305}, // 0x5E ^ + {5, 310}, // 0x5F _ + {5, 315}, // 0x60 ` + {5, 320}, // 0x61 a + {5, 325}, // 0x62 b + {5, 330}, // 0x63 c + {5, 335}, // 0x64 d + {5, 340}, // 0x65 e + {5, 345}, // 0x66 f + {5, 350}, // 0x67 g + {5, 355}, // 0x68 h + {5, 360}, // 0x69 i + {5, 365}, // 0x6A j + {5, 370}, // 0x6B k + {5, 375}, // 0x6C l + {5, 380}, // 0x6D m + {5, 385}, // 0x6E n + {5, 390}, // 0x6F o + {5, 395}, // 0x70 p + {5, 400}, // 0x71 q + {5, 405}, // 0x72 r + {5, 410}, // 0x73 s + {5, 415}, // 0x74 t + {5, 420}, // 0x75 u + {5, 425}, // 0x76 v + {5, 430}, // 0x77 w + {5, 435}, // 0x78 x + {5, 440}, // 0x79 y + {5, 445}, // 0x7A z + {5, 450}, // 0x7B { + {5, 455}, // 0x7C | + {5, 460}, // 0x7D } + {5, 465}, // 0x7E ~ +}; + +/* Font information for Arial 6pt */ +const GFX_font_t font5x7Info = { + .heightPixels = 8, + .startChar = '!', + .endChar = '~', + .interspacePixels = 1, + .spacePixels = 3, + .charInfo = font5x7Descriptors, + .data = font5x7, +}; diff --git a/firmware/shared_libs/bitmaps/bitmap_fonts.h b/firmware/shared_libs/bitmaps/bitmap_fonts.h new file mode 100644 index 0000000..8db9ac8 --- /dev/null +++ b/firmware/shared_libs/bitmaps/bitmap_fonts.h @@ -0,0 +1,6 @@ +#pragma once + +/* Font data for standard 5x7t */ +extern const uint8_t font5x7[]; +extern const GFX_font_t font5x7Info; +extern const GFX_fontChar_t font5x7Descriptors[];