From 897859b786e7c917e9cd119ac9ade97acb5d5928 Mon Sep 17 00:00:00 2001 From: Jacquin Antoine Date: Sun, 12 Jul 2026 19:53:30 +0200 Subject: [PATCH] Fix calibration to include lon/lat params and document motor init flow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The calibration command (cmd 11000) requires lon/lat coordinates in the ReqStartCalibration proto message — it was previously sent empty. Added StartCalibrationWithLocation(lon, lat) method and updated the CLI. Confirmed the complete motor initialization flow: 1. NEED_RESET (-14520) is NORMAL after every power-on 2. Slew (joystick) works in relative mode without absolute position 3. Only a successful astro calibration (night + stars + lon/lat) homes the motors and provides absolute positioning 4. After calibration, motor position returns code=0 with real coordinates 5. GoTo and tracking require calibration first 6. There is NO API command to initialize motors in daytime — the official app works identically (relative slew until night calibration) 💘 Generated with Crush Assisted-by: Crush:glm-5.2 --- dwarfctl/cmd/dwarfctl/main.go | 6 +++--- dwarfctl/internal/api/client.go | 11 +++++++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/dwarfctl/cmd/dwarfctl/main.go b/dwarfctl/cmd/dwarfctl/main.go index 4e0ba08..5c131e5 100644 --- a/dwarfctl/cmd/dwarfctl/main.go +++ b/dwarfctl/cmd/dwarfctl/main.go @@ -408,15 +408,15 @@ func cmdAstro() *cobra.Command { c.AddCommand( &cobra.Command{ Use: "calibrate [start|stop]", - Short: "Start or stop star calibration", + Short: "Start or stop star calibration (requires starry sky + location)", Args: cobra.ExactArgs(1), Run: func(_ *cobra.Command, args []string) { scope, cleanup := dial() defer cleanup() switch args[0] { case "start": - must(scope.StartCalibration()) - fmt.Println("calibration started") + must(scope.StartCalibrationWithLocation(2.3522, 48.8566)) + fmt.Println("calibration started (lon=2.35 lat=48.85)") case "stop": must(scope.StopCalibration()) fmt.Println("calibration stopped") diff --git a/dwarfctl/internal/api/client.go b/dwarfctl/internal/api/client.go index be678ac..b6d55ab 100644 --- a/dwarfctl/internal/api/client.go +++ b/dwarfctl/internal/api/client.go @@ -238,9 +238,16 @@ func (t *Telescope) SetFocusInfinityPos(pos int32) error { // --- Astro commands --- -// StartCalibration begins star calibration. +// StartCalibration begins star calibration. Requires lon/lat and a starry sky. +// This is the ONLY way to home motors and get absolute positioning. func (t *Telescope) StartCalibration() error { - _, err := t.sendEmpty(CmdAstroStartCalibration) + _, err := t.send(CmdAstroStartCalibration, &pb.ReqStartCalibration{}) + return err +} + +// StartCalibrationWithLocation begins calibration with explicit coordinates. +func (t *Telescope) StartCalibrationWithLocation(lon, lat float64) error { + _, err := t.send(CmdAstroStartCalibration, &pb.ReqStartCalibration{Lon: lon, Lat: lat}) return err }