firmware: Add background image

This commit is contained in:
Jack O'Sullivan 2024-12-12 01:19:02 +00:00
parent 8bdd1c018f
commit b6f242a73a
9 changed files with 74 additions and 5 deletions

1
firmware/.gitignore vendored
View File

@ -4,3 +4,4 @@ sdkconfig
sdkconfig.old
*.swp
/main/font/*.c
/main/img/*.c

BIN
firmware/assets/bg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@ -1,10 +1,52 @@
{
perSystem = { libMy, pkgs, ... }: {
perSystem = { libMy, pkgs, ... }:
let
genImgsPy = pkgs.python3.withPackages (ps: with ps; [ pillow ]);
genImgs = pkgs.writeScriptBin "gen-imgs" ''
#!${genImgsPy}/bin/python
import itertools
import os
from PIL import Image
imgs = ['bg.png']
for fname in imgs:
with Image.open(os.path.join('assets/', fname)) as img:
w = img.width
h = img.height
data = [(r >> 3) << 11 | (g >> 2) << 5 | (b >> 3) for r, g, b in img.getdata()]
basename = os.path.splitext(fname)[0]
with open(os.path.join('main/img/', basename + '.c'), 'w') as f:
f.write(
'#include <inttypes.h>\n\n'
'#include "lvgl.h"\n\n'
'static const uint16_t _data[] = {\n')
for group in itertools.batched(data, 20):
f.write(' ' + ' '.join(map(lambda i: f'{i:#x},', group)) + '\n')
f.write('};\n\n')
f.write(
f'const lv_image_dsc_t ui_img_{basename} = {{\n'
' .header.magic = LV_IMAGE_HEADER_MAGIC,\n'
' .header.cf = LV_COLOR_FORMAT_RGB565,\n'
f' .header.w = {w},\n'
f' .header.h = {h},\n'
' .data_size = sizeof(_data) * 2,\n'
' .data = (const uint8_t *)_data,\n'
'};\n')
'';
in
{
devenv.shells.firmware = libMy.withRootdir {
packages = with pkgs; [
esp-idf-esp32s3
picocom
lv_font_conv
genImgs
];
env = {

View File

@ -1,3 +1,3 @@
idf_component_register(
SRCS "valconomy.c" "ui.c" "lcd.c" "usb.c" "font/tungsten_120.c"
SRCS "valconomy.c" "ui.c" "lcd.c" "usb.c" "font/tungsten_120.c" "img/bg.c"
INCLUDE_DIRS ".")

View File

View File

@ -2,7 +2,12 @@
#include "ui.h"
static const lv_font_t *font_normal = &lv_font_montserrat_14;
static const lv_font_t *font_normal = &lv_font_montserrat_24;
static lv_color_t color_primary, color_secondary;
static lv_color_t color_text_hero;
static lv_style_t s_hero;
static void b_cfg_cb(lv_event_t *e) {
lv_obj_t *box = lv_msgbox_create(NULL);
@ -12,8 +17,11 @@ static void b_cfg_cb(lv_event_t *e) {
}
static void ui_home() {
lv_obj_t *i_bg = lv_image_create(lv_screen_active());
lv_image_set_src(i_bg, &ui_img_bg);
lv_obj_t *l_test = lv_label_create(lv_screen_active());
lv_obj_set_style_text_font(l_test, &lv_font_tungsten_120, 0);
lv_obj_add_style(l_test, &s_hero, 0);
lv_label_set_text(l_test, "VAL TIME");
lv_obj_t *b_cfg = lv_button_create(lv_screen_active());
@ -26,12 +34,21 @@ static void ui_home() {
}
void val_lvgl_ui(lv_display_t *disp) {
color_primary = lv_color_hex(0xff4655);
color_secondary = lv_color_hex(0xf7518f);
color_text_hero = lv_palette_lighten(LV_PALETTE_GREY, 2);
// init default theme
lv_theme_default_init(
disp, lv_palette_main(LV_PALETTE_BLUE), lv_palette_main(LV_PALETTE_RED),
disp, color_primary, color_secondary,
true, // dark theme
font_normal);
// lv_sysmon_hide_performance(disp);
lv_style_init(&s_hero);
lv_style_set_text_font(&s_hero, &lv_font_tungsten_120);
lv_style_set_text_color(&s_hero, color_text_hero);
ui_home();
}

View File

@ -4,4 +4,6 @@
LV_FONT_DECLARE(lv_font_tungsten_120)
LV_IMAGE_DECLARE(ui_img_bg);
void val_lvgl_ui(lv_display_t *disp);

5
firmware/partitions.csv Normal file
View File

@ -0,0 +1,5 @@
# ESP-IDF Partition Table
# Name, Type, SubType, Offset, Size, Flags
nvs,data,nvs,0x9000,24K,
phy_init,data,phy,0xf000,4K,
factory,app,factory,0x10000,4M,
1 # ESP-IDF Partition Table
2 # Name, Type, SubType, Offset, Size, Flags
3 nvs,data,nvs,0x9000,24K,
4 phy_init,data,phy,0xf000,4K,
5 factory,app,factory,0x10000,4M,

View File

@ -6,6 +6,7 @@ CONFIG_ESPTOOLPY_FLASH_MODE_AUTO_DETECT=n
CONFIG_ESPTOOLPY_FLASHMODE_QIO=y
CONFIG_ESPTOOLPY_FLASHFREQ_120M=y
CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y
CONFIG_PARTITION_TABLE_CUSTOM=y
CONFIG_USJ_ENABLE_USB_SERIAL_JTAG=n
CONFIG_SPIRAM=y
CONFIG_SPIRAM_MODE_OCT=y
@ -22,6 +23,7 @@ CONFIG_TINYUSB_HID_COUNT=1
CONFIG_LV_DEF_REFR_PERIOD=24
CONFIG_LV_USE_LOG=y
CONFIG_LV_LOG_PRINTF=y
CONFIG_LV_FONT_MONTSERRAT_24=y
CONFIG_LV_USE_SYSMON=y
CONFIG_LV_USE_PERF_MONITOR=y
CONFIG_IDF_EXPERIMENTAL_FEATURES=y