From e9bda35438a4e88b634471cd7cf0c24c25dcf27c Mon Sep 17 00:00:00 2001 From: Stanislav N Mikhailov Date: Wed, 25 Mar 2026 21:35:22 +0300 Subject: [PATCH] Refactor font module layout and integration --- CMakeLists.txt | 12 +++++++++++- font_data.h => include/Font/font_data.h | 5 +++-- main.c | 8 +++++--- font_data.c => src/Font/font_data.c | 13 +++++-------- 4 files changed, 24 insertions(+), 14 deletions(-) rename font_data.h => include/Font/font_data.h (50%) rename font_data.c => src/Font/font_data.c (99%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 043893b..f35a053 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,17 @@ set(CMAKE_CXX_STANDARD 17) pico_sdk_init() -add_executable(${PROJECT_NAME} main.c Thread.c font_data.c BackBuffer.c) +add_executable(${PROJECT_NAME} + main.c + Thread.c + src/Font/font_data.c + src/render/context.c + BackBuffer.c +) + +target_include_directories(${PROJECT_NAME} PRIVATE + include +) target_link_libraries(${PROJECT_NAME} pico_stdlib diff --git a/font_data.h b/include/Font/font_data.h similarity index 50% rename from font_data.h rename to include/Font/font_data.h index 7cffeed..6e54a9c 100644 --- a/font_data.h +++ b/include/Font/font_data.h @@ -3,11 +3,12 @@ #include #include +#include "display/render/context.h" extern const uint16_t font_width; extern const uint16_t font_height; extern const uint8_t font_data[]; -void draw_string(uint16_t x, uint16_t y, const wchar_t *str, uint16_t Color); -void draw_char(uint16_t x, uint16_t y,uint8_t wdh, wchar_t c, uint16_t color); +void draw_string(render_ctx_t* ctx, uint16_t x, uint16_t y, const wchar_t *str, uint16_t Color); +void draw_char(render_ctx_t* ctx, uint16_t x, uint16_t y, uint8_t wdh, wchar_t c, uint16_t color); uint8_t get_char_width(wchar_t c); #endif // FONT_DATA_H diff --git a/main.c b/main.c index 16739bb..4e9bf62 100644 --- a/main.c +++ b/main.c @@ -2,7 +2,8 @@ #include "Thread.h" #include "pico/multicore.h" #include "pico/stdlib.h" -#include "font_data.h" +#include "Font/font_data.h" +#include "display/render/context.h" #include "BackBuffer.h" int main() { @@ -29,6 +30,7 @@ int main() { float x=0.0; float freq=1.0; bool minmax=false; + render_ctx_t rc; wchar_t buffer[100]; while (x<500) { @@ -37,8 +39,9 @@ int main() { fillBufer(frame_buffer,reverse(0x4A69));// grid(20,20,40,0x634d); generate_sine_wave_points(num_points, 50, freq, 0, HEIGHT / 2,x); + render_begin(&rc, frame_buffer, WIDTH, HEIGHT); swprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), L"Value of pi: %.2f", temperature); - draw_string(20,110,buffer,0b1111111111111111); // + draw_string(&rc, 20,110,buffer,0b1111111111111111); // multicore_fifo_push_blocking(0); //Экран 0 нарисован x+=0.03; if (minmax) @@ -74,4 +77,3 @@ void fillBufer (uint16_t* buffer,uint16_t color){ } } - diff --git a/font_data.c b/src/Font/font_data.c similarity index 99% rename from font_data.c rename to src/Font/font_data.c index 2a99013..64d5275 100644 --- a/font_data.c +++ b/src/Font/font_data.c @@ -1,8 +1,6 @@ // Шрифт, сгенерированный из /home/smikhai/Repo/rp_pico_test/Font/font_grid_with_cyrillic.bmp -#include "font_data.h" -#include "Thread.h" +#include "Font/font_data.h" #include -#include "BackBuffer.h" const uint16_t image_linear_width = 704; const uint8_t char_width = 22; const uint8_t char_height = 22; @@ -32,7 +30,7 @@ const uint8_t image_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 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, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFC, 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, 0x18, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xE0, 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, 0x80, 0x00, 0x02, 0x00, 0x00, 0xF0, 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, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x18, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 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, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 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, 0x20, 0x20, 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, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x0F, 0xF8, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0x80, 0x03, 0xFE, 0x00, 0x0F, 0xF8, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0x80, 0x03, 0xFE, 0x00, 0x0F, 0xF8, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0x80, 0x03, 0xFE, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0x80, 0x03, 0xFE, 0x00, 0x0F, 0xF8, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0xFE, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x18, 0x00, 0x11, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x20, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xC0, 0x04, 0x60, 0x3F, 0xE0, 0x00, 0xFF, 0x80, 0x00, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0xC0, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x40, 0x00, 0x08, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0x80, 0x03, 0xFE, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x04, 0x60, 0x00, 0xFF, 0x80, 0x03, 0xFE, 0x00, 0x00, 0x23, 0x00, 0x04, 0x40, 0x00, 0xFF, 0x80, 0x03, 0xFE, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x03, 0xFE, 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, 0xC3, 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, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x0F, 0xF8, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0x80, 0x03, 0xFE, 0x00, 0x0F, 0xF8, 0x00, }; // Функция для вывода одного символа -void draw_char(uint16_t x, uint16_t y,uint8_t wdh, wchar_t c, uint16_t color) { +void draw_char(render_ctx_t* ctx, uint16_t x, uint16_t y, uint8_t wdh, wchar_t c, uint16_t color) { uint8_t current_char_width = wdh; // Ширина текущего символа uint32_t offset; // Смещение в битах uint32_t font_linear_width=total_chars*char_width; //количество пикселей в одномерной матрице шрифта @@ -71,7 +69,7 @@ void draw_char(uint16_t x, uint16_t y,uint8_t wdh, wchar_t c, uint16_t color) { uint8_t prepare= (prepareDW>>(31-col))&1; // Устанавливаем пиксель на экране if (prepare) { - set_pixel(x + col, y + row, reverse(color) ); // Цветной пиксель + render_pixel(ctx, x + col, y + row, BSWAP16(color)); // Цветной пиксель } else { //set_pixel(x + col, y + row, COLOR_WHITE); // Белый пиксель } @@ -81,11 +79,11 @@ void draw_char(uint16_t x, uint16_t y,uint8_t wdh, wchar_t c, uint16_t color) { // Функция для вывода строки текста -void draw_string(uint16_t x, uint16_t y, const wchar_t *str, uint16_t Color) { +void draw_string(render_ctx_t* ctx, uint16_t x, uint16_t y, const wchar_t *str, uint16_t Color) { uint8_t chwdh; while (*str) { chwdh= get_char_width (*str); - draw_char(x, y, chwdh, *str, Color); + draw_char(ctx, x, y, chwdh, *str, Color); x +=chwdh; // Сдвиг вправо на ширину символа str++; } @@ -132,4 +130,3 @@ uint8_t get_char_width(wchar_t c) { // Если символ полностью пустой, возвращаем ширину 0 return 12; } -