From 655f1dc5aebe7f6af62a0a62ba6cfbedf123132f Mon Sep 17 00:00:00 2001 From: PoliEcho Date: Tue, 16 Sep 2025 10:05:09 +0200 Subject: [PATCH] partialy works --- CMakeLists.txt | 1 + GC9A01/gc9a01.c | 41 ++++++- GC9A01/gc9a01.h | 1 + display.cpp | 52 +++++---- display.h | 5 + fonts/Flexi_IBM_VGA_True10pt7b.h | 181 +++++++++++++++++++++++++++++++ fonts/Font5x7FixedMono.h | 144 ++++++++++++++++++++++++ smart_alarm.cpp | 11 +- 8 files changed, 408 insertions(+), 28 deletions(-) create mode 100644 display.h create mode 100644 fonts/Flexi_IBM_VGA_True10pt7b.h create mode 100644 fonts/Font5x7FixedMono.h diff --git a/CMakeLists.txt b/CMakeLists.txt index f792601..1272bef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,6 +52,7 @@ target_include_directories(smart_alarm PRIVATE ${CMAKE_CURRENT_LIST_DIR} ${CMAKE_CURRENT_LIST_DIR}/.. # for our common lwipopts or any other standard includes, if required ${CMAKE_CURRENT_LIST_DIR}/GC9A01 + ${CMAKE_CURRENT_LIST_DIR}/fonts ) # Add any user requested libraries diff --git a/GC9A01/gc9a01.c b/GC9A01/gc9a01.c index f222f41..4ad4f1a 100644 --- a/GC9A01/gc9a01.c +++ b/GC9A01/gc9a01.c @@ -709,7 +709,7 @@ void gc9a01_text(gc9a01_GC9A01_obj_t *self, GFXfont *font, char *str, uint16_t x const uint16_t last = font->last; const uint8_t *font_data = font->bitmap; - if (fg_color == 0) + if (fg_color == 0) fg_color = _swap_bytes(WHITE); if (bg_color == 0) @@ -758,6 +758,45 @@ void gc9a01_text(gc9a01_GC9A01_obj_t *self, GFXfont *font, char *str, uint16_t x } } +void gc9a01_text_gfx(gc9a01_GC9A01_obj_t *self, GFXfont *font, char *str, uint16_t x0, uint16_t y0, uint16_t fg_color, uint16_t bg_color) { + const uint16_t first = font->first; + const uint16_t last = font->last; + const uint8_t *bitmap = font->bitmap; + const GFXglyph *glyph = font->glyph; + + uint16_t cursor_x = x0; + uint16_t cursor_y = y0; + + while (*str) { + char c = *str++; + if (c < first || c > last) continue; + + // Get glyph info for this character + GFXglyph *g = &glyph[c - first]; + uint8_t w = g->width; + uint8_t h = g->height; + int8_t xOffset = g->xOffset; + int8_t yOffset = g->yOffset; + uint8_t xAdvance = g->xAdvance; + uint32_t bitmapOffset = g->bitmapOffset; + + // Draw character bitmap + for (int y = 0; y < h; y++) { + for (int x = 0; x < w; x++) { + // Calculate bit position in packed bitmap + uint32_t bit_pos = bitmapOffset + (y * w + x); + uint8_t byte_val = bitmap[bit_pos / 8]; + uint8_t bit_mask = 1 << (7 - (bit_pos % 8)); + + uint16_t pixel_color = (byte_val & bit_mask) ? fg_color : bg_color; + gc9a01_draw_pixel(self, cursor_x + x + xOffset, cursor_y + y + yOffset, pixel_color); + } + } + + cursor_x += xAdvance; + } +} + void gc9a01_set_rotation(gc9a01_GC9A01_obj_t *self) { uint8_t madctl_value = GC9A01_MADCTL_BGR; diff --git a/GC9A01/gc9a01.h b/GC9A01/gc9a01.h index a13ba94..238d617 100644 --- a/GC9A01/gc9a01.h +++ b/GC9A01/gc9a01.h @@ -101,6 +101,7 @@ void gc9a01_set_rotation(gc9a01_GC9A01_obj_t *self); void gc9a01_hline(gc9a01_GC9A01_obj_t *self, uint16_t x, uint16_t y, uint16_t w, uint16_t color); void gc9a01_vline(gc9a01_GC9A01_obj_t *self, uint16_t x, uint16_t y, uint16_t w, uint16_t color); void gc9a01_text(gc9a01_GC9A01_obj_t *self, GFXfont *font, char *str, uint16_t x0, uint16_t y0, uint16_t fg_color, uint16_t bg_color); +void gc9a01_text_gfx(gc9a01_GC9A01_obj_t *self, GFXfont *font, char *str, uint16_t x0, uint16_t y0, uint16_t fg_color, uint16_t bg_color); uint8_t gc9a01_get_color(uint8_t bpp); uint16_t color565(uint8_t r, uint8_t g, uint8_t b); #ifdef __cplusplus diff --git a/display.cpp b/display.cpp index cb8745f..2af749e 100644 --- a/display.cpp +++ b/display.cpp @@ -7,8 +7,10 @@ #include "pico/time.h" #include "spi.h" #include -#include #include +#include "Font5x7FixedMono.h" + +#include "hardware/rtc.h" int32_t t_fine; uint16_t dig_T1; @@ -66,33 +68,45 @@ gc9a01_GC9A01_obj_t create_lcd() { return lcd; } +gc9a01_GC9A01_obj_t display; + +void draw_ui_circle() +{ + for (int i = 720; i > 0; i--) { + int x = 120 + (int)(119.0 * sin((180.0 + i / 2.0) * M_TWOPI / 360.0)); + int y = 120 + (int)(119.0 * cos((180.0 + i / 2.0) * M_TWOPI / 360.0)); + gc9a01_draw_pixel(&display, x, y, MAGENTA); + } +} + void display_start() { - int8_t rslt; char buf[10]; - gc9a01_GC9A01_obj_t lcd = create_lcd(); - uint16_t color = BLACK; + display = create_lcd(); - gc9a01_init(&lcd); + gc9a01_init(&display); sleep_ms(100); - gc9a01_fill(&lcd, 0); + gc9a01_fill(&display, BLACK); - GFXfont font = VGA1_16x32; - while (true) { - color = (color == BLACK) ? MAGENTA : BLACK; - for (int i = 720; i > 0; i--) { - int x = 120 + (int)(119.0 * sin((180.0 + i / 2.0) * M_TWOPI / 360.0)); - int y = 120 + (int)(119.0 * cos((180.0 + i / 2.0) * M_TWOPI / 360.0)); - gc9a01_draw_pixel(&lcd, x, y, color); - } + draw_ui_circle(); - volatile uint16_t c1 = RED; - volatile uint16_t c2 = GREEN; - gc9a01_text(&lcd, &font, "hello world", 120, 120, c1, c2); - sleep_ms(1000); +} + +void print_time() { + datetime_t t; + if (rtc_get_datetime(&t)) { + GFXfont font = VGA1_16x32; + char buf[11]; + sprintf(buf,"%02d:%02d:%02d", t.hour, t.min, t.sec); + gc9a01_text(&display,&font,buf,120-((16*8)/2),120-16,WHITE, BLACK); + + font = Font5x7FixedMono; + sprintf(buf,"%02d.%02d.%04d",t.day,t.month,t.year); + gc9a01_text_gfx(&display,&font,buf,120-((16*10)/2),((120-16)+32)+32,WHITE, BLACK); + } else { + printf("failed to get rtc\n"); } - free(lcd.i2c_buffer); } diff --git a/display.h b/display.h new file mode 100644 index 0000000..debdd85 --- /dev/null +++ b/display.h @@ -0,0 +1,5 @@ +#ifndef SMART_ALARM_DISPLAY_H +#define SMART_ALARM_DISPLAY_H +void display_start(); +void print_time(); +#endif //SMART_ALARM_DISPLAY_H \ No newline at end of file diff --git a/fonts/Flexi_IBM_VGA_True10pt7b.h b/fonts/Flexi_IBM_VGA_True10pt7b.h new file mode 100644 index 0000000..b7a5277 --- /dev/null +++ b/fonts/Flexi_IBM_VGA_True10pt7b.h @@ -0,0 +1,181 @@ +#include "gfxfont.h" +const uint8_t Flexi_IBM_VGA_True10pt7bBitmaps[] = { + 0x00, 0x6E, 0xFF, 0xE6, 0x66, 0x60, 0x66, 0x60, 0xCF, 0x3C, 0xF2, 0x48, + 0x6C, 0xD9, 0xB7, 0xF6, 0xCD, 0x9B, 0x36, 0xFE, 0xD9, 0xB3, 0x60, 0x10, + 0x30, 0x63, 0xCC, 0xD8, 0xF0, 0xE0, 0x7C, 0x08, 0x10, 0x38, 0x70, 0xB1, + 0x3C, 0x18, 0x30, 0xC3, 0x8B, 0x30, 0xC1, 0x86, 0x18, 0x22, 0xC7, 0x0C, + 0x38, 0xD1, 0xB3, 0x43, 0x8E, 0xF7, 0x6E, 0xCD, 0x9B, 0x36, 0x67, 0x60, + 0x6D, 0xAC, 0x36, 0xCC, 0xCC, 0xCC, 0xCC, 0xC6, 0x30, 0xC4, 0x62, 0x33, + 0x33, 0x32, 0x64, 0x80, 0x46, 0x7C, 0x3C, 0xFF, 0x3C, 0x7E, 0x30, 0xC3, + 0x3F, 0x30, 0xC0, 0x6D, 0xEC, 0xFE, 0xFC, 0x02, 0x0C, 0x10, 0x61, 0x82, + 0x0C, 0x30, 0x41, 0x82, 0x00, 0x38, 0x6C, 0x46, 0xC2, 0xC2, 0xDB, 0xDB, + 0xDB, 0xC2, 0xC2, 0x46, 0x6C, 0x38, 0x31, 0xCF, 0x3C, 0x30, 0xC3, 0x0C, + 0x30, 0xC3, 0x0C, 0xFC, 0x79, 0x9A, 0x18, 0x60, 0xC3, 0x0C, 0x18, 0x61, + 0x83, 0x16, 0x7F, 0xE0, 0x79, 0x88, 0x18, 0x30, 0x47, 0x01, 0x02, 0x06, + 0x0E, 0x16, 0x27, 0x80, 0x0C, 0x38, 0x71, 0xE6, 0xC9, 0xB3, 0x7F, 0x0C, + 0x18, 0x30, 0x61, 0xE0, 0xFF, 0x83, 0x06, 0x0C, 0x1F, 0x81, 0x03, 0x06, + 0x0E, 0x16, 0x27, 0x80, 0x38, 0xC1, 0x06, 0x0C, 0x1F, 0xB1, 0x63, 0xC7, + 0x8F, 0x16, 0x27, 0x80, 0xFF, 0x8E, 0x18, 0x30, 0xC1, 0x86, 0x08, 0x30, + 0x60, 0xC1, 0x83, 0x00, 0x7D, 0x8B, 0x1E, 0x3C, 0x6F, 0xB1, 0x63, 0xC7, + 0x8F, 0x1E, 0x27, 0xC0, 0x79, 0x8B, 0x1E, 0x3C, 0x6F, 0xC1, 0x83, 0x06, + 0x08, 0x30, 0xC7, 0x00, 0xFC, 0x0F, 0xC0, 0x6D, 0x80, 0x1B, 0xD8, 0x0C, + 0x61, 0x8C, 0x63, 0x0C, 0x18, 0x20, 0xC1, 0x83, 0xFC, 0x00, 0x00, 0xFC, + 0x83, 0x06, 0x0C, 0x30, 0x61, 0xC6, 0x31, 0x84, 0x30, 0x7D, 0x8B, 0x1E, + 0x60, 0xC3, 0x06, 0x0C, 0x18, 0x00, 0x60, 0xC1, 0x80, 0x7D, 0x8B, 0x1E, + 0x3D, 0xFB, 0xF7, 0xEE, 0xDD, 0x83, 0x03, 0xE0, 0x10, 0x71, 0xA6, 0x6C, + 0x78, 0xFF, 0xE3, 0xC7, 0x8F, 0x1E, 0x30, 0xF8, 0xC9, 0x9B, 0x36, 0x4F, + 0x19, 0x32, 0x66, 0xCD, 0x93, 0x2F, 0x80, 0x38, 0xD9, 0x1E, 0x1C, 0x18, + 0x30, 0x60, 0xC1, 0x85, 0x1B, 0x63, 0x80, 0xF0, 0xF1, 0xB3, 0x26, 0x6C, + 0xD9, 0xB3, 0x66, 0xC9, 0xB3, 0x4F, 0x00, 0xFE, 0xDD, 0x9B, 0x16, 0x8F, + 0x1A, 0x34, 0x60, 0xC5, 0x9B, 0x7F, 0xE0, 0xFE, 0xDD, 0x9B, 0x16, 0x8F, + 0x1A, 0x34, 0x60, 0xC1, 0x83, 0x0F, 0x00, 0x38, 0xD9, 0x16, 0x1C, 0x18, + 0x30, 0x6F, 0xC7, 0x8D, 0x1B, 0x33, 0xA0, 0xC7, 0x8F, 0x1E, 0x3C, 0x7F, + 0xF1, 0xE3, 0xC7, 0x8F, 0x1E, 0x3C, 0x60, 0xF6, 0x66, 0x66, 0x66, 0x66, + 0x66, 0xF0, 0x1E, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0xCD, 0x9B, 0x36, + 0x47, 0x80, 0xE6, 0xCD, 0x9B, 0x66, 0xCF, 0x1C, 0x3C, 0x6C, 0xD9, 0x9B, + 0x3E, 0x60, 0xF0, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC5, 0x9B, + 0x7F, 0xE0, 0xC3, 0xC7, 0xEF, 0xFF, 0xFF, 0xDB, 0xD3, 0xC3, 0xC3, 0xC3, + 0xC3, 0xC3, 0xC3, 0xC7, 0x8F, 0x9F, 0xBF, 0xFF, 0xF7, 0xE7, 0xCF, 0x8F, + 0x1E, 0x3C, 0x60, 0x79, 0x8B, 0x1E, 0x3C, 0x78, 0xF1, 0xE3, 0xC7, 0x8F, + 0x1E, 0x27, 0x80, 0xFC, 0xC9, 0x9B, 0x36, 0x4F, 0x98, 0x30, 0x60, 0xC1, + 0x83, 0x0F, 0x00, 0x79, 0x8B, 0x1E, 0x3C, 0x78, 0xF1, 0xE3, 0xC7, 0xAF, + 0x56, 0xE7, 0xC1, 0x83, 0x80, 0xF8, 0xC9, 0x9B, 0x36, 0x4F, 0x9B, 0x36, + 0x64, 0xCD, 0x9B, 0x3E, 0x60, 0x79, 0x8B, 0x1E, 0x36, 0x06, 0x06, 0x06, + 0x0D, 0x8F, 0x1E, 0x27, 0x80, 0xFF, 0xDF, 0x9B, 0x99, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0xC7, 0x8F, 0x1E, 0x3C, 0x78, 0xF1, + 0xE3, 0xC7, 0x8F, 0x1E, 0x27, 0x80, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, + 0xC2, 0xC2, 0xC6, 0x66, 0x3C, 0x38, 0x10, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, + 0xC3, 0xC3, 0xDB, 0xDB, 0xDE, 0x7E, 0x66, 0x66, 0xC3, 0xC2, 0xC6, 0x64, + 0x3C, 0x38, 0x18, 0x38, 0x3C, 0x6C, 0xC6, 0xC6, 0xC3, 0xC3, 0xC3, 0xC2, + 0xC6, 0x66, 0x3C, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0xFF, 0xC2, + 0x86, 0x8C, 0x0C, 0x18, 0x30, 0x30, 0x60, 0xC1, 0xC3, 0xC7, 0xFF, 0xFC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF0, 0x81, 0x03, 0x07, 0x06, 0x0E, 0x0E, + 0x0E, 0x0C, 0x1C, 0x18, 0x10, 0xF3, 0x33, 0x33, 0x33, 0x33, 0x33, 0xF0, + 0x10, 0x61, 0xE3, 0x6C, 0x60, 0xFF, 0xDB, 0x30, 0x78, 0x10, 0x33, 0xEC, + 0xD9, 0xB3, 0x66, 0x76, 0xE0, 0xC1, 0x83, 0x07, 0x8F, 0x9B, 0x32, 0x66, + 0xCD, 0x9B, 0x27, 0x80, 0x79, 0x9B, 0x1E, 0x0C, 0x18, 0x31, 0xE6, 0x78, + 0x1C, 0x18, 0x30, 0x63, 0xCD, 0x93, 0x66, 0xCD, 0x9B, 0x36, 0x67, 0x60, + 0x79, 0x9B, 0x17, 0xFC, 0x18, 0x30, 0xE6, 0x78, 0x39, 0xE6, 0xD9, 0x63, + 0xC6, 0x18, 0x61, 0x86, 0x18, 0xF0, 0x77, 0x9B, 0x36, 0x6C, 0xD9, 0xB3, + 0x66, 0x7C, 0x1A, 0x36, 0x47, 0x80, 0xE0, 0xC1, 0x83, 0x06, 0x8F, 0x99, + 0xB3, 0x66, 0xCD, 0x9B, 0x3E, 0x60, 0x66, 0x60, 0xE6, 0x66, 0x66, 0x66, + 0xF0, 0x0C, 0x30, 0x80, 0x1C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0F, 0x3C, + 0xF2, 0x70, 0xE0, 0xC1, 0x83, 0x06, 0x6D, 0x9E, 0x38, 0x78, 0xD1, 0xB3, + 0x2E, 0x60, 0xE6, 0x66, 0x66, 0x66, 0x66, 0x66, 0xF0, 0xE4, 0xFE, 0xFE, + 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDC, 0xC9, 0x9B, 0x36, 0x6C, 0xD9, + 0xB3, 0x66, 0x79, 0x8B, 0x1E, 0x3C, 0x78, 0xF1, 0xE2, 0x78, 0xDC, 0xC9, + 0x9B, 0x36, 0x6C, 0xD9, 0xB2, 0x78, 0xC1, 0x83, 0x0F, 0x00, 0x77, 0x9B, + 0x36, 0x6C, 0xD9, 0xB3, 0x66, 0x7C, 0x18, 0x30, 0x61, 0xE0, 0xD8, 0xE9, + 0x9B, 0x36, 0x0C, 0x18, 0x30, 0xF0, 0x79, 0x9B, 0x1B, 0x03, 0x83, 0xA3, + 0x63, 0x7C, 0x10, 0x60, 0xC1, 0x8F, 0xC6, 0x0C, 0x18, 0x30, 0x60, 0xD9, + 0xE1, 0x80, 0xCD, 0x9B, 0x36, 0x6C, 0xD9, 0xB3, 0x66, 0x76, 0xC3, 0xC3, + 0xC3, 0xC2, 0xC6, 0x66, 0x7C, 0x38, 0x10, 0xC3, 0xC3, 0xC3, 0xC3, 0xDB, + 0xDB, 0xFE, 0xFE, 0x64, 0xC3, 0x66, 0x6C, 0x38, 0x18, 0x38, 0x6C, 0x66, + 0xC3, 0xC7, 0x8F, 0x1E, 0x3C, 0x78, 0xF1, 0xE3, 0x7E, 0x08, 0x30, 0xCF, + 0x00, 0xFF, 0x9A, 0x60, 0x83, 0x0C, 0x31, 0x67, 0xFE, 0x1C, 0xC3, 0x0C, + 0x23, 0x82, 0x0C, 0x30, 0xC3, 0x0C, 0x1C, 0xFF, 0xC3, 0xFF, 0xC0, 0xE0, + 0x83, 0x0C, 0x30, 0x73, 0x0C, 0x30, 0xC3, 0x08, 0xE0, 0x77, 0xB8 }; + +const GFXglyph Flexi_IBM_VGA_True10pt7bGlyphs[] = { + { 0, 1, 1, 8, 0, 0 }, // 0x20 ' ' + { 1, 4, 13, 8, 2, -12 }, // 0x21 '!' + { 8, 6, 5, 8, 1, -13 }, // 0x22 '"' + { 12, 7, 12, 8, 0, -11 }, // 0x23 '#' + { 23, 7, 18, 8, 0, -15 }, // 0x24 '$' + { 39, 7, 10, 8, 0, -9 }, // 0x25 '%' + { 48, 7, 13, 8, 0, -12 }, // 0x26 '&' + { 60, 3, 5, 8, 1, -13 }, // 0x27 ''' + { 62, 4, 13, 8, 2, -12 }, // 0x28 '(' + { 69, 4, 13, 8, 2, -12 }, // 0x29 ')' + { 76, 8, 6, 8, 0, -8 }, // 0x2A '*' + { 82, 6, 6, 8, 1, -8 }, // 0x2B '+' + { 87, 3, 5, 8, 2, -3 }, // 0x2C ',' + { 89, 7, 1, 8, 0, -5 }, // 0x2D '-' + { 90, 2, 3, 8, 3, -2 }, // 0x2E '.' + { 91, 7, 11, 8, 0, -10 }, // 0x2F '/' + { 101, 8, 13, 8, 0, -12 }, // 0x30 '0' + { 114, 6, 13, 8, 1, -12 }, // 0x31 '1' + { 124, 7, 13, 8, 0, -12 }, // 0x32 '2' + { 136, 7, 13, 8, 0, -12 }, // 0x33 '3' + { 148, 7, 13, 8, 0, -12 }, // 0x34 '4' + { 160, 7, 13, 8, 0, -12 }, // 0x35 '5' + { 172, 7, 13, 8, 0, -12 }, // 0x36 '6' + { 184, 7, 13, 8, 0, -12 }, // 0x37 '7' + { 196, 7, 13, 8, 0, -12 }, // 0x38 '8' + { 208, 7, 13, 8, 0, -12 }, // 0x39 '9' + { 220, 2, 9, 8, 3, -9 }, // 0x3A ':' + { 223, 3, 10, 8, 2, -9 }, // 0x3B ';' + { 227, 6, 12, 8, 1, -11 }, // 0x3C '<' + { 236, 6, 5, 8, 1, -8 }, // 0x3D '=' + { 240, 6, 12, 8, 1, -11 }, // 0x3E '>' + { 249, 7, 13, 8, 0, -12 }, // 0x3F '?' + { 261, 7, 12, 8, 0, -11 }, // 0x40 '@' + { 272, 7, 12, 8, 0, -11 }, // 0x41 'A' + { 283, 7, 13, 8, 0, -12 }, // 0x42 'B' + { 295, 7, 13, 8, 0, -12 }, // 0x43 'C' + { 307, 7, 13, 8, 0, -12 }, // 0x44 'D' + { 319, 7, 13, 8, 0, -12 }, // 0x45 'E' + { 331, 7, 13, 8, 0, -12 }, // 0x46 'F' + { 343, 7, 13, 8, 0, -12 }, // 0x47 'G' + { 355, 7, 13, 8, 0, -12 }, // 0x48 'H' + { 367, 4, 13, 8, 2, -12 }, // 0x49 'I' + { 374, 7, 13, 8, 0, -12 }, // 0x4A 'J' + { 386, 7, 13, 8, 0, -12 }, // 0x4B 'K' + { 398, 7, 13, 8, 0, -12 }, // 0x4C 'L' + { 410, 8, 13, 8, 0, -12 }, // 0x4D 'M' + { 423, 7, 13, 8, 0, -12 }, // 0x4E 'N' + { 435, 7, 13, 8, 0, -12 }, // 0x4F 'O' + { 447, 7, 13, 8, 0, -12 }, // 0x50 'P' + { 459, 7, 15, 8, 0, -12 }, // 0x51 'Q' + { 473, 7, 13, 8, 0, -12 }, // 0x52 'R' + { 485, 7, 13, 8, 0, -12 }, // 0x53 'S' + { 497, 8, 13, 8, 0, -12 }, // 0x54 'T' + { 510, 7, 13, 8, 0, -12 }, // 0x55 'U' + { 522, 8, 13, 8, 0, -12 }, // 0x56 'V' + { 535, 8, 13, 8, 0, -12 }, // 0x57 'W' + { 548, 8, 13, 8, 0, -12 }, // 0x58 'X' + { 561, 8, 13, 8, 0, -12 }, // 0x59 'Y' + { 574, 8, 13, 8, 0, -12 }, // 0x5A 'Z' + { 587, 4, 13, 8, 2, -12 }, // 0x5B '[' + { 594, 7, 12, 8, 0, -11 }, // 0x5C '\' + { 605, 4, 13, 8, 2, -12 }, // 0x5D ']' + { 612, 7, 5, 8, 0, -14 }, // 0x5E '^' + { 617, 8, 1, 8, 0, 2 }, // 0x5F '_' + { 618, 3, 4, 8, 2, -15 }, // 0x60 '`' + { 620, 7, 9, 8, 0, -8 }, // 0x61 'a' + { 628, 7, 13, 8, 0, -12 }, // 0x62 'b' + { 640, 7, 9, 8, 0, -8 }, // 0x63 'c' + { 648, 7, 13, 8, 0, -12 }, // 0x64 'd' + { 660, 7, 9, 8, 0, -8 }, // 0x65 'e' + { 668, 6, 13, 8, 0, -12 }, // 0x66 'f' + { 678, 7, 13, 8, 0, -8 }, // 0x67 'g' + { 690, 7, 13, 8, 0, -12 }, // 0x68 'h' + { 702, 4, 13, 8, 2, -12 }, // 0x69 'i' + { 709, 6, 17, 8, 1, -12 }, // 0x6A 'j' + { 722, 7, 13, 8, 0, -12 }, // 0x6B 'k' + { 734, 4, 13, 8, 2, -12 }, // 0x6C 'l' + { 741, 8, 9, 8, 0, -8 }, // 0x6D 'm' + { 750, 7, 9, 8, 0, -8 }, // 0x6E 'n' + { 758, 7, 9, 8, 0, -8 }, // 0x6F 'o' + { 766, 7, 13, 8, 0, -8 }, // 0x70 'p' + { 778, 7, 13, 8, 0, -8 }, // 0x71 'q' + { 790, 7, 9, 8, 0, -8 }, // 0x72 'r' + { 798, 7, 9, 8, 0, -8 }, // 0x73 's' + { 806, 7, 13, 8, 0, -12 }, // 0x74 't' + { 818, 7, 9, 8, 0, -8 }, // 0x75 'u' + { 826, 8, 9, 8, 0, -8 }, // 0x76 'v' + { 835, 8, 9, 8, 0, -8 }, // 0x77 'w' + { 844, 8, 9, 8, 0, -8 }, // 0x78 'x' + { 853, 7, 13, 8, 0, -8 }, // 0x79 'y' + { 865, 7, 9, 8, 0, -8 }, // 0x7A 'z' + { 873, 6, 13, 8, 1, -12 }, // 0x7B '{' + { 883, 2, 13, 8, 3, -12 }, // 0x7C '|' + { 887, 6, 13, 8, 1, -12 }, // 0x7D '}' + { 897, 7, 2, 8, 0, -12 } }; // 0x7E '~' + +const GFXfont Flexi_IBM_VGA_True10pt7b = { + (uint8_t *)Flexi_IBM_VGA_True10pt7bBitmaps, + (GFXglyph *)Flexi_IBM_VGA_True10pt7bGlyphs, + 0x20, 0x7E, 20 }; + +// Approx. 1571 bytes diff --git a/fonts/Font5x7FixedMono.h b/fonts/Font5x7FixedMono.h new file mode 100644 index 0000000..78c9a1c --- /dev/null +++ b/fonts/Font5x7FixedMono.h @@ -0,0 +1,144 @@ +/** +** fixed monospaced font 5x7 +* +* +* Author Rob Jennings +*/ +#include "gfxfont.h" +const uint8_t FixedMono5x7Bitmaps[] = { + 0xFA, 0xB4, 0x52, 0xBE, 0xAF, 0xA9, 0x40, 0x23, 0xE8, 0xE2, 0xF8, 0x80, + 0xC6, 0x44, 0x44, 0x4C, 0x60, 0x64, 0xA8, 0x8A, 0xC9, 0xA0, 0xD8, 0x00, + 0x6A, 0xA4, 0x00, 0x95, 0x58, 0x00, 0x25, 0x5D, 0xF7, 0x54, 0x80, 0x21, + 0x3E, 0x42, 0x00, 0xD0, 0xF8, 0x00, 0xF0, 0x08, 0x88, 0x88, 0x00, 0x74, + 0x67, 0x5C, 0xC5, 0xC0, 0x59, 0x24, 0xB8, 0x00, 0x74, 0x42, 0x22, 0x23, + 0xE0, 0xF8, 0x88, 0x20, 0xC5, 0xC0, 0x11, 0x95, 0x2F, 0x88, 0x40, 0xFC, + 0x21, 0xE0, 0xC5, 0xC0, 0x32, 0x21, 0xE8, 0xC5, 0xC0, 0xF8, 0x44, 0x44, + 0x21, 0x00, 0x74, 0x62, 0xE8, 0xC5, 0xC0, 0x74, 0x62, 0xF0, 0x89, 0x80, + 0xF3, 0xC0, 0xF3, 0x60, 0x12, 0x48, 0x42, 0x10, 0xF8, 0x3E, 0x00, 0x84, + 0x21, 0x24, 0x80, 0x74, 0x42, 0x22, 0x00, 0x80, 0x74, 0x6B, 0x7B, 0xC1, + 0xC0, 0x22, 0xA3, 0xF8, 0xC6, 0x20, 0xF4, 0x63, 0xE8, 0xC7, 0xC0, 0x74, + 0x61, 0x08, 0x45, 0xC0, 0xE4, 0xA3, 0x18, 0xCB, 0x80, 0xFC, 0x21, 0xE8, + 0x43, 0xE0, 0xFC, 0x21, 0xE8, 0x42, 0x00, 0x74, 0x61, 0x38, 0xC5, 0xC0, + 0x8C, 0x63, 0xF8, 0xC6, 0x20, 0xE9, 0x24, 0xB8, 0x00, 0x38, 0x41, 0x04, + 0x12, 0x46, 0x00, 0x8C, 0xA9, 0x8A, 0x4A, 0x20, 0x84, 0x21, 0x08, 0x43, + 0xE0, 0x8E, 0xEB, 0x18, 0xC6, 0x20, 0x8C, 0x73, 0x59, 0xC6, 0x20, 0x74, + 0x63, 0x18, 0xC5, 0xC0, 0xF4, 0x63, 0xE8, 0x42, 0x00, 0x74, 0x63, 0x1A, + 0xC9, 0xA0, 0xF4, 0x63, 0xEA, 0x4A, 0x20, 0x7C, 0x20, 0xE0, 0x87, 0xC0, + 0xF9, 0x08, 0x42, 0x10, 0x80, 0x8C, 0x63, 0x18, 0xC5, 0xC0, 0x8C, 0x63, + 0x18, 0xA8, 0x80, 0x8C, 0x63, 0x1A, 0xEE, 0x20, 0x8C, 0x54, 0x45, 0x46, + 0x20, 0x8C, 0x54, 0x42, 0x10, 0x80, 0xF8, 0x44, 0x44, 0x43, 0xE0, 0xF2, + 0x49, 0x38, 0x00, 0x82, 0x08, 0x20, 0x80, 0xE4, 0x92, 0x78, 0x00, 0x22, + 0xA2, 0x00, 0xF8, 0x88, 0x80, 0x70, 0x5F, 0x17, 0x80, 0x84, 0x3D, 0x18, + 0xC7, 0xC0, 0x7C, 0x21, 0x07, 0x80, 0x08, 0x5F, 0x18, 0xC5, 0xE0, 0x74, + 0x7F, 0x07, 0x00, 0x25, 0x4E, 0x44, 0x40, 0x7C, 0x5E, 0x17, 0x00, 0x84, + 0x3D, 0x18, 0xC6, 0x20, 0xBE, 0x10, 0x11, 0x19, 0x60, 0x88, 0x9A, 0xCA, + 0x90, 0xFE, 0x00, 0xDD, 0x6B, 0x18, 0x80, 0xB6, 0x63, 0x18, 0x80, 0x74, + 0x63, 0x17, 0x00, 0xF4, 0x7D, 0x08, 0x00, 0x7C, 0x5E, 0x10, 0x80, 0xB6, + 0x61, 0x08, 0x00, 0x7C, 0x1C, 0x1F, 0x00, 0x21, 0x3E, 0x42, 0x14, 0x40, + 0x8C, 0x63, 0x17, 0x00, 0x8C, 0x62, 0xA2, 0x00, 0x8C, 0x6B, 0x55, 0x00, + 0x8A, 0x88, 0xA8, 0x80, 0x8C, 0x5E, 0x17, 0x00, 0xF8, 0x88, 0x8F, 0x80, + 0x29, 0x44, 0x88, 0x00, 0xFE, 0x00, 0xA2, 0x14, 0xA0, 0x00, 0xED, 0xC0 +}; + +const GFXglyph FixedMono5x7Glyphs[] = { + { 0, 0, 1, 6, 0, 0 } // ' ' + ,{ 0, 1, 7, 6, 2, -7 } // '!' + ,{ 1, 3, 2, 6, 1, -7 } // '"' + ,{ 2, 5, 7, 6, 0, -7 } // '#' + ,{ 7, 5, 7, 6, 0, -7 } // '$' + ,{ 12, 5, 7, 6, 0, -7 } // '%' + ,{ 17, 5, 7, 6, 0, -7 } // '&' + ,{ 22, 2, 3, 6, 1, -7 } // ''' + ,{ 24, 2, 7, 6, 2, -7 } // '(' + ,{ 27, 2, 7, 6, 1, -7 } // ')' + ,{ 30, 5, 7, 6, 0, -7 } // '*' + ,{ 35, 5, 5, 6, 0, -6 } // '+' + ,{ 39, 2, 2, 6, 1, -2 } // ',' + ,{ 40, 5, 1, 6, 0, -4 } // '-' + ,{ 42, 2, 2, 6, 1, -2 } // '.' + ,{ 43, 5, 5, 6, 0, -6 } // '/' + ,{ 47, 5, 7, 6, 0, -7 } // '0' + ,{ 52, 3, 7, 6, 1, -7 } // '1' + ,{ 56, 5, 7, 6, 0, -7 } // '2' + ,{ 61, 5, 7, 6, 0, -7 } // '3' + ,{ 66, 5, 7, 6, 0, -7 } // '4' + ,{ 71, 5, 7, 6, 0, -7 } // '5' + ,{ 76, 5, 7, 6, 0, -7 } // '6' + ,{ 81, 5, 7, 6, 0, -7 } // '7' + ,{ 86, 5, 7, 6, 0, -7 } // '8' + ,{ 91, 5, 7, 6, 0, -7 } // '9' + ,{ 96, 2, 5, 6, 1, -6 } // ':' + ,{ 98, 2, 6, 6, 1, -6 } // ';' + ,{ 100, 4, 7, 6, 0, -7 } // '<' + ,{ 104, 5, 3, 6, 0, -5 } // '=' + ,{ 107, 4, 7, 6, 1, -7 } // '>' + ,{ 111, 5, 7, 6, 0, -7 } // '?' + ,{ 116, 5, 7, 6, 0, -7 } // '@' + ,{ 121, 5, 7, 6, 0, -7 } // 'A' + ,{ 126, 5, 7, 6, 0, -7 } // 'B' + ,{ 131, 5, 7, 6, 0, -7 } // 'C' + ,{ 136, 5, 7, 6, 0, -7 } // 'D' + ,{ 141, 5, 7, 6, 0, -7 } // 'E' + ,{ 146, 5, 7, 6, 0, -7 } // 'F' + ,{ 151, 5, 7, 6, 0, -7 } // 'G' + ,{ 156, 5, 7, 6, 0, -7 } // 'H' + ,{ 161, 3, 7, 6, 1, -7 } // 'I' + ,{ 165, 6, 7, 6, 0, -7 } // 'J' + ,{ 171, 5, 7, 6, 0, -7 } // 'K' + ,{ 176, 5, 7, 6, 0, -7 } // 'L' + ,{ 181, 5, 7, 6, 0, -7 } // 'M' + ,{ 186, 5, 7, 6, 0, -7 } // 'N' + ,{ 191, 5, 7, 6, 0, -7 } // 'O' + ,{ 196, 5, 7, 6, 0, -7 } // 'P' + ,{ 201, 5, 7, 6, 0, -7 } // 'Q' + ,{ 206, 5, 7, 6, 0, -7 } // 'R' + ,{ 211, 5, 7, 6, 0, -7 } // 'S' + ,{ 216, 5, 7, 6, 0, -7 } // 'T' + ,{ 221, 5, 7, 6, 0, -7 } // 'U' + ,{ 226, 5, 7, 6, 0, -7 } // 'V' + ,{ 231, 5, 7, 6, 0, -7 } // 'W' + ,{ 236, 5, 7, 6, 0, -7 } // 'X' + ,{ 241, 5, 7, 6, 0, -7 } // 'Y' + ,{ 246, 5, 7, 6, 0, -7 } // 'Z' + ,{ 251, 3, 7, 6, 1, -7 } // '[' + ,{ 255, 5, 5, 6, 0, -6 } // '\' + ,{ 259, 3, 7, 6, 1, -7 } // ']' + ,{ 263, 5, 3, 6, 0, -7 } // '^' + ,{ 266, 5, 1, 6, 0, -1 } // '_' + ,{ 267, 3, 3, 6, 1, -7 } // '`' + ,{ 269, 5, 5, 6, 0, -5 } // 'a' + ,{ 273, 5, 7, 6, 0, -7 } // 'b' + ,{ 278, 5, 5, 6, 0, -5 } // 'c' + ,{ 282, 5, 7, 6, 0, -7 } // 'd' + ,{ 287, 5, 5, 6, 0, -5 } // 'e' + ,{ 291, 4, 7, 6, 0, -7 } // 'f' + ,{ 295, 5, 5, 6, 0, -5 } // 'g' + ,{ 299, 5, 7, 6, 0, -7 } // 'h' + ,{ 304, 1, 7, 6, 2, -7 } // 'i' + ,{ 305, 4, 7, 6, 0, -7 } // 'j' + ,{ 309, 4, 7, 6, 0, -7 } // 'k' + ,{ 313, 1, 7, 6, 2, -7 } // 'l' + ,{ 315, 5, 5, 6, 0, -5 } // 'm' + ,{ 319, 5, 5, 6, 0, -5 } // 'n' + ,{ 323, 5, 5, 6, 0, -5 } // 'o' + ,{ 327, 5, 5, 6, 0, -5 } // 'p' + ,{ 331, 5, 5, 6, 0, -5 } // 'q' + ,{ 335, 5, 5, 6, 0, -5 } // 'r' + ,{ 339, 5, 5, 6, 0, -5 } // 's' + ,{ 343, 5, 7, 6, 0, -7 } // 't' + ,{ 348, 5, 5, 6, 0, -5 } // 'u' + ,{ 352, 5, 5, 6, 0, -5 } // 'v' + ,{ 356, 5, 5, 6, 0, -5 } // 'w' + ,{ 360, 5, 5, 6, 0, -5 } // 'x' + ,{ 364, 5, 5, 6, 0, -5 } // 'y' + ,{ 368, 5, 5, 6, 0, -5 } // 'z' + ,{ 372, 3, 7, 6, 1, -7 } // '{' + ,{ 376, 1, 7, 6, 2, -7 } // '|' + ,{ 378, 3, 7, 6, 1, -7 } // '}' + ,{ 382, 5, 2, 6, 0, -4 } // '~' +}; + +const GFXfont Font5x7FixedMono = { +(uint8_t *)FixedMono5x7Bitmaps, +(GFXglyph *)FixedMono5x7Glyphs, +0x20, 0x7E, 7}; \ No newline at end of file diff --git a/smart_alarm.cpp b/smart_alarm.cpp index 09f3795..0ea71a6 100644 --- a/smart_alarm.cpp +++ b/smart_alarm.cpp @@ -136,16 +136,11 @@ int main() { while (true) { // Keep the program running to allow SNTP to work - sleep_ms(1000); + // Optional: Print current time periodically to verify sync - datetime_t t; - if (rtc_get_datetime(&t)) { - printf("Current time: %04d-%02d-%02d %02d:%02d:%02d\n", t.year, t.month, - t.day, t.hour, t.min, t.sec); - } else { - printf("failed to get rtc\n"); - } + print_time(); + sleep_ms(500); } cyw43_arch_lwip_end(); return 0;