mirror of
https://github.com/suchmememanyskill/CYD-Klipper.git
synced 2026-03-21 05:33:24 +00:00
Add bambu panels
This commit is contained in:
@@ -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:
|
||||||
|
|||||||
83
CYD-Klipper/src/core/bambu/bambu_printer_panels.cpp
Normal file
83
CYD-Klipper/src/core/bambu/bambu_printer_panels.cpp
Normal 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;
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
15
CYD-Klipper/src/core/common/constants.cpp
Normal file
15
CYD-Klipper/src/core/common/constants.cpp
Normal 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;
|
||||||
|
}
|
||||||
14
CYD-Klipper/src/core/common/constants.h
Normal file
14
CYD-Klipper/src/core/common/constants.h
Normal 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}};
|
||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
{
|
|
||||||
int actual_fan_speed = fan_speed * 255 / 100;
|
|
||||||
char buff[16];
|
char buff[16];
|
||||||
sprintf(buff, "M106 S%d", actual_fan_speed);
|
sprintf(buff, "M106 S%d", actual_fan_speed);
|
||||||
((OctoPrinter*)get_current_printer())->send_gcode(buff);
|
((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 },
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user