From 4dd70aa3ea465a85102103c819957b80e6e03216 Mon Sep 17 00:00:00 2001 From: Sims <38142618+suchmememanyskill@users.noreply.github.com> Date: Thu, 19 Dec 2024 18:17:40 +0100 Subject: [PATCH] Add bambu panels --- .../core/bambu/bambu_printer_integration.hpp | 11 ++- .../src/core/bambu/bambu_printer_panels.cpp | 83 +++++++++++++++++++ .../src/core/bambu/bambu_printer_parsers.cpp | 12 +-- CYD-Klipper/src/core/common/constants.cpp | 15 ++++ CYD-Klipper/src/core/common/constants.h | 14 ++++ .../core/klipper/klipper_printer_panels.cpp | 15 +--- .../octoprint/octoprint_printer_panels.cpp | 22 ++--- 7 files changed, 144 insertions(+), 28 deletions(-) create mode 100644 CYD-Klipper/src/core/bambu/bambu_printer_panels.cpp create mode 100644 CYD-Klipper/src/core/common/constants.cpp create mode 100644 CYD-Klipper/src/core/common/constants.h diff --git a/CYD-Klipper/src/core/bambu/bambu_printer_integration.hpp b/CYD-Klipper/src/core/bambu/bambu_printer_integration.hpp index c878be7..0ecd156 100644 --- a/CYD-Klipper/src/core/bambu/bambu_printer_integration.hpp +++ b/CYD-Klipper/src/core/bambu/bambu_printer_integration.hpp @@ -4,13 +4,21 @@ #include #include +enum BambuSpeedProfile +{ + BambuSpeedProfileSilent = 1, + BambuSpeedProfileNormal = 2, + BambuSpeedProfileSport = 3, + BambuSpeedProfileLudicrous = 4, +} + class BambuPrinter : public BasePrinter { private: unsigned int last_error = 0; unsigned int ignore_error = 0; bool publish_mqtt_command(const char* command); - unsigned char speed_profile = 2; + BambuSpeedProfile speed_profile = 2; unsigned long print_start; union { @@ -25,6 +33,7 @@ class BambuPrinter : public BasePrinter protected: void parse_state(JsonDocument& in); + void init_ui_panels(); Files parse_files(WiFiClientSecure& client, int max_files); public: diff --git a/CYD-Klipper/src/core/bambu/bambu_printer_panels.cpp b/CYD-Klipper/src/core/bambu/bambu_printer_panels.cpp new file mode 100644 index 0000000..2d7cb1e --- /dev/null +++ b/CYD-Klipper/src/core/bambu/bambu_printer_panels.cpp @@ -0,0 +1,83 @@ +#include "bambu_printer_integration.hpp" +#include "lvgl.h" +#include "../../ui/ui_utils.h" +#include +#include "../common/constants.h" + +const char* speed_profiles[] = { "Silent (50%)", "Normal (100%)", "Sport (124%)", "Ludicrous (166%)" }; +const BambuSpeedProfile speed_profile_values[] = { BambuSpeedProfileSilent, BambuSpeedProfileNormal, BambuSpeedProfileSport, BambuSpeedProfileLudicrous }; + +// TODO: Move to common +static void set_fan_speed_text(lv_event_t * e) { + lv_obj_t * label = lv_event_get_target(e); + char data[16]; + sprintf(data, "Fan: %.0f%%", get_current_printer_data()->fan_speed * 100); + lv_label_set_text(label, data); +} + +static void set_fan_speed(lv_event_t * e){ + int speed = (int)lv_event_get_user_data(e); + BambuPrinter* printer = (BambuPrinter*)get_current_printer(); // TODO: pass by ref + // TODO: Implement +} + +FAN_SPEED_COLUMN(set_fan_speed, fan_speed_columns) + +static void set_aux_fan_speed_text(lv_event_t * e) { + // TODO: Implement + lv_obj_t * label = lv_event_get_target(e); + char data[16]; + sprintf(data, "Fan: %.0f%%", get_current_printer_data()->fan_speed * 100); + lv_label_set_text(label, data); +} + +static void set_aux_fan_speed(lv_event_t * e){ + int speed = (int)lv_event_get_user_data(e); + BambuPrinter* printer = (BambuPrinter*)get_current_printer(); // TODO: pass by ref + // TODO: Implement +} + +FAN_SPEED_COLUMN(set_aux_fan_speed, aux_fan_speed_columns) + +// TODO: move to common +static void set_speed_mult_text(lv_event_t * e){ + lv_obj_t * label = lv_event_get_target(e); + char data[16]; + sprintf(data, "Speed: %.0f%%", get_current_printer_data()->speed_mult * 100); + lv_label_set_text(label, data); +} + +static void set_speed_mult(lv_event_t * e) +{ + BambuSpeedProfile speed = (BambuSpeedProfile)lv_event_get_user_data(e); + BambuPrinter* printer = (BambuPrinter*)get_current_printer(); // TODO: pass by ref + // TODO: Implement +} + +lv_button_column_t speed_profile_columns[] = { + { set_speed_mult, speed_profiles, (const void**)speed_profile_values, 4}, +}; + +static void open_fan_speed_panel(lv_event_t * e){ + lv_create_fullscreen_button_matrix_popup(lv_scr_act(), set_fan_speed_text, fan_speed_columns, 3); +} + +static void open_aux_fan_speed_panel(lv_event_t * e){ + lv_create_fullscreen_button_matrix_popup(lv_scr_act(), set_aux_fan_speed_text, aux_fan_speed_columns, 3); +} + +static void open_speed_mult_panel(lv_event_t * e){ + lv_create_fullscreen_button_matrix_popup(lv_scr_act(), set_speed_mult_text, speed_profile_columns, 1); +} + +static PrinterUiPanel bambu_ui_panels[3] { + { .set_label = (void*)set_fan_speed_text, .open_panel = (void*)open_fan_speed_panel }, + { .set_label = (void*)set_aux_fan_speed_text, .open_panel = (void*)open_aux_fan_speed_panel }, + { .set_label = (void*)set_speed_mult_text, .open_panel = (void*)open_speed_mult_panel }, +}; + +void BambuPrinter::init_ui_panels() +{ + custom_menus_count = 3; + custom_menus = bambu_ui_panels; +} \ No newline at end of file diff --git a/CYD-Klipper/src/core/bambu/bambu_printer_parsers.cpp b/CYD-Klipper/src/core/bambu/bambu_printer_parsers.cpp index 6d9bafb..9fa2bb4 100644 --- a/CYD-Klipper/src/core/bambu/bambu_printer_parsers.cpp +++ b/CYD-Klipper/src/core/bambu/bambu_printer_parsers.cpp @@ -83,21 +83,23 @@ void BambuPrinter::parse_state(JsonDocument& in) if (print.containsKey("spd_lvl")) { - speed_profile = print["spd_lvl"]; + int speed_profile_int = print["spd_lvl"] + speed_profile = (BambuSpeedProfile)speed_profile_int; switch (speed_profile) { - case 1: + case BambuSpeedProfileSilent: printer_data.speed_mult = 0.5f; break; - case 2: + case BambuSpeedProfileNormal: printer_data.speed_mult = 1.0f; break; - case 3: + case BambuSpeedProfileSport: printer_data.speed_mult = 1.24f; break; - case 4: + case BambuSpeedProfileLudicrous: printer_data.speed_mult = 1.66f; + break; } } diff --git a/CYD-Klipper/src/core/common/constants.cpp b/CYD-Klipper/src/core/common/constants.cpp new file mode 100644 index 0000000..3613307 --- /dev/null +++ b/CYD-Klipper/src/core/common/constants.cpp @@ -0,0 +1,15 @@ +#include "constants.h" + +const char* fan_speeds_col_1[] = { "On", "Off" }; +const int fan_speeds_col_1_values[] = { 0, 100 }; + +const char* fan_speeds_col_2[] = { "10%", "20%", "30%", "40%"}; +const int fan_speeds_col_2_values[] = { 10, 20, 30, 40 }; + +const char* fan_speeds_col_3[] = { "50%", "60%", "70%", "80%"}; +const int fan_speeds_col_3_values[] = { 50, 60, 70, 80 }; + +char fan_percent_to_byte(int percent) +{ + return percent * 255 / 100; +} \ No newline at end of file diff --git a/CYD-Klipper/src/core/common/constants.h b/CYD-Klipper/src/core/common/constants.h new file mode 100644 index 0000000..2eadda7 --- /dev/null +++ b/CYD-Klipper/src/core/common/constants.h @@ -0,0 +1,14 @@ +#pragma once + +extern const char* fan_speeds_col_1[]; +extern const int fan_speeds_col_1_values[]; + +extern const char* fan_speeds_col_2[]; +extern const int fan_speeds_col_2_values[]; + +extern const char* fan_speeds_col_3[]; +extern const int fan_speeds_col_3_values[]; + +unsigned char fan_percent_to_byte(int percent); + +#define FAN_SPEED_COLUMN(set_fan_speed, column_name) lv_button_column_t column_name[] = {{ set_fan_speed, fan_speeds_col_2, (const void**)fan_speeds_col_2_values, 4},{ set_fan_speed, fan_speeds_col_3, (const void**)fan_speeds_col_3_values, 4}, { set_fan_speed, fan_speeds_col_1, (const void**)fan_speeds_col_1_values, 2}}; \ No newline at end of file diff --git a/CYD-Klipper/src/core/klipper/klipper_printer_panels.cpp b/CYD-Klipper/src/core/klipper/klipper_printer_panels.cpp index de9e394..4b7b51a 100644 --- a/CYD-Klipper/src/core/klipper/klipper_printer_panels.cpp +++ b/CYD-Klipper/src/core/klipper/klipper_printer_panels.cpp @@ -1,6 +1,7 @@ #include "klipper_printer_integration.hpp" #include "lvgl.h" #include "../../ui/ui_utils.h" +#include "../common/constants.h" #include static void set_fan_speed_text(lv_event_t * e) { @@ -12,22 +13,14 @@ static void set_fan_speed_text(lv_event_t * e) { static void set_fan_speed(lv_event_t * e){ int speed = (int)lv_event_get_user_data(e); + int actual_speed = fan_percent_to_byte(speed); KlipperPrinter* printer = (KlipperPrinter*)get_current_printer(); // TODO: pass by ref char gcode[16]; - sprintf(gcode, "M106 S%d", speed); + sprintf(gcode, "M106 S%d", actual_speed); printer->send_gcode(gcode); } -const char* fan_speeds[] = { "0%", "15%", "25%", "35%" }; -const int fan_speeds_values[] = { 0, 38, 64, 90 }; - -const char* fan_speeds_2[] = { "50%", "75%", "100%"}; -const int fan_speeds_values_2[] = { 128, 192, 255 }; - -lv_button_column_t fan_speed_columns[] = { - { set_fan_speed, fan_speeds, (const void**)fan_speeds_values, 4}, - { set_fan_speed, fan_speeds_2, (const void**)fan_speeds_values_2, 3} -}; +FAN_SPEED_COLUMN(set_fan_speed, fan_speed_columns) static void set_zoffset_text(lv_event_t * e) { lv_obj_t * label = lv_event_get_target(e); diff --git a/CYD-Klipper/src/core/octoprint/octoprint_printer_panels.cpp b/CYD-Klipper/src/core/octoprint/octoprint_printer_panels.cpp index c40b409..1926763 100644 --- a/CYD-Klipper/src/core/octoprint/octoprint_printer_panels.cpp +++ b/CYD-Klipper/src/core/octoprint/octoprint_printer_panels.cpp @@ -2,6 +2,7 @@ #include "lvgl.h" #include "../../ui/ui_utils.h" #include +#include "../common/constants.h" const char* COMMAND_EXTRUDE_MULT = "{\"command\":\"flowrate\",\"factor\":%d}"; @@ -51,19 +52,18 @@ bool get_range(lv_event_t * e, int min, int max, int* out) static void set_fan_speed(lv_event_t * e) { - int fan_speed = 0; - if (get_range(e, 0, 100, &fan_speed)) - { - int actual_fan_speed = fan_speed * 255 / 100; - char buff[16]; - sprintf(buff, "M106 S%d", actual_fan_speed); - ((OctoPrinter*)get_current_printer())->send_gcode(buff); - } + int speed = (int)lv_event_get_user_data(e); + int actual_fan_speed = fan_percent_to_byte(speed); + char buff[16]; + sprintf(buff, "M106 S%d", actual_fan_speed); + ((OctoPrinter*)get_current_printer())->send_gcode(buff); } -static void open_fan_speed_keypad(lv_event_t * e) +FAN_SPEED_COLUMN(set_fan_speed, fan_speed_columns) + +static void open_fan_speed_panel(lv_event_t * e) { - lv_create_keyboard_text_entry(set_fan_speed, "New fan speed %", LV_KEYBOARD_MODE_NUMBER); + lv_create_fullscreen_button_matrix_popup(lv_scr_act(), set_fan_speed_text, fan_speed_columns, 3); } static void set_speed_mult(lv_event_t * e) @@ -99,7 +99,7 @@ static void open_extrude_mult_keypad(lv_event_t * e) } static PrinterUiPanel klipper_ui_panels[4] { - { .set_label = (void*)set_fan_speed_text, .open_panel = (void*)open_fan_speed_keypad }, + { .set_label = (void*)set_fan_speed_text, .open_panel = (void*)open_fan_speed_panel }, { .set_label = (void*)set_speed_mult_text, .open_panel = (void*)open_speed_mult_keypad }, { .set_label = (void*)set_extruder_mult_text, .open_panel = (void*)open_extrude_mult_keypad }, };