diff --git a/config/CreatBot_D1000/base.cfg b/config/CreatBot_D1000/base.cfg index 5f120ae1a..2177830ad 100644 --- a/config/CreatBot_D1000/base.cfg +++ b/config/CreatBot_D1000/base.cfg @@ -373,7 +373,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 @@ -400,7 +403,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 5c0850450..dbdc2b0f0 100644 --- a/config/CreatBot_D1000_V0/base.cfg +++ b/config/CreatBot_D1000_V0/base.cfg @@ -305,7 +305,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 @@ -332,7 +335,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 06d781226..47b36e0bf 100644 --- a/config/CreatBot_D600Pro2/base.cfg +++ b/config/CreatBot_D600Pro2/base.cfg @@ -373,7 +373,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 @@ -400,7 +403,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 f9f3277b5..8a6517d20 100644 --- a/config/CreatBot_D600Pro2_V0/base.cfg +++ b/config/CreatBot_D600Pro2_V0/base.cfg @@ -306,7 +306,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 @@ -332,8 +335,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 fcdc03402..ec410b263 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 @@ -447,7 +447,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 %} @@ -495,7 +498,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 %} 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') 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(); }