mirror of
https://github.com/suchmememanyskill/CYD-Klipper.git
synced 2026-03-21 05:33:24 +00:00
Implement printer panel fully
This commit is contained in:
@@ -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",
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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"))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user