Skip to content

Commit

Permalink
Dwarf_nr beautify
Browse files Browse the repository at this point in the history
  • Loading branch information
bkerler committed Feb 10, 2025
1 parent 25f8e7d commit 09d5b77
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 31 deletions.
2 changes: 1 addition & 1 deletion include/puppies/Dwarf.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ void ToolsMappingBody::windowEvent([[maybe_unused]] window_t *sender, GUI_event_
uint16_t get_heatbreak_fan_pwr();

inline uint8_t get_dwarf_nr() const {
return dwarf_nr;
return dwarf_nr - 1;
}

uint16_t get_fan_pwm(uint8_t fan_nr) const;
Expand Down
30 changes: 15 additions & 15 deletions lib/Marlin/Marlin/src/module/prusa/toolchanger.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,7 @@ bool PrusaToolChanger::tool_change(const uint8_t new_tool, tool_return_t return_
// calculate the new tool offset difference before updating hotend_currently_applied_offset
xyz_pos_t new_hotend_offset;
if (new_dwarf != nullptr) {
new_hotend_offset = hotend_offset[new_dwarf->get_dwarf_nr() - 1];
new_hotend_offset = hotend_offset[new_dwarf->get_dwarf_nr()];
} else {
new_hotend_offset.reset();
}
Expand Down Expand Up @@ -332,14 +332,14 @@ bool PrusaToolChanger::tool_change(const uint8_t new_tool, tool_return_t return_
// Disable print fan on old dwarf, fan on new dwarf will be enabled by marlin
// todo: remove this when multiple fans are implemented properly
if (old_dwarf != nullptr) {
Fans::print(old_dwarf->get_dwarf_nr() - 1).setPWM(0);
Fans::print(old_dwarf->get_dwarf_nr()).setPWM(0);
}

if (new_dwarf != old_dwarf) {
if (new_dwarf != nullptr) {
// Before we try to pick up new tool, check that its parked properly
if (!new_dwarf->is_parked()) {
log_error(PrusaToolChanger, "Trying to pick missing Dwarf %u, triggering toolchanger recovery", new_dwarf->get_dwarf_nr());
log_error(PrusaToolChanger, "Trying to pick missing Dwarf #%u, triggering toolchanger recovery", new_dwarf->get_dwarf_nr());
toolcrash();
return false;
}
Expand Down Expand Up @@ -470,9 +470,9 @@ void PrusaToolChanger::toolfall() {
}

bool PrusaToolChanger::purge_tool(Dwarf &dwarf) {
const size_t tool_nr = dwarf.get_dwarf_nr() - 1;
const size_t tool_nr = dwarf.get_dwarf_nr();

if (thermalManager.tooColdToExtrude(dwarf.get_dwarf_nr() - 1)) {
if (thermalManager.tooColdToExtrude(dwarf.get_dwarf_nr())) {
// hotend is cold, skip purge because it can't do anything
return true;
}
Expand Down Expand Up @@ -673,14 +673,14 @@ bool PrusaToolChanger::park(Dwarf &dwarf) {

// Wait until dwarf is registering as parked
if (!wait(dwarf_parked, WAIT_TIME_TOOL_PARKED_PICKED)) {
log_warning(PrusaToolChanger, "Dwarf %u not parked, trying to wiggle it in", dwarf.get_dwarf_nr());
log_warning(PrusaToolChanger, "Dwarf #%u not parked, trying to wiggle it in", dwarf.get_dwarf_nr());

move(info.dock_x - DOCK_WIGGLE_OFFSET, info.dock_y, SLOW_MOVE_MM_S); // wiggle left
move(info.dock_x, info.dock_y, SLOW_MOVE_MM_S); // wiggle back
planner.synchronize();

if (!wait(dwarf_parked, WAIT_TIME_TOOL_PARKED_PICKED)) {
log_error(PrusaToolChanger, "Dwarf %u not parked, triggering toolchanger recovery", dwarf.get_dwarf_nr());
log_error(PrusaToolChanger, "Dwarf #%u not parked, triggering toolchanger recovery", dwarf.get_dwarf_nr());
toolcrash();
return false;
}
Expand All @@ -690,18 +690,18 @@ bool PrusaToolChanger::park(Dwarf &dwarf) {

// Wait until dwarf is registering as not picked
if (!wait(dwarf_not_picked, WAIT_TIME_TOOL_PARKED_PICKED)) {
log_warning(PrusaToolChanger, "Dwarf %u still picked after parking, waiting for pull to finish", dwarf.get_dwarf_nr());
log_warning(PrusaToolChanger, "Dwarf #%u still picked after parking, waiting for pull to finish", dwarf.get_dwarf_nr());

// Can happen if parking in really low speed and acceleration
planner.synchronize(); // Just wait for the pull move to finish and check again

if (!wait(dwarf_not_picked, WAIT_TIME_TOOL_PARKED_PICKED)) {
log_error(PrusaToolChanger, "Dwarf %u still picked after parking, triggering toolchanger recovery", dwarf.get_dwarf_nr());
log_error(PrusaToolChanger, "Dwarf #%u still picked after parking, triggering toolchanger recovery", dwarf.get_dwarf_nr());
toolcrash();
return false;
}
}
log_info(PrusaToolChanger, "Dwarf %u parked successfully", dwarf.get_dwarf_nr());
log_info(PrusaToolChanger, "Dwarf #%u parked successfully", dwarf.get_dwarf_nr());
return true;
}

Expand Down Expand Up @@ -788,14 +788,14 @@ bool PrusaToolChanger::pickup(Dwarf &dwarf) {

// Wait until dwarf is registering as picked
if (!wait(dwarf_picked, WAIT_TIME_TOOL_PARKED_PICKED)) {
log_warning(PrusaToolChanger, "Dwarf %u not picked, trying to wiggle it in", dwarf.get_dwarf_nr());
log_warning(PrusaToolChanger, "Dwarf #%u not picked, trying to wiggle it in", dwarf.get_dwarf_nr());

move(info.dock_x, info.dock_y + DOCK_WIGGLE_OFFSET, SLOW_MOVE_MM_S); // wiggle pull
move(info.dock_x, info.dock_y, SLOW_MOVE_MM_S); // wiggle back
planner.synchronize();

if (!wait(dwarf_picked, WAIT_TIME_TOOL_PARKED_PICKED)) {
log_error(PrusaToolChanger, "Dwarf %u not picked, triggering toolchanger recovery", dwarf.get_dwarf_nr());
log_error(PrusaToolChanger, "Dwarf #%u not picked, triggering toolchanger recovery", dwarf.get_dwarf_nr());
toolcrash();
return false;
}
Expand Down Expand Up @@ -825,15 +825,15 @@ bool PrusaToolChanger::pickup(Dwarf &dwarf) {

// Wait until dwarf is registering as not parked
if (!wait(dwarf_not_parked, WAIT_TIME_TOOL_PARKED_PICKED)) {
log_error(PrusaToolChanger, "Dwarf %u still parked after picking, triggering toolchanger recovery", dwarf.get_dwarf_nr());
log_error(PrusaToolChanger, "Dwarf #%u still parked after picking, triggering toolchanger recovery", dwarf.get_dwarf_nr());
toolcrash();
return false;
}

move(info.dock_x + PICK_X_OFFSET_3, SAFE_Y_WITH_TOOL, limited_feedrate); // tool extracted

log_info(PrusaToolChanger, "Dwarf %u picked successfully", dwarf.get_dwarf_nr());
Odometer_s::instance().add_toolpick(dwarf.get_dwarf_nr() - 1); // Count picks
log_info(PrusaToolChanger, "Dwarf #%u picked successfully", dwarf.get_dwarf_nr());
Odometer_s::instance().add_toolpick(dwarf.get_dwarf_nr()); // Count picks
return true;
}

Expand Down
20 changes: 9 additions & 11 deletions lib/Marlin/Marlin/src/module/prusa/toolchanger_utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ bool PrusaToolChangerUtils::update() {
if (old_tool->set_selected(false) == CommunicationStatus::ERROR) {
return false;
}
log_info(PrusaToolChanger, "Deactivated Dwarf %u", old_tool->get_dwarf_nr());
log_info(PrusaToolChanger, "Deactivated Dwarf #%u", old_tool->get_dwarf_nr());

active_dwarf = nullptr; // No dwarf is selected right now
loadcell.Clear(); // No loadcell is available now, make sure that it is not stuck in active mode
Expand All @@ -158,7 +158,7 @@ bool PrusaToolChangerUtils::update() {
if (new_tool->set_selected(true) == CommunicationStatus::ERROR) {
return false;
}
log_info(PrusaToolChanger, "Activated Dwarf %u", new_tool->get_dwarf_nr());
log_info(PrusaToolChanger, "Activated Dwarf #%u", new_tool->get_dwarf_nr());

active_dwarf = new_tool; // New tool is necessary for stepperE0.push()
stepperE0.push(); // Write current stepper settings
Expand Down Expand Up @@ -206,7 +206,7 @@ void PrusaToolChangerUtils::force_marlin_picked_tool(Dwarf *dwarf) {
if (dwarf == nullptr) {
active_extruder = MARLIN_NO_TOOL_PICKED;
} else {
active_extruder = dwarf->get_dwarf_nr() - 1;
active_extruder = dwarf->get_dwarf_nr();
}
}

Expand All @@ -228,7 +228,7 @@ float PrusaToolChangerUtils::get_mbl_z_lift_height() const {
uint8_t PrusaToolChangerUtils::detect_tool_nr() {
Dwarf *dwarf = picked_dwarf.load();
if (dwarf) {
return dwarf->get_dwarf_nr() - 1;
return dwarf->get_dwarf_nr();
} else {
return MARLIN_NO_TOOL_PICKED;
}
Expand Down Expand Up @@ -418,9 +418,8 @@ bool PrusaToolChangerUtils::load_tool_offsets_from_usb() {
}

const PrusaToolInfo &PrusaToolChangerUtils::get_tool_info(const Dwarf &dwarf, bool check_calibrated) const {
assert(dwarf.get_dwarf_nr() <= tool_info.size());
assert(dwarf.get_dwarf_nr() > 0);
const PrusaToolInfo &info = tool_info[dwarf.get_dwarf_nr() - 1];
assert(dwarf.get_dwarf_nr() < tool_info.size());
const PrusaToolInfo &info = tool_info[dwarf.get_dwarf_nr()];

if (check_calibrated && (std::isnan(info.dock_x) || std::isnan(info.dock_y) || info.dock_x == 0 || info.dock_y == 0)) {
toolchanger_error("Dock Position not calibrated");
Expand All @@ -441,10 +440,9 @@ bool PrusaToolChangerUtils::is_tool_info_valid(const Dwarf &dwarf, const PrusaTo
}

void PrusaToolChangerUtils::set_tool_info(const buddy::puppies::Dwarf &dwarf, const PrusaToolInfo &info) {
assert(dwarf.get_dwarf_nr() <= tool_info.size());
assert(dwarf.get_dwarf_nr() > 0);
assert(dwarf.get_dwarf_nr() < tool_info.size());

tool_info[dwarf.get_dwarf_nr() - 1] = info;
tool_info[dwarf.get_dwarf_nr()] = info;
}

void PrusaToolChangerUtils::toolchanger_error(const char *message) const {
Expand All @@ -465,7 +463,7 @@ void PrusaToolChangerUtils::expand_first_dock_position() {
}

PrusaToolInfo PrusaToolChangerUtils::compute_synthetic_tool_info(const Dwarf &dwarf) const {
return PrusaToolInfo({ .dock_x = DOCK_DEFAULT_FIRST_X_MM + DOCK_OFFSET_X_MM * (dwarf.get_dwarf_nr() - 1),
return PrusaToolInfo({ .dock_x = DOCK_DEFAULT_FIRST_X_MM + DOCK_OFFSET_X_MM * (dwarf.get_dwarf_nr()),
.dock_y = DOCK_DEFAULT_Y_MM });
}

Expand Down
8 changes: 4 additions & 4 deletions src/common/appmain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -252,12 +252,12 @@ static void filament_sensor_irq() {
}

// Main filament sensor
fs_process_sample(dwarf.get_tool_filament_sensor(), dwarf.get_dwarf_nr() - 1);
fs_process_sample(dwarf.get_tool_filament_sensor(), dwarf.get_dwarf_nr());

// Side filament sensor
auto mapping = side_fsensor_remap::get_mapping();
assert(static_cast<size_t>(dwarf.get_dwarf_nr() - 1) < std::size(mapping));
const uint8_t remapped = mapping[dwarf.get_dwarf_nr() - 1];
assert(static_cast<size_t>(dwarf.get_dwarf_nr()) < std::size(mapping));
const uint8_t remapped = mapping[dwarf.get_dwarf_nr()];
assert(remapped < HOTENDS);

/**
Expand Down Expand Up @@ -285,7 +285,7 @@ static void filament_sensor_irq() {
if (fs_raw_value == AdcGet::undefined_value) {
fs_raw_value = IFSensor::undefined_value;
}
side_fs_process_sample(fs_raw_value, dwarf.get_dwarf_nr() - 1);
side_fs_process_sample(fs_raw_value, dwarf.get_dwarf_nr());
}
cnt_filament_sensor_update = 0;
}
Expand Down

0 comments on commit 09d5b77

Please sign in to comment.