custom control protocol (starting)
This commit is contained in:
parent
e6fed727d2
commit
6e4e776ecf
@ -11,4 +11,5 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(COMM_PROTO_LIB_SRC comm_proto.h comm_proto.cpp)
|
||||
|
||||
set(COMM_PROTO_LIB comm_proto)
|
||||
add_library(${COMM_PROTO_LIB} STATIC ${COMM_PROTO_LIB_SRC})
|
||||
add_library(${COMM_PROTO_LIB} STATIC ${COMM_PROTO_LIB_SRC}
|
||||
control_proto.h)
|
||||
|
||||
75
cxx/control_proto.h
Normal file
75
cxx/control_proto.h
Normal file
@ -0,0 +1,75 @@
|
||||
#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
|
||||
Loading…
x
Reference in New Issue
Block a user