Implement printer panel fully

This commit is contained in:
suchmememanyskill
2024-03-09 01:55:31 +01:00
parent 3b7b49c62b
commit e9b58e0a6f
5 changed files with 152 additions and 14 deletions

View File

@@ -9,6 +9,8 @@
"'-D ESP32_3248S035C'", "'-D ESP32_3248S035C'",
"'-D LCD_WIDTH=320'", "'-D LCD_WIDTH=320'",
"'-D LCD_HEIGHT=480'", "'-D LCD_HEIGHT=480'",
"'-D LVGL_BUFFER_PIXELS=(LCD_WIDTH*LCD_HEIGHT/4)'",
"'-D LVGL_BUFFER_MALLOC_FLAGS=(MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT)'",
"'-D BCKL=27'", "'-D BCKL=27'",
"'-D LCD_ST7796_SPI'", "'-D LCD_ST7796_SPI'",
"'-D ST7796_SPI_HOST=SPI2_HOST'", "'-D ST7796_SPI_HOST=SPI2_HOST'",
@@ -18,10 +20,13 @@
"'-D ST7796_SPI_BUS_SCLK_IO_NUM=14'", "'-D ST7796_SPI_BUS_SCLK_IO_NUM=14'",
"'-D ST7796_SPI_BUS_QUADWP_IO_NUM=GPIO_NUM_NC'", "'-D ST7796_SPI_BUS_QUADWP_IO_NUM=GPIO_NUM_NC'",
"'-D ST7796_SPI_BUS_QUADHD_IO_NUM=GPIO_NUM_NC'", "'-D ST7796_SPI_BUS_QUADHD_IO_NUM=GPIO_NUM_NC'",
"'-D ST7796_SPI_BUS_MAX_TRANSFER_SZ=0'",
"'-D ST7796_SPI_BUS_FLAGS=0'",
"'-D ST7796_SPI_BUS_INTR_FLAGS=0'",
"'-D ST7796_SPI_CONFIG_CS_GPIO_NUM=15'", "'-D ST7796_SPI_CONFIG_CS_GPIO_NUM=15'",
"'-D ST7796_SPI_CONFIG_DC_GPIO_NUM=2'", "'-D ST7796_SPI_CONFIG_DC_GPIO_NUM=2'",
"'-D ST7796_SPI_CONFIG_SPI_MODE=SPI_MODE0'", "'-D ST7796_SPI_CONFIG_SPI_MODE=SPI_MODE0'",
"'-D ST7796_SPI_CONFIG_PCLK_HZ=80000000'", "'-D ST7796_SPI_CONFIG_PCLK_HZ=24000000'",
"'-D ST7796_SPI_CONFIG_TRANS_QUEUE_DEPTH=10'", "'-D ST7796_SPI_CONFIG_TRANS_QUEUE_DEPTH=10'",
"'-D ST7796_SPI_CONFIG_LCD_CMD_BITS=8'", "'-D ST7796_SPI_CONFIG_LCD_CMD_BITS=8'",
"'-D ST7796_SPI_CONFIG_LCD_PARAM_BITS=8'", "'-D ST7796_SPI_CONFIG_LCD_PARAM_BITS=8'",
@@ -77,14 +82,13 @@
"'-D SPEAK=26'", "'-D SPEAK=26'",
"-DCYD_SCREEN_GAP_PX=10", "-DCYD_SCREEN_GAP_PX=10",
"-DCYD_SCREEN_MIN_BUTTON_HEIGHT_PX=40", "-DCYD_SCREEN_MIN_BUTTON_HEIGHT_PX=45",
"-DCYD_SCREEN_MIN_BUTTON_WIDTH_PX=40", "-DCYD_SCREEN_MIN_BUTTON_WIDTH_PX=45",
"-DCYD_SCREEN_FONT=lv_font_montserrat_16", "-DCYD_SCREEN_FONT=lv_font_montserrat_16",
"-DCYD_SCREEN_FONT_SMALL=lv_font_montserrat_12", "-DCYD_SCREEN_FONT_SMALL=lv_font_montserrat_12",
"-DCYD_SCREEN_SIDEBAR_SIZE_PX=50", "-DCYD_SCREEN_SIDEBAR_SIZE_PX=50",
"-DCYD_SCREEN_DRIVER_ESP32_SMARTDISPLAY=1", "-DCYD_SCREEN_DRIVER_ESP32_SMARTDISPLAY=1",
"-DCYD_SCREEN_DISABLE_TOUCH_CALIBRATION=1", "-DCYD_SCREEN_DISABLE_TOUCH_CALIBRATION=1"
"-DCYD_SCREEN_DISABLE_INVERT_COLORS=1"
], ],
"f_cpu": "240000000L", "f_cpu": "240000000L",
"f_flash": "40000000L", "f_flash": "40000000L",

