diff --git a/firmware/include/fonts/BrailleFont.h b/firmware/include/fonts/BrailleFont.h index ae4b8065..47c7923d 100644 --- a/firmware/include/fonts/BrailleFont.h +++ b/firmware/include/fonts/BrailleFont.h @@ -7,7 +7,7 @@ class BrailleFont final : public FontModule { private: - const std::vector ascii = { + inline static const std::vector ascii = { { // 0x20, SPACE {}, diff --git a/firmware/include/fonts/LargeFont.h b/firmware/include/fonts/LargeFont.h index 5b99d111..a774a1e3 100644 --- a/firmware/include/fonts/LargeFont.h +++ b/firmware/include/fonts/LargeFont.h @@ -5,7 +5,7 @@ class LargeFont final : public FontModule { private: - const std::vector ascii = { + inline static const std::vector ascii = { { // 0x20, SPACE {}, @@ -123,7 +123,7 @@ class LargeFont final : public FontModule }, }; - const std::vector unicode = { + inline static const std::vector unicode = { { 0x3C0, // π GREEK SMALL LETTER PI { diff --git a/firmware/include/fonts/MediumBoldFont.h b/firmware/include/fonts/MediumBoldFont.h index d19ec296..e4c37095 100644 --- a/firmware/include/fonts/MediumBoldFont.h +++ b/firmware/include/fonts/MediumBoldFont.h @@ -5,7 +5,7 @@ class MediumBoldFont final : public FontModule { private: - const std::vector ascii = { + inline static const std::vector ascii = { { // 0x20, SPACE {}, @@ -75,7 +75,7 @@ class MediumBoldFont final : public FontModule 0b011110, 0b111111, 0b000011, - 0b011111, + 0b001111, 0b000011, 0b111111, 0b011110, @@ -106,7 +106,7 @@ class MediumBoldFont final : public FontModule 0b111110, 0b000011, 0b111111, - 0b111110, + 0b011110, }, 0, 0, diff --git a/firmware/include/fonts/MediumFont.h b/firmware/include/fonts/MediumFont.h index 63e3daf1..edc1f8e8 100644 --- a/firmware/include/fonts/MediumFont.h +++ b/firmware/include/fonts/MediumFont.h @@ -5,7 +5,7 @@ class MediumFont final : public FontModule { private: - const std::vector ascii = { + inline static const std::vector ascii = { { // 0x20, SPACE {}, diff --git a/firmware/include/fonts/MediumRegularFont.h b/firmware/include/fonts/MediumRegularFont.h new file mode 100644 index 00000000..f17e0841 --- /dev/null +++ b/firmware/include/fonts/MediumRegularFont.h @@ -0,0 +1,269 @@ +#pragma once + +#include "modules/FontModule.h" + +class MediumRegularFont final : public FontModule +{ +private: + inline static const std::vector ascii = { + { + // 0x20, SPACE + {}, + 6, + 0, + }, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + { + // 0x30, 0 + { + 0b011110, + 0b110011, + 0b110011, + 0b110011, + 0b110011, + 0b110011, + 0b011110, + }, + 0, + 0, + }, + { + // 0x31, 1 + { + 0b0011, + 0b0111, + 0b1111, + 0b0011, + 0b0011, + 0b0011, + 0b0011, + }, + 0, + 0, + }, + { + // 0x32, 2 + { + 0b011110, + 0b110011, + 0b000011, + 0b001110, + 0b011000, + 0b110000, + 0b111111, + }, + 0, + 0, + }, + { + // 0x33, 3 + { + 0b011110, + 0b110011, + 0b000011, + 0b001110, + 0b000011, + 0b110011, + 0b011110, + }, + 0, + 0, + }, + { + // 0x34, 4 + { + 0b110011, + 0b110011, + 0b110011, + 0b011111, + 0b000011, + 0b000011, + 0b000011, + }, + 0, + 0, + }, + { + // 0x35, 5 + { + 0b111111, + 0b110000, + 0b110000, + 0b111110, + 0b000011, + 0b110011, + 0b011110, + }, + 0, + 0, + }, + { + // 0x36, 6 + { + 0b011110, + 0b110011, + 0b110000, + 0b111110, + 0b110011, + 0b110011, + 0b011110, + }, + 0, + 0, + }, + { + // 0x37, 7 + { + 0b111111, + 0b000011, + 0b000110, + 0b001100, + 0b001100, + 0b001100, + 0b001100, + }, + 0, + 0, + }, + { + // 0x38, 8 + { + 0b011110, + 0b110011, + 0b110011, + 0b011110, + 0b110011, + 0b110011, + 0b011110, + }, + 0, + 0, + }, + { + // 0x39, 9 + { + 0b011110, + 0b110011, + 0b110011, + 0b011111, + 0b000011, + 0b110011, + 0b011110, + }, + 0, + 0, + }, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + { + // 0x49, I + { + 0b111111, + 0b001100, + 0b001100, + 0b001100, + 0b001100, + 0b001100, + 0b111111, + }, + 0, + 0, + }, + {}, + {}, + {}, + {}, + {}, + { + // 0x4F, O + { + 0b011110, + 0b111111, + 0b110011, + 0b110011, + 0b110011, + 0b111111, + 0b011110, + }, + 0, + 0, + }, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + { + // 0x6F, o + { + 0b01110, + 0b11111, + 0b11011, + 0b11111, + 0b01110, + }, + 0, + 0, + }, + }; + +public: + explicit MediumRegularFont(); + + [[nodiscard]] Symbol getChar(uint32_t character) const override; +}; + +extern MediumRegularFont *FontMediumRegular; diff --git a/firmware/include/fonts/MicroFont.h b/firmware/include/fonts/MicroFont.h index f83b20b4..a76606b0 100644 --- a/firmware/include/fonts/MicroFont.h +++ b/firmware/include/fonts/MicroFont.h @@ -5,7 +5,7 @@ class MicroFont final : public FontModule { private: - const std::vector ascii = { + inline static const std::vector ascii = { { // 0x20, SPACE {}, @@ -630,7 +630,7 @@ class MicroFont final : public FontModule }, }; - const std::vector unicode = { + inline static const std::vector unicode = { { 0xB0, // ° DEGREE SIGN { diff --git a/firmware/include/fonts/MiniFont.h b/firmware/include/fonts/MiniFont.h index 3a92794a..776539bd 100644 --- a/firmware/include/fonts/MiniFont.h +++ b/firmware/include/fonts/MiniFont.h @@ -5,7 +5,7 @@ class MiniFont final : public FontModule { private: - const std::vector ascii = { + inline static const std::vector ascii = { { // 0x20, SPACE {}, @@ -842,7 +842,7 @@ class MiniFont final : public FontModule }, }; - const std::vector unicode = { + inline static const std::vector unicode = { { 0xB0, // ° DEGREE SIGN { diff --git a/firmware/include/fonts/SmallFont.h b/firmware/include/fonts/SmallFont.h index 1b264eaf..98af9418 100644 --- a/firmware/include/fonts/SmallFont.h +++ b/firmware/include/fonts/SmallFont.h @@ -9,7 +9,7 @@ class SmallFont final : public FontModule { private: - const std::vector ascii = { + inline static const std::vector ascii = { { // 0x20, SPACE {}, @@ -1230,7 +1230,7 @@ class SmallFont final : public FontModule }, }; - const std::vector unicode = { + inline static const std::vector unicode = { { 0xB0, // ° DEGREE SIGN { diff --git a/firmware/include/services/FontsService.h b/firmware/include/services/FontsService.h index 311e6efc..4761ab46 100644 --- a/firmware/include/services/FontsService.h +++ b/firmware/include/services/FontsService.h @@ -4,6 +4,7 @@ #include "fonts/LargeFont.h" #include "fonts/MediumBoldFont.h" #include "fonts/MediumFont.h" +#include "fonts/MediumRegularFont.h" #include "fonts/MicroFont.h" #include "fonts/MiniFont.h" #include "fonts/SmallFont.h" @@ -22,6 +23,7 @@ class FontsService final : public ServiceModule new MiniFont(), new SmallFont(), new MediumFont(), + new MediumRegularFont(), new MediumBoldFont(), new LargeFont(), }; diff --git a/firmware/src/fonts/MediumBoldFont.cpp b/firmware/src/fonts/MediumBoldFont.cpp index ce2d26e5..40ba6b0e 100644 --- a/firmware/src/fonts/MediumBoldFont.cpp +++ b/firmware/src/fonts/MediumBoldFont.cpp @@ -1,7 +1,5 @@ #include "fonts/MediumBoldFont.h" -#include "fonts/MediumFont.h" - MediumBoldFont *FontMediumBold = nullptr; MediumBoldFont::MediumBoldFont() : FontModule("Medium bold") { FontMediumBold = this; } @@ -12,5 +10,5 @@ FontModule::Symbol MediumBoldFont::getChar(uint32_t character) const { return ascii[character - 0x20]; } - return FontMedium->getChar(character); + return {}; } diff --git a/firmware/src/fonts/MediumRegularFont.cpp b/firmware/src/fonts/MediumRegularFont.cpp new file mode 100644 index 00000000..9e90e7d7 --- /dev/null +++ b/firmware/src/fonts/MediumRegularFont.cpp @@ -0,0 +1,14 @@ +#include "fonts/MediumRegularFont.h" + +MediumRegularFont *FontMediumRegular = nullptr; + +MediumRegularFont::MediumRegularFont() : FontModule("Medium regular") { FontMediumRegular = this; } + +FontModule::Symbol MediumRegularFont::getChar(uint32_t character) const +{ + if (character >= 0x20 && character <= 0x7F && character < ascii.size() + 0x20) + { + return ascii[character - 0x20]; + } + return {}; +} diff --git a/firmware/src/modes/ClockMode.cpp b/firmware/src/modes/ClockMode.cpp index e83320f8..50962329 100644 --- a/firmware/src/modes/ClockMode.cpp +++ b/firmware/src/modes/ClockMode.cpp @@ -6,6 +6,7 @@ #include "extensions/HomeAssistantExtension.h" #include "fonts/MediumBoldFont.h" #include "fonts/MediumFont.h" +#include "fonts/MediumRegularFont.h" #include "fonts/MiniFont.h" #include "handlers/TextHandler.h" #include "services/DeviceService.h" @@ -60,6 +61,7 @@ void ClockMode::configure() fonts = { FontMini, FontMedium, + FontMediumRegular, FontMediumBold, };