From 621f2040dee31114bf0f7b1cfd1699117273cf81 Mon Sep 17 00:00:00 2001 From: ruipeng <1041589370@qq.com> Date: Thu, 24 Apr 2025 16:24:36 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=85=A8=E7=B3=BB?= =?UTF-8?q?=E8=80=97=E6=9D=90=E6=A3=80=E6=B5=8B=E5=85=B3=E9=97=AD=E5=90=8E?= =?UTF-8?q?=E4=BB=8D=E7=84=B6=E7=94=9F=E6=95=88=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/CreatBot_D1000/base.cfg | 10 ++++++++-- config/CreatBot_D1000_V0/base.cfg | 10 ++++++++-- config/CreatBot_D600Pro2/base.cfg | 10 ++++++++-- config/CreatBot_D600Pro2_V0/base.cfg | 12 +++++++++--- config/CreatBot_F430NX/base.cfg | 10 ++++++++-- 5 files changed, 41 insertions(+), 11 deletions(-) diff --git a/config/CreatBot_D1000/base.cfg b/config/CreatBot_D1000/base.cfg index e76b6d622..8c990b712 100644 --- a/config/CreatBot_D1000/base.cfg +++ b/config/CreatBot_D1000/base.cfg @@ -369,7 +369,10 @@ gcode: [gcode_macro T0] gcode: - {% set filament_insert = printer["filament_switch_sensor extruder"].filament_detected|default(False) %} + {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} + {% set filament_insert = True if client.filament_sensor|default("") == "" + else True if not printer[client.filament_sensor].enabled + else printer[client.filament_sensor].filament_detected|default(False) %} {% set printing = printer.print_stats.state == "printing" %} {% if filament_insert or printing == False %} SET_SERVO SERVO=switch_nozzle angle=135 @@ -396,7 +399,10 @@ gcode: {% set y_offset = sv.nozzle_y_offset_val|default(0)|float %} {% set z_offset = sv.nozzle_z_offset_val|default(0)|float %} {% set x_offset = x_offset - 59 %} - {% set filament_insert = printer["filament_switch_sensor extruder1"].filament_detected|default(False) %} + {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} + {% set filament_insert = True if client.filament_sensor1|default("") == "" + else True if not printer[client.filament_sensor1].enabled + else printer[client.filament_sensor1].filament_detected|default(False) %} {% set printing = (printer.print_stats.state == "printing") %} {% if filament_insert or printing == False %} SET_SERVO SERVO=switch_nozzle angle=135 diff --git a/config/CreatBot_D1000_V0/base.cfg b/config/CreatBot_D1000_V0/base.cfg index b6fbd55c7..f47d54047 100644 --- a/config/CreatBot_D1000_V0/base.cfg +++ b/config/CreatBot_D1000_V0/base.cfg @@ -301,7 +301,10 @@ gcode: [gcode_macro T0] gcode: - {% set filament_insert = printer["filament_switch_sensor extruder"].filament_detected|default(False) %} + {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} + {% set filament_insert = True if client.filament_sensor|default("") == "" + else True if not printer[client.filament_sensor].enabled + else printer[client.filament_sensor].filament_detected|default(False) %} {% set printing = printer.print_stats.state == "printing" %} {% if filament_insert or printing == False %} SET_SERVO SERVO=switch_nozzle angle=135 @@ -328,7 +331,10 @@ gcode: {% set y_offset = sv.nozzle_y_offset_val|default(0)|float %} {% set z_offset = sv.nozzle_z_offset_val|default(0)|float %} {% set x_offset = x_offset - 59 %} - {% set filament_insert = printer["filament_switch_sensor extruder1"].filament_detected|default(False) %} + {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} + {% set filament_insert = True if client.filament_sensor1|default("") == "" + else True if not printer[client.filament_sensor1].enabled + else printer[client.filament_sensor1].filament_detected|default(False) %} {% set printing = (printer.print_stats.state == "printing") %} {% if filament_insert or printing == False %} SET_SERVO SERVO=switch_nozzle angle=135 diff --git a/config/CreatBot_D600Pro2/base.cfg b/config/CreatBot_D600Pro2/base.cfg index d4b73d583..035cb80a4 100644 --- a/config/CreatBot_D600Pro2/base.cfg +++ b/config/CreatBot_D600Pro2/base.cfg @@ -369,7 +369,10 @@ gcode: [gcode_macro T0] gcode: - {% set filament_insert = printer["filament_switch_sensor extruder"].filament_detected|default(False) %} + {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} + {% set filament_insert = True if client.filament_sensor|default("") == "" + else True if not printer[client.filament_sensor].enabled + else printer[client.filament_sensor].filament_detected|default(False) %} {% set printing = printer.print_stats.state == "printing" %} {% if filament_insert or printing == False %} SET_SERVO SERVO=switch_nozzle angle=135 @@ -396,7 +399,10 @@ gcode: {% set y_offset = sv.nozzle_y_offset_val|default(0)|float %} {% set z_offset = sv.nozzle_z_offset_val|default(0)|float %} {% set x_offset = x_offset - 59 %} - {% set filament_insert = printer["filament_switch_sensor extruder1"].filament_detected|default(False) %} + {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} + {% set filament_insert = True if client.filament_sensor1|default("") == "" + else True if not printer[client.filament_sensor1].enabled + else printer[client.filament_sensor1].filament_detected|default(False) %} {% set printing = (printer.print_stats.state == "printing") %} {% if filament_insert or printing == False %} SET_SERVO SERVO=switch_nozzle angle=135 diff --git a/config/CreatBot_D600Pro2_V0/base.cfg b/config/CreatBot_D600Pro2_V0/base.cfg index 44de91a46..06fde1802 100644 --- a/config/CreatBot_D600Pro2_V0/base.cfg +++ b/config/CreatBot_D600Pro2_V0/base.cfg @@ -302,7 +302,10 @@ gcode: [gcode_macro T0] gcode: - {% set filament_insert = printer["filament_switch_sensor extruder"].filament_detected|default(False) %} + {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} + {% set filament_insert = True if client.filament_sensor|default("") == "" + else True if not printer[client.filament_sensor].enabled + else printer[client.filament_sensor].filament_detected|default(False) %} {% set printing = printer.print_stats.state == "printing" %} {% if filament_insert or printing == False %} SET_SERVO SERVO=switch_nozzle angle=135 @@ -328,8 +331,11 @@ gcode: {% set x_offset = sv.nozzle_x_offset_val|default(0)|float %} {% set y_offset = sv.nozzle_y_offset_val|default(0)|float %} {% set z_offset = sv.nozzle_z_offset_val|default(0)|float %} - {% set x_offset = x_offset - 59 %} - {% set filament_insert = printer["filament_switch_sensor extruder1"].filament_detected|default(False) %} + {% set x_offset = x_offset - 59 %} + {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} + {% set filament_insert = True if client.filament_sensor1|default("") == "" + else True if not printer[client.filament_sensor1].enabled + else printer[client.filament_sensor1].filament_detected|default(False) %} {% set printing = (printer.print_stats.state == "printing") %} {% if filament_insert or printing == False %} SET_SERVO SERVO=switch_nozzle angle=135 diff --git a/config/CreatBot_F430NX/base.cfg b/config/CreatBot_F430NX/base.cfg index 3a2a22fe9..41124034e 100644 --- a/config/CreatBot_F430NX/base.cfg +++ b/config/CreatBot_F430NX/base.cfg @@ -443,7 +443,10 @@ gcode: [gcode_macro T0] gcode: - {% set filament_insert = printer["filament_switch_sensor extruder"].filament_detected|default(False) %} + {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} + {% set filament_insert = True if client.filament_sensor|default("") == "" + else True if not printer[client.filament_sensor].enabled + else printer[client.filament_sensor].filament_detected|default(False) %} {% set printing = printer.print_stats.state == "printing" %} {% if filament_insert or printing == False %} {% if "x" not in printer.toolhead.homed_axes %} @@ -491,7 +494,10 @@ gcode: {% set y_offset = svv.nozzle_y_offset_val|default(0)|float %} {% set z_offset = svv.nozzle_z_offset_val|default(0)|float %} - {% set filament_insert = printer["filament_switch_sensor extruder1"].filament_detected|default(False) %} + {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} + {% set filament_insert = True if client.filament_sensor1|default("") == "" + else True if not printer[client.filament_sensor1].enabled + else printer[client.filament_sensor1].filament_detected|default(False) %} {% set printing = (printer.print_stats.state == "printing") %} {% if filament_insert or printing == False %} {% if "x" not in printer.toolhead.homed_axes %} From c61b41b6027a6820698903609e854da31542f286 Mon Sep 17 00:00:00 2001 From: ruipeng <1041589370@qq.com> Date: Tue, 29 Apr 2025 14:53:06 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E8=B0=83=E6=95=B4F430NX=E5=B7=A6=E5=A4=B4?= =?UTF-8?q?=E6=9C=80=E5=A4=A7=E4=BD=8D=E7=BD=AE=EF=BC=8C=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E5=BA=8A=E7=BD=91=E6=8E=A2=E6=B5=8B=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/CreatBot_F430NX/base.cfg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/CreatBot_F430NX/base.cfg b/config/CreatBot_F430NX/base.cfg index e0eefa6b4..eb2f559fc 100644 --- a/config/CreatBot_F430NX/base.cfg +++ b/config/CreatBot_F430NX/base.cfg @@ -49,7 +49,7 @@ square_corner_velocity: 5.0 speed: 100 horizontal_move_z: 7 mesh_min: 34.6,17.4 -mesh_max: 420, 300 +mesh_max: 420, 290 probe_count: 5,4 mesh_pps: 2,2 fade_end: 5 @@ -66,7 +66,7 @@ full_steps_per_rotation: 200 endstop_pin: ^PC10 position_min: -20 position_endstop: -20 -position_max: 475 +position_max: 400 homing_speed: 100 homing_retract_dist: 10 step_pulse_duration:0.0000025 From b6f4d179c4328697a3c39eb8fffc94d098656cdf Mon Sep 17 00:00:00 2001 From: ruipeng <1041589370@qq.com> Date: Tue, 29 Apr 2025 15:00:16 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E4=B8=8B=E4=BD=8D=E6=9C=BAUUID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Kconfig | 9 +++++++ src/generic/canserial.c | 52 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/src/Kconfig b/src/Kconfig index 9923ed7f5..dc4605da0 100644 --- a/src/Kconfig +++ b/src/Kconfig @@ -201,6 +201,15 @@ config CANBUS_FILTER bool default y if CANSERIAL +menu "CAN bus UUID" + depends on CANBUS && LOW_LEVEL_OPTIONS +config CAN_UUID_USE_CHIPID + bool "CAN bus UUID Hash from CHIPID" if HAVE_CHIPID +config CAN_UUID_CUSTOM + string "CAN bus UUID Hash" if !CAN_UUID_USE_CHIPID + default "000000000010" +endmenu + # Support setting gpio state at startup config INITIAL_PINS string "GPIO pins to set at micro-controller startup" diff --git a/src/generic/canserial.c b/src/generic/canserial.c index b90eb6591..3bb65bab4 100644 --- a/src/generic/canserial.c +++ b/src/generic/canserial.c @@ -345,11 +345,59 @@ command_get_canbus_id(uint32_t *args) } DECL_COMMAND_FLAGS(command_get_canbus_id, HF_IN_SHUTDOWN, "get_canbus_id"); +int +hex_char_to_decimal(char c) { + if (c >= '0' && c <= '9') { + return c - '0'; + } else if (c >= 'A' && c <= 'F') { + return c - 'A' + 10; + } else if (c >= 'a' && c <= 'f') { + return c - 'a' + 10; + } + return 0; +} + +uint64_t +hex_to_decimal(const char *hex_num) { + uint64_t decimal_num = 0; + int len = strlen(hex_num); + uint64_t power = 1; + for (int i = len - 1; i >= 0; i--) { + int digit = hex_char_to_decimal(hex_num[i]); + decimal_num += (uint64_t)digit * power; + power *= 16; + } + return decimal_num; +} + +void +reverse_hex_string(char *hex_str) { + int len = strlen(hex_str); + if (len % 2 != 0) { + return; + } + for (int i = 0; i < len / 2; i += 2) { + char temp1 = hex_str[i]; + char temp2 = hex_str[i + 1]; + hex_str[i] = hex_str[len - i - 2]; + hex_str[i + 1] = hex_str[len - i - 1]; + hex_str[len - i - 2] = temp1; + hex_str[len - i - 1] = temp2; + } +} void canserial_set_uuid(uint8_t *raw_uuid, uint32_t raw_uuid_len) { - uint64_t hash = fasthash64(raw_uuid, raw_uuid_len, 0xA16231A7); - memcpy(CanData.uuid, &hash, sizeof(CanData.uuid)); + if (CONFIG_CAN_UUID_USE_CHIPID){ + uint64_t hash = fasthash64(raw_uuid, raw_uuid_len, 0xA16231A7); + memcpy(CanData.uuid, &hash, sizeof(CanData.uuid)); + }else{ + char uuid_str[32]; + strcpy(uuid_str, CONFIG_CAN_UUID_CUSTOM); + reverse_hex_string(uuid_str); + uint64_t config_uuid = hex_to_decimal(uuid_str); + memcpy(CanData.uuid, &config_uuid, sizeof(CanData.uuid)); + } canserial_notify_rx(); } From 46e033ccc57a23a2d616695631247885d3b44a81 Mon Sep 17 00:00:00 2001 From: ruipeng <1041589370@qq.com> Date: Tue, 29 Apr 2025 15:47:40 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9C=80=E5=B0=8F?= =?UTF-8?q?=E5=9B=BA=E4=BB=B6=E7=89=88=E6=9C=AC=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- klippy/mcu.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/klippy/mcu.py b/klippy/mcu.py index b12888f8c..8fb1beb43 100644 --- a/klippy/mcu.py +++ b/klippy/mcu.py @@ -560,6 +560,7 @@ class MCU: self._baud = 0 self._canbus_iface = None canbus_uuid = config.get('canbus_uuid', None) + self.min_firmware_version = config.get('min_firmware_version', '1.0.0') if canbus_uuid is not None: self._serialport = canbus_uuid self._canbus_iface = config.get('canbus_interface', 'can0') @@ -822,6 +823,7 @@ class MCU: self._get_status_info['mcu_version'] = version self._get_status_info['mcu_build_versions'] = build_versions self._get_status_info['mcu_constants'] = msgparser.get_constants() + self._get_status_info['min_firmware_version'] = self.min_firmware_version self.register_response(self._handle_shutdown, 'shutdown') self.register_response(self._handle_shutdown, 'is_shutdown') self.register_response(self._handle_mcu_stats, 'stats')