// SPDX-License-Identifier: LGPL-3.0-or-later // ST4-ESP32: ESP32 ST-4 autoguider port controller // Based on arduino-st4 by Kevin Ferrare #pragma once #include enum class ST4Direction : uint8_t { PLUS, MINUS, STOP }; enum class ST4AxisId : uint8_t { RA = 0, DECLINATION = 1 }; enum class ST4PinLogic : uint8_t { ACTIVE_HIGH, ACTIVE_LOW }; // Sidereal rate constants (from ASCOM ArduinoST4 Constants.cs) namespace ST4Constants { constexpr double DEGREES_PER_SECOND = 360.0 / (24.0 * 3600.0); constexpr double RA_PER_SECOND = 1.0 / 3600.0; // Default sidereal rate multipliers (from ASCOM Driver.cs) // RA+: 8x slew + 1x earth rotation = 9x // RA-: 8x slew - 1x earth rotation = 7x // DEC: symmetric 8x constexpr double DEFAULT_RA_RATE_PLUS = 9.0; constexpr double DEFAULT_RA_RATE_MINUS = 7.0; constexpr double DEFAULT_DEC_RATE_PLUS = 8.0; constexpr double DEFAULT_DEC_RATE_MINUS = 8.0; constexpr uint32_t DEFAULT_BAUD_RATE = 57600; constexpr uint16_t DEFAULT_WS_PORT = 81; constexpr uint16_t DEFAULT_HTTP_PORT = 80; constexpr char VERSION[] = "2026.02.17"; } struct ST4AxisState { bool active; ST4Direction direction; double position; }; struct ST4State { bool connected; ST4AxisState ra; ST4AxisState dec; }; struct ST4RateConfig { double raPlusMultiplier; double raMinusMultiplier; double decPlusMultiplier; double decMinusMultiplier; };