More fixes

This commit is contained in:
suchmememanyskill
2024-10-28 13:57:18 +01:00
parent b99e00d79c
commit ccc5817799
10 changed files with 70 additions and 35 deletions

View File

@@ -70,6 +70,7 @@ void global_config_add_new_printer()
int free_index = get_printer_config_free_index(); int free_index = get_printer_config_free_index();
if (free_index <= -1) if (free_index <= -1)
{ {
LOG_LN("No available slot for new printer");
return; return;
} }
@@ -77,6 +78,7 @@ void global_config_add_new_printer()
PrinterConfiguration* new_config = &global_config.printer_config[free_index]; PrinterConfiguration* new_config = &global_config.printer_config[free_index];
new_config->raw = old_config->raw; new_config->raw = old_config->raw;
new_config->setup_complete = false;
new_config->ip_configured = false; new_config->ip_configured = false;
new_config->auth_configured = false; new_config->auth_configured = false;
@@ -99,7 +101,7 @@ void global_config_add_new_printer()
new_config->printer_move_z_steps[i] = old_config->printer_move_z_steps[i]; new_config->printer_move_z_steps[i] = old_config->printer_move_z_steps[i];
} }
write_global_config(); global_config_set_printer(free_index);
ESP.restart(); ESP.restart();
} }

View File

@@ -61,18 +61,17 @@ void fetch_printer_data()
void fetch_printer_data_minimal() void fetch_printer_data_minimal()
{ {
PrinterDataMinimal* data = (PrinterDataMinimal*)malloc(sizeof(PrinterDataMinimal) * get_printer_count()); PrinterDataMinimal data[PRINTER_CONFIG_COUNT] = {{}};
for (int i = 0; i < get_printer_count(); i++) for (int i = 0; i < get_printer_count(); i++)
{ {
freeze_request_thread(); freeze_request_thread();
BasePrinter* printer = get_printer(i); BasePrinter* printer = get_printer(i);
unfreeze_request_thread(); unfreeze_request_thread();
*(data + i) = printer->fetch_min(); data[i] = printer->fetch_min();
} }
freeze_render_thread(); freeze_render_thread();
announce_printer_data_minimal(data); announce_printer_data_minimal(data);
unfreeze_render_thread(); unfreeze_render_thread();
free(data);
} }
void data_loop() void data_loop()

View File

@@ -371,9 +371,10 @@ bool KlipperPrinter::fetch()
PrinterDataMinimal KlipperPrinter::fetch_min() PrinterDataMinimal KlipperPrinter::fetch_min()
{ {
PrinterDataMinimal data = {0}; PrinterDataMinimal data = {};
data.success = false;
if (!printer_config->ip_configured) if (!printer_config->setup_complete)
{ {
data.state = PrinterStateOffline; data.state = PrinterStateOffline;
return data; return data;
@@ -387,7 +388,7 @@ PrinterDataMinimal KlipperPrinter::fetch_min()
int http_code = client.GET(); int http_code = client.GET();
if (http_code == 200) if (http_code == 200)
{ {
data.state = PrinterStateIdle; data.state = PrinterState::PrinterStateIdle;
data.power_devices = get_power_devices_count(); data.power_devices = get_power_devices_count();
JsonDocument doc; JsonDocument doc;
@@ -400,7 +401,7 @@ PrinterDataMinimal KlipperPrinter::fetch_min()
if (strcmp(state, "shutdown") == 0) if (strcmp(state, "shutdown") == 0)
{ {
data.state = PrinterStateError; data.state = PrinterState::PrinterStateError;
} }
} }
@@ -417,26 +418,26 @@ PrinterDataMinimal KlipperPrinter::fetch_min()
if (state == nullptr) if (state == nullptr)
{ {
data.state = PrinterStateError; data.state = PrinterState::PrinterStateError;
} }
else if (strcmp(state, "printing") == 0) else if (strcmp(state, "printing") == 0)
{ {
data.state = PrinterStatePrinting; data.state = PrinterState::PrinterStatePrinting;
} }
else if (strcmp(state, "paused") == 0) else if (strcmp(state, "paused") == 0)
{ {
data.state = PrinterStatePaused; data.state = PrinterState::PrinterStatePaused;
} }
else if (strcmp(state, "complete") == 0 || strcmp(state, "cancelled") == 0 || strcmp(state, "standby") == 0) else if (strcmp(state, "complete") == 0 || strcmp(state, "cancelled") == 0 || strcmp(state, "standby") == 0)
{ {
data.state = PrinterStateIdle; data.state = PrinterState::PrinterStateIdle;
} }
} }
} }
} }
else else
{ {
data.state = PrinterStateOffline; data.state = PrinterState::PrinterStateOffline;
data.power_devices = get_power_devices_count(); data.power_devices = get_power_devices_count();
} }

