diff --git a/src/core/Application.cpp b/src/core/Application.cpp index 88b0a27..2b5b9fa 100644 --- a/src/core/Application.cpp +++ b/src/core/Application.cpp @@ -1088,17 +1088,20 @@ struct Application::Impl { ~ClearHoming() { flag = false; } } clear_homing{homing_active_}; + // Tell the firmware where to anchor the homed midpoint and how much + // clearance to keep from each endstop, BEFORE homing: finishHoming() uses + // the centre count to re-origin, so a late send would apply to the next + // home, not this one. And before ENABLE: this also carries the drivetrain, + // and a board that has just lost its settings (power-up, fresh flash) + // refuses ENABLE with "ERR need config" until it has them. + sendAnchorConfig(); + motor->sendCommand("ENABLE Y"); // Only address axes this tower actually has. A yaw-only rig answers // "ERR axis not present" to every pitch command, which arrives in the log // as a row of warnings at every startup - noise that trains an operator to // ignore exactly the channel that reports real faults. if (cfg.hardware.hasAxis("pitch")) motor->sendCommand("ENABLE P"); - // Tell the firmware where to anchor the homed midpoint and how much - // clearance to keep from each endstop, BEFORE homing: finishHoming() uses - // the centre count to re-origin, so a late send would apply to the next - // home, not this one. - sendAnchorConfig(); // Confirm the current landed BEFORE driving into anything. This is the // only check standing between a stale firmware and an endstop that cannot