mirror of
https://github.com/suchmememanyskill/CYD-Klipper.git
synced 2026-11-15 21:45:55 +00:00
Implement printer panel fully
This commit is contained in:
1 parent
3b7b49c62b
commit
e9b58e0a6f
5 files changed
+152
-14
No files matched your search
@@ -9,6 +9,8 @@
|
||||
"'-D ESP32_3248S035C'",
|
||||
"'-D LCD_WIDTH=320'",
|
||||
"'-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 LCD_ST7796_SPI'",
|
||||
"'-D ST7796_SPI_HOST=SPI2_HOST'",
|
||||
@@ -18,10 +20,13 @@
|
||||
"'-D ST7796_SPI_BUS_SCLK_IO_NUM=14'",
|
||||
"'-D ST7796_SPI_BUS_QUADWP_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_DC_GPIO_NUM=2'",
|
||||
"'-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_LCD_CMD_BITS=8'",
|
||||
"'-D ST7796_SPI_CONFIG_LCD_PARAM_BITS=8'",
|
||||
@@ -77,14 +82,13 @@
|
||||
"'-D SPEAK=26'",
|
||||
|
||||
"-DCYD_SCREEN_GAP_PX=10",
|
||||
"-DCYD_SCREEN_MIN_BUTTON_HEIGHT_PX=40",
|
||||
"-DCYD_SCREEN_MIN_BUTTON_WIDTH_PX=40",
|
||||
"-DCYD_SCREEN_MIN_BUTTON_HEIGHT_PX=45",
|
||||
"-DCYD_SCREEN_MIN_BUTTON_WIDTH_PX=45",
|
||||
"-DCYD_SCREEN_FONT=lv_font_montserrat_16",
|
||||
"-DCYD_SCREEN_FONT_SMALL=lv_font_montserrat_12",
|
||||
"-DCYD_SCREEN_SIDEBAR_SIZE_PX=50",
|
||||
"-DCYD_SCREEN_DRIVER_ESP32_SMARTDISPLAY=1",
|
||||
"-DCYD_SCREEN_DISABLE_TOUCH_CALIBRATION=1",
|
||||
"-DCYD_SCREEN_DISABLE_INVERT_COLORS=1"
|
||||
"-DCYD_SCREEN_DISABLE_TOUCH_CALIBRATION=1"
|
||||
],
|
||||
"f_cpu": "240000000L",
|
||||
"f_flash": "40000000L",
|
||||
|
||||
@@ -90,8 +90,11 @@ void set_printer_config_index(int index)
|
||||
new_config->bed_presets[i] = old_config->bed_presets[i];
|
||||
}
|
||||
|
||||
write_global_config();
|
||||
ESP.restart();
|
||||
}
|
||||
|
||||
write_global_config();
|
||||
}
|
||||
|
||||
void load_global_config()
|
||||
|
||||
@@ -86,5 +86,6 @@ void load_global_config();
|
||||
PRINTER_CONFIG* get_current_printer_config();
|
||||
int get_printer_config_count();
|
||||
void set_printer_config_index(int index);
|
||||
int get_printer_config_free_index();
|
||||
|
||||
#endif // !_GLOBAL_CONFIG_INIT
|
||||
@@ -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"))
|
||||
{
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
#include "../../conf/global_config.h"
|
||||
#include "../../core/data_setup.h"
|
||||
#include "../ui_utils.h"
|
||||
#include "../../core/lv_setup.h"
|
||||
#include <stdio.h>
|
||||
#include "../nav_buttons.h"
|
||||
|
||||
const char * printer_status[] = {
|
||||
"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} };
|
||||
|
||||
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)
|
||||
{
|
||||
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;
|
||||
PrinterMinimal * printer = &printer_minimal[index];
|
||||
|
||||
if (printer->online && (printer->state == PRINTER_STATE_PRINTING || printer->state == PRINTER_STATE_PAUSED)){
|
||||
lv_label_set_text_fmt(label, "%.2f%%", printer->print_progress * 100);
|
||||
if (printer->online && (printer->state == PRINTER_STATE_PRINTING || printer->state == PRINTER_STATE_PAUSED))
|
||||
{
|
||||
char percentage_buffer[12];
|
||||
sprintf(percentage_buffer, "%.2f%%", printer->print_progress * 100);
|
||||
lv_label_set_text(label, percentage_buffer);
|
||||
}
|
||||
else {
|
||||
lv_label_set_text(label, "-");
|
||||
else
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
@@ -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_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);
|
||||
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_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_disable_if_controlled, LV_EVENT_MSG_RECEIVED, config);
|
||||
lv_msg_subsribe_obj(DATA_PRINTER_MINIMAL, btn, config);
|
||||
|
||||
label = lv_label_create(btn);
|
||||
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);
|
||||
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_disable_if_controlled_or_offline, LV_EVENT_MSG_RECEIVED, config);
|
||||
lv_msg_subsribe_obj(DATA_PRINTER_MINIMAL, btn, config);
|
||||
|
||||
label = lv_label_create(btn);
|
||||
lv_label_set_text(label, "Activate");
|
||||
lv_label_set_text(label, "Control");
|
||||
lv_obj_center(label);
|
||||
|
||||
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)
|
||||
{
|
||||
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_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_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);
|
||||
lv_layout_flex_column(inner_panel);
|
||||
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++){
|
||||
PRINTER_CONFIG * config = &global_config.printer_config[i];
|
||||
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);
|
||||
}
|
||||
Reference in new issue
Block a user