custom fonts and further UI reworks

This commit is contained in:
Mikkeli Matlock
2026-02-15 18:13:53 +09:00
parent 9ca0227214
commit 12dbbd8942
17 changed files with 7286 additions and 311 deletions

View File

@@ -1,7 +1,11 @@
{ {
"permissions": { "permissions": {
"allow": [ "allow": [
"Bash(echo:*)" "Bash(echo:*)",
"Bash(idf.py build:*)",
"Bash(for f in DSEG14C_BI_50px.c InziuIosevka_Slab_CC_12px.c InziuIosevka_Slab_CC_16px.c InziuIosevka_Slab_CC_20px.c InziuIosevka_Slab_CC_24px.c InziuIosevka_Slab_CC_32px.c)",
"Bash(do sed -i '/\\\\.static_bitmap = 0,/d' \"$f\")",
"Bash(done)"
] ]
}, },
"outputStyle": "iseri", "outputStyle": "iseri",

211
PLAN.md
View File

@@ -1,211 +0,0 @@
# Pi Dashboard — ESP32-S3 RLCD 4.2" Project Plan
## Goal
WebSocket client on the ESP32-S3 RLCD board that receives system status from a
Raspberry Pi home server over LAN and renders a monitoring dashboard via LVGL.
---
## New project location
Create a new ESP-IDF project directory **outside** the Examples folder, e.g.:
```
J:\dev\arduino\ESP32-S3-RLCD-4.2-main\Projects\pi_dashboard\
```
---
## Files to copy from the factory example
Source root: `Example\ESP-IDF\10_FactoryProgram\`
### Must copy (build skeleton)
| File / Dir | Why |
|---|---|
| `CMakeLists.txt` | Project root cmake — edit project name, strip `EXTRA_COMPONENT_DIRS` if not using ExternLib |
| `partitions.csv` | Partition table (8MB app partition, NVS, PHY) |
| `sdkconfig.defaults` | Base config — **strip BT lines**, keep SPIRAM/flash/LVGL settings |
| `main/CMakeLists.txt` | Main component registration |
| `main/idf_component.yml` | Managed component deps — keep `lvgl/lvgl: ^8.4.0`, drop `avi_player` and `esp_new_jpeg`, **add `espressif/esp_websocket_client`** |
### Must copy (display driver)
| File | From | Why |
|---|---|---|
| `display_bsp.h` | `components/port_bsp/` | DisplayPort class — RLCD SPI driver with LUT pixel mapping |
| `display_bsp.cpp` | `components/port_bsp/` | Full implementation: SPI init, reset, command sequences, SetPixel, Display |
These two files are the entire RLCD hardware abstraction. No other display code
exists. Copy them into a `components/display_bsp/` component in the new project.
### Must copy (LVGL port)
| File | From | Why |
|---|---|---|
| `lvgl_bsp.h` | `components/app_bsp/` | Lvgl_PortInit, Lvgl_lock/unlock declarations |
| `lvgl_bsp.cpp` | `components/app_bsp/` | LVGL display driver registration, double-buffered PSRAM, tick timer, port task on Core 0 |
Copy into a `components/lvgl_port/` component. This file is self-contained — its
only dependency is `lvgl.h` and FreeRTOS.
### Copy as reference (WiFi STA)
| File | From | Why |
|---|---|---|
| `esp_wifi_bsp.h` | `Example/ESP-IDF/02_WIFI_STA/components/esp_wifi_bsp/` | Cleaner than the factory version — no scan-and-destroy, no BLE entanglement |
| `esp_wifi_bsp.c` | same | Simple STA init + connect + reconnect skeleton |
The `02_WIFI_STA` example is a better starting point than the factory program's
wifi code. The factory version tears down WiFi for BLE scanning — useless for a
persistent connection. You will need to modify the STA code to:
- Make SSID/password configurable (NVS or Kconfig)
- Add auto-reconnect on disconnect
- Signal connection readiness via event group so the WebSocket task knows when to start
### Do NOT copy
| Component | Why not |
|---|---|
| `components/port_bsp/` (everything except display_bsp) | I2C bus, buttons, SD card, ADC, codec — none needed for a dashboard |
| `components/ExternLib/` (SensorLib, codec_board) | Sensor drivers and audio codec — irrelevant |
| `components/app_bsp/ble_scan_bsp.c` | BLE scanning — not needed, and conflicts with persistent WiFi |
| `components/app_bsp/esp_wifi_bsp.c` | Factory version destroys WiFi for BLE — use 02_WIFI_STA instead |
| `components/ui_bsp/` | NXP GUI Guider generated UI — you will design your own dashboard layout |
| `components/user_app/` | Factory test logic — all replaced by your WebSocket + dashboard code |
| `managed_components/` | Auto-downloaded by ESP-IDF component manager from `idf_component.yml` — never copy these |
| `build/` | Build artifacts — never copy |
---
## New project structure
```
pi_dashboard/
CMakeLists.txt # from factory, edited
partitions.csv # from factory, as-is
sdkconfig.defaults # from factory, stripped (no BT)
main/
CMakeLists.txt # register main.cpp
idf_component.yml # lvgl ^8.4.0, esp_websocket_client
main.cpp # app_main: wifi init, display init, lvgl init, ws connect, task spawn
components/
display_bsp/
CMakeLists.txt # new: register display_bsp.cpp, REQUIRES driver esp_lcd
display_bsp.h # from port_bsp, as-is
display_bsp.cpp # from port_bsp, as-is
lvgl_port/
CMakeLists.txt # new: register lvgl_bsp.cpp, REQUIRES lvgl__lvgl esp_timer
lvgl_bsp.h # from app_bsp, as-is
lvgl_bsp.cpp # from app_bsp, as-is
wifi_sta/
CMakeLists.txt # new: register wifi_sta.c, REQUIRES esp_wifi esp_event nvs_flash
wifi_sta.h # based on 02_WIFI_STA, extended with reconnect + event group
wifi_sta.c # based on 02_WIFI_STA, extended
ws_client/
CMakeLists.txt # new: register ws_client.cpp, REQUIRES esp_websocket_client
ws_client.h # WebSocket connect/disconnect, message callback registration
ws_client.cpp # esp_websocket_client wrapper, reconnect logic, JSON parse
dashboard_ui/
CMakeLists.txt # new: register dashboard_ui.cpp, REQUIRES lvgl__lvgl
dashboard_ui.h # UI layout: create/update functions for dashboard widgets
dashboard_ui.cpp # LVGL widget creation, label/bar/table updates from parsed data
```
---
## sdkconfig.defaults (modified for this project)
Strip from the factory version:
- `CONFIG_BT_ENABLED=y` and all BT lines (saves ~300KB flash + significant RAM)
- `CONFIG_BT_BLE_*` lines
Keep:
- `CONFIG_IDF_TARGET="esp32s3"`
- `CONFIG_ESPTOOLPY_FLASHMODE_QIO=y`
- `CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y`
- `CONFIG_PARTITION_TABLE_CUSTOM=y`
- `CONFIG_SPIRAM=y` / `CONFIG_SPIRAM_MODE_OCT=y` / `CONFIG_SPIRAM_SPEED_80M=y`
- `CONFIG_FREERTOS_HZ=1000`
- `CONFIG_LV_MEM_SIZE_KILOBYTES=64`
- `CONFIG_LV_DISP_DEF_REFR_PERIOD=1`
Add:
- `CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y`
---
## Runtime architecture
```
Core 0 Core 1
------ ------
WiFi driver (system) main task (app_main, exits after init)
LVGL port task (priority 5) WebSocket event task (priority 3)
- lv_timer_handler loop - receives WS messages
- holds/releases lvgl_mux - parses JSON
- acquires lvgl_mux
- updates dashboard widgets
- releases lvgl_mux
```
### Boot sequence (app_main)
1. `wifi_sta_init()` — start WiFi STA, wait for IP
2. `RlcdPort.RLCD_Init()` — init display over SPI
3. `Lvgl_PortInit(400, 300, flush_cb)` — init LVGL with double-buffered PSRAM
4. Create initial dashboard UI (under LVGL lock)
5. `ws_client_start("ws://<pi_ip>:<port>")` — connect WebSocket, register message handler
6. app_main returns, FreeRTOS tasks take over
### Data flow
```
Pi server --[WebSocket JSON]--> ESP32 ws_client
--> parse message
--> Lvgl_lock()
--> update lv_label / lv_bar / lv_table widgets
--> Lvgl_unlock()
--> LVGL port task flushes on next cycle
--> flush_cb converts 16-bit to 1-bit, pushes to RLCD
```
---
## Pi side (not part of this ESP-IDF project, but for context)
A simple Python WebSocket server that:
- Collects system stats (psutil or /proc reads)
- Serializes to JSON
- Pushes to connected clients every N seconds
Example payload:
```json
{
"cpu_pct": 23,
"mem_pct": 61,
"mem_used_mb": 1952,
"disk_pct": 44,
"cpu_temp": 52,
"uptime_hrs": 342,
"services": [
{"name": "docker", "status": "running"},
{"name": "pihole", "status": "running"},
{"name": "nginx", "status": "stopped"}
],
"net_rx_kbps": 1240,
"net_tx_kbps": 320
}
```
---
## Key decisions still open
1. **WiFi credentials** — hardcode for now, or Kconfig menuconfig, or NVS provisioning?
2. **Dashboard layout** — what stats matter most? Single screen or multiple pages?
3. **Update frequency** — how often should the Pi push? 2s? 5s? On-change?
4. **Pi server location** — fixed IP or mDNS discovery?
5. **Error states** — what to show when WiFi drops or Pi goes offline?

View File

@@ -14,10 +14,13 @@ Raspberry Pi system monitor running on a Waveshare ESP32-S3 RLCD 4.2" board. Con
Pi (server) ESP32-S3 (client) Pi (server) ESP32-S3 (client)
stats_server.py --WS/JSON--> ws_client --> dashboard_ui (LVGL) stats_server.py --WS/JSON--> ws_client --> dashboard_ui (LVGL)
+ local sensors (SHTC3) + local sensors (SHTC3)
+ RTC clock (PCF85063)
``` ```
The Pi runs a WebSocket server that pushes system stats (CPU, memory, disk, temperature, network, services) as JSON every 2 seconds. The ESP32 parses the JSON and updates LVGL widgets. A data staleness watchdog forces reconnection if the server goes silent. The Pi runs a WebSocket server that pushes system stats (CPU, memory, disk, temperature, network, services) as JSON every 2 seconds. The ESP32 parses the JSON and updates LVGL widgets. A data staleness watchdog forces reconnection if the server goes silent.
The display uses a two-column layout: left half shows Pi stats (CPU/RAM/DISK bars, CPU temp) and a services table; right half shows a large HH:MM:SS clock (montserrat_36), date with day-of-week, and local sensor readings (room temp, humidity). The services table auto-scrolls when more than 4 services are present. The clock updates every second from the on-board RTC, which syncs from the Pi's time when drift exceeds 60 seconds.
## Configuration ## Configuration
Edit `components/esp_wifi_bsp/wifi_config.h`: Edit `components/esp_wifi_bsp/wifi_config.h`:

View File

@@ -1,4 +1,4 @@
idf_component_register( idf_component_register(
SRCS "dashboard_ui.c" SRCS "dashboard_ui.c"
REQUIRES lvgl__lvgl ws_client REQUIRES lvgl__lvgl ws_client user_fonts
INCLUDE_DIRS "./") INCLUDE_DIRS "./")

View File

@@ -1,4 +1,5 @@
#include "dashboard_ui.h" #include "dashboard_ui.h"
#include "user_fonts.h"
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@@ -6,18 +7,25 @@
#define SCREEN_W 400 #define SCREEN_W 400
#define SCREEN_H 300 #define SCREEN_H 300
#define TOP_BAR_H 24 #define TOP_BAR_H 24
#define STATS_H 80 #define TIME_BAR_H 50
#define MID_H 140 #define BOT_H 24
#define BOT_H 32 #define MAIN_Y (TOP_BAR_H + TIME_BAR_H) /* 74 */
#define MAIN_H (SCREEN_H - MAIN_Y - BOT_H) /* 202 */
#define LEFT_COL_W 200
#define RIGHT_COL_X 200
/* ---------- Static widget handles ---------- */ /* ---------- Static widget handles ---------- */
/* Top bar */ /* Top bar */
static lv_obj_t *lbl_ip; static lv_obj_t *lbl_ip;
static lv_obj_t *lbl_batt; static lv_obj_t *lbl_batt;
static lv_obj_t *lbl_time; static lv_obj_t *bar_batt_top;
static lv_obj_t *lbl_ws; static lv_obj_t *lbl_ws;
/* Time bar */
static lv_obj_t *lbl_clock;
static lv_obj_t *lbl_date;
/* Pi stats bars + labels */ /* Pi stats bars + labels */
static lv_obj_t *bar_cpu; static lv_obj_t *bar_cpu;
static lv_obj_t *lbl_cpu_val; static lv_obj_t *lbl_cpu_val;
@@ -29,19 +37,24 @@ static lv_obj_t *lbl_cpu_temp;
/* Services table */ /* Services table */
static lv_obj_t *tbl_services; static lv_obj_t *tbl_services;
static int s_service_count;
/* Local sensors */ /* Local sensors */
static lv_obj_t *lbl_room_temp; static lv_obj_t *lbl_room_temp;
static lv_obj_t *lbl_room_humi; static lv_obj_t *lbl_room_humi;
static lv_obj_t *lbl_local_batt;
static lv_obj_t *lbl_uptime; static lv_obj_t *lbl_uptime;
/* Network */ /* Network */
static lv_obj_t *lbl_net; static lv_obj_t *lbl_net;
/* ---------- Style ---------- */ /* Auto-scroll timer */
static lv_timer_t *s_scroll_timer;
/* ---------- Styles ---------- */
static lv_style_t style_bar_bg; static lv_style_t style_bar_bg;
static lv_style_t style_bar_ind; static lv_style_t style_bar_ind;
static lv_style_t style_bar_batt_bg;
static lv_style_t style_bar_batt_ind;
static void init_styles(void) static void init_styles(void)
{ {
@@ -58,6 +71,19 @@ static void init_styles(void)
lv_style_set_bg_color(&style_bar_ind, lv_color_black()); lv_style_set_bg_color(&style_bar_ind, lv_color_black());
lv_style_set_bg_opa(&style_bar_ind, LV_OPA_COVER); lv_style_set_bg_opa(&style_bar_ind, LV_OPA_COVER);
lv_style_set_radius(&style_bar_ind, 0); lv_style_set_radius(&style_bar_ind, 0);
/* Battery bar on black top bar: inverted colors */
lv_style_init(&style_bar_batt_bg);
lv_style_set_bg_color(&style_bar_batt_bg, lv_color_black());
lv_style_set_bg_opa(&style_bar_batt_bg, LV_OPA_COVER);
lv_style_set_border_color(&style_bar_batt_bg, lv_color_white());
lv_style_set_border_width(&style_bar_batt_bg, 1);
lv_style_set_radius(&style_bar_batt_bg, 0);
lv_style_init(&style_bar_batt_ind);
lv_style_set_bg_color(&style_bar_batt_ind, lv_color_white());
lv_style_set_bg_opa(&style_bar_batt_ind, LV_OPA_COVER);
lv_style_set_radius(&style_bar_batt_ind, 0);
} }
static lv_obj_t *create_bar(lv_obj_t *parent, int x, int y, int w, int h) static lv_obj_t *create_bar(lv_obj_t *parent, int x, int y, int w, int h)
@@ -82,7 +108,29 @@ static lv_obj_t *create_label(lv_obj_t *parent, int x, int y, const lv_font_t *f
return lbl; return lbl;
} }
/* ---------- Create UI ---------- */ /* ---------- Auto-scroll callback ---------- */
static void scroll_timer_cb(lv_timer_t *timer)
{
(void)timer;
if (s_service_count <= 4) {
lv_obj_scroll_to_y(tbl_services, 0, LV_ANIM_OFF);
return;
}
lv_coord_t cur_y = lv_obj_get_scroll_y(tbl_services);
/* Each row is ~16px (12px font + 2px pad top + 2px pad bot) */
lv_coord_t row_h = 16;
lv_coord_t max_scroll = (s_service_count - 4) * row_h;
if (cur_y >= max_scroll) {
lv_obj_scroll_to_y(tbl_services, 0, LV_ANIM_ON);
} else {
lv_obj_scroll_to_y(tbl_services, cur_y + row_h, LV_ANIM_ON);
}
}
/* ---------- Create UI sections ---------- */
static void create_top_bar(lv_obj_t *parent) static void create_top_bar(lv_obj_t *parent)
{ {
@@ -96,97 +144,134 @@ static void create_top_bar(lv_obj_t *parent)
lv_obj_set_style_pad_all(bar_cont, 2, 0); lv_obj_set_style_pad_all(bar_cont, 2, 0);
lv_obj_clear_flag(bar_cont, LV_OBJ_FLAG_SCROLLABLE); lv_obj_clear_flag(bar_cont, LV_OBJ_FLAG_SCROLLABLE);
/* IP address — left */
lbl_ip = lv_label_create(bar_cont); lbl_ip = lv_label_create(bar_cont);
lv_obj_set_style_text_color(lbl_ip, lv_color_white(), 0); lv_obj_set_style_text_color(lbl_ip, lv_color_white(), 0);
lv_obj_set_style_text_font(lbl_ip, &lv_font_montserrat_12, 0); lv_obj_set_style_text_font(lbl_ip, &InziuIosevka_Slab_CC_12px, 0);
lv_obj_align(lbl_ip, LV_ALIGN_LEFT_MID, 2, 0); lv_obj_align(lbl_ip, LV_ALIGN_LEFT_MID, 2, 0);
lv_label_set_text(lbl_ip, "N/A"); lv_label_set_text(lbl_ip, "N/A");
lbl_batt = lv_label_create(bar_cont); /* WS status — center-left */
lv_obj_set_style_text_color(lbl_batt, lv_color_white(), 0);
lv_obj_set_style_text_font(lbl_batt, &lv_font_montserrat_12, 0);
lv_obj_align(lbl_batt, LV_ALIGN_LEFT_MID, 120, 0);
lv_label_set_text(lbl_batt, "Batt:--%");
lbl_time = lv_label_create(bar_cont);
lv_obj_set_style_text_color(lbl_time, lv_color_white(), 0);
lv_obj_set_style_text_font(lbl_time, &lv_font_montserrat_12, 0);
lv_obj_align(lbl_time, LV_ALIGN_LEFT_MID, 220, 0);
lv_label_set_text(lbl_time, "--:--");
lbl_ws = lv_label_create(bar_cont); lbl_ws = lv_label_create(bar_cont);
lv_obj_set_style_text_color(lbl_ws, lv_color_white(), 0); lv_obj_set_style_text_color(lbl_ws, lv_color_white(), 0);
lv_obj_set_style_text_font(lbl_ws, &lv_font_montserrat_12, 0); lv_obj_set_style_text_font(lbl_ws, &InziuIosevka_Slab_CC_12px, 0);
lv_obj_align(lbl_ws, LV_ALIGN_RIGHT_MID, -2, 0); lv_obj_align(lbl_ws, LV_ALIGN_LEFT_MID, 140, 0);
lv_label_set_text(lbl_ws, "WS:---"); lv_label_set_text(lbl_ws, "WS:---");
/* Battery bar (24x10) — right */
bar_batt_top = lv_bar_create(bar_cont);
lv_obj_set_size(bar_batt_top, 24, 10);
lv_obj_align(bar_batt_top, LV_ALIGN_RIGHT_MID, -40, 0);
lv_bar_set_range(bar_batt_top, 0, 100);
lv_bar_set_value(bar_batt_top, 0, LV_ANIM_OFF);
lv_obj_add_style(bar_batt_top, &style_bar_batt_bg, LV_PART_MAIN);
lv_obj_add_style(bar_batt_top, &style_bar_batt_ind, LV_PART_INDICATOR);
/* Battery text — right of bar */
lbl_batt = lv_label_create(bar_cont);
lv_obj_set_style_text_color(lbl_batt, lv_color_white(), 0);
lv_obj_set_style_text_font(lbl_batt, &InziuIosevka_Slab_CC_12px, 0);
lv_obj_align(lbl_batt, LV_ALIGN_RIGHT_MID, -2, 0);
lv_label_set_text(lbl_batt, "--%");
} }
static void create_stats_section(lv_obj_t *parent) static void create_time_bar(lv_obj_t *parent)
{ {
int y0 = TOP_BAR_H + 2; lv_obj_t *bar_cont = lv_obj_create(parent);
int col_w = 80; lv_obj_set_pos(bar_cont, 0, TOP_BAR_H);
int bar_w = 50; lv_obj_set_size(bar_cont, SCREEN_W, TIME_BAR_H);
int bar_h = 40; lv_obj_set_style_bg_color(bar_cont, lv_color_white(), 0);
lv_obj_set_style_bg_opa(bar_cont, LV_OPA_COVER, 0);
lv_obj_set_style_border_color(bar_cont, lv_color_black(), 0);
lv_obj_set_style_border_width(bar_cont, 1, 0);
lv_obj_set_style_border_side(bar_cont, LV_BORDER_SIDE_BOTTOM, 0);
lv_obj_set_style_radius(bar_cont, 0, 0);
lv_obj_set_style_pad_all(bar_cont, 0, 0);
lv_obj_clear_flag(bar_cont, LV_OBJ_FLAG_SCROLLABLE);
/* Section header */ /* Clock HH:MM:SS — left */
create_label(parent, 4, y0, &lv_font_montserrat_12, "PI SERVER STATS"); lbl_clock = lv_label_create(bar_cont);
lv_obj_set_style_text_font(lbl_clock, &DSEG14C_BI_32px, 0);
lv_obj_set_style_text_color(lbl_clock, lv_color_black(), 0);
lv_obj_align(lbl_clock, LV_ALIGN_LEFT_MID, 10, 0);
lv_label_set_text(lbl_clock, "--:--:--");
y0 += 14; /* Date YYYY/MM/DD DAY — right */
lbl_date = lv_label_create(bar_cont);
/* CPU */ lv_obj_set_style_text_font(lbl_date, &InziuIosevka_Slab_CC_20px, 0);
create_label(parent, 10, y0, &lv_font_montserrat_12, "CPU"); lv_obj_set_style_text_color(lbl_date, lv_color_black(), 0);
bar_cpu = create_bar(parent, 10, y0 + 14, bar_w, bar_h); lv_obj_align(lbl_date, LV_ALIGN_RIGHT_MID, -10, 0);
lbl_cpu_val = create_label(parent, 10, y0 + 56, &lv_font_montserrat_14, "--%"); lv_label_set_text(lbl_date, "----/--/-- ---");
/* RAM */
create_label(parent, 10 + col_w, y0, &lv_font_montserrat_12, "RAM");
bar_ram = create_bar(parent, 10 + col_w, y0 + 14, bar_w, bar_h);
lbl_ram_val = create_label(parent, 10 + col_w, y0 + 56, &lv_font_montserrat_14, "--%");
/* DISK */
create_label(parent, 10 + col_w * 2, y0, &lv_font_montserrat_12, "DISK");
bar_disk = create_bar(parent, 10 + col_w * 2, y0 + 14, bar_w, bar_h);
lbl_disk_val = create_label(parent, 10 + col_w * 2, y0 + 56, &lv_font_montserrat_14, "--%");
/* CPU TEMP - no bar, just big value */
create_label(parent, 10 + col_w * 3, y0, &lv_font_montserrat_12, "TEMP");
lbl_cpu_temp = create_label(parent, 10 + col_w * 3, y0 + 24, &lv_font_montserrat_20, "--C");
} }
static void create_mid_section(lv_obj_t *parent) static void create_main_section(lv_obj_t *parent)
{ {
int y0 = TOP_BAR_H + STATS_H + 4; /* === Left column: Services === */
create_label(parent, 4, MAIN_Y + 2, &InziuIosevka_Slab_CC_12px, "SERVICES");
/* --- Left column: Services --- */
create_label(parent, 4, y0, &lv_font_montserrat_12, "SERVICES");
tbl_services = lv_table_create(parent); tbl_services = lv_table_create(parent);
lv_obj_set_pos(tbl_services, 4, y0 + 14); lv_obj_set_pos(tbl_services, 4, MAIN_Y + 16);
lv_obj_set_size(tbl_services, 195, 110); lv_obj_set_size(tbl_services, 190, 180);
lv_table_set_col_cnt(tbl_services, 2); lv_table_set_col_cnt(tbl_services, 2);
lv_table_set_col_width(tbl_services, 0, 110); lv_table_set_col_width(tbl_services, 0, 110);
lv_table_set_col_width(tbl_services, 1, 70); lv_table_set_col_width(tbl_services, 1, 65);
lv_obj_set_style_text_font(tbl_services, &lv_font_montserrat_12, 0); lv_obj_set_style_text_font(tbl_services, &InziuIosevka_Slab_CC_12px, 0);
lv_obj_set_style_border_color(tbl_services, lv_color_black(), 0); lv_obj_set_style_border_color(tbl_services, lv_color_black(), 0);
lv_obj_set_style_border_width(tbl_services, 1, 0); lv_obj_set_style_border_width(tbl_services, 1, 0);
lv_obj_set_style_pad_ver(tbl_services, 2, LV_PART_ITEMS); lv_obj_set_style_pad_ver(tbl_services, 2, LV_PART_ITEMS);
lv_obj_set_style_pad_hor(tbl_services, 4, LV_PART_ITEMS); lv_obj_set_style_pad_hor(tbl_services, 4, LV_PART_ITEMS);
lv_obj_clear_flag(tbl_services, LV_OBJ_FLAG_SCROLLABLE); lv_obj_add_flag(tbl_services, LV_OBJ_FLAG_SCROLLABLE);
/* Pre-fill with empty rows */
for (int i = 0; i < WS_MAX_SERVICES; i++) { for (int i = 0; i < WS_MAX_SERVICES; i++) {
lv_table_set_cell_value(tbl_services, i, 0, "---"); lv_table_set_cell_value(tbl_services, i, 0, "---");
lv_table_set_cell_value(tbl_services, i, 1, "---"); lv_table_set_cell_value(tbl_services, i, 1, "---");
} }
/* --- Right column: Local sensors --- */ /* Auto-scroll timer: 3 second period */
int rx = 205; s_scroll_timer = lv_timer_create(scroll_timer_cb, 3000, NULL);
create_label(parent, rx, y0, &lv_font_montserrat_12, "LOCAL SENSORS");
lbl_room_temp = create_label(parent, rx, y0 + 18, &lv_font_montserrat_14, "Room: --.-C"); /* === Right column: Pi Vitals + Local Sensors === */
lbl_room_humi = create_label(parent, rx, y0 + 38, &lv_font_montserrat_14, "Humi: --%"); int rx = RIGHT_COL_X;
lbl_local_batt = create_label(parent, rx, y0 + 58, &lv_font_montserrat_14, "Batt: --%"); int row_h = 18; /* vertical spacing per stat row */
lbl_uptime = create_label(parent, rx, y0 + 78, &lv_font_montserrat_14, "Uptime: --h"); int lbl_w = 36; /* width reserved for "CPU " etc */
int bar_w = 82;
int bar_h = 12;
int val_x = rx + 4 + lbl_w + bar_w + 4; /* value label after bar */
int temp_x = rx + 156; /* TEMP column, right of value labels */
/* Pi Vitals header */
create_label(parent, rx + 4, MAIN_Y + 2, &InziuIosevka_Slab_CC_12px, "PI VITALS");
int ry = MAIN_Y + 18;
/* CPU [========] 12% TEMP */
create_label(parent, rx + 4, ry, &InziuIosevka_Slab_CC_12px, "CPU");
bar_cpu = create_bar(parent, rx + 4 + lbl_w, ry, bar_w, bar_h);
lbl_cpu_val = create_label(parent, val_x, ry, &InziuIosevka_Slab_CC_12px, "--%");
create_label(parent, temp_x, ry, &InziuIosevka_Slab_CC_12px, "TEMP");
/* RAM [========] 58% 45 C */
ry += row_h;
create_label(parent, rx + 4, ry, &InziuIosevka_Slab_CC_12px, "RAM");
bar_ram = create_bar(parent, rx + 4 + lbl_w, ry, bar_w, bar_h);
lbl_ram_val = create_label(parent, val_x, ry, &InziuIosevka_Slab_CC_12px, "--%");
lbl_cpu_temp = create_label(parent, temp_x, ry, &InziuIosevka_Slab_CC_20px, "-- C");
/* DISK [========] 44% */
ry += row_h;
create_label(parent, rx + 4, ry, &InziuIosevka_Slab_CC_12px, "DISK");
bar_disk = create_bar(parent, rx + 4 + lbl_w, ry, bar_w, bar_h);
lbl_disk_val = create_label(parent, val_x, ry, &InziuIosevka_Slab_CC_12px, "--%");
/* uptime */
ry += row_h;
lbl_uptime = create_label(parent, rx + 4, ry, &InziuIosevka_Slab_CC_12px, "Uptime: --h");
/* === Local Sensors (below pi vitals) === */
int sy = ry + row_h + 4;
create_label(parent, rx + 4, sy, &InziuIosevka_Slab_CC_12px, "LOCAL SENSORS");
lbl_room_temp = create_label(parent, rx + 4, sy + 16, &InziuIosevka_Slab_CC_16px, "Room: --.-C");
lbl_room_humi = create_label(parent, rx + 4, sy + 42, &InziuIosevka_Slab_CC_16px, "Humi: --%");
} }
static void create_bottom_bar(lv_obj_t *parent) static void create_bottom_bar(lv_obj_t *parent)
@@ -206,7 +291,7 @@ static void create_bottom_bar(lv_obj_t *parent)
lv_obj_clear_flag(bot_cont, LV_OBJ_FLAG_SCROLLABLE); lv_obj_clear_flag(bot_cont, LV_OBJ_FLAG_SCROLLABLE);
lbl_net = lv_label_create(bot_cont); lbl_net = lv_label_create(bot_cont);
lv_obj_set_style_text_font(lbl_net, &lv_font_montserrat_12, 0); lv_obj_set_style_text_font(lbl_net, &InziuIosevka_Slab_CC_12px, 0);
lv_obj_set_style_text_color(lbl_net, lv_color_black(), 0); lv_obj_set_style_text_color(lbl_net, lv_color_black(), 0);
lv_obj_align(lbl_net, LV_ALIGN_LEFT_MID, 0, 0); lv_obj_align(lbl_net, LV_ALIGN_LEFT_MID, 0, 0);
lv_label_set_text(lbl_net, "NETWORK RX: ---- kbps TX: ---- kbps"); lv_label_set_text(lbl_net, "NETWORK RX: ---- kbps TX: ---- kbps");
@@ -222,8 +307,8 @@ void dashboard_ui_create(void)
lv_obj_clear_flag(scr, LV_OBJ_FLAG_SCROLLABLE); lv_obj_clear_flag(scr, LV_OBJ_FLAG_SCROLLABLE);
create_top_bar(scr); create_top_bar(scr);
create_stats_section(scr); create_time_bar(scr);
create_mid_section(scr); create_main_section(scr);
create_bottom_bar(scr); create_bottom_bar(scr);
} }
@@ -249,10 +334,11 @@ void dashboard_ui_update_stats(const pi_stats_t *stats)
lv_label_set_text(lbl_disk_val, buf); lv_label_set_text(lbl_disk_val, buf);
/* CPU temp */ /* CPU temp */
snprintf(buf, sizeof(buf), "%.0fC", stats->cpu_temp); snprintf(buf, sizeof(buf), "%.0f C", stats->cpu_temp);
lv_label_set_text(lbl_cpu_temp, buf); lv_label_set_text(lbl_cpu_temp, buf);
/* Services table */ /* Services table */
s_service_count = stats->service_count;
for (int i = 0; i < stats->service_count && i < WS_MAX_SERVICES; i++) { for (int i = 0; i < stats->service_count && i < WS_MAX_SERVICES; i++) {
lv_table_set_cell_value(tbl_services, i, 0, stats->services[i].name); lv_table_set_cell_value(tbl_services, i, 0, stats->services[i].name);
lv_table_set_cell_value(tbl_services, i, 1, lv_table_set_cell_value(tbl_services, i, 1,
@@ -285,19 +371,23 @@ void dashboard_ui_update_local(float temp, float humidity, uint8_t battery)
snprintf(buf, sizeof(buf), "Humi: %.0f%%", humidity); snprintf(buf, sizeof(buf), "Humi: %.0f%%", humidity);
lv_label_set_text(lbl_room_humi, buf); lv_label_set_text(lbl_room_humi, buf);
snprintf(buf, sizeof(buf), "Batt: %d%%", battery); /* Update top bar battery text + bar */
lv_label_set_text(lbl_local_batt, buf); snprintf(buf, sizeof(buf), "%d%%", battery);
/* Also update top bar battery */
snprintf(buf, sizeof(buf), "Batt:%d%%", battery);
lv_label_set_text(lbl_batt, buf); lv_label_set_text(lbl_batt, buf);
lv_bar_set_value(bar_batt_top, battery, LV_ANIM_OFF);
} }
void dashboard_ui_update_time(int h, int m, int s) void dashboard_ui_update_time(int h, int m, int s, int year, int month, int day, int weekday)
{ {
char buf[16]; static const char *day_names[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
snprintf(buf, sizeof(buf), "%02d:%02d", h, m);
lv_label_set_text(lbl_time, buf); char buf[32];
snprintf(buf, sizeof(buf), "%02d:%02d:%02d", h, m, s);
lv_label_set_text(lbl_clock, buf);
const char *wd = (weekday >= 0 && weekday <= 6) ? day_names[weekday] : "---";
snprintf(buf, sizeof(buf), "%04d/%02d/%02d %s", year, month, day, wd);
lv_label_set_text(lbl_date, buf);
} }
void dashboard_ui_update_connection(ws_state_t ws_state, bool wifi_connected, const char *ip_str) void dashboard_ui_update_connection(ws_state_t ws_state, bool wifi_connected, const char *ip_str)

View File

@@ -24,9 +24,10 @@ void dashboard_ui_update_stats(const pi_stats_t *stats);
void dashboard_ui_update_local(float temp, float humidity, uint8_t battery); void dashboard_ui_update_local(float temp, float humidity, uint8_t battery);
/** /**
* Update time display. LVGL lock must be held by caller. * Update clock and date display. LVGL lock must be held by caller.
* weekday: 0=Sun, 1=Mon, ..., 6=Sat
*/ */
void dashboard_ui_update_time(int h, int m, int s); void dashboard_ui_update_time(int h, int m, int s, int year, int month, int day, int weekday);
/** /**
* Update connection status indicators. LVGL lock must be held by caller. * Update connection status indicators. LVGL lock must be held by caller.

View File

@@ -174,28 +174,37 @@ static void sensor_task(void *arg)
{ {
float temp = 0, humidity = 0; float temp = 0, humidity = 0;
rtcTimeStruct_t rtc_time = {}; rtcTimeStruct_t rtc_time = {};
int sensor_divider = 0;
for (;;) { for (;;) {
/* Read SHTC3 */ /* Read RTC every second */
Rtc_GetTime(&rtc_time);
/* Read SHTC3 + battery every 5 seconds */
if (sensor_divider == 0) {
s_shtc3->Shtc3_Wakeup(); s_shtc3->Shtc3_Wakeup();
vTaskDelay(pdMS_TO_TICKS(20)); vTaskDelay(pdMS_TO_TICKS(20));
s_shtc3->Shtc3_ReadTempHumi(&temp, &humidity); s_shtc3->Shtc3_ReadTempHumi(&temp, &humidity);
s_shtc3->Shtc3_Sleep(); s_shtc3->Shtc3_Sleep();
/* Read RTC */
Rtc_GetTime(&rtc_time);
/* Read battery */
uint8_t batt = Adc_GetBatteryLevel(); uint8_t batt = Adc_GetBatteryLevel();
/* Update UI under LVGL lock */
if (Lvgl_lock(100)) { if (Lvgl_lock(100)) {
dashboard_ui_update_local(temp, humidity, batt); dashboard_ui_update_local(temp, humidity, batt);
dashboard_ui_update_time(rtc_time.hour, rtc_time.minute, rtc_time.second); Lvgl_unlock();
}
}
sensor_divider = (sensor_divider + 1) % 5;
/* Update clock every second */
if (Lvgl_lock(100)) {
dashboard_ui_update_time(rtc_time.hour, rtc_time.minute, rtc_time.second,
rtc_time.year, rtc_time.month, rtc_time.day,
rtc_time.week);
Lvgl_unlock(); Lvgl_unlock();
} }
vTaskDelay(pdMS_TO_TICKS(5000)); vTaskDelay(pdMS_TO_TICKS(1000));
} }
} }

View File

@@ -0,0 +1,11 @@
idf_component_register(
SRCS "DSEG14C_BI_32px.c"
"DSEG14C_BI_40px.c"
"DSEG14C_BI_50px.c"
"InziuIosevka_Slab_CC_12px.c"
"InziuIosevka_Slab_CC_16px.c"
"InziuIosevka_Slab_CC_20px.c"
"InziuIosevka_Slab_CC_24px.c"
"InziuIosevka_Slab_CC_32px.c"
REQUIRES lvgl__lvgl
INCLUDE_DIRS "./")

View File

@@ -0,0 +1,270 @@
/*******************************************************************************
* Size: 32 px
* Bpp: 1
* Opts: --bpp 1 --size 32 --no-compress --stride 1 --align 1 --font DSEG14Classic-BoldItalic.ttf --symbols 0123456789:;,. --format lvgl -o DSEG14C_BI_32px.c
******************************************************************************/
#ifdef __has_include
#if __has_include("lvgl.h")
#ifndef LV_LVGL_H_INCLUDE_SIMPLE
#define LV_LVGL_H_INCLUDE_SIMPLE
#endif
#endif
#endif
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif
#ifndef DSEG14C_BI_32PX
#define DSEG14C_BI_32PX 1
#endif
#if DSEG14C_BI_32PX
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
/* U+002C "," */
0x2f, 0xff, 0xf6, 0x80,
/* U+002E "." */
0xee, 0xfe,
/* U+0030 "0" */
0xf, 0xff, 0xf0, 0x3f, 0xff, 0xc3, 0x7f, 0xfe,
0xce, 0xff, 0xf7, 0x3c, 0x0, 0x3c, 0xf0, 0x2,
0xf3, 0xc0, 0x1b, 0xcf, 0x0, 0xef, 0x3c, 0x3,
0xbc, 0xf0, 0xe, 0xf3, 0xc0, 0x3f, 0x8f, 0x0,
0xde, 0x78, 0x3, 0x79, 0xe0, 0x1, 0xe7, 0x0,
0x3, 0x98, 0x0, 0x6, 0x60, 0x0, 0x19, 0xc0,
0x0, 0xe7, 0x80, 0x7, 0x9e, 0xc0, 0x1e, 0x7b,
0x0, 0x79, 0xfc, 0x3, 0xc7, 0xf0, 0xf, 0x3f,
0xc0, 0x3c, 0xf7, 0x0, 0xf3, 0xd8, 0x3, 0xcf,
0x40, 0xf, 0x3c, 0x0, 0x3c, 0xef, 0xff, 0x73,
0x7f, 0xfe, 0xc3, 0xff, 0xfc, 0xf, 0xff, 0xf0,
/* U+0031 "1" */
0x0, 0x31, 0xcf, 0x3c, 0xf3, 0xcf, 0x3d, 0xe7,
0x9e, 0x78, 0xe1, 0x8e, 0x79, 0xe7, 0x9e, 0xf3,
0xcf, 0x3c, 0xf3, 0xcf, 0x1c, 0x20,
/* U+0032 "2" */
0xf, 0xff, 0xf0, 0x3f, 0xff, 0xc0, 0x7f, 0xfe,
0xc0, 0xff, 0xf7, 0x0, 0x0, 0x3c, 0x0, 0x0,
0xf0, 0x0, 0x3, 0xc0, 0x0, 0xf, 0x0, 0x0,
0x3c, 0x0, 0x0, 0xf0, 0x0, 0x7, 0x80, 0x0,
0x1e, 0x0, 0x0, 0x78, 0x0, 0x1, 0xe0, 0x7c,
0xfb, 0x83, 0xf3, 0xf6, 0x6f, 0xcf, 0xc1, 0xdf,
0x3e, 0x7, 0x80, 0x0, 0x1e, 0x0, 0x0, 0x78,
0x0, 0x1, 0xe0, 0x0, 0x7, 0x80, 0x0, 0x3e,
0x0, 0x0, 0xf0, 0x0, 0x3, 0xc0, 0x0, 0xf,
0x0, 0x0, 0x3c, 0x0, 0x0, 0xef, 0xff, 0x3,
0x7f, 0xfe, 0x3, 0xff, 0xfc, 0xf, 0xff, 0xf0,
/* U+0033 "3" */
0x1f, 0xff, 0xe0, 0xff, 0xff, 0x3, 0xff, 0xf6,
0xf, 0xff, 0x70, 0x0, 0x7, 0x80, 0x0, 0x3c,
0x0, 0x1, 0xe0, 0x0, 0xf, 0x0, 0x0, 0x78,
0x0, 0x3, 0xc0, 0x0, 0x3c, 0x0, 0x1, 0xe0,
0x0, 0xf, 0x0, 0x0, 0x78, 0x3e, 0x7d, 0xc3,
0xf3, 0xf6, 0x1f, 0x9f, 0xb0, 0x7c, 0xfb, 0x80,
0x0, 0x3c, 0x0, 0x1, 0xe0, 0x0, 0xf, 0x0,
0x0, 0xf0, 0x0, 0x7, 0x80, 0x0, 0x3c, 0x0,
0x1, 0xe0, 0x0, 0xf, 0x0, 0x0, 0x78, 0x0,
0x3, 0xc1, 0xff, 0xee, 0x1f, 0xff, 0xb1, 0xff,
0xfe, 0xf, 0xff, 0xf0,
/* U+0034 "4" */
0x20, 0x0, 0x3, 0x0, 0x0, 0xdc, 0x0, 0xe,
0xf0, 0x0, 0xf7, 0x80, 0x7, 0xbc, 0x0, 0x3d,
0xe0, 0x1, 0xef, 0x0, 0xf, 0x78, 0x0, 0x7b,
0xc0, 0x7, 0x9e, 0x0, 0x3d, 0xe0, 0x1, 0xef,
0x0, 0xf, 0x77, 0xcf, 0xbb, 0x7e, 0x7e, 0xc3,
0xf3, 0xf6, 0xf, 0x9f, 0x70, 0x0, 0x7, 0x80,
0x0, 0x3c, 0x0, 0x1, 0xe0, 0x0, 0x1e, 0x0,
0x0, 0xf0, 0x0, 0x7, 0x80, 0x0, 0x3c, 0x0,
0x1, 0xe0, 0x0, 0xf, 0x0, 0x0, 0x78, 0x0,
0x1, 0xc0, 0x0, 0x6, 0x0, 0x0, 0x0,
/* U+0035 "5" */
0x1f, 0xff, 0xe1, 0xff, 0xfe, 0x6f, 0xff, 0xc7,
0x7f, 0xf8, 0x78, 0x0, 0x7, 0x80, 0x0, 0x78,
0x0, 0x7, 0x80, 0x0, 0x78, 0x0, 0x7, 0x80,
0x0, 0x78, 0x0, 0x7, 0x80, 0x0, 0xf0, 0x0,
0xf, 0x0, 0x0, 0xef, 0x9f, 0xd, 0xf9, 0xf8,
0x1f, 0x9f, 0xb0, 0xf9, 0xf7, 0x0, 0x0, 0xf0,
0x0, 0xf, 0x0, 0x0, 0xf0, 0x0, 0x1e, 0x0,
0x1, 0xe0, 0x0, 0x1e, 0x0, 0x1, 0xe0, 0x0,
0x1e, 0x0, 0x1, 0xe0, 0x0, 0x1e, 0x1f, 0xfe,
0xe3, 0xff, 0xf6, 0x7f, 0xff, 0x87, 0xff, 0xf8,
/* U+0036 "6" */
0xf, 0xff, 0xf0, 0x7f, 0xff, 0x8d, 0xff, 0xf8,
0x77, 0xff, 0x83, 0xc0, 0x0, 0x1e, 0x0, 0x0,
0xf0, 0x0, 0x7, 0x80, 0x0, 0x3c, 0x0, 0x1,
0xe0, 0x0, 0xf, 0x0, 0x0, 0x78, 0x0, 0x7,
0x80, 0x0, 0x3c, 0x0, 0x1, 0xdf, 0x3e, 0xd,
0xf9, 0xf8, 0x6f, 0xcf, 0xdb, 0xbe, 0x7d, 0xde,
0x0, 0x1e, 0xf0, 0x0, 0xf7, 0x80, 0x7, 0xbc,
0x0, 0x79, 0xe0, 0x3, 0xdf, 0x0, 0x1e, 0xf0,
0x0, 0xf7, 0x80, 0x7, 0xbc, 0x0, 0x3d, 0xe0,
0x1, 0xee, 0xff, 0xf7, 0x6f, 0xff, 0xd8, 0xff,
0xff, 0x7, 0xff, 0xf8,
/* U+0037 "7" */
0x1f, 0xff, 0xe0, 0xff, 0xff, 0x1b, 0xff, 0xf6,
0xef, 0xff, 0x77, 0x80, 0x7, 0xbc, 0x0, 0x3d,
0xe0, 0x1, 0xef, 0x0, 0xf, 0x78, 0x0, 0x7b,
0xc0, 0x3, 0xde, 0x0, 0x3c, 0xf0, 0x1, 0xef,
0x0, 0xf, 0x78, 0x0, 0x7b, 0x80, 0x1, 0xd8,
0x0, 0x6, 0x0, 0x0, 0x30, 0x0, 0x3, 0x80,
0x0, 0x3c, 0x0, 0x1, 0xe0, 0x0, 0xf, 0x0,
0x0, 0x70, 0x0, 0x7, 0x80, 0x0, 0x3c, 0x0,
0x1, 0xe0, 0x0, 0xf, 0x0, 0x0, 0x78, 0x0,
0x3, 0xc0, 0x0, 0xe, 0x0, 0x0, 0x30, 0x0,
0x0, 0x0,
/* U+0038 "8" */
0xf, 0xff, 0xf0, 0x3f, 0xff, 0xc3, 0x7f, 0xfe,
0xce, 0xff, 0xf7, 0x3c, 0x0, 0x3c, 0xf0, 0x0,
0xf3, 0xc0, 0x3, 0xcf, 0x0, 0xf, 0x3c, 0x0,
0x3c, 0xf0, 0x0, 0xf3, 0xc0, 0x7, 0x8f, 0x0,
0x1e, 0x78, 0x0, 0x79, 0xe0, 0x1, 0xe7, 0x7c,
0xfb, 0x9b, 0xf3, 0xf6, 0x6f, 0xcf, 0xd9, 0xdf,
0x3e, 0xe7, 0x80, 0x7, 0x9e, 0x0, 0x1e, 0x78,
0x0, 0x79, 0xe0, 0x3, 0xc7, 0x80, 0xf, 0x3e,
0x0, 0x3c, 0xf0, 0x0, 0xf3, 0xc0, 0x3, 0xcf,
0x0, 0xf, 0x3c, 0x0, 0x3c, 0xef, 0xff, 0x73,
0x7f, 0xfe, 0xc3, 0xff, 0xfc, 0xf, 0xff, 0xf0,
/* U+0039 "9" */
0x1f, 0xff, 0xe0, 0xff, 0xff, 0x1b, 0xff, 0xf6,
0xef, 0xff, 0x77, 0x80, 0x7, 0xbc, 0x0, 0x3d,
0xe0, 0x1, 0xef, 0x0, 0xf, 0x78, 0x0, 0x7b,
0xc0, 0x3, 0xde, 0x0, 0x3c, 0xf0, 0x1, 0xef,
0x0, 0xf, 0x78, 0x0, 0x7b, 0xbe, 0x7d, 0xdb,
0xf3, 0xf6, 0x1f, 0x9f, 0xb0, 0x7c, 0xfb, 0x80,
0x0, 0x3c, 0x0, 0x1, 0xe0, 0x0, 0xf, 0x0,
0x0, 0xf0, 0x0, 0x7, 0x80, 0x0, 0x3c, 0x0,
0x1, 0xe0, 0x0, 0xf, 0x0, 0x0, 0x78, 0x0,
0x3, 0xc1, 0xff, 0xee, 0x1f, 0xff, 0xb1, 0xff,
0xfe, 0xf, 0xff, 0xf0,
/* U+003A ":" */
0x73, 0xde, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x73, 0xde, 0xe0
};
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
{.bitmap_index = 0, .adv_w = 418, .box_w = 3, .box_h = 9, .ofs_x = 7, .ofs_y = 5},
{.bitmap_index = 4, .adv_w = 0, .box_w = 4, .box_h = 4, .ofs_x = -3, .ofs_y = 0},
{.bitmap_index = 6, .adv_w = 418, .box_w = 22, .box_h = 32, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 94, .adv_w = 418, .box_w = 6, .box_h = 29, .ofs_x = 18, .ofs_y = 2},
{.bitmap_index = 116, .adv_w = 418, .box_w = 22, .box_h = 32, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 204, .adv_w = 418, .box_w = 21, .box_h = 32, .ofs_x = 3, .ofs_y = 0},
{.bitmap_index = 288, .adv_w = 418, .box_w = 21, .box_h = 30, .ofs_x = 3, .ofs_y = 1},
{.bitmap_index = 367, .adv_w = 418, .box_w = 20, .box_h = 32, .ofs_x = 3, .ofs_y = 0},
{.bitmap_index = 447, .adv_w = 418, .box_w = 21, .box_h = 32, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 531, .adv_w = 418, .box_w = 21, .box_h = 31, .ofs_x = 3, .ofs_y = 1},
{.bitmap_index = 613, .adv_w = 418, .box_w = 22, .box_h = 32, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 701, .adv_w = 418, .box_w = 21, .box_h = 32, .ofs_x = 3, .ofs_y = 0},
{.bitmap_index = 785, .adv_w = 102, .box_w = 5, .box_h = 17, .ofs_x = 1, .ofs_y = 7}
};
/*---------------------
* CHARACTER MAPPING
*--------------------*/
static const uint8_t glyph_id_ofs_list_0[] = {
0, 0, 1, 0, 2, 3, 4, 5,
6, 7, 8, 9, 10, 11, 12
};
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 44, .range_length = 15, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = glyph_id_ofs_list_0, .list_length = 15, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_FULL
}
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
#if LVGL_VERSION_MAJOR == 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
#endif
#if LVGL_VERSION_MAJOR >= 8
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
#endif
.glyph_bitmap = glyph_bitmap,
.glyph_dsc = glyph_dsc,
.cmaps = cmaps,
.kern_dsc = NULL,
.kern_scale = 0,
.cmap_num = 1,
.bpp = 1,
.kern_classes = 0,
.bitmap_format = 0,
#if LVGL_VERSION_MAJOR == 8
.cache = &cache
#endif
};
extern const lv_font_t lv_font_montserrat_12;
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t DSEG14C_BI_32px = {
#else
lv_font_t DSEG14C_BI_32px = {
#endif
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 32, /*The maximum line height required by the font*/
.base_line = 0, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
.underline_position = -4,
.underline_thickness = 2,
#endif
.dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9
.fallback = &lv_font_montserrat_12,
#endif
.user_data = NULL,
};
#endif /*#if DSEG14C_BI_32PX*/

View File

@@ -0,0 +1,329 @@
/*******************************************************************************
* Size: 40 px
* Bpp: 1
* Opts: --bpp 1 --size 40 --no-compress --stride 1 --align 1 --font DSEG14Classic-BoldItalic.ttf --symbols 0123456789:;., --format lvgl -o DSEG14C_BI_40px.c
******************************************************************************/
#ifdef __has_include
#if __has_include("lvgl.h")
#ifndef LV_LVGL_H_INCLUDE_SIMPLE
#define LV_LVGL_H_INCLUDE_SIMPLE
#endif
#endif
#endif
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif
#ifndef DSEG14C_BI_40PX
#define DSEG14C_BI_40PX 1
#endif
#if DSEG14C_BI_40PX
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
/* U+002C "," */
0x19, 0xce, 0xe7, 0x39, 0xce, 0x63, 0x10,
/* U+002E "." */
0x77, 0xff, 0xf7, 0x0,
/* U+0030 "0" */
0x3, 0xff, 0xff, 0xc0, 0x3f, 0xff, 0xfc, 0x9,
0xff, 0xff, 0xb1, 0xdf, 0xff, 0xf7, 0x1e, 0xff,
0xfe, 0xf1, 0xf0, 0x0, 0x1f, 0x1f, 0x0, 0xd,
0xf1, 0xf0, 0x0, 0xdf, 0x1f, 0x0, 0x1d, 0xf1,
0xf0, 0x3, 0xdf, 0x1f, 0x0, 0x3d, 0xf1, 0xf0,
0x3, 0xfe, 0x1f, 0x0, 0x3f, 0xe1, 0xe0, 0x3,
0xfe, 0x3e, 0x0, 0x3b, 0xe3, 0xe0, 0x3, 0x3e,
0x3e, 0x0, 0x33, 0xe3, 0xe0, 0x0, 0x3e, 0x3c,
0x0, 0x1, 0xe3, 0x0, 0x0, 0xe, 0x30, 0x0,
0x0, 0xe3, 0x80, 0x0, 0x1e, 0x3c, 0x0, 0x3,
0xc3, 0xe6, 0x0, 0x7c, 0x3e, 0xe0, 0x7, 0xc7,
0xce, 0x0, 0x7c, 0x7d, 0xe0, 0x7, 0xc7, 0xdc,
0x0, 0x7c, 0x7d, 0xc0, 0x7, 0xc7, 0xdc, 0x0,
0x7c, 0x7d, 0xc0, 0x7, 0xc7, 0xdc, 0x0, 0x7c,
0x7d, 0x80, 0x7, 0xc7, 0xd0, 0x0, 0x7c, 0x7c,
0x0, 0xf, 0x87, 0xbf, 0xff, 0x78, 0x67, 0xff,
0xfb, 0x85, 0xff, 0xff, 0xd8, 0x3f, 0xff, 0xfe,
0x1, 0xff, 0xff, 0xc0,
/* U+0031 "1" */
0x0, 0x3, 0x7, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f,
0x1f, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e,
0x1e, 0xe, 0x0, 0xe, 0x3e, 0x7c, 0x7c, 0x7c,
0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c,
0xf8, 0x78, 0x38, 0x18, 0x0,
/* U+0032 "2" */
0x3, 0xff, 0xff, 0xc0, 0x3f, 0xff, 0xfc, 0x1,
0xff, 0xff, 0x80, 0x1f, 0xff, 0xf3, 0x0, 0xff,
0xfe, 0x70, 0x0, 0x0, 0xf, 0x0, 0x0, 0x1,
0xf0, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1, 0xf0,
0x0, 0x0, 0x1f, 0x0, 0x0, 0x1, 0xf0, 0x0,
0x0, 0x3e, 0x0, 0x0, 0x3, 0xe0, 0x0, 0x0,
0x3e, 0x0, 0x0, 0x3, 0xe0, 0x0, 0x0, 0x3e,
0x0, 0x0, 0x3, 0xe0, 0x0, 0x0, 0x3e, 0x1,
0xf8, 0xfd, 0xe0, 0x3f, 0x9f, 0xee, 0x7, 0xfd,
0xff, 0x3, 0xbf, 0x9f, 0xe0, 0x3d, 0xf8, 0xfc,
0x3, 0xe0, 0x0, 0x0, 0x3e, 0x0, 0x0, 0x3,
0xc0, 0x0, 0x0, 0x7c, 0x0, 0x0, 0x7, 0xc0,
0x0, 0x0, 0x7c, 0x0, 0x0, 0x7, 0xc0, 0x0,
0x0, 0x7c, 0x0, 0x0, 0x7, 0xc0, 0x0, 0x0,
0x7c, 0x0, 0x0, 0x7, 0xc0, 0x0, 0x0, 0x7c,
0x0, 0x0, 0x7, 0xbf, 0xff, 0x0, 0x77, 0xff,
0xf8, 0x5, 0xff, 0xff, 0xc0, 0x3f, 0xff, 0xfe,
0x1, 0xff, 0xff, 0xc0,
/* U+0033 "3" */
0xf, 0xff, 0xff, 0x3, 0xff, 0xff, 0xc0, 0x7f,
0xff, 0xe0, 0x1f, 0xff, 0xf3, 0x3, 0xff, 0xf9,
0xc0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0x7c, 0x0,
0x0, 0x1f, 0x0, 0x0, 0x7, 0xc0, 0x0, 0x1,
0xf0, 0x0, 0x0, 0x7c, 0x0, 0x0, 0x3e, 0x0,
0x0, 0xf, 0x80, 0x0, 0x3, 0xe0, 0x0, 0x0,
0xf8, 0x0, 0x0, 0x3e, 0x0, 0x0, 0xf, 0x80,
0x0, 0x3, 0xe0, 0x7e, 0x3f, 0x78, 0x3f, 0x9f,
0xee, 0x1f, 0xf7, 0xfc, 0x3, 0xf9, 0xfe, 0xe0,
0x7e, 0x3f, 0xf8, 0x0, 0x0, 0x7c, 0x0, 0x0,
0x1f, 0x0, 0x0, 0x7, 0xc0, 0x0, 0x1, 0xf0,
0x0, 0x0, 0x7c, 0x0, 0x0, 0x1f, 0x0, 0x0,
0x7, 0xc0, 0x0, 0x1, 0xf0, 0x0, 0x0, 0x7c,
0x0, 0x0, 0x1f, 0x0, 0x0, 0x7, 0xc0, 0x0,
0x3, 0xe0, 0x3f, 0xff, 0x78, 0x1f, 0xff, 0xee,
0x1f, 0xff, 0xfd, 0x8f, 0xff, 0xff, 0x81, 0xff,
0xff, 0xc0,
/* U+0034 "4" */
0x0, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x37, 0x80,
0x0, 0x1d, 0xf0, 0x0, 0xf, 0x7c, 0x0, 0x7,
0xdf, 0x0, 0x1, 0xf7, 0xc0, 0x0, 0x7d, 0xf0,
0x0, 0x1f, 0x7c, 0x0, 0x7, 0xdf, 0x0, 0x3,
0xe7, 0xc0, 0x0, 0xf9, 0xf0, 0x0, 0x3e, 0xf8,
0x0, 0xf, 0xbe, 0x0, 0x3, 0xef, 0x80, 0x0,
0xfb, 0xe0, 0x0, 0x3e, 0xf7, 0xe3, 0xf7, 0xbb,
0xf9, 0xfe, 0xe1, 0xff, 0x7f, 0xc0, 0x3f, 0x9f,
0xee, 0x7, 0xe3, 0xf7, 0x80, 0x0, 0x7, 0xc0,
0x0, 0x1, 0xf0, 0x0, 0x0, 0x7c, 0x0, 0x0,
0x1f, 0x0, 0x0, 0x7, 0xc0, 0x0, 0x1, 0xf0,
0x0, 0x0, 0x7c, 0x0, 0x0, 0x1f, 0x0, 0x0,
0x7, 0xc0, 0x0, 0x1, 0xf0, 0x0, 0x0, 0x7c,
0x0, 0x0, 0x3e, 0x0, 0x0, 0x7, 0x80, 0x0,
0x0, 0xe0, 0x0, 0x0, 0x18, 0x0, 0x0, 0x0,
0x0,
/* U+0035 "5" */
0xf, 0xff, 0xff, 0x7, 0xff, 0xff, 0x89, 0xff,
0xff, 0x8e, 0xff, 0xff, 0x87, 0xbf, 0xff, 0x83,
0xe0, 0x0, 0x1, 0xf0, 0x0, 0x0, 0xf8, 0x0,
0x0, 0x7c, 0x0, 0x0, 0x3e, 0x0, 0x0, 0x1f,
0x0, 0x0, 0xf, 0x80, 0x0, 0x7, 0xc0, 0x0,
0x3, 0xe0, 0x0, 0x3, 0xe0, 0x0, 0x1, 0xf0,
0x0, 0x0, 0xf8, 0x0, 0x0, 0x7c, 0x0, 0x0,
0x3d, 0xf8, 0xfc, 0x1d, 0xfc, 0xff, 0x1, 0xff,
0x7f, 0xc0, 0x7f, 0x3f, 0xdc, 0x1f, 0x8f, 0xfe,
0x0, 0x0, 0x3e, 0x0, 0x0, 0x1f, 0x0, 0x0,
0xf, 0x80, 0x0, 0x7, 0xc0, 0x0, 0x3, 0xe0,
0x0, 0x1, 0xf0, 0x0, 0x0, 0xf8, 0x0, 0x0,
0x7c, 0x0, 0x0, 0x3e, 0x0, 0x0, 0x1f, 0x0,
0x0, 0xf, 0x80, 0x0, 0xf, 0x81, 0xff, 0xfb,
0xc1, 0xff, 0xfe, 0xe3, 0xff, 0xff, 0xb3, 0xff,
0xff, 0xe0, 0xff, 0xff, 0xe0,
/* U+0036 "6" */
0x3, 0xff, 0xff, 0xc0, 0x7f, 0xff, 0xf8, 0x27,
0xff, 0xfe, 0xe, 0xff, 0xff, 0x81, 0xef, 0xff,
0xe0, 0x3e, 0x0, 0x0, 0x7, 0xc0, 0x0, 0x0,
0xf8, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x3, 0xe0,
0x0, 0x0, 0x7c, 0x0, 0x0, 0xf, 0x80, 0x0,
0x1, 0xf0, 0x0, 0x0, 0x3e, 0x0, 0x0, 0xf,
0x80, 0x0, 0x1, 0xf0, 0x0, 0x0, 0x3e, 0x0,
0x0, 0x7, 0xc0, 0x0, 0x0, 0xf7, 0xe3, 0xf0,
0x1d, 0xfc, 0xff, 0x0, 0x7f, 0xdf, 0xf0, 0x77,
0xf3, 0xff, 0xcf, 0x7e, 0x3f, 0xf9, 0xf0, 0x0,
0x3e, 0x3e, 0x0, 0x7, 0xc7, 0x80, 0x0, 0xf9,
0xf0, 0x0, 0x1f, 0x3e, 0x0, 0x3, 0xe7, 0xc0,
0x0, 0x7c, 0xf8, 0x0, 0xf, 0x9f, 0x0, 0x1,
0xf3, 0xe0, 0x0, 0x3e, 0x7c, 0x0, 0x7, 0xcf,
0x80, 0x0, 0xf9, 0xf0, 0x0, 0x3e, 0x3d, 0xff,
0xfb, 0xc7, 0x7f, 0xff, 0xb8, 0xbf, 0xff, 0xfb,
0xf, 0xff, 0xff, 0x80, 0xff, 0xff, 0xe0,
/* U+0037 "7" */
0xf, 0xff, 0xff, 0x3, 0xff, 0xff, 0xc2, 0x7f,
0xff, 0xed, 0xdf, 0xff, 0xf7, 0x7b, 0xff, 0xfb,
0xdf, 0x0, 0x1, 0xf7, 0xc0, 0x0, 0x7d, 0xf0,
0x0, 0x1f, 0x7c, 0x0, 0x7, 0xdf, 0x0, 0x1,
0xf7, 0xc0, 0x0, 0x7d, 0xf0, 0x0, 0x3e, 0x7c,
0x0, 0xf, 0x9e, 0x0, 0x3, 0xef, 0x80, 0x0,
0xfb, 0xe0, 0x0, 0x3e, 0xf8, 0x0, 0xf, 0xbe,
0x0, 0x3, 0xee, 0x0, 0x0, 0x7b, 0x0, 0x0,
0xe, 0x0, 0x0, 0x3, 0x80, 0x0, 0x1, 0xe0,
0x0, 0x0, 0xf0, 0x0, 0x0, 0x7c, 0x0, 0x0,
0x1f, 0x0, 0x0, 0x7, 0xc0, 0x0, 0x1, 0xf0,
0x0, 0x0, 0x7c, 0x0, 0x0, 0x1f, 0x0, 0x0,
0x7, 0xc0, 0x0, 0x1, 0xf0, 0x0, 0x0, 0x7c,
0x0, 0x0, 0x1f, 0x0, 0x0, 0x7, 0xc0, 0x0,
0x3, 0xe0, 0x0, 0x0, 0x78, 0x0, 0x0, 0xe,
0x0, 0x0, 0x1, 0x80,
/* U+0038 "8" */
0x3, 0xff, 0xff, 0xc0, 0x3f, 0xff, 0xfc, 0x9,
0xff, 0xff, 0x81, 0xdf, 0xff, 0xf3, 0x1e, 0xff,
0xfe, 0x71, 0xf0, 0x0, 0xf, 0x1f, 0x0, 0x1,
0xf1, 0xf0, 0x0, 0x1f, 0x1f, 0x0, 0x1, 0xf1,
0xf0, 0x0, 0x1f, 0x1f, 0x0, 0x1, 0xf1, 0xf0,
0x0, 0x3e, 0x1f, 0x0, 0x3, 0xe1, 0xf0, 0x0,
0x3e, 0x3e, 0x0, 0x3, 0xe3, 0xe0, 0x0, 0x3e,
0x3e, 0x0, 0x3, 0xe3, 0xe0, 0x0, 0x3e, 0x3d,
0xf8, 0xfd, 0xe3, 0xbf, 0x9f, 0xee, 0x7, 0xfd,
0xff, 0x3, 0xbf, 0x9f, 0xfe, 0x3d, 0xf8, 0xff,
0xe3, 0xe0, 0x0, 0x7c, 0x3e, 0x0, 0x7, 0xc3,
0xc0, 0x0, 0x7c, 0x7c, 0x0, 0x7, 0xc7, 0xc0,
0x0, 0x7c, 0x7c, 0x0, 0x7, 0xc7, 0xc0, 0x0,
0x7c, 0x7c, 0x0, 0x7, 0xc7, 0xc0, 0x0, 0x7c,
0x7c, 0x0, 0x7, 0xc7, 0xc0, 0x0, 0x7c, 0x7c,
0x0, 0xf, 0x87, 0xbf, 0xff, 0x78, 0x77, 0xff,
0xfb, 0x85, 0xff, 0xff, 0xd8, 0x3f, 0xff, 0xfe,
0x1, 0xff, 0xff, 0xc0,
/* U+0039 "9" */
0xf, 0xff, 0xff, 0x3, 0xff, 0xff, 0xc2, 0x7f,
0xff, 0xe1, 0xdf, 0xff, 0xf3, 0x7b, 0xff, 0xf9,
0xdf, 0x0, 0x0, 0xf7, 0xc0, 0x0, 0x7d, 0xf0,
0x0, 0x1f, 0x7c, 0x0, 0x7, 0xdf, 0x0, 0x1,
0xf7, 0xc0, 0x0, 0x7d, 0xf0, 0x0, 0x3e, 0x7c,
0x0, 0xf, 0x9f, 0x0, 0x3, 0xef, 0x80, 0x0,
0xfb, 0xe0, 0x0, 0x3e, 0xf8, 0x0, 0xf, 0xbe,
0x0, 0x3, 0xef, 0x7e, 0x3f, 0x7b, 0xbf, 0x9f,
0xee, 0x1f, 0xf7, 0xfc, 0x3, 0xf9, 0xfe, 0xe0,
0x7e, 0x3f, 0xf8, 0x0, 0x0, 0x7c, 0x0, 0x0,
0x1f, 0x0, 0x0, 0x7, 0xc0, 0x0, 0x1, 0xf0,
0x0, 0x0, 0x7c, 0x0, 0x0, 0x1f, 0x0, 0x0,
0x7, 0xc0, 0x0, 0x1, 0xf0, 0x0, 0x0, 0x7c,
0x0, 0x0, 0x1f, 0x0, 0x0, 0x7, 0xc0, 0x0,
0x3, 0xe0, 0x3f, 0xff, 0x78, 0x1f, 0xff, 0xee,
0x1f, 0xff, 0xfd, 0x8f, 0xff, 0xff, 0x81, 0xff,
0xff, 0xc0,
/* U+003A ":" */
0x39, 0xf7, 0xdf, 0x38, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x73, 0xef, 0xbe, 0x70
};
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
{.bitmap_index = 0, .adv_w = 522, .box_w = 5, .box_h = 11, .ofs_x = 8, .ofs_y = 6},
{.bitmap_index = 7, .adv_w = 0, .box_w = 5, .box_h = 5, .ofs_x = -4, .ofs_y = 0},
{.bitmap_index = 11, .adv_w = 522, .box_w = 28, .box_h = 40, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 151, .adv_w = 522, .box_w = 8, .box_h = 37, .ofs_x = 22, .ofs_y = 1},
{.bitmap_index = 188, .adv_w = 522, .box_w = 28, .box_h = 40, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 328, .adv_w = 522, .box_w = 26, .box_h = 40, .ofs_x = 4, .ofs_y = 0},
{.bitmap_index = 458, .adv_w = 522, .box_w = 26, .box_h = 37, .ofs_x = 4, .ofs_y = 2},
{.bitmap_index = 579, .adv_w = 522, .box_w = 25, .box_h = 40, .ofs_x = 4, .ofs_y = 0},
{.bitmap_index = 704, .adv_w = 522, .box_w = 27, .box_h = 40, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 839, .adv_w = 522, .box_w = 26, .box_h = 38, .ofs_x = 4, .ofs_y = 2},
{.bitmap_index = 963, .adv_w = 522, .box_w = 28, .box_h = 40, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 1103, .adv_w = 522, .box_w = 26, .box_h = 40, .ofs_x = 4, .ofs_y = 0},
{.bitmap_index = 1233, .adv_w = 128, .box_w = 6, .box_h = 21, .ofs_x = 1, .ofs_y = 9}
};
/*---------------------
* CHARACTER MAPPING
*--------------------*/
static const uint8_t glyph_id_ofs_list_0[] = {
0, 0, 1, 0, 2, 3, 4, 5,
6, 7, 8, 9, 10, 11, 12
};
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 44, .range_length = 15, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = glyph_id_ofs_list_0, .list_length = 15, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_FULL
}
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
#if LVGL_VERSION_MAJOR == 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
#endif
#if LVGL_VERSION_MAJOR >= 8
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
#endif
.glyph_bitmap = glyph_bitmap,
.glyph_dsc = glyph_dsc,
.cmaps = cmaps,
.kern_dsc = NULL,
.kern_scale = 0,
.cmap_num = 1,
.bpp = 1,
.kern_classes = 0,
.bitmap_format = 0,
#if LVGL_VERSION_MAJOR == 8
.cache = &cache
#endif
};
extern const lv_font_t lv_font_montserrat_12;
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t DSEG14C_BI_40px = {
#else
lv_font_t DSEG14C_BI_40px = {
#endif
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 40, /*The maximum line height required by the font*/
.base_line = 0, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
.underline_position = -5,
.underline_thickness = 2,
#endif
.dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9
.fallback = &lv_font_montserrat_12,
#endif
.user_data = NULL,
};
#endif /*#if DSEG14C_BI_40PX*/

View File

@@ -0,0 +1,417 @@
/*******************************************************************************
* Size: 50 px
* Bpp: 1
* Opts: --bpp 1 --size 50 --no-compress --stride 1 --align 1 --font DSEG14Classic-BoldItalic.ttf --symbols 0123456789:;., --format lvgl -o DSEG14C_BI_50px.c
******************************************************************************/
#ifdef __has_include
#if __has_include("lvgl.h")
#ifndef LV_LVGL_H_INCLUDE_SIMPLE
#define LV_LVGL_H_INCLUDE_SIMPLE
#endif
#endif
#endif
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif
#ifndef DSEG14C_BI_50PX
#define DSEG14C_BI_50PX 1
#endif
#if DSEG14C_BI_50PX
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
/* U+002C "," */
0x19, 0xce, 0xff, 0xff, 0xde, 0xf7, 0xbd, 0xcc,
0x60,
/* U+002E "." */
0x7b, 0xef, 0xff, 0xf9, 0xe0,
/* U+0030 "0" */
0x1, 0xff, 0xff, 0xff, 0x0, 0x7f, 0xff, 0xff,
0xf0, 0x17, 0xff, 0xff, 0xfd, 0x7, 0x7f, 0xff,
0xfe, 0x60, 0xf7, 0xff, 0xff, 0x9e, 0x1f, 0x7f,
0xff, 0xe7, 0xc3, 0xf0, 0x0, 0x1, 0xf0, 0xfe,
0x0, 0x3, 0x7e, 0x1f, 0xc0, 0x0, 0x6f, 0xc3,
0xf8, 0x0, 0x1d, 0xf8, 0x7e, 0x0, 0x7, 0xbf,
0xf, 0xc0, 0x0, 0xf7, 0xe1, 0xf8, 0x0, 0x1e,
0xfc, 0x3f, 0x0, 0x7, 0xdf, 0x87, 0xe0, 0x0,
0xfb, 0xf0, 0xfc, 0x0, 0x1e, 0xfe, 0x1f, 0x80,
0x3, 0xdf, 0xc3, 0xf0, 0x0, 0x7b, 0xf8, 0xfe,
0x0, 0xe, 0x7e, 0x1f, 0xc0, 0x1, 0xcf, 0xc3,
0xf8, 0x0, 0x31, 0xf8, 0x7e, 0x0, 0x0, 0x3f,
0xf, 0x80, 0x0, 0x3, 0xe1, 0xe0, 0x0, 0x0,
0x3c, 0x0, 0x0, 0x0, 0x0, 0x7, 0x0, 0x0,
0x0, 0x70, 0xf0, 0x0, 0x0, 0x1e, 0x1f, 0x0,
0x0, 0x7, 0xc3, 0xf0, 0x0, 0x3, 0xf8, 0x7e,
0x30, 0x0, 0x7e, 0x1f, 0xce, 0x0, 0xf, 0xc3,
0xf9, 0xc0, 0x1, 0xf8, 0x7f, 0x78, 0x0, 0x3f,
0xf, 0xdf, 0x0, 0x7, 0xe1, 0xfb, 0xe0, 0x0,
0xfc, 0x3f, 0x78, 0x0, 0x1f, 0x87, 0xef, 0x0,
0x3, 0xf0, 0xfd, 0xe0, 0x0, 0x7e, 0x1f, 0xbc,
0x0, 0x1f, 0xc3, 0xf7, 0x0, 0x3, 0xf8, 0x7e,
0xe0, 0x0, 0x7f, 0x1f, 0xd8, 0x0, 0xf, 0xc3,
0xfa, 0x0, 0x1, 0xf8, 0x7e, 0x0, 0x0, 0x3f,
0xf, 0x9f, 0xff, 0xfb, 0xe1, 0xe7, 0xff, 0xff,
0xbc, 0x3b, 0xff, 0xff, 0xfb, 0x82, 0xff, 0xff,
0xff, 0xa0, 0x3f, 0xff, 0xff, 0xf8, 0x3, 0xff,
0xff, 0xfc, 0x0,
/* U+0031 "1" */
0x1, 0x80, 0xf0, 0x7c, 0x3f, 0x1f, 0x87, 0xe1,
0xf8, 0x7e, 0x1f, 0x87, 0xe1, 0xf8, 0x7e, 0x1f,
0x8f, 0xe3, 0xf8, 0xfc, 0x3f, 0xf, 0xc3, 0xf0,
0x7c, 0xf, 0x1, 0xc0, 0x0, 0x3c, 0x1f, 0xf,
0xc7, 0xf1, 0xf8, 0x7e, 0x1f, 0x87, 0xe1, 0xf8,
0x7e, 0x1f, 0x87, 0xe3, 0xf8, 0xfe, 0x3f, 0x8f,
0xc3, 0xf0, 0xfc, 0x1f, 0x3, 0xc0, 0x70, 0x8,
0x0,
/* U+0032 "2" */
0x1, 0xff, 0xff, 0xff, 0x0, 0x7f, 0xff, 0xff,
0xf0, 0x7, 0xff, 0xff, 0xfc, 0x0, 0x7f, 0xff,
0xfe, 0x60, 0x7, 0xff, 0xff, 0x9e, 0x0, 0x7f,
0xff, 0xe7, 0xc0, 0x0, 0x0, 0x1, 0xf0, 0x0,
0x0, 0x0, 0x7e, 0x0, 0x0, 0x0, 0xf, 0xc0,
0x0, 0x0, 0x1, 0xf8, 0x0, 0x0, 0x0, 0x3f,
0x0, 0x0, 0x0, 0x7, 0xe0, 0x0, 0x0, 0x0,
0xfc, 0x0, 0x0, 0x0, 0x1f, 0x80, 0x0, 0x0,
0x3, 0xf0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0,
0x0, 0x1f, 0xc0, 0x0, 0x0, 0x3, 0xf8, 0x0,
0x0, 0x0, 0x7e, 0x0, 0x0, 0x0, 0xf, 0xc0,
0x0, 0x0, 0x1, 0xf8, 0x0, 0x0, 0x0, 0x3f,
0x0, 0x1f, 0xc3, 0xfb, 0xe0, 0xf, 0xf8, 0xff,
0xbc, 0x3, 0xff, 0xbf, 0xf3, 0x87, 0x7f, 0xe7,
0xff, 0x0, 0xf7, 0xfc, 0x7f, 0x80, 0x1f, 0x7f,
0xf, 0xe0, 0x3, 0xf0, 0x0, 0x0, 0x0, 0x7e,
0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x3,
0xf8, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0,
0xf, 0xc0, 0x0, 0x0, 0x1, 0xf8, 0x0, 0x0,
0x0, 0x3f, 0x0, 0x0, 0x0, 0x7, 0xe0, 0x0,
0x0, 0x0, 0xfc, 0x0, 0x0, 0x0, 0x1f, 0x80,
0x0, 0x0, 0x3, 0xf0, 0x0, 0x0, 0x0, 0x7e,
0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x3,
0xf8, 0x0, 0x0, 0x0, 0x7e, 0x0, 0x0, 0x0,
0xf, 0x9f, 0xff, 0xf8, 0x1, 0xe7, 0xff, 0xff,
0x80, 0x3b, 0xff, 0xff, 0xf8, 0x2, 0xff, 0xff,
0xff, 0x80, 0x3f, 0xff, 0xff, 0xf8, 0x3, 0xff,
0xff, 0xfc, 0x0,
/* U+0033 "3" */
0x7, 0xff, 0xff, 0xfc, 0x7, 0xff, 0xff, 0xff,
0x1, 0xff, 0xff, 0xff, 0x0, 0x7f, 0xff, 0xfe,
0x60, 0x1f, 0xff, 0xfe, 0x78, 0x7, 0xff, 0xfe,
0x7c, 0x0, 0x0, 0x0, 0x7c, 0x0, 0x0, 0x0,
0x7e, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0x0,
0x1f, 0x80, 0x0, 0x0, 0xf, 0xc0, 0x0, 0x0,
0x7, 0xe0, 0x0, 0x0, 0x3, 0xf0, 0x0, 0x0,
0x1, 0xf8, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0,
0x0, 0xfe, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0,
0x0, 0x3f, 0x80, 0x0, 0x0, 0x1f, 0x80, 0x0,
0x0, 0xf, 0xc0, 0x0, 0x0, 0x7, 0xe0, 0x0,
0x0, 0x3, 0xf0, 0x7, 0xf0, 0xfe, 0xf8, 0xf,
0xf8, 0xff, 0xbc, 0xf, 0xfe, 0xff, 0xce, 0x7,
0xfe, 0x7f, 0xf0, 0x1, 0xff, 0x1f, 0xe7, 0x80,
0x7f, 0xf, 0xe7, 0xc0, 0x0, 0x0, 0x7, 0xe0,
0x0, 0x0, 0x7, 0xe0, 0x0, 0x0, 0x3, 0xf0,
0x0, 0x0, 0x1, 0xf8, 0x0, 0x0, 0x0, 0xfc,
0x0, 0x0, 0x0, 0x7e, 0x0, 0x0, 0x0, 0x3f,
0x0, 0x0, 0x0, 0x1f, 0x80, 0x0, 0x0, 0xf,
0xc0, 0x0, 0x0, 0x7, 0xe0, 0x0, 0x0, 0x7,
0xf0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x1,
0xfc, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, 0x0,
0x7e, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x7f, 0xff,
0xef, 0x80, 0x7f, 0xff, 0xfb, 0xc0, 0xff, 0xff,
0xfe, 0xe0, 0xff, 0xff, 0xff, 0xa0, 0xff, 0xff,
0xff, 0xe0, 0x3f, 0xff, 0xff, 0xc0, 0x0,
/* U+0034 "4" */
0x10, 0x0, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x1,
0x8e, 0x0, 0x0, 0x1, 0xe7, 0x80, 0x0, 0x1,
0xf3, 0xe0, 0x0, 0x1, 0xf3, 0xf8, 0x0, 0x1,
0xf9, 0xfc, 0x0, 0x0, 0xfc, 0xfe, 0x0, 0x0,
0x7e, 0x7e, 0x0, 0x0, 0x3f, 0x3f, 0x0, 0x0,
0x1f, 0x9f, 0x80, 0x0, 0xf, 0xcf, 0xc0, 0x0,
0x7, 0xe7, 0xe0, 0x0, 0x3, 0xf3, 0xf0, 0x0,
0x3, 0xf9, 0xf8, 0x0, 0x1, 0xfc, 0xfc, 0x0,
0x0, 0xfe, 0x7e, 0x0, 0x0, 0x7e, 0x7f, 0x0,
0x0, 0x3f, 0x3f, 0x80, 0x0, 0x1f, 0x9f, 0x80,
0x0, 0xf, 0xcf, 0x9f, 0xc3, 0xfb, 0xe7, 0xbf,
0xe3, 0xfe, 0xf3, 0xbf, 0xfb, 0xff, 0x38, 0x1f,
0xf9, 0xff, 0xc0, 0x7, 0xfc, 0x7f, 0x9e, 0x1,
0xfc, 0x3f, 0x9f, 0x0, 0x0, 0x0, 0x3f, 0x80,
0x0, 0x0, 0x1f, 0x80, 0x0, 0x0, 0xf, 0xc0,
0x0, 0x0, 0x7, 0xe0, 0x0, 0x0, 0x3, 0xf0,
0x0, 0x0, 0x1, 0xf8, 0x0, 0x0, 0x0, 0xfc,
0x0, 0x0, 0x0, 0x7e, 0x0, 0x0, 0x0, 0x3f,
0x0, 0x0, 0x0, 0x1f, 0x80, 0x0, 0x0, 0x1f,
0xc0, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, 0x7,
0xf0, 0x0, 0x0, 0x3, 0xf0, 0x0, 0x0, 0x1,
0xf8, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, 0x0,
0x3e, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0,
0x3, 0x80, 0x0, 0x0, 0x0, 0x0,
/* U+0035 "5" */
0x7, 0xff, 0xff, 0xfc, 0x1f, 0xff, 0xff, 0xfc,
0x5f, 0xff, 0xff, 0xf1, 0xdf, 0xff, 0xff, 0x83,
0xdf, 0xff, 0xfe, 0x7, 0xdf, 0xff, 0xf8, 0xf,
0xc0, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x7f,
0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x1, 0xf8,
0x0, 0x0, 0x3, 0xf0, 0x0, 0x0, 0x7, 0xe0,
0x0, 0x0, 0xf, 0xc0, 0x0, 0x0, 0x1f, 0x80,
0x0, 0x0, 0x3f, 0x0, 0x0, 0x0, 0x7e, 0x0,
0x0, 0x0, 0xfc, 0x0, 0x0, 0x1, 0xf8, 0x0,
0x0, 0x7, 0xf0, 0x0, 0x0, 0xf, 0xe0, 0x0,
0x0, 0x1f, 0x80, 0x0, 0x0, 0x3e, 0x7f, 0xf,
0xe0, 0x7b, 0xfe, 0x3f, 0xe0, 0xef, 0xfe, 0xff,
0xc0, 0x1f, 0xf9, 0xff, 0xc0, 0x1f, 0xf1, 0xfe,
0x78, 0x1f, 0xc3, 0xf9, 0xf0, 0x0, 0x0, 0x7,
0xe0, 0x0, 0x0, 0x1f, 0x80, 0x0, 0x0, 0x3f,
0x0, 0x0, 0x0, 0x7e, 0x0, 0x0, 0x0, 0xfc,
0x0, 0x0, 0x1, 0xf8, 0x0, 0x0, 0x3, 0xf0,
0x0, 0x0, 0x7, 0xe0, 0x0, 0x0, 0xf, 0xc0,
0x0, 0x0, 0x1f, 0x80, 0x0, 0x0, 0x7f, 0x0,
0x0, 0x0, 0xfe, 0x0, 0x0, 0x1, 0xfc, 0x0,
0x0, 0x3, 0xf0, 0x0, 0x0, 0x7, 0xe0, 0x0,
0x0, 0xf, 0xc0, 0x7f, 0xff, 0xef, 0x81, 0xff,
0xff, 0xef, 0xf, 0xff, 0xff, 0xee, 0x3f, 0xff,
0xff, 0xe8, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff,
0xff, 0x0,
/* U+0036 "6" */
0x1, 0xff, 0xff, 0xff, 0x1, 0xff, 0xff, 0xff,
0xc1, 0x7f, 0xff, 0xff, 0xc1, 0xdf, 0xff, 0xff,
0x80, 0xf7, 0xff, 0xff, 0x80, 0x7d, 0xff, 0xff,
0x80, 0x3f, 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0,
0x0, 0x1f, 0xc0, 0x0, 0x0, 0xf, 0xe0, 0x0,
0x0, 0x7, 0xe0, 0x0, 0x0, 0x3, 0xf0, 0x0,
0x0, 0x1, 0xf8, 0x0, 0x0, 0x0, 0xfc, 0x0,
0x0, 0x0, 0x7e, 0x0, 0x0, 0x0, 0x3f, 0x0,
0x0, 0x0, 0x1f, 0x80, 0x0, 0x0, 0xf, 0xc0,
0x0, 0x0, 0x7, 0xe0, 0x0, 0x0, 0x7, 0xf0,
0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x1, 0xf8,
0x0, 0x0, 0x0, 0xf9, 0xfc, 0x3f, 0x80, 0x7b,
0xfe, 0x3f, 0xe0, 0x3b, 0xff, 0xbf, 0xf0, 0x1d,
0xff, 0x9f, 0xfd, 0xcf, 0x7f, 0xc7, 0xf9, 0xe7,
0xdf, 0xc3, 0xfb, 0xf3, 0xf0, 0x0, 0x3, 0xf9,
0xf8, 0x0, 0x1, 0xf9, 0xfc, 0x0, 0x0, 0xfc,
0xfe, 0x0, 0x0, 0x7e, 0x7f, 0x0, 0x0, 0x3f,
0x3f, 0x0, 0x0, 0x1f, 0x9f, 0x80, 0x0, 0xf,
0xcf, 0xc0, 0x0, 0x7, 0xe7, 0xe0, 0x0, 0x3,
0xf3, 0xf0, 0x0, 0x1, 0xf9, 0xf8, 0x0, 0x1,
0xfc, 0xfc, 0x0, 0x0, 0xfe, 0x7e, 0x0, 0x0,
0x7f, 0x7f, 0x0, 0x0, 0x3f, 0x3f, 0x80, 0x0,
0x1f, 0x9f, 0x80, 0x0, 0xf, 0xcf, 0x9f, 0xff,
0xfb, 0xe7, 0x9f, 0xff, 0xfe, 0xf3, 0xbf, 0xff,
0xff, 0xb8, 0xbf, 0xff, 0xff, 0xe8, 0x3f, 0xff,
0xff, 0xf8, 0xf, 0xff, 0xff, 0xf0, 0x0,
/* U+0037 "7" */
0x7, 0xff, 0xff, 0xfc, 0x7, 0xff, 0xff, 0xff,
0x5, 0xff, 0xff, 0xff, 0x47, 0x7f, 0xff, 0xfe,
0x73, 0xdf, 0xff, 0xfe, 0x79, 0xf7, 0xff, 0xfe,
0x7c, 0xfc, 0x0, 0x0, 0x7c, 0xfe, 0x0, 0x0,
0x7e, 0x7f, 0x0, 0x0, 0x3f, 0x3f, 0x80, 0x0,
0x1f, 0x9f, 0x80, 0x0, 0xf, 0xcf, 0xc0, 0x0,
0x7, 0xe7, 0xe0, 0x0, 0x3, 0xf3, 0xf0, 0x0,
0x1, 0xf9, 0xf8, 0x0, 0x0, 0xfc, 0xfc, 0x0,
0x0, 0xfe, 0x7e, 0x0, 0x0, 0x7f, 0x3f, 0x0,
0x0, 0x3f, 0xbf, 0x80, 0x0, 0x1f, 0x9f, 0xc0,
0x0, 0xf, 0xcf, 0xe0, 0x0, 0x7, 0xe7, 0xe0,
0x0, 0x3, 0xf3, 0xe0, 0x0, 0x0, 0xf9, 0xe0,
0x0, 0x0, 0x3c, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x7, 0x0, 0x0, 0x0, 0x7, 0x80,
0x0, 0x0, 0xf, 0xc0, 0x0, 0x0, 0xf, 0xe0,
0x0, 0x0, 0x7, 0xe0, 0x0, 0x0, 0x3, 0xf0,
0x0, 0x0, 0x1, 0xf8, 0x0, 0x0, 0x0, 0xfc,
0x0, 0x0, 0x0, 0x7e, 0x0, 0x0, 0x0, 0x3f,
0x0, 0x0, 0x0, 0x1f, 0x80, 0x0, 0x0, 0xf,
0xc0, 0x0, 0x0, 0x7, 0xe0, 0x0, 0x0, 0x7,
0xf0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x1,
0xfc, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, 0x0,
0x7e, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x0,
0xf, 0x80, 0x0, 0x0, 0x3, 0xc0, 0x0, 0x0,
0x0, 0xe0, 0x0, 0x0, 0x0, 0x0,
/* U+0038 "8" */
0x1, 0xff, 0xff, 0xff, 0x0, 0x7f, 0xff, 0xff,
0xf0, 0x17, 0xff, 0xff, 0xfc, 0x7, 0x7f, 0xff,
0xfe, 0x60, 0xf7, 0xff, 0xff, 0x9e, 0x1f, 0x7f,
0xff, 0xe7, 0xc3, 0xf0, 0x0, 0x1, 0xf0, 0xfe,
0x0, 0x0, 0x7e, 0x1f, 0xc0, 0x0, 0xf, 0xc3,
0xf8, 0x0, 0x1, 0xf8, 0x7e, 0x0, 0x0, 0x3f,
0xf, 0xc0, 0x0, 0x7, 0xe1, 0xf8, 0x0, 0x0,
0xfc, 0x3f, 0x0, 0x0, 0x1f, 0x87, 0xe0, 0x0,
0x3, 0xf0, 0xfc, 0x0, 0x0, 0xfe, 0x1f, 0x80,
0x0, 0x1f, 0xc3, 0xf0, 0x0, 0x3, 0xf8, 0x7e,
0x0, 0x0, 0x7e, 0x1f, 0xc0, 0x0, 0xf, 0xc3,
0xf8, 0x0, 0x1, 0xf8, 0x7e, 0x0, 0x0, 0x3f,
0xf, 0x9f, 0xc3, 0xfb, 0xe1, 0xef, 0xf8, 0xff,
0xbc, 0x3b, 0xff, 0xbf, 0xf3, 0x87, 0x7f, 0xe7,
0xff, 0x70, 0xf7, 0xfc, 0x7f, 0x9e, 0x1f, 0x7f,
0xf, 0xef, 0xc3, 0xf0, 0x0, 0x3, 0xf8, 0x7e,
0x0, 0x0, 0x7e, 0x1f, 0xc0, 0x0, 0xf, 0xc3,
0xf8, 0x0, 0x1, 0xf8, 0x7f, 0x0, 0x0, 0x3f,
0xf, 0xc0, 0x0, 0x7, 0xe1, 0xf8, 0x0, 0x0,
0xfc, 0x3f, 0x0, 0x0, 0x1f, 0x87, 0xe0, 0x0,
0x3, 0xf0, 0xfc, 0x0, 0x0, 0x7e, 0x1f, 0x80,
0x0, 0x1f, 0xc3, 0xf0, 0x0, 0x3, 0xf8, 0x7e,
0x0, 0x0, 0x7f, 0x1f, 0xc0, 0x0, 0xf, 0xc3,
0xf8, 0x0, 0x1, 0xf8, 0x7e, 0x0, 0x0, 0x3f,
0xf, 0x9f, 0xff, 0xfb, 0xe1, 0xe7, 0xff, 0xff,
0xbc, 0x3b, 0xff, 0xff, 0xfb, 0x82, 0xff, 0xff,
0xff, 0xa0, 0x3f, 0xff, 0xff, 0xf8, 0x3, 0xff,
0xff, 0xfc, 0x0,
/* U+0039 "9" */
0x7, 0xff, 0xff, 0xfc, 0x7, 0xff, 0xff, 0xff,
0x5, 0xff, 0xff, 0xff, 0x7, 0x7f, 0xff, 0xfe,
0x63, 0xdf, 0xff, 0xfe, 0x79, 0xf7, 0xff, 0xfe,
0x7c, 0xfc, 0x0, 0x0, 0x7c, 0xfe, 0x0, 0x0,
0x7e, 0x7f, 0x0, 0x0, 0x3f, 0x3f, 0x80, 0x0,
0x1f, 0x9f, 0x80, 0x0, 0xf, 0xcf, 0xc0, 0x0,
0x7, 0xe7, 0xe0, 0x0, 0x3, 0xf3, 0xf0, 0x0,
0x1, 0xf9, 0xf8, 0x0, 0x0, 0xfc, 0xfc, 0x0,
0x0, 0xfe, 0x7e, 0x0, 0x0, 0x7f, 0x3f, 0x0,
0x0, 0x3f, 0x9f, 0x80, 0x0, 0x1f, 0x9f, 0xc0,
0x0, 0xf, 0xcf, 0xe0, 0x0, 0x7, 0xe7, 0xe0,
0x0, 0x3, 0xf3, 0xe7, 0xf0, 0xfe, 0xf9, 0xef,
0xf8, 0xff, 0xbc, 0xef, 0xfe, 0xff, 0xce, 0x7,
0xfe, 0x7f, 0xf0, 0x1, 0xff, 0x1f, 0xe7, 0x80,
0x7f, 0xf, 0xe7, 0xc0, 0x0, 0x0, 0x7, 0xe0,
0x0, 0x0, 0x7, 0xe0, 0x0, 0x0, 0x3, 0xf0,
0x0, 0x0, 0x1, 0xf8, 0x0, 0x0, 0x0, 0xfc,
0x0, 0x0, 0x0, 0x7e, 0x0, 0x0, 0x0, 0x3f,
0x0, 0x0, 0x0, 0x1f, 0x80, 0x0, 0x0, 0xf,
0xc0, 0x0, 0x0, 0x7, 0xe0, 0x0, 0x0, 0x7,
0xf0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x1,
0xfc, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, 0x0,
0x7e, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x7f, 0xff,
0xef, 0x80, 0x7f, 0xff, 0xfb, 0xc0, 0xff, 0xff,
0xfe, 0xe0, 0xff, 0xff, 0xff, 0xa0, 0xff, 0xff,
0xff, 0xe0, 0x3f, 0xff, 0xff, 0xc0, 0x0,
/* U+003A ":" */
0x1e, 0x3f, 0x3f, 0x3f, 0x3f, 0x1e, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x78, 0xfc, 0xfc,
0xfc, 0xfc, 0x78
};
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
{.bitmap_index = 0, .adv_w = 653, .box_w = 5, .box_h = 14, .ofs_x = 11, .ofs_y = 7},
{.bitmap_index = 9, .adv_w = 0, .box_w = 6, .box_h = 6, .ofs_x = -5, .ofs_y = 0},
{.bitmap_index = 14, .adv_w = 653, .box_w = 35, .box_h = 50, .ofs_x = 3, .ofs_y = 0},
{.bitmap_index = 233, .adv_w = 653, .box_w = 10, .box_h = 45, .ofs_x = 28, .ofs_y = 2},
{.bitmap_index = 290, .adv_w = 653, .box_w = 35, .box_h = 50, .ofs_x = 3, .ofs_y = 0},
{.bitmap_index = 509, .adv_w = 653, .box_w = 33, .box_h = 50, .ofs_x = 5, .ofs_y = 0},
{.bitmap_index = 716, .adv_w = 653, .box_w = 33, .box_h = 46, .ofs_x = 5, .ofs_y = 2},
{.bitmap_index = 906, .adv_w = 653, .box_w = 31, .box_h = 50, .ofs_x = 5, .ofs_y = 0},
{.bitmap_index = 1100, .adv_w = 653, .box_w = 33, .box_h = 50, .ofs_x = 3, .ofs_y = 0},
{.bitmap_index = 1307, .adv_w = 653, .box_w = 33, .box_h = 48, .ofs_x = 5, .ofs_y = 2},
{.bitmap_index = 1505, .adv_w = 653, .box_w = 35, .box_h = 50, .ofs_x = 3, .ofs_y = 0},
{.bitmap_index = 1724, .adv_w = 653, .box_w = 33, .box_h = 50, .ofs_x = 5, .ofs_y = 0},
{.bitmap_index = 1931, .adv_w = 160, .box_w = 8, .box_h = 27, .ofs_x = 1, .ofs_y = 11}
};
/*---------------------
* CHARACTER MAPPING
*--------------------*/
static const uint8_t glyph_id_ofs_list_0[] = {
0, 0, 1, 0, 2, 3, 4, 5,
6, 7, 8, 9, 10, 11, 12
};
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 44, .range_length = 15, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = glyph_id_ofs_list_0, .list_length = 15, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_FULL
}
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
#if LVGL_VERSION_MAJOR == 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
#endif
#if LVGL_VERSION_MAJOR >= 8
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
#endif
.glyph_bitmap = glyph_bitmap,
.glyph_dsc = glyph_dsc,
.cmaps = cmaps,
.kern_dsc = NULL,
.kern_scale = 0,
.cmap_num = 1,
.bpp = 1,
.kern_classes = 0,
.bitmap_format = 0,
#if LVGL_VERSION_MAJOR == 8
.cache = &cache
#endif
};
extern const lv_font_t lv_font_montserrat_12;
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t DSEG14C_BI_50px = {
#else
lv_font_t DSEG14C_BI_50px = {
#endif
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 50, /*The maximum line height required by the font*/
.base_line = 0, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
.underline_position = -6,
.underline_thickness = 3,
#endif
.dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9
.fallback = &lv_font_montserrat_12,
#endif
.user_data = NULL,
};
#endif /*#if DSEG14C_BI_50PX*/

View File

@@ -0,0 +1,924 @@
/*******************************************************************************
* Size: 12 px
* Bpp: 1
* Opts: --bpp 1 --size 12 --no-compress --stride 1 --align 1 --font Inziu-IosevkaCC-Slab-J-Regular-04.ttf --range 0-254 --format lvgl -o InziuIosevka_Slab_CC_12px.c
******************************************************************************/
#ifdef __has_include
#if __has_include("lvgl.h")
#ifndef LV_LVGL_H_INCLUDE_SIMPLE
#define LV_LVGL_H_INCLUDE_SIMPLE
#endif
#endif
#endif
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif
#ifndef INZIUIOSEVKA_SLAB_CC_12PX
#define INZIUIOSEVKA_SLAB_CC_12PX 1
#endif
#if INZIUIOSEVKA_SLAB_CC_12PX
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
/* U+000D "\r" */
0x0,
/* U+0020 " " */
0x0,
/* U+0021 "!" */
0x55, 0x50, 0xf0,
/* U+0022 "\"" */
0xb6, 0xd0,
/* U+0023 "#" */
0x52, 0x95, 0xf5, 0x29, 0x4a, 0xfa, 0x94, 0xa0,
/* U+0024 "$" */
0x21, 0x1d, 0xda, 0x51, 0x86, 0x2d, 0x7c, 0x42,
0x0,
/* U+0025 "%" */
0x99, 0xa2, 0x24, 0x45, 0x99,
/* U+0026 "&" */
0x64, 0xa5, 0x66, 0x36, 0xf3, 0x8b, 0xc0,
/* U+0027 "'" */
0xf0,
/* U+0028 "(" */
0x2, 0x44, 0x88, 0x88, 0x88, 0x84, 0x42,
/* U+0029 ")" */
0x4, 0x22, 0x11, 0x11, 0x11, 0x12, 0x24,
/* U+002A "*" */
0x21, 0x3e, 0xa5, 0x0,
/* U+002B "+" */
0x21, 0x3e, 0x42, 0x0,
/* U+002C "," */
0xf6, 0x0,
/* U+002D "-" */
0xf0,
/* U+002E "." */
0xf0,
/* U+002F "/" */
0x11, 0x12, 0x22, 0x24, 0x44, 0x48, 0x88,
/* U+0030 "0" */
0x74, 0x63, 0x3a, 0xd7, 0x31, 0xcb, 0x80,
/* U+0031 "1" */
0x67, 0x8, 0x42, 0x10, 0x84, 0x27, 0xc0,
/* U+0032 "2" */
0x72, 0x42, 0x11, 0x19, 0x88, 0x4f, 0xc0,
/* U+0033 "3" */
0x72, 0x42, 0x33, 0xc, 0x21, 0x4b, 0x80,
/* U+0034 "4" */
0x11, 0x8c, 0xa5, 0x4b, 0xe2, 0x11, 0xc0,
/* U+0035 "5" */
0xfc, 0x61, 0xf, 0x4c, 0x21, 0x8b, 0x80,
/* U+0036 "6" */
0x11, 0x11, 0x8f, 0x46, 0x31, 0x8b, 0x80,
/* U+0037 "7" */
0xfc, 0x84, 0x22, 0x10, 0x84, 0x42, 0x0,
/* U+0038 "8" */
0x74, 0x63, 0x37, 0x2a, 0x31, 0x8b, 0x80,
/* U+0039 "9" */
0x74, 0x63, 0x18, 0xbc, 0x31, 0xdb, 0x80,
/* U+003A ":" */
0xf0, 0x3c,
/* U+003B ";" */
0xf0, 0x3d, 0x80,
/* U+003C "<" */
0x0, 0x99, 0x88, 0x20, 0xc3,
/* U+003D "=" */
0xf0, 0xf,
/* U+003E ">" */
0x2, 0xc, 0x30, 0x89, 0x98,
/* U+003F "?" */
0x74, 0x42, 0x11, 0x10, 0x80, 0x63, 0x0,
/* U+0040 "@" */
0x74, 0x42, 0x1e, 0xd6, 0xb5, 0xad, 0x6b, 0xb0,
/* U+0041 "A" */
0x30, 0xc3, 0xc, 0x31, 0x24, 0x9e, 0x4b, 0x30,
/* U+0042 "B" */
0xf1, 0x24, 0x92, 0x49, 0xc4, 0xd1, 0x4f, 0xe0,
/* U+0043 "C" */
0x74, 0xe1, 0x8, 0x42, 0x10, 0x9b, 0x80,
/* U+0044 "D" */
0xf9, 0x34, 0x51, 0x45, 0x14, 0x51, 0x4f, 0xe0,
/* U+0045 "E" */
0xfa, 0x50, 0x84, 0x39, 0x8, 0x4f, 0xc0,
/* U+0046 "F" */
0xfa, 0x50, 0x84, 0x39, 0x8, 0x47, 0x0,
/* U+0047 "G" */
0x74, 0x61, 0x8, 0x4e, 0x31, 0x8b, 0x80,
/* U+0048 "H" */
0xcd, 0x24, 0x92, 0x79, 0x24, 0x92, 0x4b, 0x30,
/* U+0049 "I" */
0xe9, 0x24, 0x92, 0x5c,
/* U+004A "J" */
0x71, 0x11, 0x11, 0x11, 0x9e,
/* U+004B "K" */
0xed, 0x25, 0x14, 0x71, 0xc5, 0x12, 0x4b, 0xb0,
/* U+004C "L" */
0xe2, 0x10, 0x84, 0x21, 0x8, 0x4f, 0xc0,
/* U+004D "M" */
0xcd, 0x27, 0x9e, 0x79, 0x64, 0x92, 0x4b, 0x30,
/* U+004E "N" */
0xcd, 0xa6, 0x9a, 0x69, 0xa5, 0x96, 0x5b, 0x20,
/* U+004F "O" */
0x74, 0x63, 0x18, 0xc6, 0x31, 0x8b, 0x80,
/* U+0050 "P" */
0xf2, 0x52, 0x94, 0xb9, 0x8, 0x46, 0x0,
/* U+0051 "Q" */
0x74, 0x63, 0x18, 0xc6, 0x31, 0x8b, 0x88, 0x30,
/* U+0052 "R" */
0xf9, 0x14, 0x51, 0x45, 0xe5, 0x92, 0x4b, 0x90,
/* U+0053 "S" */
0x69, 0x88, 0x42, 0x11, 0x96,
/* U+0054 "T" */
0xfd, 0x48, 0x42, 0x10, 0x84, 0x23, 0x80,
/* U+0055 "U" */
0xcd, 0x24, 0x92, 0x49, 0x24, 0x92, 0x48, 0xc0,
/* U+0056 "V" */
0xcd, 0x24, 0x92, 0x48, 0xc3, 0xc, 0x30, 0xc0,
/* U+0057 "W" */
0xcd, 0x24, 0x92, 0x49, 0xa7, 0x9e, 0x31, 0x40,
/* U+0058 "X" */
0xcd, 0x24, 0x8c, 0x30, 0xc3, 0x12, 0x4b, 0x30,
/* U+0059 "Y" */
0xee, 0x89, 0x11, 0x42, 0x82, 0x4, 0x8, 0x10,
0x70,
/* U+005A "Z" */
0xfc, 0x84, 0x42, 0x31, 0x8, 0x8f, 0xc0,
/* U+005B "[" */
0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f,
/* U+005C "\\" */
0x88, 0x84, 0x44, 0x42, 0x22, 0x21, 0x11,
/* U+005D "]" */
0xf1, 0x11, 0x11, 0x11, 0x11, 0x11, 0x1f,
/* U+005E "^" */
0x6f, 0x90,
/* U+005F "_" */
0xf0,
/* U+0060 "`" */
0x88, 0x80,
/* U+0061 "a" */
0x71, 0x20, 0x9e, 0x4a, 0x27, 0xc0,
/* U+0062 "b" */
0xc1, 0x4, 0x1e, 0x45, 0x14, 0x51, 0x47, 0xe0,
/* U+0063 "c" */
0x74, 0xe1, 0x8, 0x4d, 0xc0,
/* U+0064 "d" */
0x18, 0x20, 0x9e, 0x8a, 0x28, 0xa2, 0x89, 0xf0,
/* U+0065 "e" */
0x74, 0x63, 0xf8, 0x45, 0xc0,
/* U+0066 "f" */
0x75, 0x4f, 0x44, 0x44, 0x4f,
/* U+0067 "g" */
0x7c, 0x63, 0x17, 0x41, 0xd3, 0x9b, 0x80,
/* U+0068 "h" */
0xc1, 0x4, 0x1c, 0x49, 0x24, 0x92, 0x4b, 0x30,
/* U+0069 "i" */
0x60, 0x1, 0xc2, 0x10, 0x84, 0x27, 0xc0,
/* U+006A "j" */
0x10, 0x7, 0x11, 0x11, 0x11, 0x19, 0x60,
/* U+006B "k" */
0xc1, 0x4, 0x13, 0x51, 0x47, 0x14, 0x4b, 0xb0,
/* U+006C "l" */
0xe1, 0x8, 0x42, 0x10, 0x84, 0x27, 0xc0,
/* U+006D "m" */
0xfd, 0x6b, 0x5a, 0xd6, 0xa0,
/* U+006E "n" */
0xf1, 0x24, 0x92, 0x49, 0x2c, 0xc0,
/* U+006F "o" */
0x74, 0x63, 0x18, 0xc5, 0xc0,
/* U+0070 "p" */
0xf9, 0x14, 0x51, 0x45, 0x17, 0x90, 0x43, 0x80,
/* U+0071 "q" */
0x7e, 0x28, 0xa2, 0x8a, 0x27, 0x82, 0x8, 0x70,
/* U+0072 "r" */
0xfa, 0x10, 0x84, 0x23, 0x80,
/* U+0073 "s" */
0x74, 0xa0, 0xe1, 0x49, 0xc0,
/* U+0074 "t" */
0x42, 0x11, 0xe4, 0x21, 0x8, 0x49, 0x80,
/* U+0075 "u" */
0xc9, 0x24, 0x92, 0x49, 0x23, 0xc0,
/* U+0076 "v" */
0xcd, 0x24, 0x92, 0x30, 0xc3, 0x0,
/* U+0077 "w" */
0xcd, 0x24, 0x9a, 0x78, 0xc3, 0x0,
/* U+0078 "x" */
0xcd, 0x23, 0xc, 0x31, 0x2c, 0xc0,
/* U+0079 "y" */
0xcd, 0x24, 0x92, 0x30, 0xc3, 0x8, 0x21, 0x80,
/* U+007A "z" */
0xfc, 0x8c, 0x44, 0x67, 0xe0,
/* U+007B "{" */
0x36, 0x46, 0x22, 0xc6, 0x22, 0x44, 0x63,
/* U+007C "|" */
0xff, 0xfc,
/* U+007D "}" */
0xc6, 0x26, 0x44, 0x34, 0x44, 0x22, 0x6c,
/* U+007E "~" */
0x1, 0xa9, 0x80,
/* U+00A0 " " */
0x0,
/* U+00A1 "¡" */
0xf0, 0x55, 0x50,
/* U+00A2 "¢" */
0x23, 0xa7, 0x8, 0x42, 0x6e, 0x20,
/* U+00A3 "£" */
0x32, 0x90, 0x8e, 0x21, 0x8, 0xc7, 0xc0,
/* U+00A4 "¤" */
0xfc, 0x63, 0x1f, 0x80,
/* U+00A5 "¥" */
0xcd, 0x24, 0x9c, 0x31, 0xe2, 0x1e, 0x20, 0xc0,
/* U+00A6 "¦" */
0xfc, 0xfc,
/* U+00A7 "§" */
0x74, 0x61, 0x6, 0x6e, 0x31, 0xd9, 0x82, 0x18,
0xb8,
/* U+00A8 "¨" */
0xf0,
/* U+00A9 "©" */
0x3e, 0x31, 0xb7, 0x72, 0x99, 0xc, 0x86, 0x53,
0xbb, 0x63, 0x1f, 0x0,
/* U+00AA "ª" */
0x7f, 0x9f, 0xf,
/* U+00AB "«" */
0x4a, 0xa9, 0x45, 0x28, 0xa0,
/* U+00AC "¬" */
0xf1, 0x10,
/* U+00AD "­" */
0xf0,
/* U+00AE "®" */
0x3e, 0x31, 0xb7, 0x72, 0x99, 0x4c, 0xc6, 0x53,
0xab, 0x63, 0x1f, 0x0,
/* U+00AF "¯" */
0xf0,
/* U+00B0 "°" */
0xf7, 0x80,
/* U+00B1 "±" */
0x21, 0x9, 0xf2, 0x10, 0x1f,
/* U+00B2 "²" */
0x79, 0x16, 0x4f,
/* U+00B3 "³" */
0x71, 0x31, 0x97,
/* U+00B4 "´" */
0x2a, 0x0,
/* U+00B5 "µ" */
0xc9, 0x24, 0x92, 0x49, 0x27, 0xd0, 0x43, 0x0,
/* U+00B6 "¶" */
0x6d, 0x6b, 0x5a, 0xb4, 0xa5, 0x29, 0x40,
/* U+00B7 "·" */
0xf0,
/* U+00B8 "¸" */
0x47, 0x80,
/* U+00B9 "¹" */
0xc9, 0x25, 0xc0,
/* U+00BA "º" */
0xf9, 0x9f, 0xf,
/* U+00BB "»" */
0xa2, 0x8a, 0x55, 0x2a, 0x80,
/* U+00BC "¼" */
0x26, 0x22, 0x26, 0xf, 0x2, 0x66, 0x62,
/* U+00BD "½" */
0x23, 0x8, 0x42, 0x38, 0x1f, 0x3, 0x84, 0x44,
0x38,
/* U+00BE "¾" */
0x62, 0x62, 0x60, 0xf0, 0x26, 0xaf, 0x20,
/* U+00BF "¿" */
0x63, 0x0, 0x42, 0x22, 0x10, 0x8b, 0x80,
/* U+00C0 "À" */
0x20, 0x80, 0xc, 0x30, 0xc3, 0xc, 0x49, 0x27,
0x92, 0xcc,
/* U+00C1 "Á" */
0x10, 0x40, 0xc, 0x30, 0xc3, 0xc, 0x49, 0x27,
0x92, 0xcc,
/* U+00C2 "Â" */
0x0, 0xc0, 0xc, 0x30, 0xc3, 0xc, 0x49, 0x27,
0x92, 0xcc,
/* U+00C3 "Ã" */
0x1, 0xa1, 0xc, 0x30, 0xc3, 0xc, 0x49, 0x27,
0x92, 0xcc,
/* U+00C4 "Ä" */
0x78, 0x3, 0xc, 0x30, 0xc3, 0x12, 0x49, 0xe4,
0xb3,
/* U+00C5 "Å" */
0x30, 0xc3, 0xc, 0x30, 0xc3, 0xc, 0x49, 0x27,
0x92, 0xcc,
/* U+00C6 "Æ" */
0x3c, 0xd3, 0xc, 0x39, 0x45, 0x1c, 0x57, 0xf0,
/* U+00C7 "Ç" */
0x79, 0x88, 0x88, 0x88, 0x97, 0x22, 0x60,
/* U+00C8 "È" */
0x41, 0x1, 0xf4, 0xa1, 0x8, 0x72, 0x10, 0x9f,
0x80,
/* U+00C9 "É" */
0x11, 0x81, 0xf4, 0xa1, 0x8, 0x72, 0x10, 0x9f,
0x80,
/* U+00CA "Ê" */
0x23, 0x91, 0xf4, 0xa1, 0x8, 0x72, 0x10, 0x9f,
0x80,
/* U+00CB "Ë" */
0x78, 0x3e, 0x94, 0x21, 0xe, 0x42, 0x13, 0xf0,
/* U+00CC "Ì" */
0x88, 0x74, 0x92, 0x49, 0x2e,
/* U+00CD "Í" */
0x28, 0x74, 0x92, 0x49, 0x2e,
/* U+00CE "Î" */
0x22, 0x80, 0xe2, 0x10, 0x84, 0x21, 0x8, 0x47,
0x0,
/* U+00CF "Ï" */
0xf0, 0x72, 0x22, 0x22, 0x22, 0x27,
/* U+00D0 "Ð" */
0xf9, 0x34, 0x51, 0x47, 0xd4, 0x51, 0x4f, 0xe0,
/* U+00D1 "Ñ" */
0x1, 0xa1, 0x33, 0x69, 0xa6, 0x9a, 0x69, 0x65,
0x96, 0xc8,
/* U+00D2 "Ò" */
0x41, 0x8, 0xe8, 0xc6, 0x31, 0x8c, 0x63, 0x17,
0x0,
/* U+00D3 "Ó" */
0x11, 0x8, 0xe8, 0xc6, 0x31, 0x8c, 0x63, 0x17,
0x0,
/* U+00D4 "Ô" */
0x22, 0x80, 0xe8, 0xc6, 0x31, 0x8c, 0x63, 0x17,
0x0,
/* U+00D5 "Õ" */
0x3, 0x80, 0xe8, 0xc6, 0x31, 0x8c, 0x63, 0x17,
0x0,
/* U+00D6 "Ö" */
0xf0, 0x1d, 0x18, 0xc6, 0x31, 0x8c, 0x62, 0xe0,
/* U+00D7 "×" */
0x85, 0x23, 0xc, 0x4b, 0x30,
/* U+00D8 "Ø" */
0x3, 0xe7, 0x3b, 0xd6, 0xbd, 0xce, 0x7c, 0x0,
/* U+00D9 "Ù" */
0x20, 0x80, 0x33, 0x49, 0x24, 0x92, 0x49, 0x24,
0x92, 0x30,
/* U+00DA "Ú" */
0x10, 0x40, 0x33, 0x49, 0x24, 0x92, 0x49, 0x24,
0x92, 0x30,
/* U+00DB "Û" */
0x31, 0xe0, 0x33, 0x49, 0x24, 0x92, 0x49, 0x24,
0x92, 0x30,
/* U+00DC "Ü" */
0x78, 0xc, 0xd2, 0x49, 0x24, 0x92, 0x49, 0x24,
0x8c,
/* U+00DD "Ý" */
0x8, 0x20, 0x7, 0x74, 0x48, 0x8a, 0x14, 0x10,
0x20, 0x40, 0x83, 0x80,
/* U+00DE "Þ" */
0xc2, 0x1c, 0x94, 0xa5, 0x2e, 0x46, 0x0,
/* U+00DF "ß" */
0x31, 0x24, 0x92, 0x49, 0x44, 0xd1, 0x4f, 0x60,
/* U+00E0 "à" */
0x40, 0x80, 0x1c, 0x48, 0x27, 0x92, 0x89, 0xf0,
/* U+00E1 "á" */
0x10, 0xc2, 0x1c, 0x48, 0x27, 0x92, 0x89, 0xf0,
/* U+00E2 "â" */
0x31, 0x64, 0x1c, 0x48, 0x27, 0x92, 0x89, 0xf0,
/* U+00E3 "ã" */
0x69, 0x60, 0x1c, 0x48, 0x27, 0x92, 0x89, 0xf0,
/* U+00E4 "ä" */
0x78, 0x0, 0x1c, 0x48, 0x27, 0x92, 0x89, 0xf0,
/* U+00E5 "å" */
0x30, 0xc3, 0x1c, 0x48, 0x27, 0x92, 0x89, 0xf0,
/* U+00E6 "æ" */
0x7d, 0x4b, 0xfa, 0x57, 0xe0,
/* U+00E7 "ç" */
0x79, 0x88, 0x89, 0x72, 0x26,
/* U+00E8 "è" */
0x41, 0x8, 0xe8, 0xc7, 0xf0, 0x8b, 0x80,
/* U+00E9 "é" */
0x11, 0x8, 0xe8, 0xc7, 0xf0, 0x8b, 0x80,
/* U+00EA "ê" */
0x22, 0x80, 0xe8, 0xc7, 0xf0, 0x8b, 0x80,
/* U+00EB "ë" */
0xf0, 0x0, 0xe8, 0xc7, 0xf0, 0x8b, 0x80,
/* U+00EC "ì" */
0x41, 0x9, 0xc2, 0x10, 0x84, 0x27, 0xc0,
/* U+00ED "í" */
0x11, 0x1, 0xc2, 0x10, 0x84, 0x27, 0xc0,
/* U+00EE "î" */
0x62, 0x81, 0xc2, 0x10, 0x84, 0x27, 0xc0,
/* U+00EF "ï" */
0xf0, 0x1, 0xc2, 0x10, 0x84, 0x27, 0xc0,
/* U+00F0 "ð" */
0x41, 0xe, 0xa7, 0xc6, 0x31, 0x8b, 0x80,
/* U+00F1 "ñ" */
0x29, 0x60, 0x3c, 0x49, 0x24, 0x92, 0x4b, 0x30,
/* U+00F2 "ò" */
0x41, 0x8, 0xe8, 0xc6, 0x31, 0x8b, 0x80,
/* U+00F3 "ó" */
0x11, 0x8, 0xe8, 0xc6, 0x31, 0x8b, 0x80,
/* U+00F4 "ô" */
0x22, 0x80, 0xe8, 0xc6, 0x31, 0x8b, 0x80,
/* U+00F5 "õ" */
0x6d, 0x80, 0xe8, 0xc6, 0x31, 0x8b, 0x80,
/* U+00F6 "ö" */
0xf0, 0x0, 0xe8, 0xc6, 0x31, 0x8b, 0x80,
/* U+00F7 "÷" */
0x30, 0x0, 0x3f, 0x0, 0x3, 0x0,
/* U+00F8 "ø" */
0x7c, 0xef, 0x5e, 0xe7, 0xc0,
/* U+00F9 "ù" */
0x20, 0x80, 0x32, 0x49, 0x24, 0x92, 0x48, 0xf0,
/* U+00FA "ú" */
0x10, 0x40, 0x32, 0x49, 0x24, 0x92, 0x48, 0xf0,
/* U+00FB "û" */
0x31, 0xe0, 0x32, 0x49, 0x24, 0x92, 0x48, 0xf0,
/* U+00FC "ü" */
0x78, 0x0, 0x32, 0x49, 0x24, 0x92, 0x48, 0xf0,
/* U+00FD "ý" */
0x18, 0x40, 0x33, 0x49, 0x24, 0x8c, 0x30, 0xc2,
0x8, 0x60,
/* U+00FE "þ" */
0xc1, 0x4, 0x1e, 0x45, 0x14, 0x51, 0x45, 0xe4,
0x10, 0xe0
};
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
{.bitmap_index = 0, .adv_w = 192, .box_w = 1, .box_h = 1, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1, .adv_w = 96, .box_w = 1, .box_h = 1, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2, .adv_w = 96, .box_w = 2, .box_h = 10, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 5, .adv_w = 96, .box_w = 3, .box_h = 4, .ofs_x = 1, .ofs_y = 6},
{.bitmap_index = 7, .adv_w = 96, .box_w = 5, .box_h = 12, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 15, .adv_w = 96, .box_w = 5, .box_h = 13, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 24, .adv_w = 96, .box_w = 4, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 29, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 36, .adv_w = 96, .box_w = 1, .box_h = 4, .ofs_x = 3, .ofs_y = 6},
{.bitmap_index = 37, .adv_w = 96, .box_w = 4, .box_h = 14, .ofs_x = 2, .ofs_y = -2},
{.bitmap_index = 44, .adv_w = 96, .box_w = 4, .box_h = 14, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 51, .adv_w = 96, .box_w = 5, .box_h = 5, .ofs_x = 1, .ofs_y = 6},
{.bitmap_index = 55, .adv_w = 96, .box_w = 5, .box_h = 5, .ofs_x = 1, .ofs_y = 2},
{.bitmap_index = 59, .adv_w = 96, .box_w = 2, .box_h = 5, .ofs_x = 2, .ofs_y = -3},
{.bitmap_index = 61, .adv_w = 96, .box_w = 4, .box_h = 1, .ofs_x = 1, .ofs_y = 4},
{.bitmap_index = 62, .adv_w = 96, .box_w = 2, .box_h = 2, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 63, .adv_w = 96, .box_w = 4, .box_h = 14, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 70, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 77, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 84, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 91, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 98, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 105, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 112, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 119, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 126, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 133, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 140, .adv_w = 96, .box_w = 2, .box_h = 7, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 142, .adv_w = 96, .box_w = 2, .box_h = 10, .ofs_x = 2, .ofs_y = -3},
{.bitmap_index = 145, .adv_w = 96, .box_w = 5, .box_h = 8, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 150, .adv_w = 96, .box_w = 4, .box_h = 4, .ofs_x = 1, .ofs_y = 3},
{.bitmap_index = 152, .adv_w = 96, .box_w = 5, .box_h = 8, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 157, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 164, .adv_w = 96, .box_w = 5, .box_h = 12, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 172, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 180, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 188, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 195, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 203, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 210, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 217, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 224, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 232, .adv_w = 96, .box_w = 3, .box_h = 10, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 236, .adv_w = 96, .box_w = 4, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 241, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 249, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 256, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 264, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 272, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 279, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 286, .adv_w = 96, .box_w = 5, .box_h = 12, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 294, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 302, .adv_w = 96, .box_w = 4, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 307, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 314, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 322, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 330, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 338, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 346, .adv_w = 96, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 355, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 362, .adv_w = 96, .box_w = 4, .box_h = 14, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 369, .adv_w = 96, .box_w = 4, .box_h = 14, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 376, .adv_w = 96, .box_w = 4, .box_h = 14, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 383, .adv_w = 96, .box_w = 4, .box_h = 3, .ofs_x = 1, .ofs_y = 7},
{.bitmap_index = 385, .adv_w = 96, .box_w = 4, .box_h = 1, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 386, .adv_w = 96, .box_w = 3, .box_h = 3, .ofs_x = 1, .ofs_y = 7},
{.bitmap_index = 388, .adv_w = 96, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 394, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 402, .adv_w = 96, .box_w = 5, .box_h = 7, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 407, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 415, .adv_w = 96, .box_w = 5, .box_h = 7, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 420, .adv_w = 96, .box_w = 4, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 425, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = -3},
{.bitmap_index = 432, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 440, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 447, .adv_w = 96, .box_w = 4, .box_h = 13, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 454, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 462, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 469, .adv_w = 96, .box_w = 5, .box_h = 7, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 474, .adv_w = 96, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 480, .adv_w = 96, .box_w = 5, .box_h = 7, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 485, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 493, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 1, .ofs_y = -3},
{.bitmap_index = 501, .adv_w = 96, .box_w = 5, .box_h = 7, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 506, .adv_w = 96, .box_w = 5, .box_h = 7, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 511, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 518, .adv_w = 96, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 524, .adv_w = 96, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 530, .adv_w = 96, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 536, .adv_w = 96, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 542, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 550, .adv_w = 96, .box_w = 5, .box_h = 7, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 555, .adv_w = 96, .box_w = 4, .box_h = 14, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 562, .adv_w = 96, .box_w = 1, .box_h = 14, .ofs_x = 3, .ofs_y = -2},
{.bitmap_index = 564, .adv_w = 96, .box_w = 4, .box_h = 14, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 571, .adv_w = 96, .box_w = 6, .box_h = 3, .ofs_x = 0, .ofs_y = 3},
{.bitmap_index = 574, .adv_w = 96, .box_w = 1, .box_h = 1, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 575, .adv_w = 96, .box_w = 2, .box_h = 10, .ofs_x = 2, .ofs_y = -3},
{.bitmap_index = 578, .adv_w = 96, .box_w = 5, .box_h = 9, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 584, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 591, .adv_w = 192, .box_w = 5, .box_h = 5, .ofs_x = 3, .ofs_y = 2},
{.bitmap_index = 595, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 603, .adv_w = 96, .box_w = 1, .box_h = 14, .ofs_x = 3, .ofs_y = -2},
{.bitmap_index = 605, .adv_w = 192, .box_w = 5, .box_h = 14, .ofs_x = 3, .ofs_y = -2},
{.bitmap_index = 614, .adv_w = 96, .box_w = 4, .box_h = 1, .ofs_x = 1, .ofs_y = 8},
{.bitmap_index = 615, .adv_w = 192, .box_w = 9, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 627, .adv_w = 96, .box_w = 4, .box_h = 6, .ofs_x = 1, .ofs_y = 2},
{.bitmap_index = 630, .adv_w = 96, .box_w = 5, .box_h = 7, .ofs_x = 1, .ofs_y = 1},
{.bitmap_index = 635, .adv_w = 96, .box_w = 4, .box_h = 3, .ofs_x = 1, .ofs_y = 2},
{.bitmap_index = 637, .adv_w = 96, .box_w = 4, .box_h = 1, .ofs_x = 1, .ofs_y = 4},
{.bitmap_index = 638, .adv_w = 192, .box_w = 9, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 650, .adv_w = 96, .box_w = 4, .box_h = 1, .ofs_x = 1, .ofs_y = 8},
{.bitmap_index = 651, .adv_w = 96, .box_w = 3, .box_h = 3, .ofs_x = 2, .ofs_y = 7},
{.bitmap_index = 653, .adv_w = 192, .box_w = 5, .box_h = 8, .ofs_x = 4, .ofs_y = 0},
{.bitmap_index = 658, .adv_w = 96, .box_w = 4, .box_h = 6, .ofs_x = 1, .ofs_y = 4},
{.bitmap_index = 661, .adv_w = 96, .box_w = 4, .box_h = 6, .ofs_x = 1, .ofs_y = 4},
{.bitmap_index = 664, .adv_w = 96, .box_w = 3, .box_h = 3, .ofs_x = 2, .ofs_y = 7},
{.bitmap_index = 666, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 674, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 681, .adv_w = 192, .box_w = 2, .box_h = 2, .ofs_x = 5, .ofs_y = 4},
{.bitmap_index = 682, .adv_w = 96, .box_w = 3, .box_h = 3, .ofs_x = 2, .ofs_y = -3},
{.bitmap_index = 684, .adv_w = 96, .box_w = 3, .box_h = 6, .ofs_x = 2, .ofs_y = 4},
{.bitmap_index = 687, .adv_w = 96, .box_w = 4, .box_h = 6, .ofs_x = 1, .ofs_y = 2},
{.bitmap_index = 690, .adv_w = 96, .box_w = 5, .box_h = 7, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 695, .adv_w = 96, .box_w = 4, .box_h = 14, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 702, .adv_w = 96, .box_w = 5, .box_h = 14, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 711, .adv_w = 96, .box_w = 4, .box_h = 13, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 718, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = -3},
{.bitmap_index = 725, .adv_w = 96, .box_w = 6, .box_h = 13, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 735, .adv_w = 96, .box_w = 6, .box_h = 13, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 745, .adv_w = 96, .box_w = 6, .box_h = 13, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 755, .adv_w = 96, .box_w = 6, .box_h = 13, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 765, .adv_w = 96, .box_w = 6, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 774, .adv_w = 96, .box_w = 6, .box_h = 13, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 784, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 792, .adv_w = 96, .box_w = 4, .box_h = 13, .ofs_x = 1, .ofs_y = -3},
{.bitmap_index = 799, .adv_w = 96, .box_w = 5, .box_h = 13, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 808, .adv_w = 96, .box_w = 5, .box_h = 13, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 817, .adv_w = 96, .box_w = 5, .box_h = 13, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 826, .adv_w = 96, .box_w = 5, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 834, .adv_w = 96, .box_w = 3, .box_h = 13, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 839, .adv_w = 96, .box_w = 3, .box_h = 13, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 844, .adv_w = 96, .box_w = 5, .box_h = 13, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 853, .adv_w = 96, .box_w = 4, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 859, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 867, .adv_w = 96, .box_w = 6, .box_h = 13, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 877, .adv_w = 96, .box_w = 5, .box_h = 13, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 886, .adv_w = 96, .box_w = 5, .box_h = 13, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 895, .adv_w = 96, .box_w = 5, .box_h = 13, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 904, .adv_w = 96, .box_w = 5, .box_h = 13, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 913, .adv_w = 96, .box_w = 5, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 921, .adv_w = 192, .box_w = 6, .box_h = 6, .ofs_x = 3, .ofs_y = 2},
{.bitmap_index = 926, .adv_w = 96, .box_w = 5, .box_h = 12, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 934, .adv_w = 96, .box_w = 6, .box_h = 13, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 944, .adv_w = 96, .box_w = 6, .box_h = 13, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 954, .adv_w = 96, .box_w = 6, .box_h = 13, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 964, .adv_w = 96, .box_w = 6, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 973, .adv_w = 96, .box_w = 7, .box_h = 13, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 985, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 992, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1000, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1008, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1016, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1024, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1032, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1040, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1048, .adv_w = 96, .box_w = 5, .box_h = 7, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1053, .adv_w = 96, .box_w = 4, .box_h = 10, .ofs_x = 1, .ofs_y = -3},
{.bitmap_index = 1058, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1065, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1072, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1079, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1086, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1093, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1100, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1107, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1114, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1121, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1129, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1136, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1143, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1150, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1157, .adv_w = 96, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1164, .adv_w = 192, .box_w = 6, .box_h = 7, .ofs_x = 3, .ofs_y = 1},
{.bitmap_index = 1170, .adv_w = 96, .box_w = 5, .box_h = 7, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1175, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1183, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1191, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1199, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1207, .adv_w = 96, .box_w = 6, .box_h = 13, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 1217, .adv_w = 96, .box_w = 6, .box_h = 13, .ofs_x = 0, .ofs_y = -3}
};
/*---------------------
* CHARACTER MAPPING
*--------------------*/
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 13, .range_length = 1, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
.range_start = 32, .range_length = 95, .glyph_id_start = 2,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
.range_start = 160, .range_length = 95, .glyph_id_start = 97,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
}
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
#if LVGL_VERSION_MAJOR == 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
#endif
#if LVGL_VERSION_MAJOR >= 8
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
#endif
.glyph_bitmap = glyph_bitmap,
.glyph_dsc = glyph_dsc,
.cmaps = cmaps,
.kern_dsc = NULL,
.kern_scale = 0,
.cmap_num = 3,
.bpp = 1,
.kern_classes = 0,
.bitmap_format = 0,
#if LVGL_VERSION_MAJOR == 8
.cache = &cache
#endif
};
extern const lv_font_t lv_font_montserrat_12;
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t InziuIosevka_Slab_CC_12px = {
#else
lv_font_t InziuIosevka_Slab_CC_12px = {
#endif
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 16, /*The maximum line height required by the font*/
.base_line = 3, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
.underline_position = -2,
.underline_thickness = 1,
#endif
.dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9
.fallback = &lv_font_montserrat_12,
#endif
.user_data = NULL,
};
#endif /*#if INZIUIOSEVKA_SLAB_CC_12PX*/

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,26 @@
#ifndef USER_FONTS_H
#define USER_FONTS_H
#include "lvgl.h"
#ifdef __cplusplus
extern "C" {
#endif
/* DSEG14 Classic Bold Italic — segmented display digits only (0-9 : ; , .) */
extern const lv_font_t DSEG14C_BI_32px;
extern const lv_font_t DSEG14C_BI_40px;
extern const lv_font_t DSEG14C_BI_50px;
/* Inziu Iosevka Slab CC — monospace, Latin range 0-254 */
extern const lv_font_t InziuIosevka_Slab_CC_12px;
extern const lv_font_t InziuIosevka_Slab_CC_16px;
extern const lv_font_t InziuIosevka_Slab_CC_20px;
extern const lv_font_t InziuIosevka_Slab_CC_24px;
extern const lv_font_t InziuIosevka_Slab_CC_32px;
#ifdef __cplusplus
}
#endif
#endif