#pragma once /* AstroSib FORK MOUNT FM-700 CONTROL LIBRARY */ /* COMMON LIBRARY DEFINITIONS */ #include #include #include #include namespace asibfm700 { namespace details { struct movement_pars_t { // ******* common for all modes ******* // mean celestial rate static constexpr double sideralRate = 15.0410686_arcsecs; // in radians per second // timeout to telemetry updating std::chrono::milliseconds telemetryTimeout{3000}; // minimal time to prohibited zone (at current speed in slewing mode). if it is lesser then exit with error std::chrono::seconds minTimeToPZone{10}; // time interval to update prohibited zones related quantities (e.g. intersection points) std::chrono::milliseconds updatingPZoneInterval{5000}; // braking acceleration after execution of mount stopping command (in rads/s^2) // it must be given as non-negative value!!! double brakingAccelX{0.0}; double brakingAccelY{0.0}; // ******* slewing mode ******* bool slewAndStop{false}; // slew to target and stop mount // coordinates difference to stop slewing (in radians) double slewToleranceRadius{5.0_arcsecs}; // telemetry request interval std::chrono::milliseconds slewingTelemetryInterval{100}; // target-mount coordinate difference to start adjusting of slewing (in radians) double adjustCoordDiff{slewToleranceRadius * 10.0}; // slew process timeout std::chrono::seconds slewTimeout{3600}; double slewRateX{0.0}; // maximal slewing rate (0 means move with maximal allowed rate????!!!!!) double slewRateY{0.0}; // maximal slewing rate (0 means move with maximal allowed rate????!!!!!) std::chrono::milliseconds adjustCycleInterval{500}; // minimum time between two successive adjustments double adjustRateX{5.0_arcmins}; // maximal adjusting rate (a rate at the final slewing stage) double adjustRateY{5.0_arcmins}; // maximal adjusting rate (a rate at the final slewing stage) // slewing trajectory file. if empty - just skip saving std::string slewingPathFilename{}; // ******* tracking mode ******* // telemetry request interval std::chrono::milliseconds trackingTelemetryInterval{100}; double trackSpeedX{}; double trackSpeedY{}; std::chrono::milliseconds trackingCycleInterval{500}; // minimum time between two successive tracking corrections bool dualAxisTracking{true}; // mount must be of an equatorial type: false means guiding along only HA-axis // time shift into future to compute target position in future (UT1-scale time duration) std::chrono::milliseconds timeShiftToTargetPoint{10000}; // maximal target-to-mount difference for tracking process (in arcsecs) // it it is greater then the current mount coordinates are used as target one double trackingMaxCoordDiff{20.0}; // tracking trajectory file. if empty - just skip saving std::string trackingPathFilename{}; }; } // namespace details static constexpr mcc::MccMountType asibfm700MountType = mcc::MccMountType::FORK_TYPE; typedef mcc::ccte::erfa::MccCCTE_ERFA Asibfm700CCTE; typedef mcc::impl::MccDefaultPCM Asibfm700PCM; typedef mcc::impl::MccPZoneContainer Asibfm700PZoneContainer; typedef mcc::utils::MccSpdlogLogger Asibfm700Logger; } // namespace asibfm700