diff --git a/include/mcc/mcc_concepts.h b/include/mcc/mcc_concepts.h index 4be6f51..879c7fb 100644 --- a/include/mcc/mcc_concepts.h +++ b/include/mcc/mcc_concepts.h @@ -505,8 +505,14 @@ template concept mcc_skypoint_c = std::derived_from && requires(const T t_const) { { t_const.epoch() } -> mcc_coord_epoch_c; - // currently stored coordinates pair + // currently stored coordinates pair kind { t_const.pairKind() } -> std::same_as; + + // currently stored co-longitude coordinate + { t_const.co_lon() } -> std::convertible_to; + + // currently stored co-latitude coordinate + { t_const.co_lat() } -> std::convertible_to; }; diff --git a/include/mcc/mcc_coordinate.h b/include/mcc/mcc_coordinate.h index d28ada7..c873aff 100644 --- a/include/mcc/mcc_coordinate.h +++ b/include/mcc/mcc_coordinate.h @@ -423,6 +423,17 @@ public: return _epoch; } + + double co_lon() const + { + return _x; + } + + double co_lat() const + { + return _y; + } + template MccGenericSkyPoint& from(const PT& coord_pair) { diff --git a/include/mcc/mcc_movement_controls.h b/include/mcc/mcc_movement_controls.h index d697442..6ec6fb3 100644 --- a/include/mcc/mcc_movement_controls.h +++ b/include/mcc/mcc_movement_controls.h @@ -271,7 +271,7 @@ protected: private: std::string _filename; - std::istringstream _st; + std::ostringstream _st; }; @@ -296,7 +296,7 @@ public: template MccSimpleMovementControls(HARDWARE_T* hardware, TELEMETRY_T* telemetry, @@ -376,14 +376,14 @@ public: static_assert(!std::is_null_pointer_v, "UNKNOWn MOUNT TYPE"); - mount_pos.setX(tdata.hwState.XY.x() + tdata.pcmCorrection.x + dx); - mount_pos.setY(tdata.hwState.XY.y() + tdata.pcmCorrection.y + dy); + mount_pos.setX((double)tdata.hwState.XY.x() + tdata.pcmCorrection.pcmX + dx); + mount_pos.setY((double)tdata.hwState.XY.y() + tdata.pcmCorrection.pcmY + dy); mount_pos.setEpoch(tdata.hwState.XY.epoch()); logger->logTrace(std::format(" mount: speedX = {}/s, speedY = {}/s", MccAngleFancyString(speedX), MccAngleFancyString(speedY))); - auto pz_err = pzone_cont->inPZone(mount_pos, &in_zone, &in_zone_vec); + auto pz_err = pzone_cont->inPZone(MccSkyPoint(mount_pos), &in_zone, &in_zone_vec); if (pz_err) { return mcc_deduced_err(pz_err, MccSimpleMovementControlsErrorCode::ERROR_PZONE_CONTAINER_COMP); } @@ -474,9 +474,11 @@ public: logger->logTrace(std::format(" current mount: {} = {}, {} = {}", x_str, coord_pair.x().sexagesimal(true), y_str, coord_pair.y().sexagesimal())); - _pathFile << tdata.mountPos.epoch().UTC.time_since_epoch().count() << " " << x_tag << " " << y_tag << " " + _pathFile << tdata.mountPos.epoch().UTC().time_since_epoch().count() << " " << x_tag << " " << y_tag << " " << x_mnt << " " << y_mnt << " " << (x_tag - x_mnt) << " " << (y_tag - y_mnt) << " " << (int)tdata.hwState.movementState << "\n"; + + return MccSimpleMovementControlsErrorCode::ERROR_OK; }; auto cb_sptr = @@ -597,8 +599,12 @@ public: (*cb_sptr)(STATUS_T::MOUNT_STATUS_SLEWING); - auto start_point = tdata.hwState.XY.epoch().UTC(); // needed for trajectory file - auto last_hw_time = start_point; + auto start_point = std::chrono::steady_clock::now(); + auto last_hw_time = tdata.hwState.XY.epoch().UTC(); + + std::conditional_t> + tag_cp, mnt_cp; while (!*_stopMoving) { t_err = telemetry->telemetryData(&tdata); @@ -645,8 +651,8 @@ public: last_hw_time = tdata.hwState.XY.epoch().UTC(); - auto dist = utils::distanceOnSphere(tdata.targetPos.x(), tdata.targetPos.y(), tdata.mountPos.x(), - tdata.mountPos.y()); + auto dist = utils::distanceOnSphere(tdata.targetPos.co_lon(), tdata.targetPos.co_lat(), + tdata.mountPos.co_lon(), tdata.mountPos.co_lat()); logger->logTrace(std::format(" target-to-mount distance: {} (dx = {}, dy = {})", MccAngleFancyString(std::get<2>(dist)), std::get<0>(dist), @@ -654,7 +660,7 @@ public: // stop slewing and exit from the cycle? - if (dist <= _currentParams.slewToleranceRadius) { + if (std::get<2>(dist) <= _currentParams.slewToleranceRadius) { if (tdata.hwState.movementState == HARDWARE_T::hardware_movement_state_t::HW_MOVE_STOPPED || tdata.hwState.movementState == HARDWARE_T::hardware_movement_state_t::HW_MOVE_GUIDING) { logger->logInfo("target-to-mount distance is lesser than slew acceptable radius - exit!"); @@ -705,8 +711,8 @@ public: return; } - auto dist = utils::distanceOnSphere(tdata.targetPos.x(), tdata.targetPos.y(), tdata.mountPos.x(), - tdata.mountPos.y()); + auto dist = utils::distanceOnSphere(tdata.targetPos.co_lon(), tdata.targetPos.co_lat(), + tdata.mountPos.co_lon(), tdata.mountPos.co_lat()); log_pos(tdata); diff --git a/include/mcc/mcc_netserver.h b/include/mcc/mcc_netserver.h index e11ecd3..f00a7f5 100644 --- a/include/mcc/mcc_netserver.h +++ b/include/mcc/mcc_netserver.h @@ -91,6 +91,8 @@ struct MccGenericMountNetworkServerErrorCategory : std::error_category { defaut: return "unknown"; }; + + return "unknown"; } static const MccGenericMountNetworkServerErrorCategory& get()