Add bambu panels

This commit is contained in:
Sims
2024-12-19 18:17:40 +01:00
parent f4498e95cd
commit 4dd70aa3ea
7 changed files with 144 additions and 28 deletions

View File

@@ -4,13 +4,21 @@
#include <ArduinoJson.h> #include <ArduinoJson.h>
#include <WifiClientSecure.h> #include <WifiClientSecure.h>
enum BambuSpeedProfile
{
BambuSpeedProfileSilent = 1,
BambuSpeedProfileNormal = 2,
BambuSpeedProfileSport = 3,
BambuSpeedProfileLudicrous = 4,
}
class BambuPrinter : public BasePrinter class BambuPrinter : public BasePrinter
{ {
private: private:
unsigned int last_error = 0; unsigned int last_error = 0;
unsigned int ignore_error = 0; unsigned int ignore_error = 0;
bool publish_mqtt_command(const char* command); bool publish_mqtt_command(const char* command);
unsigned char speed_profile = 2; BambuSpeedProfile speed_profile = 2;
unsigned long print_start; unsigned long print_start;
union { union {
@@ -25,6 +33,7 @@ class BambuPrinter : public BasePrinter
protected: protected:
void parse_state(JsonDocument& in); void parse_state(JsonDocument& in);
void init_ui_panels();
Files parse_files(WiFiClientSecure& client, int max_files); Files parse_files(WiFiClientSecure& client, int max_files);
public: public:

View File

@@ -0,0 +1,83 @@
#include "bambu_printer_integration.hpp"
#include "lvgl.h"
#include "../../ui/ui_utils.h"
#include <stdio.h>
#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;
}

View File

@@ -83,21 +83,23 @@ void BambuPrinter::parse_state(JsonDocument& in)
if (print.containsKey("spd_lvl")) 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) switch (speed_profile)
{ {
case 1: case BambuSpeedProfileSilent:
printer_data.speed_mult = 0.5f; printer_data.speed_mult = 0.5f;
break; break;
case 2: case BambuSpeedProfileNormal:
printer_data.speed_mult = 1.0f; printer_data.speed_mult = 1.0f;
break; break;
case 3: case BambuSpeedProfileSport:
printer_data.speed_mult = 1.24f; printer_data.speed_mult = 1.24f;
break; break;
case 4: case BambuSpeedProfileLudicrous:
printer_data.speed_mult = 1.66f; printer_data.speed_mult = 1.66f;
break;
} }
} }

View File

@@ -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;
}

View File

@@ -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}};

View File

@@ -1,6 +1,7 @@
#include "klipper_printer_integration.hpp" #include "klipper_printer_integration.hpp"
#include "lvgl.h" #include "lvgl.h"
#include "../../ui/ui_utils.h" #include "../../ui/ui_utils.h"
#include "../common/constants.h"
#include <stdio.h> #include <stdio.h>
static void set_fan_speed_text(lv_event_t * e) { 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){ static void set_fan_speed(lv_event_t * e){
int speed = (int)lv_event_get_user_data(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 KlipperPrinter* printer = (KlipperPrinter*)get_current_printer(); // TODO: pass by ref
char gcode[16]; char gcode[16];
sprintf(gcode, "M106 S%d", speed); sprintf(gcode, "M106 S%d", actual_speed);
printer->send_gcode(gcode); printer->send_gcode(gcode);
} }
const char* fan_speeds[] = { "0%", "15%", "25%", "35%" }; FAN_SPEED_COLUMN(set_fan_speed, fan_speed_columns)
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}
};
static void set_zoffset_text(lv_event_t * e) { static void set_zoffset_text(lv_event_t * e) {
lv_obj_t * label = lv_event_get_target(e); lv_obj_t * label = lv_event_get_target(e);

View File

@@ -2,6 +2,7 @@
#include "lvgl.h" #include "lvgl.h"
#include "../../ui/ui_utils.h" #include "../../ui/ui_utils.h"
#include <stdio.h> #include <stdio.h>
#include "../common/constants.h"
const char* COMMAND_EXTRUDE_MULT = "{\"command\":\"flowrate\",\"factor\":%d}"; 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) static void set_fan_speed(lv_event_t * e)
{ {
int fan_speed = 0; int speed = (int)lv_event_get_user_data(e);
if (get_range(e, 0, 100, &fan_speed)) int actual_fan_speed = fan_percent_to_byte(speed);
{ char buff[16];
int actual_fan_speed = fan_speed * 255 / 100; sprintf(buff, "M106 S%d", actual_fan_speed);
char buff[16]; ((OctoPrinter*)get_current_printer())->send_gcode(buff);
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) 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] { 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_speed_mult_text, .open_panel = (void*)open_speed_mult_keypad },
{ .set_label = (void*)set_extruder_mult_text, .open_panel = (void*)open_extrude_mult_keypad }, { .set_label = (void*)set_extruder_mult_text, .open_panel = (void*)open_extrude_mult_keypad },
}; };