View File

@@ -90,8 +90,11 @@ void set_printer_config_index(int index)
new_config->bed_presets[i] = old_config->bed_presets[i]; new_config->bed_presets[i] = old_config->bed_presets[i];
} }
write_global_config();
ESP.restart(); ESP.restart();
} }
write_global_config();
} }
void load_global_config() void load_global_config()

View File

@@ -86,5 +86,6 @@ void load_global_config();
PRINTER_CONFIG* get_current_printer_config(); PRINTER_CONFIG* get_current_printer_config();
int get_printer_config_count(); int get_printer_config_count();
void set_printer_config_index(int index); void set_printer_config_index(int index);
int get_printer_config_free_index();
#endif // !_GLOBAL_CONFIG_INIT #endif // !_GLOBAL_CONFIG_INIT

View File

@@ -341,7 +341,7 @@ void fetch_printer_data_minimal()
} }
} }
if (printer_minimal->state != PRINTER_STATE_ERROR) if (data[i].state != PRINTER_STATE_ERROR)
{ {
if (status.containsKey("virtual_sdcard")) if (status.containsKey("virtual_sdcard"))
{ {

View File

@@ -2,6 +2,9 @@
#include "../../conf/global_config.h" #include "../../conf/global_config.h"
#include "../../core/data_setup.h" #include "../../core/data_setup.h"
#include "../ui_utils.h" #include "../ui_utils.h"
#include "../../core/lv_setup.h"
#include <stdio.h>
#include "../nav_buttons.h"
const char * printer_status[] = { const char * printer_status[] = {
"Error", "Error",
@@ -12,6 +15,16 @@ const char * printer_status[] = {
const static lv_point_t line_points[] = { {0, 0}, {(short int)((CYD_SCREEN_PANEL_WIDTH_PX - CYD_SCREEN_GAP_PX * 2) * 0.85f), 0} }; const static lv_point_t line_points[] = { {0, 0}, {(short int)((CYD_SCREEN_PANEL_WIDTH_PX - CYD_SCREEN_GAP_PX * 2) * 0.85f), 0} };
static void update_printer_name_text(lv_event_t * e)
{
lv_obj_t * label = lv_event_get_target(e);
PRINTER_CONFIG * config = (PRINTER_CONFIG*)lv_event_get_user_data(e);
int index = config - global_config.printer_config;
PrinterMinimal * printer = &printer_minimal[index];
lv_label_set_text(label, config->printer_name[0] == 0 ? config->klipper_host : config->printer_name);
}
static void update_printer_status_text(lv_event_t * e) static void update_printer_status_text(lv_event_t * e)
{ {
lv_obj_t * label = lv_event_get_target(e); lv_obj_t * label = lv_event_get_target(e);
@@ -49,27 +62,124 @@ static void update_printer_percentage_text(lv_event_t * e)
int index = config - global_config.printer_config; int index = config - global_config.printer_config;
PrinterMinimal * printer = &printer_minimal[index]; PrinterMinimal * printer = &printer_minimal[index];
if (printer->online && (printer->state == PRINTER_STATE_PRINTING || printer->state == PRINTER_STATE_PAUSED)){ if (printer->online && (printer->state == PRINTER_STATE_PRINTING || printer->state == PRINTER_STATE_PAUSED))
lv_label_set_text_fmt(label, "%.2f%%", printer->print_progress * 100); {
char percentage_buffer[12];
sprintf(percentage_buffer, "%.2f%%", printer->print_progress * 100);
lv_label_set_text(label, percentage_buffer);
} }
else { else
lv_label_set_text(label, "-"); {
lv_label_set_text(label, "-%");
}
}
static void btn_disable_if_controlled(lv_event_t * e)
{
lv_obj_t * btn = lv_event_get_target(e);
PRINTER_CONFIG * config = (PRINTER_CONFIG*)lv_event_get_user_data(e);
if (config == get_current_printer_config())
{
lv_obj_add_state(btn, LV_STATE_DISABLED);
}
else
{
lv_obj_clear_state(btn, LV_STATE_DISABLED);
}
}
static void btn_disable_if_controlled_or_offline(lv_event_t * e)
{
lv_obj_t * btn = lv_event_get_target(e);
PRINTER_CONFIG * config = (PRINTER_CONFIG*)lv_event_get_user_data(e);
int index = config - global_config.printer_config;
PrinterMinimal * printer = &printer_minimal[index];
if (config == get_current_printer_config() || !printer->online)
{
lv_obj_add_state(btn, LV_STATE_DISABLED);
}
else
{
lv_obj_clear_state(btn, LV_STATE_DISABLED);
}
}
PRINTER_CONFIG * keyboard_config = NULL;
static void keyboard_callback(lv_event_t * e){
lv_event_code_t code = lv_event_get_code(e);
lv_obj_t * ta = lv_event_get_target(e);
lv_obj_t * kb = (lv_obj_t *)lv_event_get_user_data(e);
if (code == LV_EVENT_READY) {
const char * text = lv_textarea_get_text(ta);
strcpy(keyboard_config->printer_name, text);
write_global_config();
lv_msg_send(DATA_PRINTER_MINIMAL, NULL);
}
if(code == LV_EVENT_DEFOCUSED || code == LV_EVENT_CANCEL || code == LV_EVENT_READY) {
lv_keyboard_set_textarea(kb, NULL);
lv_obj_del(lv_obj_get_parent(kb));
} }
} }
static void btn_printer_delete(lv_event_t * e) static void btn_printer_delete(lv_event_t * e)
{ {
lv_obj_t * btn = lv_event_get_target(e);
PRINTER_CONFIG * config = (PRINTER_CONFIG*)lv_event_get_user_data(e);
if (config == get_current_printer_config())
{
return;
}
config->ip_configured = false;
write_global_config();
nav_buttons_setup(6);
} }
// TODO: Extract this from temp/print panel and combine
static void btn_printer_rename(lv_event_t * e) static void btn_printer_rename(lv_event_t * e)
{ {
keyboard_config = (PRINTER_CONFIG*)lv_event_get_user_data(e);
lv_obj_t * parent = lv_create_empty_panel(lv_scr_act());
lv_obj_set_style_bg_opa(parent, LV_OPA_50, 0);
lv_obj_set_size(parent, CYD_SCREEN_WIDTH_PX, CYD_SCREEN_HEIGHT_PX);
lv_layout_flex_column(parent, LV_FLEX_ALIGN_SPACE_BETWEEN);
lv_obj_t * empty_panel = lv_create_empty_panel(parent);
lv_obj_set_flex_grow(empty_panel, 1);
lv_obj_t * ta = lv_textarea_create(parent);
lv_obj_t * keyboard = lv_keyboard_create(parent);
lv_obj_set_width(ta, CYD_SCREEN_WIDTH_PX * 0.75);
lv_textarea_set_max_length(ta, 16);
lv_textarea_set_one_line(ta, true);
lv_textarea_set_text(ta, keyboard_config->printer_name);
lv_obj_add_event_cb(ta, keyboard_callback, LV_EVENT_ALL, keyboard);
lv_keyboard_set_textarea(keyboard, ta);
} }
static void btn_printer_activate(lv_event_t * e) static void btn_printer_activate(lv_event_t * e)
{ {
lv_obj_t * label = lv_event_get_target(e);
PRINTER_CONFIG * config = (PRINTER_CONFIG*)lv_event_get_user_data(e);
int index = config - global_config.printer_config;
set_printer_config_index(index);
set_color_scheme();
lv_msg_send(DATA_PRINTER_MINIMAL, NULL);
}
static void btn_printer_add(lv_event_t * e)
{
set_printer_config_index(get_printer_config_free_index());
} }
void create_printer_ui(PRINTER_CONFIG * config, lv_obj_t * root) void create_printer_ui(PRINTER_CONFIG * config, lv_obj_t * root)
@@ -82,7 +192,8 @@ void create_printer_ui(PRINTER_CONFIG * config, lv_obj_t * root)
lv_obj_set_size(data_row_name, width, LV_SIZE_CONTENT); lv_obj_set_size(data_row_name, width, LV_SIZE_CONTENT);
lv_obj_t * label = lv_label_create(data_row_name); lv_obj_t * label = lv_label_create(data_row_name);
lv_label_set_text(label, config->printer_name[0] == 0 ? config->klipper_host : config->printer_name); lv_obj_add_event_cb(label, update_printer_name_text, LV_EVENT_MSG_RECEIVED, config);
lv_msg_subsribe_obj(DATA_PRINTER_MINIMAL, label, config);
label = lv_label_create(data_row_name); label = lv_label_create(data_row_name);
lv_obj_add_event_cb(label, update_printer_status_text, LV_EVENT_MSG_RECEIVED, config); lv_obj_add_event_cb(label, update_printer_status_text, LV_EVENT_MSG_RECEIVED, config);
@@ -109,6 +220,8 @@ void create_printer_ui(PRINTER_CONFIG * config, lv_obj_t * root)
lv_obj_t * btn = lv_btn_create(button_row); lv_obj_t * btn = lv_btn_create(button_row);
lv_obj_set_flex_grow(btn, 1); lv_obj_set_flex_grow(btn, 1);
lv_obj_add_event_cb(btn, btn_printer_delete, LV_EVENT_CLICKED, config); lv_obj_add_event_cb(btn, btn_printer_delete, LV_EVENT_CLICKED, config);
lv_obj_add_event_cb(btn, btn_disable_if_controlled, LV_EVENT_MSG_RECEIVED, config);
lv_msg_subsribe_obj(DATA_PRINTER_MINIMAL, btn, config);
label = lv_label_create(btn); label = lv_label_create(btn);
lv_label_set_text(label, LV_SYMBOL_TRASH); lv_label_set_text(label, LV_SYMBOL_TRASH);
@@ -125,9 +238,11 @@ void create_printer_ui(PRINTER_CONFIG * config, lv_obj_t * root)
btn = lv_btn_create(button_row); btn = lv_btn_create(button_row);
lv_obj_set_flex_grow(btn, 2); lv_obj_set_flex_grow(btn, 2);
lv_obj_add_event_cb(btn, btn_printer_activate, LV_EVENT_CLICKED, config); lv_obj_add_event_cb(btn, btn_printer_activate, LV_EVENT_CLICKED, config);
lv_obj_add_event_cb(btn, btn_disable_if_controlled_or_offline, LV_EVENT_MSG_RECEIVED, config);
lv_msg_subsribe_obj(DATA_PRINTER_MINIMAL, btn, config);
label = lv_label_create(btn); label = lv_label_create(btn);
lv_label_set_text(label, "Activate"); lv_label_set_text(label, "Control");
lv_obj_center(label); lv_obj_center(label);
lv_obj_t * line = lv_line_create(root); lv_obj_t * line = lv_line_create(root);
@@ -139,11 +254,13 @@ void create_printer_ui(PRINTER_CONFIG * config, lv_obj_t * root)
void printer_panel_init(lv_obj_t* panel) void printer_panel_init(lv_obj_t* panel)
{ {
lv_obj_t * inner_panel = lv_create_empty_panel(panel); lv_obj_t * inner_panel = lv_create_empty_panel(panel);
lv_obj_align(inner_panel, LV_ALIGN_TOP_LEFT, CYD_SCREEN_GAP_PX, CYD_SCREEN_GAP_PX); lv_obj_align(inner_panel, LV_ALIGN_TOP_LEFT, CYD_SCREEN_GAP_PX, 0);
lv_obj_set_size(inner_panel, CYD_SCREEN_PANEL_WIDTH_PX - CYD_SCREEN_GAP_PX * 2, CYD_SCREEN_PANEL_HEIGHT_PX - CYD_SCREEN_GAP_PX * 2); lv_obj_set_size(inner_panel, CYD_SCREEN_PANEL_WIDTH_PX - CYD_SCREEN_GAP_PX * 2, CYD_SCREEN_PANEL_HEIGHT_PX);
lv_layout_flex_column(inner_panel); lv_layout_flex_column(inner_panel);
lv_obj_set_scrollbar_mode(inner_panel, LV_SCROLLBAR_MODE_OFF); lv_obj_set_scrollbar_mode(inner_panel, LV_SCROLLBAR_MODE_OFF);
lv_obj_set_size(lv_create_empty_panel(inner_panel), 0, 0);
for (int i = 0; i < PRINTER_CONFIG_COUNT; i++){ for (int i = 0; i < PRINTER_CONFIG_COUNT; i++){
PRINTER_CONFIG * config = &global_config.printer_config[i]; PRINTER_CONFIG * config = &global_config.printer_config[i];
if (config->ip_configured) { if (config->ip_configured) {
@@ -151,5 +268,18 @@ void printer_panel_init(lv_obj_t* panel)
} }
} }
// Add Printer Button
if (get_printer_config_free_index() != -1){
lv_obj_t * btn = lv_btn_create(inner_panel);
lv_obj_set_size(btn, CYD_SCREEN_PANEL_WIDTH_PX - CYD_SCREEN_GAP_PX * 2, CYD_SCREEN_MIN_BUTTON_HEIGHT_PX);
lv_obj_add_event_cb(btn, btn_printer_add, LV_EVENT_CLICKED, NULL);
lv_obj_t * label = lv_label_create(btn);
lv_label_set_text(label, "Add Printer");
lv_obj_center(label);
}
lv_obj_set_size(lv_create_empty_panel(inner_panel), 0, 0);
lv_msg_send(DATA_PRINTER_MINIMAL, NULL); lv_msg_send(DATA_PRINTER_MINIMAL, NULL);
} }