View File

@@ -72,6 +72,7 @@ void lv_touch_intercept(lv_indev_drv_t *indev_driver, lv_indev_data_t *data)
} }
data->state = LV_INDEV_STATE_REL; data->state = LV_INDEV_STATE_REL;
delay(300); // Some screens don't debounce their signal properly
} }
screen_timer_wake(); screen_timer_wake();

View File

@@ -72,10 +72,11 @@ PrinterData* BasePrinter::AnnouncePrinterData()
void initialize_printers(BasePrinter** printers, unsigned char total) void initialize_printers(BasePrinter** printers, unsigned char total)
{ {
LOG_F(("Initializing %d printers\n", total))
printer_data_copy = (PrinterData*)malloc(sizeof(PrinterData)); printer_data_copy = (PrinterData*)malloc(sizeof(PrinterData));
minimal_data_copy = (PrinterDataMinimal*)malloc(sizeof(PrinterDataMinimal) * total_printers); minimal_data_copy = (PrinterDataMinimal*)malloc(sizeof(PrinterDataMinimal) * total);
memset(printer_data_copy, 0, sizeof(PrinterData)); memset(printer_data_copy, 0, sizeof(PrinterData));
memset(minimal_data_copy, 0, sizeof(PrinterDataMinimal) * total_printers); memset(minimal_data_copy, 0, sizeof(PrinterDataMinimal) * total);
registered_printers = printers; registered_printers = printers;
total_printers = total; total_printers = total;
} }

View File

