#ifndef FACT_HeadersLid #define FACT_HeadersLid namespace Lid { enum motor_stop_reason_t{ M_NO_REASON, M_OVERCURRENT, M_ZEROCURRENT, M_TIMEOUT, M_POSITION_REACHED, M_USER_INTERUPT, }; struct MotorReport { int8_t motor_id; int32_t duration_in_ms; motor_stop_reason_t stop_reason; std::vector current; std::vector position; }; void to_json(nlohmann::json& j, const MotorReport& r) { j = nlohmann::json{ {"motor_id", r.motor_id}, {"duration[ms]", r.duration_in_ms}, {"motor_stop_reason", { {"motor_stop_id", r.stop_reason} }}, {"current", r.current}, {"position", r.position} }; } void from_json(const nlohmann::json& j, MotorReport& r) { r.motor_id = j.at("motor_id"); r.duration_in_ms = j.at("duration[ms]"); r.stop_reason = j.at("motor_stop_reason").at("motor_stop_id"); r.current = j.at("current").get >(); r.position = j.at("position").get >(); } struct DimMotorReport { int32_t motor_id; int32_t duration_in_ms; int32_t stop_reason; int32_t current[100]; int32_t position[100]; DimMotorReport(const MotorReport& mr){ motor_id = mr.motor_id; duration_in_ms = mr.duration_in_ms; stop_reason = mr.stop_reason; // init with -1 for (size_t i=0; i<100; i++){ current[i] = -1; position[i] = -1; } for (size_t i=0; i