#pragma once #include #include namespace BM700 { /* CONTROL PROTOCOL DEFINITIONS */ // command: cmd-name[=arg1[,arg2[,...]]\n static constexpr std::string_view CONTROL_PROTO_STOP_SEQ = "\n"; static constexpr std::string_view CONTROL_PROTO_COMM_ARG_DELIM_SEQ = "="; static constexpr std::string_view CONTROL_PROTO_ARG_DELIM_SEQ = ","; /* CONTROL PROTOCOL COMMANDS */ // coordinates getter/setter static constexpr std::string_view CONTROL_PROTO_STR_TAG_AZ = "tagAZ"; static constexpr std::string_view CONTROL_PROTO_STR_TAG_ALT = "tagALT"; static constexpr std::string_view CONTROL_PROTO_STR_TAG_AZALT = "tagAZALT"; static constexpr std::string_view CONTROL_PROTO_STR_TAG_RA = "tagRA"; static constexpr std::string_view CONTROL_PROTO_STR_TAG_DEC = "tagDEC"; static constexpr std::string_view CONTROL_PROTO_STR_TAG_RADEC = "tagRADEC"; static constexpr std::string_view CONTROL_PROTO_STR_TEL_RA = "telRA"; static constexpr std::string_view CONTROL_PROTO_STR_TEL_DEC = "telDEC"; static constexpr std::string_view CONTROL_PROTO_STR_TEL_RADEC = "telRADEC"; // time/date static constexpr std::string_view CONTROL_PROTO_STR_UTC_DATE = "utcDate"; static constexpr std::string_view CONTROL_PROTO_STR_LOC_DATE = "locDate"; static constexpr std::string_view CONTROL_PROTO_STR_UTC_TIME = "utcTime"; static constexpr std::string_view CONTROL_PROTO_STR_LOC_TIME = "locTime"; static constexpr std::string_view CONTROL_PROTO_STR_UTC_DT = "utcDT"; // full date-time static constexpr std::string_view CONTROL_PROTO_STR_LOC_DT = "locDT"; // full date-time static constexpr std::string_view CONTROL_PROTO_STR_JDN = "julDN"; // Julian day number // target limits static constexpr std::string_view CONTROL_PROTO_STR_TAG_MINALT = "tagMINALT"; static constexpr std::string_view CONTROL_PROTO_STR_TAG_MAXALT = "tagMAXALT"; // moving static constexpr std::string_view CONTROL_PROTO_STR_SLEW_AZALT = "slewAZALT"; static constexpr std::string_view CONTROL_PROTO_STR_SLEW_RADEC = "slewRADEC"; static constexpr std::string_view CONTROL_PROTO_STR_SLEW_XVEL = "slewXVEL"; static constexpr std::string_view CONTROL_PROTO_STR_SLEW_YVEL = "slewYVEL"; static constexpr std::string_view CONTROL_PROTO_STR_TRACK_XVEL = "trackXVEL"; static constexpr std::string_view CONTROL_PROTO_STR_TRACK_YVEL = "trackYVEL"; static constexpr std::string_view CONTROL_PROTO_STR_STOP = "stop"; class ControlProtoParser { public: typedef std::function)> user_func_t; ControlProtoParser() {} template FT> bool addUserFunc(std::string_view command, FT&& func) { auto res = _userFunc.try_emplace(command, std::forward(func)); return res.second; // _userFunc[command] = std::forward(func); } bool parse(std::string_view command); bool exec(std::string_view command); protected: static std::unordered_map _userFunc; }; } // namespace BM700