76 lines
2.9 KiB
C++
76 lines
2.9 KiB
C++
#pragma once
|
|
|
|
#include <functional>
|
|
#include <string_view>
|
|
|
|
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<void(std::string_view, std::vector<std::string_view>)> user_func_t;
|
|
|
|
ControlProtoParser() {}
|
|
|
|
template <std::convertible_to<user_func_t> FT>
|
|
bool addUserFunc(std::string_view command, FT&& func)
|
|
{
|
|
auto res = _userFunc.try_emplace(command, std::forward<FT>(func));
|
|
return res.second;
|
|
// _userFunc[command] = std::forward<FT>(func);
|
|
}
|
|
|
|
bool parse(std::string_view command);
|
|
bool exec(std::string_view command);
|
|
|
|
protected:
|
|
static std::unordered_map<std::string_view, user_func_t> _userFunc;
|
|
};
|
|
|
|
|
|
} // namespace BM700
|