updated version

This commit is contained in:
2026-02-11 14:04:00 -07:00
parent b934f79878
commit d2d0a508ec
8 changed files with 295 additions and 185 deletions

View File

@@ -1,4 +1,4 @@
#define CUSTOM_STRING_MAX_LEN 64
#define CUSTOM_STRING_MAX_LEN 256
typedef struct {
char buffer[CUSTOM_STRING_MAX_LEN];

View File

@@ -3,21 +3,25 @@
#define FONT_PACK_H
#include <stdint.h>
#define FONT_WIDTH 16
#define FONT_WIDTH 16
#define FONT_HEIGHT 16
#define FONT_BITMAP_SIZE ((FONT_WIDTH * FONT_HEIGHT) / 8) // 32 bytes per character
#define FONT_BITMAP_SIZE \
((FONT_WIDTH * FONT_HEIGHT) / 8) // 32 bytes per character
static const uint8_t empty_char_16x16[32] = {0};
typedef struct {
const uint8_t *bitmaps[26]; // Pointers to each 16x16 bitmap
const uint8_t *bitmaps[26]; // Pointers to each 16x16 bitmap
} FontPack;
extern const FontPack basic_font_pack;
static inline const uint8_t *font_get_char_bitmap(const FontPack *pack, char c) {
if (c >= 'A' && c <= 'Z')
return pack->bitmaps[c - 'A'];
return empty_char_16x16; // Or point to empty_char_16x16
static inline const uint8_t *font_get_char_bitmap(const FontPack *pack,
char c) {
if (c >= 'a' && c <= 'z') // convert to uppercase
c = c - 'a' + 'A';
if (c >= 'A' && c <= 'Z')
return pack->bitmaps[c - 'A'];
return empty_char_16x16; // fallback for other characters
}
#endif // FONT_PACK_H

View File

@@ -53,6 +53,14 @@ static void uart_print_int(unsigned int value)
uart_putc(buffer[i]);
}
static char uart_getc_nonblocking(void)
{
if (UART0_FR & (1 << 4)) // RXFE = receive FIFO empty
return 0; // indicate no data
return (char)(UART0_DR & 0xFF);
}
// UART_IO instance with function pointers assigned
static const UART_IO uart_io = {
.putc = uart_putc,

View File

@@ -4,6 +4,8 @@
#include <stddef.h>
#include <stdbool.h>
#include "font_pack.h"
#include <math.h> // For sqrt, round
typedef struct RenderObject {
unsigned int x, y;
@@ -27,6 +29,11 @@ typedef struct Renderer {
void (*draw_rect)(struct Renderer *renderer, RenderObject *obj);
void (*draw_text)(struct Renderer *renderer, RenderText *text);
void (*draw_objects)(struct Renderer *renderer, RenderObject *objs[], unsigned int count);
void (*draw_line)(struct Renderer *renderer, int x0, int y0, int x1, int y1, unsigned int color);
void (*draw_circle)(struct Renderer *renderer, int cx, int cy, int radius, unsigned int color);
void (*fill_circle)(struct Renderer *renderer, int cx, int cy, int radius, unsigned int color);
void (*draw_triangle)(struct Renderer *renderer, int x0, int y0, int x1, int y1, int x2, int y2, unsigned int color);
void (*fill_triangle)(struct Renderer *renderer, int x0, int y0, int x1, int y1, int x2, int y2, unsigned int color);
} Renderer;
// ===== Window definition =====