@@ -97,7 +97,7 @@ typedef struct _PrinterData {
} PrinterData; } PrinterData;
typedef struct { typedef struct {
unsigned char state; PrinterState state;
float print_progress; // 0 -> 1 float print_progress; // 0 -> 1
unsigned int power_devices; unsigned int power_devices;
bool success; bool success;

View File

@@ -198,15 +198,27 @@ void show_ip_entry()
lv_textarea_set_one_line(hostEntry, true); lv_textarea_set_one_line(hostEntry, true);
lv_obj_add_flag(hostEntry, LV_OBJ_FLAG_USER_1); lv_obj_add_flag(hostEntry, LV_OBJ_FLAG_USER_1);
lv_textarea_set_max_length(hostEntry, 63); lv_textarea_set_max_length(hostEntry, 63);
lv_textarea_set_text(hostEntry, "");
lv_obj_set_flex_grow(hostEntry, 3); lv_obj_set_flex_grow(hostEntry, 3);
portEntry = lv_textarea_create(textbow_row); portEntry = lv_textarea_create(textbow_row);
lv_textarea_set_one_line(portEntry, true); lv_textarea_set_one_line(portEntry, true);
lv_textarea_set_max_length(portEntry, 5); lv_textarea_set_max_length(portEntry, 5);
lv_textarea_set_text(portEntry, "80");
lv_obj_set_flex_grow(portEntry, 1); lv_obj_set_flex_grow(portEntry, 1);
if (global_config.printer_config[global_config.printer_index].ip_configured)
{
char buff[7] = {0};
sprintf(buff, "%d", global_config.printer_config[global_config.printer_index].klipper_port);
lv_textarea_set_text(hostEntry, global_config.printer_config[global_config.printer_index].klipper_host);
lv_textarea_set_text(portEntry, buff);
}
else
{
lv_textarea_set_text(hostEntry, "");
lv_textarea_set_text(portEntry, "80");
}
lv_obj_t * keyboard = lv_keyboard_create(root); lv_obj_t * keyboard = lv_keyboard_create(root);
lv_keyboard_set_map(keyboard, LV_KEYBOARD_MODE_USER_1, kb_map, kb_ctrl); lv_keyboard_set_map(keyboard, LV_KEYBOARD_MODE_USER_1, kb_map, kb_ctrl);
lv_obj_add_event_cb(hostEntry, keyboard_event_ip_entry, LV_EVENT_ALL, keyboard); lv_obj_add_event_cb(hostEntry, keyboard_event_ip_entry, LV_EVENT_ALL, keyboard);

View File

@@ -7,15 +7,11 @@
#include "../core/printer_integration.hpp" #include "../core/printer_integration.hpp"
static lv_style_t nav_button_style; static lv_style_t nav_button_style;
static char temp_buffer[10];
static char z_pos_buffer[10];
static char time_buffer[10];
static lv_style_t nav_button_text_style; static lv_style_t nav_button_text_style;
static void update_printer_data_z_pos(lv_event_t * e) { static void update_printer_data_z_pos(lv_event_t * e) {
lv_obj_t * label = lv_event_get_target(e); lv_obj_t * label = lv_event_get_target(e);
char z_pos_buffer[10];
sprintf(z_pos_buffer, "Z%.2f", get_current_printer_data()->position[2]); sprintf(z_pos_buffer, "Z%.2f", get_current_printer_data()->position[2]);
lv_label_set_text(label, z_pos_buffer); lv_label_set_text(label, z_pos_buffer);
@@ -23,6 +19,7 @@ static void update_printer_data_z_pos(lv_event_t * e) {
static void update_printer_data_temp(lv_event_t * e) { static void update_printer_data_temp(lv_event_t * e) {
lv_obj_t * label = lv_event_get_target(e); lv_obj_t * label = lv_event_get_target(e);
char temp_buffer[10];
sprintf(temp_buffer, "%.0f/%.0f", get_current_printer_data()->temperatures[PrinterTemperatureDeviceIndex::PrinterTemperatureDeviceIndexNozzle1], get_current_printer_data()->temperatures[PrinterTemperatureDeviceIndex::PrinterTemperatureDeviceIndexBed]); sprintf(temp_buffer, "%.0f/%.0f", get_current_printer_data()->temperatures[PrinterTemperatureDeviceIndex::PrinterTemperatureDeviceIndexNozzle1], get_current_printer_data()->temperatures[PrinterTemperatureDeviceIndex::PrinterTemperatureDeviceIndexBed]);
lv_label_set_text(label, temp_buffer); lv_label_set_text(label, temp_buffer);
@@ -30,6 +27,7 @@ static void update_printer_data_temp(lv_event_t * e) {
static void update_printer_data_time(lv_event_t * e){ static void update_printer_data_time(lv_event_t * e){
lv_obj_t * label = lv_event_get_target(e); lv_obj_t * label = lv_event_get_target(e);
char time_buffer[10];
if (get_current_printer_data()->state == PrinterState::PrinterStateIdle){ if (get_current_printer_data()->state == PrinterState::PrinterStateIdle){
lv_label_set_text(label, "Idle"); lv_label_set_text(label, "Idle");
@@ -57,6 +55,29 @@ static void update_printer_data_time(lv_event_t * e){
lv_label_set_text(label, time_buffer); lv_label_set_text(label, time_buffer);
} }
static void update_multi_printer_label(lv_event_t * e) {
lv_obj_t * label = lv_event_get_target(e);
int idle_count = 0;
for (int i = 0; i < get_printer_count(); i++)
{
PrinterDataMinimal* data = get_printer_data_minimal(i);
if (data->state == PrinterState::PrinterStateIdle)
{
idle_count++;
}
}
if (idle_count > 0)
{
lv_label_set_text_fmt(label, "%d idle", idle_count);
}
else
{
lv_label_set_text(label, "Printer");
}
}
static void btn_click_files(lv_event_t * e){ static void btn_click_files(lv_event_t * e){
nav_buttons_setup(PANEL_FILES); nav_buttons_setup(PANEL_FILES);
} }
@@ -168,7 +189,7 @@ void nav_buttons_setup(PANEL_TYPE active_panel){
if (global_config.multi_printer_mode) if (global_config.multi_printer_mode)
{ {
// Printers // Printers
create_button(LV_SYMBOL_HOME, "Printer", btn_click_printer, NULL, root_panel); create_button(LV_SYMBOL_HOME, "Printer", btn_click_printer, update_multi_printer_label, root_panel);
} }
lv_obj_t * panel = lv_create_empty_panel(lv_scr_act()); lv_obj_t * panel = lv_create_empty_panel(lv_scr_act());

View File

@@ -170,7 +170,9 @@ static void btn_printer_secondary(lv_event_t * e)
static void btn_printer_rename(lv_event_t * e) static void btn_printer_rename(lv_event_t * e)
{ {
keyboard_config = (PrinterConfiguration*)lv_event_get_user_data(e); int config_index = (int)lv_event_get_user_data(e);
BasePrinter* printer = get_printer(config_index);
keyboard_config = printer->printer_config;
lv_create_keyboard_text_entry(keyboard_callback, "Rename Printer", LV_KEYBOARD_MODE_TEXT_LOWER, CYD_SCREEN_WIDTH_PX * 0.75, 24, keyboard_config->printer_name, false); lv_create_keyboard_text_entry(keyboard_callback, "Rename Printer", LV_KEYBOARD_MODE_TEXT_LOWER, CYD_SCREEN_WIDTH_PX * 0.75, 24, keyboard_config->printer_name, false);
} }
@@ -196,9 +198,8 @@ static void btn_printer_add(lv_event_t * e)
global_config_add_new_printer(); global_config_add_new_printer();
} }
void create_printer_ui(PrinterConfiguration * config, lv_obj_t * root) void create_printer_ui(int index, lv_obj_t * root)
{ {
int index = config - global_config.printer_config;
auto width = CYD_SCREEN_PANEL_WIDTH_PX - CYD_SCREEN_GAP_PX * 2; auto width = CYD_SCREEN_PANEL_WIDTH_PX - CYD_SCREEN_GAP_PX * 2;
lv_obj_t * data_row_name = lv_create_empty_panel(root); lv_obj_t * data_row_name = lv_create_empty_panel(root);
@@ -279,15 +280,12 @@ void printer_panel_init(lv_obj_t* panel)
lv_obj_set_size(lv_create_empty_panel(inner_panel), 0, 0); 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 < get_printer_count(); i++){
PrinterConfiguration * config = &global_config.printer_config[i]; create_printer_ui(i, inner_panel);
if (config->ip_configured) {
create_printer_ui(&global_config.printer_config[i], inner_panel);
}
} }
// Add Printer Button // Add Printer Button
if (get_printer_count() == PRINTER_CONFIG_COUNT){ if (get_printer_count() < PRINTER_CONFIG_COUNT){
lv_obj_t * btn = lv_btn_create(inner_panel); 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_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_add_event_cb(btn, btn_printer_add, LV_EVENT_CLICKED, NULL);
@@ -298,4 +296,5 @@ void printer_panel_init(lv_obj_t* panel)
} }
lv_obj_set_size(lv_create_empty_panel(inner_panel), 0, 0); lv_obj_set_size(lv_create_empty_panel(inner_panel), 0, 0);
lv_msg_send(DATA_PRINTER_MINIMAL, NULL);
} }

View File

@@ -39,8 +39,7 @@ static void reset_wifi_click(lv_event_t * e){
} }
static void reset_ip_click(lv_event_t * e){ static void reset_ip_click(lv_event_t * e){
get_current_printer()->printer_config->ip_configured = false; get_current_printer()->printer_config->setup_complete = false;
get_current_printer()->printer_config->auth_configured = false;
write_global_config(); write_global_config();
ESP.restart(); ESP.restart();
} }