#include #include #include #include static std::random_device rd; static std::mt19937 gen(rd()); static std::uniform_int_distribution tm_distrib(100, 700); static std::uniform_real_distribution x_distrib(1000, 7000); static std::uniform_real_distribution y_distrib(1000, 7000); static std::uniform_real_distribution xs_distrib(100, 700); static std::uniform_real_distribution ys_distrib(100, 700); struct hw_t { static constexpr std::string_view hardwareName{"HW-TEST"}; typedef int error_t; enum class hardware_movement_state_t : int { HW_MOVE_ERROR = -1, HW_MOVE_STOPPED = 0, HW_MOVE_STOPPING, HW_MOVE_SLEWING, HW_MOVE_ADJUSTING, HW_MOVE_TRACKING, HW_MOVE_GUIDING }; struct hardware_state_t { mcc::impl::MccGenXY XY{1.0, 1.0}, speedXY{2.0, 2.0}; hardware_movement_state_t movementState{hardware_movement_state_t::HW_MOVE_STOPPED}; }; error_t hardwareSetState(hardware_state_t const&) { return 0; } error_t hardwareGetState(hardware_state_t* state) { auto ms = std::chrono::milliseconds(tm_distrib(gen)); std::cout << "\tgetState running " << ms << " ..."; std::this_thread::sleep_for(ms); std::cout << "\tdone!\n"; *state = hardware_state_t{.XY{x_distrib(gen), y_distrib(gen)}, .speedXY{xs_distrib(gen), ys_distrib(gen)}}; return 0; } error_t hardwareInit() { return 0; } }; static_assert(mcc::mcc_hardware_c, "!!!!!"); typedef mcc::impl::MccTelemetry t_t; int main() { hw_t hw; mcc::impl::MccMountDefaultForkPec pcm; t_t tlm(&hw, &pcm); typename t_t::telemetry_data_t tdata; for (int i = 0; i < 20; ++i) { std::cout << std::format("{}-th run\n", i + 1); auto err = tlm.telemetryData(&tdata); std::cout << "\tgot hw: XY = {" << tdata.hwState.XY.x() << ", " << tdata.hwState.XY.y() << "}; speedXY = {" << tdata.hwState.speedXY.x() << ", " << tdata.hwState.speedXY.y() << "}\n"; if (err) { std::cout << "ERR: " << err.message() << "\n"; } } return 0; }