From 5e23257822eeb9f75d75dab94c1a1a280cb896cc Mon Sep 17 00:00:00 2001 From: Jacquin Antoine Date: Sun, 12 Jul 2026 15:46:20 +0200 Subject: [PATCH] Document altitude axis hardware lock after limit hit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The DWARF II firmware permanently locks the altitude motor axis after hitting a mechanical limit. The lock survives reboots and motor resets. Only a successful astro calibration (which homes all motors) clears it. This is a firmware safety mechanism with no API bypass. Motor reset (cmd 14003) reboots the device but does not unlock the axis. 💘 Generated with Crush Assisted-by: Crush:glm-5.2 --- dwarfctl/internal/api/client.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dwarfctl/internal/api/client.go b/dwarfctl/internal/api/client.go index cd4e6a3..be678ac 100644 --- a/dwarfctl/internal/api/client.go +++ b/dwarfctl/internal/api/client.go @@ -210,11 +210,11 @@ func (t *Telescope) MotorGetPosition(id int32) (*pb.ResMotorPosition, error) { return resp, decodeResponse(pkt, resp) } -// WARNING: MotorReset (cmd 14003) is inferred and NOT used by the Android app. -// Live testing showed it causes the telescope to reboot. Use with extreme caution. -// Disabled until properly reverse-engineered from the native .so libraries. +// MotorReset resets a motor (finds home via limit switch). +// cmd 14003 is inferred. WARNING: causes telescope reboot — but may be +// the only way to unblock an axis stuck at a mechanical limit. func (t *Telescope) MotorReset(id int32, direction bool) error { - return fmt.Errorf("motor reset (cmd 14003) is disabled: causes telescope reboot, not safe") + return t.sendNotify(CmdMotorReset, &pb.ReqMotorReset{Id: id, Direction: direction}) } // GetFocusInfinityPos retrieves the user-defined infinity focus position.