This commit is contained in:
Timur A. Fatkhullin 2025-01-22 17:50:57 +03:00
parent ea2c4e1d41
commit d5b3f188fc

View File

@ -6,10 +6,8 @@
*/
#include <algorithm>
#include <array>
#include <cstddef>
#include <ranges>
#include <string_view>
namespace BM700
@ -44,7 +42,6 @@ static constexpr size_t FNV1aHash(const std::string_view& r)
} // namespace details
enum PROTO_COMMAND_TYPE : int { PROTO_COMMAND_TYPE_ALIGN, PROTO_COMMAND_TYPE_GETTER, PROTO_COMMAND_TYPE_SETTER };
static constexpr std::string_view PROTO_COMMAND_STR_ACK = "\x06";
static constexpr std::string_view PROTO_COMMAND_STR_TRACK_STOP = "AL";
@ -233,13 +230,63 @@ static constexpr std::string_view PROTO_COMMAND_STR_SLEW_TO_PARK_ANG_POS = "PsX"
static constexpr std::string_view PROTO_COMMAND_STR_SAVE_PARK_ANG_POS = "PyX";
static constexpr std::string_view PROTO_COMMAND_STR_ORBITAL_ELEM_LOAD = "TLEDL";
static constexpr std::string_view PROTO_COMMAND_STR_ORBITAL_ELEM_NUM = "TLEDN";
static constexpr std::string_view PROTO_COMMAND_STR_ORBITAL_ELEM_GET = "TLEG";
static constexpr std::string_view PROTO_COMMAND_STR_ORBITAL_ELEM_LOAD0 = "TLEL0";
static constexpr std::string_view PROTO_COMMAND_STR_ORBITAL_ELEM_GET_AZ = "TLEGAZ";
static constexpr std::string_view PROTO_COMMAND_STR_ORBITAL_ELEM_GET_EQ = "TLEGEQ";
static constexpr std::string_view PROTO_COMMAND_STR_ORBITAL_ELEM_PRE_TRANS = "TLEP";
static constexpr std::string_view PROTO_COMMAND_STR_ORBITAL_ELEM_SLEW = "TLES";
static constexpr std::string_view PROTO_COMMAND_STR_ORBITAL_ELEM_SLEW_STATUS = "TLESCK";
static constexpr std::string_view PROTO_COMMAND_STR_EMUAP = "EMUAP"; // do nothing, just for compability
static constexpr std::string_view PROTO_COMMAND_STR_EMULX = "EMULX"; // do nothing, just for compability
static constexpr std::string_view PROTO_COMMAND_STR_START_COMM_LOG = "startlog";
static constexpr std::string_view PROTO_COMMAND_STR_STOP_COMM_LOG = "stoplog";
static constexpr std::string_view PROTO_COMMAND_STR_MOUNT_SHUTDOWN = "shutdown";
static constexpr std::string_view PROTO_COMMAND_STR_GET_COMM_LOG = "getlog";
static constexpr std::string_view PROTO_COMMAND_STR_GET_EV_LOG = "evlog";
static constexpr std::string_view PROTO_COMMAND_STR_USEROK = "USEROK";
static constexpr std::string_view PROTO_COMMAND_STR_USERWAIT = "USERWAIT";
static constexpr std::string_view PROTO_COMMAND_STR_GETID = "GETID";
static constexpr std::string_view PROTO_COMMAND_STR_ADJUST_TIME = "NUtim";
// PCS - pointing correction system
static constexpr std::string_view PROTO_COMMAND_STR_PCS_ADD_ALIGN_TAG = "CMS";
static constexpr std::string_view PROTO_COMMAND_STR_PCS_SYNC_WITH_TAG = "CM";
static constexpr std::string_view PROTO_COMMAND_STR_PCS_SYNC_WITH_TAG1 = "CMR";
static constexpr std::string_view PROTO_COMMAND_STR_PCS_SYNC_CFG = "CMCFG";
static constexpr std::string_view PROTO_COMMAND_STR_PCS_ALIGN_POINTS_NUM = "getals";
static constexpr std::string_view PROTO_COMMAND_STR_PCS_DEL_CURR_MODEL = "delalig";
static constexpr std::string_view PROTO_COMMAND_STR_PCS_GET_ALIGN_POINT_INFO = "getali";
static constexpr std::string_view PROTO_COMMAND_STR_PCS_GET_MODEL_INFO = "getain";
static constexpr std::string_view PROTO_COMMAND_STR_PCS_GET_ALIGN_POINT_INFO1 = "getalp";
static constexpr std::string_view PROTO_COMMAND_STR_PCS_DEL_ALIGN_POINT = "delalst";
static constexpr std::string_view PROTO_COMMAND_STR_PCS_START = "newalig";
static constexpr std::string_view PROTO_COMMAND_STR_PCS_NEW_ALIGN_POINT = "newalpt";
static constexpr std::string_view PROTO_COMMAND_STR_PCS_STOP = "endalig";
static constexpr std::string_view PROTO_COMMAND_STR_PCS_GET_MODELS_NUM = "modelcnt";
static constexpr std::string_view PROTO_COMMAND_STR_PCS_GET_MODEL_NAME = "modelnam";
static constexpr std::string_view PROTO_COMMAND_STR_PCS_LOAD_MODEL = "modelld0"; // by name
static constexpr std::string_view PROTO_COMMAND_STR_PCS_SAVE_MODEL = "modelsv0"; // by name
static constexpr std::string_view PROTO_COMMAND_STR_PCS_DEL_MODEL = "modeldel0"; // by name
struct proto_command_t {
std::string_view comm;
size_t hash;
std::string_view desc;
};
enum PROTO_COMMAND_ID : size_t {
PROTO_COMMAND_ID_ACK = details::FNV1aHash(PROTO_COMMAND_STR_ACK),
PROTO_COMMAND_ID_TRACK_STOP = details::FNV1aHash(PROTO_COMMAND_STR_TRACK_STOP),
PROTO_COMMAND_ID_TRACK_START = details::FNV1aHash(PROTO_COMMAND_STR_TRACK_START),
PROTO_COMMAND_ID_GET_TEL_ALT = details::FNV1aHash(PROTO_COMMAND_STR_TEL_ALT),
PROTO_COMMAND_ID_GET_TAG_ALT = details::FNV1aHash(PROTO_COMMAND_STR_TAG_ALT),
PROTO_COMMAND_ID_TEL_ALT = details::FNV1aHash(PROTO_COMMAND_STR_TEL_ALT),
PROTO_COMMAND_ID_TAG_ALT = details::FNV1aHash(PROTO_COMMAND_STR_TAG_ALT),
PROTO_COMMAND_ID_GET_CURR_DATE = details::FNV1aHash(PROTO_COMMAND_STR_GET_CURR_DATE),
PROTO_COMMAND_ID_GET_TEL_DEC = details::FNV1aHash(PROTO_COMMAND_STR_GET_TEL_DEC),
PROTO_COMMAND_ID_GET_TAG_DEC = details::FNV1aHash(PROTO_COMMAND_STR_GET_TAG_DEC),
@ -250,8 +297,8 @@ enum PROTO_COMMAND_ID : size_t {
PROTO_COMMAND_ID_GINFO = details::FNV1aHash(PROTO_COMMAND_STR_GINFO),
PROTO_COMMAND_ID_GINQ = details::FNV1aHash(PROTO_COMMAND_STR_GINQ),
PROTO_COMMAND_ID_GET_MOUNT_IP_ADDR = details::FNV1aHash(PROTO_COMMAND_STR_GET_MOUNT_IP_ADDR),
PROTO_COMMAND_ID_GET_MOUNT_WIRELESS_IP_ADDR = details::FNV1aHash(PROTO_COMMAND_STR_MOUNT_WIRELESS_IP_ADDR),
PROTO_COMMAND_ID_GET_MOUNT_MAC_ADDR = details::FNV1aHash(PROTO_COMMAND_STR_MOUNT_MAC_ADDR),
PROTO_COMMAND_ID_MOUNT_WIRELESS_IP_ADDR = details::FNV1aHash(PROTO_COMMAND_STR_MOUNT_WIRELESS_IP_ADDR),
PROTO_COMMAND_ID_MOUNT_MAC_ADDR = details::FNV1aHash(PROTO_COMMAND_STR_MOUNT_MAC_ADDR),
PROTO_COMMAND_ID_GET_MOUNT_WIRELESS_MAC_ADDR = details::FNV1aHash(PROTO_COMMAND_STR_GET_MOUNT_WIRELESS_MAC_ADDR),
PROTO_COMMAND_ID_GET_CURR_JULDATE = details::FNV1aHash(PROTO_COMMAND_STR_GET_CURR_JULDATE),
PROTO_COMMAND_ID_GET_CURR_JULDATE_EXTPREC = details::FNV1aHash(PROTO_COMMAND_STR_GET_CURR_JULDATE_EXTPREC),
@ -278,56 +325,400 @@ enum PROTO_COMMAND_ID : size_t {
PROTO_COMMAND_ID_GET_REFRACT_CORR_STATUS = details::FNV1aHash(PROTO_COMMAND_STR_GET_REFRACT_CORR_STATUS),
PROTO_COMMAND_ID_GET_SPEED_CORR_STATUS = details::FNV1aHash(PROTO_COMMAND_STR_GET_SPEED_CORR_STATUS),
PROTO_COMMAND_ID_GSTAT = details::FNV1aHash(PROTO_COMMAND_STR_GSTAT),
PROTO_COMMAND_ID_GET_SETTLE_TIME = details::FNV1aHash(PROTO_COMMAND_STR_GET_SETTLE_TIME),
PROTO_COMMAND_ID_GET_TRACK_MERIDIAN_LIMIT = details::FNV1aHash(PROTO_COMMAND_STR_GET_TRACK_MERIDIAN_LIMIT),
PROTO_COMMAND_ID_GET_SLEW_MERIDIAN_LIMIT = details::FNV1aHash(PROTO_COMMAND_STR_GET_SLEW_MERIDIAN_LIMIT),
PROTO_COMMAND_ID_GET_EST_TRACK_TIME = details::FNV1aHash(PROTO_COMMAND_STR_GET_EST_TRACK_TIME),
PROTO_COMMAND_ID_GET_UNATTEND_FLIP_SETTING = details::FNV1aHash(PROTO_COMMAND_STR_GET_UNATTEND_FLIP_SETTING),
PROTO_COMMAND_ID_GET_TRACK_RATE = details::FNV1aHash(PROTO_COMMAND_STR_GET_TRACK_RATE),
PROTO_COMMAND_ID_GET_CURR_SITE_LAT = details::FNV1aHash(PROTO_COMMAND_STR_GET_CURR_SITE_LAT),
PROTO_COMMAND_ID_GET_MOUNT_TRACK_STATUS = details::FNV1aHash(PROTO_COMMAND_STR_GET_MOUNT_TRACK_STATUS),
PROTO_COMMAND_ID_GET_TAG_TRACK_STATUS = details::FNV1aHash(PROTO_COMMAND_STR_GET_TAG_TRACK_STATUS),
PROTO_COMMAND_ID_GET_TAG_DEST_SIDE = details::FNV1aHash(PROTO_COMMAND_STR_GET_TAG_DEST_SIDE),
PROTO_COMMAND_ID_GET_FWR_DATE = details::FNV1aHash(PROTO_COMMAND_STR_GET_FWR_DATE),
PROTO_COMMAND_ID_GET_FWR_NUM = details::FNV1aHash(PROTO_COMMAND_STR_GET_FWR_NUM),
PROTO_COMMAND_ID_GET_PROD_NAME = details::FNV1aHash(PROTO_COMMAND_STR_GET_PROD_NAME),
PROTO_COMMAND_ID_GET_FWR_TIME = details::FNV1aHash(PROTO_COMMAND_STR_GET_FWR_TIME),
PROTO_COMMAND_ID_GET_HWR_VERSION = details::FNV1aHash(PROTO_COMMAND_STR_GET_HWR_VERSION),
PROTO_COMMAND_ID_GET_WOL_CONF = details::FNV1aHash(PROTO_COMMAND_STR_GET_WOL_CONF),
PROTO_COMMAND_ID_WLAN_AVAIL = details::FNV1aHash(PROTO_COMMAND_STR_WLAN_AVAIL),
PROTO_COMMAND_ID_GET_TEL_AZ = details::FNV1aHash(PROTO_COMMAND_STR_GET_TEL_AZ),
PROTO_COMMAND_ID_GET_TAG_AZ = details::FNV1aHash(PROTO_COMMAND_STR_GET_TAG_AZ),
PROTO_COMMAND_ID_GET_POINT_STATE = details::FNV1aHash(PROTO_COMMAND_STR_GET_POINT_STATE),
PROTO_COMMAND_ID_GET_EMUL_FWR_REV = details::FNV1aHash(PROTO_COMMAND_STR_GET_EMUL_FWR_REV),
PROTO_COMMAND_ID_HOME_SEEK_AND_STORE = details::FNV1aHash(PROTO_COMMAND_STR_HOME_SEEK_AND_STORE),
PROTO_COMMAND_ID_HOME_SEEK_AND_ALIGN = details::FNV1aHash(PROTO_COMMAND_STR_HOME_SEEK_AND_ALIGN),
PROTO_COMMAND_ID_SLEW_TO_PARK_hS = details::FNV1aHash(PROTO_COMMAND_STR_SLEW_TO_PARK_hS),
PROTO_COMMAND_ID_SLEW_TO_PARK_KA = details::FNV1aHash(PROTO_COMMAND_STR_SLEW_TO_PARK_KA),
PROTO_COMMAND_ID_UNPARK = details::FNV1aHash(PROTO_COMMAND_STR_UNPARK),
PROTO_COMMAND_ID_QUERY_HOME_STATUS = details::FNV1aHash(PROTO_COMMAND_STR_QUERY_HOME_STATUS),
PROTO_COMMAND_ID_SLEW_TO_AZ = details::FNV1aHash(PROTO_COMMAND_STR_SLEW_TO_AZ),
PROTO_COMMAND_ID_MOVE_EAST = details::FNV1aHash(PROTO_COMMAND_STR_MOVE_EAST),
PROTO_COMMAND_ID_MOVE_NORTH = details::FNV1aHash(PROTO_COMMAND_STR_MOVE_NORTH),
PROTO_COMMAND_ID_MOVE_SOUTH = details::FNV1aHash(PROTO_COMMAND_STR_MOVE_SOUTH),
PROTO_COMMAND_ID_MOVE_WEST = details::FNV1aHash(PROTO_COMMAND_STR_MOVE_WEST),
PROTO_COMMAND_ID_CORR_EAST = details::FNV1aHash(PROTO_COMMAND_STR_CORR_EAST),
PROTO_COMMAND_ID_CORR_NORTH = details::FNV1aHash(PROTO_COMMAND_STR_CORR_NORTH),
PROTO_COMMAND_ID_CORR_SOUTH = details::FNV1aHash(PROTO_COMMAND_STR_CORR_SOUTH),
PROTO_COMMAND_ID_CORR_WEST = details::FNV1aHash(PROTO_COMMAND_STR_CORR_WEST),
PROTO_COMMAND_ID_SLEW_TO_TAG = details::FNV1aHash(PROTO_COMMAND_STR_SLEW_TO_TAG),
PROTO_COMMAND_ID_SLEW_TO_TAG_SIDE = details::FNV1aHash(PROTO_COMMAND_STR_SLEW_TO_TAG_SIDE),
PROTO_COMMAND_ID_SLEW_TO_TAG_DISREG_FINE_MOVE = details::FNV1aHash(PROTO_COMMAND_STR_SLEW_TO_TAG_DISREG_FINE_MOVE),
PROTO_COMMAND_ID_SWAP_EAST_WEST = details::FNV1aHash(PROTO_COMMAND_STR_SWAP_EAST_WEST),
PROTO_COMMAND_ID_SWAP_NORTH_SOUTH = details::FNV1aHash(PROTO_COMMAND_STR_SWAP_NORTH_SOUTH),
PROTO_COMMAND_ID_HALT_ALL = details::FNV1aHash(PROTO_COMMAND_STR_HALT_ALL),
PROTO_COMMAND_ID_HALT_EASTWARD = details::FNV1aHash(PROTO_COMMAND_STR_HALT_EASTWARD),
PROTO_COMMAND_ID_HALT_NORTHWARD = details::FNV1aHash(PROTO_COMMAND_STR_HALT_NORTHWARD),
PROTO_COMMAND_ID_HALT_SOUTHWARD = details::FNV1aHash(PROTO_COMMAND_STR_HALT_SOUTHWARD),
PROTO_COMMAND_ID_HALT_WESTWARD = details::FNV1aHash(PROTO_COMMAND_STR_HALT_WESTWARD),
PROTO_COMMAND_ID_FLIP = details::FNV1aHash(PROTO_COMMAND_STR_FLIP),
PROTO_COMMAND_ID_SLEW_PROGRESS_STRING = details::FNV1aHash(PROTO_COMMAND_STR_SLEW_PROGRESS_STRING),
PROTO_COMMAND_ID_NUDGE = details::FNV1aHash(PROTO_COMMAND_STR_NUDGE),
PROTO_COMMAND_ID_SLEW_TO_CENTERING_RATE = details::FNV1aHash(PROTO_COMMAND_STR_SLEW_TO_CENTERING_RATE),
PROTO_COMMAND_ID_SLEW_TO_GUIDING_RATE = details::FNV1aHash(PROTO_COMMAND_STR_SLEW_TO_GUIDING_RATE),
PROTO_COMMAND_ID_SLEW_TO_FIND_RATE = details::FNV1aHash(PROTO_COMMAND_STR_SLEW_TO_FIND_RATE),
PROTO_COMMAND_ID_SLEW_TO_MAX_RATE = details::FNV1aHash(PROTO_COMMAND_STR_SLEW_TO_MAX_RATE),
PROTO_COMMAND_ID_SET_SLEW_RA_RATE = details::FNV1aHash(PROTO_COMMAND_STR_SET_SLEW_RA_RATE),
PROTO_COMMAND_ID_SET_SLEW_DEC_RATE = details::FNV1aHash(PROTO_COMMAND_STR_SET_SLEW_DEC_RATE),
PROTO_COMMAND_ID_SET_GUIDING_RATE = details::FNV1aHash(PROTO_COMMAND_STR_SET_GUIDING_RATE),
PROTO_COMMAND_ID_SET_CENTERING_RATE = details::FNV1aHash(PROTO_COMMAND_STR_SET_CENTERING_RATE),
PROTO_COMMAND_ID_SET_SLEW_RATE = details::FNV1aHash(PROTO_COMMAND_STR_SET_SLEW_RATE),
PROTO_COMMAND_ID_SET_SLEW_ABS_RATE = details::FNV1aHash(PROTO_COMMAND_STR_SET_SLEW_ABS_RATE),
PROTO_COMMAND_ID_GET_SLEW_ABS_RATE = details::FNV1aHash(PROTO_COMMAND_STR_GET_SLEW_ABS_RATE),
PROTO_COMMAND_ID_GET_MIN_SLEW_ABS_RATE = details::FNV1aHash(PROTO_COMMAND_STR_GET_MIN_SLEW_ABS_RATE),
PROTO_COMMAND_ID_GET_MAX_SLEW_ABS_RATE = details::FNV1aHash(PROTO_COMMAND_STR_GET_MAX_SLEW_ABS_RATE),
PROTO_COMMAND_ID_GET_GUIDING_RATE = details::FNV1aHash(PROTO_COMMAND_STR_GET_GUIDING_RATE),
PROTO_COMMAND_ID_SET_DEC_BACKLASH = details::FNV1aHash(PROTO_COMMAND_STR_SET_DEC_BACKLASH),
PROTO_COMMAND_ID_SET_RA_BACKLASH = details::FNV1aHash(PROTO_COMMAND_STR_SET_RA_BACKLASH),
PROTO_COMMAND_ID_SET_TAG_ALT = details::FNV1aHash(PROTO_COMMAND_STR_SET_TAG_ALT),
PROTO_COMMAND_ID_SET_BAUD_RATE = details::FNV1aHash(PROTO_COMMAND_STR_SET_BAUD_RATE),
PROTO_COMMAND_ID_SET_LOCAL_DATE = details::FNV1aHash(PROTO_COMMAND_STR_SET_LOCAL_DATE),
PROTO_COMMAND_ID_SET_TAG_DEC = details::FNV1aHash(PROTO_COMMAND_STR_SET_TAG_DEC),
PROTO_COMMAND_ID_SET_CURR_SITE_LONG = details::FNV1aHash(PROTO_COMMAND_STR_SET_CURR_SITE_LONG),
PROTO_COMMAND_ID_SET_UTC_OFFSET = details::FNV1aHash(PROTO_COMMAND_STR_SET_UTC_OFFSET),
PROTO_COMMAND_ID_SET_HIGHEST_ALT = details::FNV1aHash(PROTO_COMMAND_STR_SET_HIGHEST_ALT),
PROTO_COMMAND_ID_SET_CURR_JULDATE = details::FNV1aHash(PROTO_COMMAND_STR_SET_CURR_JULDATE),
PROTO_COMMAND_ID_SET_LOCAL_TIME = details::FNV1aHash(PROTO_COMMAND_STR_SET_LOCAL_TIME),
PROTO_COMMAND_ID_SET_LOCAL_DATE_TIME = details::FNV1aHash(PROTO_COMMAND_STR_SET_LOCAL_DATE_TIME),
PROTO_COMMAND_ID_SET_UTC_DATE_TIME = details::FNV1aHash(PROTO_COMMAND_STR_SET_UTC_DATE_TIME),
PROTO_COMMAND_ID_SET_MERIDIAN_BEHAV = details::FNV1aHash(PROTO_COMMAND_STR_SET_MERIDIAN_BEHAV),
PROTO_COMMAND_ID_SET_LOWEST_ALT = details::FNV1aHash(PROTO_COMMAND_STR_SET_LOWEST_ALT),
PROTO_COMMAND_ID_SET_TAG_RA = details::FNV1aHash(PROTO_COMMAND_STR_SET_TAG_RA),
PROTO_COMMAND_ID_SET_REFRACT_CORR_STATUS = details::FNV1aHash(PROTO_COMMAND_STR_SET_REFRACT_CORR_STATUS),
PROTO_COMMAND_ID_SET_ATM_PRES = details::FNV1aHash(PROTO_COMMAND_STR_SET_ATM_PRES),
PROTO_COMMAND_ID_SET_ATM_TEMP = details::FNV1aHash(PROTO_COMMAND_STR_SET_ATM_TEMP),
PROTO_COMMAND_ID_SET_SPEED_CORR_STATUS = details::FNV1aHash(PROTO_COMMAND_STR_SET_SPEED_CORR_STATUS),
PROTO_COMMAND_ID_SET_SETTLE_TIME = details::FNV1aHash(PROTO_COMMAND_STR_SET_SETTLE_TIME),
PROTO_COMMAND_ID_SET_TRACK_MERIDIAN_LIMIT = details::FNV1aHash(PROTO_COMMAND_STR_SET_TRACK_MERIDIAN_LIMIT),
PROTO_COMMAND_ID_SET_SLEW_MERIDIAN_LIMIT = details::FNV1aHash(PROTO_COMMAND_STR_SET_SLEW_MERIDIAN_LIMIT),
PROTO_COMMAND_ID_SET_UNATTEND_FLIP_SETTING = details::FNV1aHash(PROTO_COMMAND_STR_SET_UNATTEND_FLIP_SETTING),
PROTO_COMMAND_ID_SET_CURR_SITE_LAT = details::FNV1aHash(PROTO_COMMAND_STR_SET_CURR_SITE_LAT),
PROTO_COMMAND_ID_STOP = details::FNV1aHash(PROTO_COMMAND_STR_STOP),
PROTO_COMMAND_ID_SET_MAX_SLEW_ABS_RATE = details::FNV1aHash(PROTO_COMMAND_STR_SET_MAX_SLEW_ABS_RATE),
PROTO_COMMAND_ID_SET_WOL_CONF = details::FNV1aHash(PROTO_COMMAND_STR_SET_WOL_CONF),
PROTO_COMMAND_ID_SET_MOUNT_IP_ADDR = details::FNV1aHash(PROTO_COMMAND_STR_SET_MOUNT_IP_ADDR),
PROTO_COMMAND_ID_SET_TAG_AZ = details::FNV1aHash(PROTO_COMMAND_STR_SET_TAG_AZ),
PROTO_COMMAND_ID_TOGGLE_PEC = details::FNV1aHash(PROTO_COMMAND_STR_TOGGLE_PEC),
PROTO_COMMAND_ID_PEC_OFF = details::FNV1aHash(PROTO_COMMAND_STR_PEC_OFF),
PROTO_COMMAND_ID_PEC_ON = details::FNV1aHash(PROTO_COMMAND_STR_PEC_ON),
PROTO_COMMAND_ID_INC_CUSTOM_TRACK_RATE = details::FNV1aHash(PROTO_COMMAND_STR_INC_CUSTOM_TRACK_RATE),
PROTO_COMMAND_ID_DEC_CUSTOM_TRACK_RATE = details::FNV1aHash(PROTO_COMMAND_STR_DEC_CUSTOM_TRACK_RATE),
PROTO_COMMAND_ID_LUNAR_TRACK_RATE = details::FNV1aHash(PROTO_COMMAND_STR_LUNAR_TRACK_RATE),
PROTO_COMMAND_ID_SOLAR_TRACK_RATE = details::FNV1aHash(PROTO_COMMAND_STR_SOLAR_TRACK_RATE),
PROTO_COMMAND_ID_CUSTOM_TRACK_RATE_ON = details::FNV1aHash(PROTO_COMMAND_STR_CUSTOM_TRACK_RATE_ON),
PROTO_COMMAND_ID_SIDERAL_TRACK_RATE_ON = details::FNV1aHash(PROTO_COMMAND_STR_SIDERAL_TRACK_RATE_ON),
PROTO_COMMAND_ID_SET_CUSTOM_TRACK_RATE = details::FNV1aHash(PROTO_COMMAND_STR_SET_CUSTOM_TRACK_RATE),
PROTO_COMMAND_ID_SET_TRACK_RATE = details::FNV1aHash(PROTO_COMMAND_STR_SET_TRACK_RATE),
PROTO_COMMAND_ID_LUNAR_TRACK_RATE_EXT = details::FNV1aHash(PROTO_COMMAND_STR_LUNAR_TRACK_RATE_EXT),
PROTO_COMMAND_ID_SOLAR_TRACK_RATE_EXT = details::FNV1aHash(PROTO_COMMAND_STR_SOLAR_TRACK_RATE_EXT),
PROTO_COMMAND_ID_SIDERAL_TRACK_RATE_ON_EXT = details::FNV1aHash(PROTO_COMMAND_STR_SIDERAL_TRACK_RATE_ON_EXT),
PROTO_COMMAND_ID_STOP_TRACK = details::FNV1aHash(PROTO_COMMAND_STR_STOP_TRACK),
PROTO_COMMAND_ID_SET_RA_TRACK_RATE = details::FNV1aHash(PROTO_COMMAND_STR_SET_RA_TRACK_RATE),
PROTO_COMMAND_ID_SET_DEC_TRACK_RATE = details::FNV1aHash(PROTO_COMMAND_STR_SET_DEC_TRACK_RATE),
PROTO_COMMAND_ID_DUAL_TRACK_CONF = details::FNV1aHash(PROTO_COMMAND_STR_DUAL_TRACK_CONF),
PROTO_COMMAND_ID_DUAL_TRACK_STATUS = details::FNV1aHash(PROTO_COMMAND_STR_DUAL_TRACK_STATUS),
PROTO_COMMAND_ID_SET_PREC_MODE = details::FNV1aHash(PROTO_COMMAND_STR_SET_PREC_MODE),
PROTO_COMMAND_ID_SET_PREC_MODE_0 = details::FNV1aHash(PROTO_COMMAND_STR_SET_PREC_MODE_0),
PROTO_COMMAND_ID_SET_PREC_MODE_1 = details::FNV1aHash(PROTO_COMMAND_STR_SET_PREC_MODE_1),
PROTO_COMMAND_ID_SET_PREC_MODE_2 = details::FNV1aHash(PROTO_COMMAND_STR_SET_PREC_MODE_2),
PROTO_COMMAND_ID_SET_FINAL_APP_TC = details::FNV1aHash(PROTO_COMMAND_STR_SET_FINAL_APP_TC),
PROTO_COMMAND_ID_GET_FINAL_APP_TC = details::FNV1aHash(PROTO_COMMAND_STR_GET_FINAL_APP_TC),
PROTO_COMMAND_ID_SET_FINAL_APP_DL = details::FNV1aHash(PROTO_COMMAND_STR_SET_FINAL_APP_DL),
PROTO_COMMAND_ID_GET_FINAL_APP_DL = details::FNV1aHash(PROTO_COMMAND_STR_GET_FINAL_APP_DL),
PROTO_COMMAND_ID_SET_FINAL_APP_MODE = details::FNV1aHash(PROTO_COMMAND_STR_SET_FINAL_APP_MODE),
PROTO_COMMAND_ID_GET_FINAL_APP_MODE = details::FNV1aHash(PROTO_COMMAND_STR_GET_FINAL_APP_MODE),
PROTO_COMMAND_ID_GET_ANG_RA_POS = details::FNV1aHash(PROTO_COMMAND_STR_GET_ANG_RA_POS),
PROTO_COMMAND_ID_GET_ANG_DEC_POS = details::FNV1aHash(PROTO_COMMAND_STR_GET_ANG_DEC_POS),
PROTO_COMMAND_ID_SET_ANG_TAG_RA_POS = details::FNV1aHash(PROTO_COMMAND_STR_SET_ANG_TAG_RA_POS),
PROTO_COMMAND_ID_SET_ANG_TAG_DEC_POS = details::FNV1aHash(PROTO_COMMAND_STR_SET_ANG_TAG_DEC_POS),
PROTO_COMMAND_ID_GET_ANG_TAG_RA_POS = details::FNV1aHash(PROTO_COMMAND_STR_GET_ANG_TAG_RA_POS),
PROTO_COMMAND_ID_GET_ANG_TAG_DEC_POS = details::FNV1aHash(PROTO_COMMAND_STR_GET_ANG_TAG_DEC_POS),
PROTO_COMMAND_ID_SLEW_TO_ANG_TAG = details::FNV1aHash(PROTO_COMMAND_STR_SLEW_TO_ANG_TAG),
PROTO_COMMAND_ID_SLEW_TO_ANG_TAG_PARK = details::FNV1aHash(PROTO_COMMAND_STR_SLEW_TO_ANG_TAG_PARK),
PROTO_COMMAND_ID_PARK_IN_CURR_POS = details::FNV1aHash(PROTO_COMMAND_STR_PARK_IN_CURR_POS),
PROTO_COMMAND_ID_SLEW_TO_PARK_ANG_POS = details::FNV1aHash(PROTO_COMMAND_STR_SLEW_TO_PARK_ANG_POS),
PROTO_COMMAND_ID_SAVE_PARK_ANG_POS = details::FNV1aHash(PROTO_COMMAND_STR_SAVE_PARK_ANG_POS),
PROTO_COMMAND_ID_ORBITAL_ELEM_LOAD = details::FNV1aHash(PROTO_COMMAND_STR_ORBITAL_ELEM_LOAD),
PROTO_COMMAND_ID_ORBITAL_ELEM_NUM = details::FNV1aHash(PROTO_COMMAND_STR_ORBITAL_ELEM_NUM),
PROTO_COMMAND_ID_ORBITAL_ELEM_GET = details::FNV1aHash(PROTO_COMMAND_STR_ORBITAL_ELEM_GET),
PROTO_COMMAND_ID_ORBITAL_ELEM_LOAD0 = details::FNV1aHash(PROTO_COMMAND_STR_ORBITAL_ELEM_LOAD0),
PROTO_COMMAND_ID_ORBITAL_ELEM_GET_AZ = details::FNV1aHash(PROTO_COMMAND_STR_ORBITAL_ELEM_GET_AZ),
PROTO_COMMAND_ID_ORBITAL_ELEM_GET_EQ = details::FNV1aHash(PROTO_COMMAND_STR_ORBITAL_ELEM_GET_EQ),
PROTO_COMMAND_ID_ORBITAL_ELEM_PRE_TRANS = details::FNV1aHash(PROTO_COMMAND_STR_ORBITAL_ELEM_PRE_TRANS),
PROTO_COMMAND_ID_ORBITAL_ELEM_SLEW = details::FNV1aHash(PROTO_COMMAND_STR_ORBITAL_ELEM_SLEW),
PROTO_COMMAND_ID_ORBITAL_ELEM_SLEW_STATUS = details::FNV1aHash(PROTO_COMMAND_STR_ORBITAL_ELEM_SLEW_STATUS),
PROTO_COMMAND_ID_EMUAP = details::FNV1aHash(PROTO_COMMAND_STR_EMUAP),
PROTO_COMMAND_ID_EMULX = details::FNV1aHash(PROTO_COMMAND_STR_EMULX),
PROTO_COMMAND_ID_START_COMM_LOG = details::FNV1aHash(PROTO_COMMAND_STR_START_COMM_LOG),
PROTO_COMMAND_ID_STOP_COMM_LOG = details::FNV1aHash(PROTO_COMMAND_STR_STOP_COMM_LOG),
PROTO_COMMAND_ID_MOUNT_SHUTDOWN = details::FNV1aHash(PROTO_COMMAND_STR_MOUNT_SHUTDOWN),
PROTO_COMMAND_ID_GET_COMM_LOG = details::FNV1aHash(PROTO_COMMAND_STR_GET_COMM_LOG),
PROTO_COMMAND_ID_GET_EV_LOG = details::FNV1aHash(PROTO_COMMAND_STR_GET_EV_LOG),
PROTO_COMMAND_ID_USEROK = details::FNV1aHash(PROTO_COMMAND_STR_USEROK),
PROTO_COMMAND_ID_USERWAIT = details::FNV1aHash(PROTO_COMMAND_STR_USERWAIT),
PROTO_COMMAND_ID_GETID = details::FNV1aHash(PROTO_COMMAND_STR_GETID),
PROTO_COMMAND_ID_ADJUST_TIME = details::FNV1aHash(PROTO_COMMAND_STR_ADJUST_TIME),
PROTO_COMMAND_ID_PCS_ADD_ALIGN_TAG = details::FNV1aHash(PROTO_COMMAND_STR_PCS_ADD_ALIGN_TAG),
PROTO_COMMAND_ID_PCS_SYNC_WITH_TAG = details::FNV1aHash(PROTO_COMMAND_STR_PCS_SYNC_WITH_TAG),
PROTO_COMMAND_ID_PCS_SYNC_WITH_TAG1 = details::FNV1aHash(PROTO_COMMAND_STR_PCS_SYNC_WITH_TAG1),
PROTO_COMMAND_ID_PCS_SYNC_CFG = details::FNV1aHash(PROTO_COMMAND_STR_PCS_SYNC_CFG),
PROTO_COMMAND_ID_PCS_ALIGN_POINTS_NUM = details::FNV1aHash(PROTO_COMMAND_STR_PCS_ALIGN_POINTS_NUM),
PROTO_COMMAND_ID_PCS_DEL_CURR_MODEL = details::FNV1aHash(PROTO_COMMAND_STR_PCS_DEL_CURR_MODEL),
PROTO_COMMAND_ID_PCS_GET_ALIGN_POINT_INFO = details::FNV1aHash(PROTO_COMMAND_STR_PCS_GET_ALIGN_POINT_INFO),
PROTO_COMMAND_ID_PCS_GET_MODEL_INFO = details::FNV1aHash(PROTO_COMMAND_STR_PCS_GET_MODEL_INFO),
PROTO_COMMAND_ID_PCS_GET_ALIGN_POINT_INFO1 = details::FNV1aHash(PROTO_COMMAND_STR_PCS_GET_ALIGN_POINT_INFO1),
PROTO_COMMAND_ID_PCS_DEL_ALIGN_POINT = details::FNV1aHash(PROTO_COMMAND_STR_PCS_DEL_ALIGN_POINT),
PROTO_COMMAND_ID_PCS_START = details::FNV1aHash(PROTO_COMMAND_STR_PCS_START),
PROTO_COMMAND_ID_PCS_NEW_ALIGN_POINT = details::FNV1aHash(PROTO_COMMAND_STR_PCS_NEW_ALIGN_POINT),
PROTO_COMMAND_ID_PCS_STOP = details::FNV1aHash(PROTO_COMMAND_STR_PCS_STOP),
PROTO_COMMAND_ID_PCS_GET_MODELS_NUM = details::FNV1aHash(PROTO_COMMAND_STR_PCS_GET_MODELS_NUM),
PROTO_COMMAND_ID_PCS_GET_MODEL_NAME = details::FNV1aHash(PROTO_COMMAND_STR_PCS_GET_MODEL_NAME),
PROTO_COMMAND_ID_PCS_LOAD_MODEL = details::FNV1aHash(PROTO_COMMAND_STR_PCS_LOAD_MODEL),
PROTO_COMMAND_ID_PCS_SAVE_MODEL = details::FNV1aHash(PROTO_COMMAND_STR_PCS_SAVE_MODEL),
PROTO_COMMAND_ID_PCS_DEL_MODEL = details::FNV1aHash(PROTO_COMMAND_STR_PCS_DEL_MODEL),
};
using namespace std::literals;
static constexpr std::array PROTO_COMMAND_STRING = {
"\x06"sv, // <ACK>
"AL"sv, // stop tracking
"AP"sv, // start tracking
"GA"sv, // Get telescope altitude
"Ga"sv, // Get current target altitude
"GC"sv, // Get current date
"GD"sv, // Get telescope declination
"Gd"sv // Get current target declination
"Gev"sv, // Get the current site elevation
"GG"sv, // Get UTC offset time
"Gg"sv, // Get current site longitude
"Gh"sv, // Get the highest altitude above the horizon
"Ginfo"sv, // Get multiple information
"GINQ"sv, // Get the type of connection
"GIP"sv, // Get mount IP address
"GIPW"sv, // Get mount wireless IP address
"GMAC"sv, // Get mount MAC address
"GMACW"sv, // Get mount wireless MAC address
"GJD"sv, // Get the current Julian Date
"GJD1"sv, // Get the current Julian Date with extended precision
"GJD2"sv, // Get the current Julian Date with extended precision and leap second flag
"GL"sv, // Get local time
"GLDT"sv, // Get local date and time
"GUDT"sv, // Get UTC date and time
"GDUT"sv, // Get the current UTC UT1 difference in seconds and decimals
"GDGPS"sv, // Get the current GPS UTC difference in seconds
"GULEAP"sv, // Gets the date of the next leap second that will be accounted for
"GMF"sv, // Get meridian side behaviour
"Go"sv, // Get the lowest altitude above the horizon
"GPA"sv, // Get parallactic angle with respect to actual mount orientation
"GPAS"sv, // Get parallactic speed with respect to actual mount orientation
"GPAZ"sv, // Get parallactic angle with respect to zenith
"GPASZ"sv, // Get parallactic speed with respect to zenith
"Gpgc"sv, // Get guiding status
"GR"sv, // Get telescope right ascension
"Gr"sv, // Get target right ascension
"GRPRS"sv, // Get the atmospheric pressure used in the refraction model
"GRTMP"sv, // Get the temperature used in the refraction model
"GS"sv, // Get the sidereal time
"GREF"sv, // Gets the current status of the refraction correction
"GSC"sv, // Gets the current status of the speed correction flag
"Gstat"sv, // Gets the status of the mount
static constexpr std::array PROTO_COMMAND_DESC = {
proto_command_t{PROTO_COMMAND_STR_ACK, PROTO_COMMAND_ID_ACK, "<ACK>"},
proto_command_t{PROTO_COMMAND_STR_TRACK_STOP, PROTO_COMMAND_ID_TRACK_STOP, "Stop tracking"},
proto_command_t{PROTO_COMMAND_STR_TRACK_START, PROTO_COMMAND_ID_TRACK_START, "Start tracking"},
proto_command_t{PROTO_COMMAND_STR_TEL_ALT, PROTO_COMMAND_ID_TEL_ALT, ""},
proto_command_t{PROTO_COMMAND_STR_TAG_ALT, PROTO_COMMAND_ID_TAG_ALT, ""},
proto_command_t{PROTO_COMMAND_STR_GET_CURR_DATE, PROTO_COMMAND_ID_GET_CURR_DATE, ""},
proto_command_t{PROTO_COMMAND_STR_GET_TEL_DEC, PROTO_COMMAND_ID_GET_TEL_DEC, ""},
proto_command_t{PROTO_COMMAND_STR_GET_TAG_DEC, PROTO_COMMAND_ID_GET_TAG_DEC, ""},
proto_command_t{PROTO_COMMAND_STR_GET_CURR_SITE_ELEV, PROTO_COMMAND_ID_GET_CURR_SITE_ELEV, ""},
proto_command_t{PROTO_COMMAND_STR_GET_UTC_OFFSET, PROTO_COMMAND_ID_GET_UTC_OFFSET, ""},
proto_command_t{PROTO_COMMAND_STR_GET_CURR_SITE_LONG, PROTO_COMMAND_ID_GET_CURR_SITE_LONG, ""},
proto_command_t{PROTO_COMMAND_STR_GET_HIGHEST_ALT, PROTO_COMMAND_ID_GET_HIGHEST_ALT, ""},
proto_command_t{PROTO_COMMAND_STR_GINFO, PROTO_COMMAND_ID_GINFO, ""},
proto_command_t{PROTO_COMMAND_STR_GINQ, PROTO_COMMAND_ID_GINQ, ""},
proto_command_t{PROTO_COMMAND_STR_GET_MOUNT_IP_ADDR, PROTO_COMMAND_ID_GET_MOUNT_IP_ADDR, ""},
proto_command_t{PROTO_COMMAND_STR_MOUNT_WIRELESS_IP_ADDR, PROTO_COMMAND_ID_MOUNT_WIRELESS_IP_ADDR, ""},
proto_command_t{PROTO_COMMAND_STR_MOUNT_MAC_ADDR, PROTO_COMMAND_ID_MOUNT_MAC_ADDR, ""},
proto_command_t{PROTO_COMMAND_STR_GET_MOUNT_WIRELESS_MAC_ADDR, PROTO_COMMAND_ID_GET_MOUNT_WIRELESS_MAC_ADDR, ""},
proto_command_t{PROTO_COMMAND_STR_GET_CURR_JULDATE, PROTO_COMMAND_ID_GET_CURR_JULDATE, ""},
proto_command_t{PROTO_COMMAND_STR_GET_CURR_JULDATE_EXTPREC, PROTO_COMMAND_ID_GET_CURR_JULDATE_EXTPREC, ""},
proto_command_t{PROTO_COMMAND_STR_GET_CURR_JULDATE_EXTPREC_LEAP_SEC,
PROTO_COMMAND_ID_GET_CURR_JULDATE_EXTPREC_LEAP_SEC, ""},
proto_command_t{PROTO_COMMAND_STR_GET_LOCAL_TIME, PROTO_COMMAND_ID_GET_LOCAL_TIME, ""},
proto_command_t{PROTO_COMMAND_STR_GET_LOCAL_DATE_TIME, PROTO_COMMAND_ID_GET_LOCAL_DATE_TIME, ""},
proto_command_t{PROTO_COMMAND_STR_GET_UTC_DATE_TIME, PROTO_COMMAND_ID_GET_UTC_DATE_TIME, ""},
proto_command_t{PROTO_COMMAND_STR_GET_UTC_UT1_DIFF, PROTO_COMMAND_ID_GET_UTC_UT1_DIFF, ""},
proto_command_t{PROTO_COMMAND_STR_GET_GPS_UTC_DIFF, PROTO_COMMAND_ID_GET_GPS_UTC_DIFF, ""},
proto_command_t{PROTO_COMMAND_STR_GET_NEXT_LEAP_SEC, PROTO_COMMAND_ID_GET_NEXT_LEAP_SEC, ""},
proto_command_t{PROTO_COMMAND_STR_GET_MERIDIAN_BEHAV, PROTO_COMMAND_ID_GET_MERIDIAN_BEHAV, ""},
proto_command_t{PROTO_COMMAND_STR_GET_LOWEST_ALT, PROTO_COMMAND_ID_GET_LOWEST_ALT, ""},
proto_command_t{PROTO_COMMAND_STR_GET_PA, PROTO_COMMAND_ID_GET_PA, ""},
proto_command_t{PROTO_COMMAND_STR_GET_PA_SPEED, PROTO_COMMAND_ID_GET_PA_SPEED, ""},
proto_command_t{PROTO_COMMAND_STR_GET_PA_ZENITH, PROTO_COMMAND_ID_GET_PA_ZENITH, ""},
proto_command_t{PROTO_COMMAND_STR_GET_PA_ZENITH_SPEED, PROTO_COMMAND_ID_GET_PA_ZENITH_SPEED, ""},
proto_command_t{PROTO_COMMAND_STR_GET_GUIDING_STATUS, PROTO_COMMAND_ID_GET_GUIDING_STATUS, ""},
proto_command_t{PROTO_COMMAND_STR_GET_TEL_RA, PROTO_COMMAND_ID_GET_TEL_RA, ""},
proto_command_t{PROTO_COMMAND_STR_GET_TAG_RA, PROTO_COMMAND_ID_GET_TAG_RA, ""},
proto_command_t{PROTO_COMMAND_STR_GET_ATM_PRES, PROTO_COMMAND_ID_GET_ATM_PRES, ""},
proto_command_t{PROTO_COMMAND_STR_GET_ATM_TEMP, PROTO_COMMAND_ID_GET_ATM_TEMP, ""},
proto_command_t{PROTO_COMMAND_STR_GET_SIDERAL_TIME, PROTO_COMMAND_ID_GET_SIDERAL_TIME, ""},
proto_command_t{PROTO_COMMAND_STR_GET_REFRACT_CORR_STATUS, PROTO_COMMAND_ID_GET_REFRACT_CORR_STATUS, ""},
proto_command_t{PROTO_COMMAND_STR_GET_SPEED_CORR_STATUS, PROTO_COMMAND_ID_GET_SPEED_CORR_STATUS, ""},
proto_command_t{PROTO_COMMAND_STR_GSTAT, PROTO_COMMAND_ID_GSTAT, ""},
proto_command_t{PROTO_COMMAND_STR_GET_SETTLE_TIME, PROTO_COMMAND_ID_GET_SETTLE_TIME, ""},
proto_command_t{PROTO_COMMAND_STR_GET_TRACK_MERIDIAN_LIMIT, PROTO_COMMAND_ID_GET_TRACK_MERIDIAN_LIMIT, ""},
proto_command_t{PROTO_COMMAND_STR_GET_SLEW_MERIDIAN_LIMIT, PROTO_COMMAND_ID_GET_SLEW_MERIDIAN_LIMIT, ""},
proto_command_t{PROTO_COMMAND_STR_GET_EST_TRACK_TIME, PROTO_COMMAND_ID_GET_EST_TRACK_TIME, ""},
proto_command_t{PROTO_COMMAND_STR_GET_UNATTEND_FLIP_SETTING, PROTO_COMMAND_ID_GET_UNATTEND_FLIP_SETTING, ""},
proto_command_t{PROTO_COMMAND_STR_GET_TRACK_RATE, PROTO_COMMAND_ID_GET_TRACK_RATE, ""},
proto_command_t{PROTO_COMMAND_STR_GET_CURR_SITE_LAT, PROTO_COMMAND_ID_GET_CURR_SITE_LAT, ""},
proto_command_t{PROTO_COMMAND_STR_GET_MOUNT_TRACK_STATUS, PROTO_COMMAND_ID_GET_MOUNT_TRACK_STATUS, ""},
proto_command_t{PROTO_COMMAND_STR_GET_TAG_TRACK_STATUS, PROTO_COMMAND_ID_GET_TAG_TRACK_STATUS, ""},
proto_command_t{PROTO_COMMAND_STR_GET_TAG_DEST_SIDE, PROTO_COMMAND_ID_GET_TAG_DEST_SIDE, ""},
proto_command_t{PROTO_COMMAND_STR_GET_FWR_DATE, PROTO_COMMAND_ID_GET_FWR_DATE, ""},
proto_command_t{PROTO_COMMAND_STR_GET_FWR_NUM, PROTO_COMMAND_ID_GET_FWR_NUM, ""},
proto_command_t{PROTO_COMMAND_STR_GET_PROD_NAME, PROTO_COMMAND_ID_GET_PROD_NAME, ""},
proto_command_t{PROTO_COMMAND_STR_GET_FWR_TIME, PROTO_COMMAND_ID_GET_FWR_TIME, ""},
proto_command_t{PROTO_COMMAND_STR_GET_HWR_VERSION, PROTO_COMMAND_ID_GET_HWR_VERSION, ""},
proto_command_t{PROTO_COMMAND_STR_GET_WOL_CONF, PROTO_COMMAND_ID_GET_WOL_CONF, ""},
proto_command_t{PROTO_COMMAND_STR_WLAN_AVAIL, PROTO_COMMAND_ID_WLAN_AVAIL, ""},
proto_command_t{PROTO_COMMAND_STR_GET_TEL_AZ, PROTO_COMMAND_ID_GET_TEL_AZ, ""},
proto_command_t{PROTO_COMMAND_STR_GET_TAG_AZ, PROTO_COMMAND_ID_GET_TAG_AZ, ""},
proto_command_t{PROTO_COMMAND_STR_GET_POINT_STATE, PROTO_COMMAND_ID_GET_POINT_STATE, ""},
proto_command_t{PROTO_COMMAND_STR_GET_EMUL_FWR_REV, PROTO_COMMAND_ID_GET_EMUL_FWR_REV, ""},
proto_command_t{PROTO_COMMAND_STR_HOME_SEEK_AND_STORE, PROTO_COMMAND_ID_HOME_SEEK_AND_STORE, ""},
proto_command_t{PROTO_COMMAND_STR_HOME_SEEK_AND_ALIGN, PROTO_COMMAND_ID_HOME_SEEK_AND_ALIGN, ""},
proto_command_t{PROTO_COMMAND_STR_SLEW_TO_PARK_hS, PROTO_COMMAND_ID_SLEW_TO_PARK_hS, ""},
proto_command_t{PROTO_COMMAND_STR_SLEW_TO_PARK_KA, PROTO_COMMAND_ID_SLEW_TO_PARK_KA, ""},
proto_command_t{PROTO_COMMAND_STR_UNPARK, PROTO_COMMAND_ID_UNPARK, ""},
proto_command_t{PROTO_COMMAND_STR_QUERY_HOME_STATUS, PROTO_COMMAND_ID_QUERY_HOME_STATUS, ""},
proto_command_t{PROTO_COMMAND_STR_SLEW_TO_AZ, PROTO_COMMAND_ID_SLEW_TO_AZ, ""},
proto_command_t{PROTO_COMMAND_STR_MOVE_EAST, PROTO_COMMAND_ID_MOVE_EAST, ""},
proto_command_t{PROTO_COMMAND_STR_MOVE_NORTH, PROTO_COMMAND_ID_MOVE_NORTH, ""},
proto_command_t{PROTO_COMMAND_STR_MOVE_SOUTH, PROTO_COMMAND_ID_MOVE_SOUTH, ""},
proto_command_t{PROTO_COMMAND_STR_MOVE_WEST, PROTO_COMMAND_ID_MOVE_WEST, ""},
proto_command_t{PROTO_COMMAND_STR_CORR_EAST, PROTO_COMMAND_ID_CORR_EAST, ""},
proto_command_t{PROTO_COMMAND_STR_CORR_NORTH, PROTO_COMMAND_ID_CORR_NORTH, ""},
proto_command_t{PROTO_COMMAND_STR_CORR_SOUTH, PROTO_COMMAND_ID_CORR_SOUTH, ""},
proto_command_t{PROTO_COMMAND_STR_CORR_WEST, PROTO_COMMAND_ID_CORR_WEST, ""},
proto_command_t{PROTO_COMMAND_STR_SLEW_TO_TAG, PROTO_COMMAND_ID_SLEW_TO_TAG, ""},
proto_command_t{PROTO_COMMAND_STR_SLEW_TO_TAG_SIDE, PROTO_COMMAND_ID_SLEW_TO_TAG_SIDE, ""},
proto_command_t{PROTO_COMMAND_STR_SLEW_TO_TAG_DISREG_FINE_MOVE, PROTO_COMMAND_ID_SLEW_TO_TAG_DISREG_FINE_MOVE, ""},
proto_command_t{PROTO_COMMAND_STR_SWAP_EAST_WEST, PROTO_COMMAND_ID_SWAP_EAST_WEST, ""},
proto_command_t{PROTO_COMMAND_STR_SWAP_NORTH_SOUTH, PROTO_COMMAND_ID_SWAP_NORTH_SOUTH, ""},
proto_command_t{PROTO_COMMAND_STR_HALT_ALL, PROTO_COMMAND_ID_HALT_ALL, ""},
proto_command_t{PROTO_COMMAND_STR_HALT_EASTWARD, PROTO_COMMAND_ID_HALT_EASTWARD, ""},
proto_command_t{PROTO_COMMAND_STR_HALT_NORTHWARD, PROTO_COMMAND_ID_HALT_NORTHWARD, ""},
proto_command_t{PROTO_COMMAND_STR_HALT_SOUTHWARD, PROTO_COMMAND_ID_HALT_SOUTHWARD, ""},
proto_command_t{PROTO_COMMAND_STR_HALT_WESTWARD, PROTO_COMMAND_ID_HALT_WESTWARD, ""},
proto_command_t{PROTO_COMMAND_STR_FLIP, PROTO_COMMAND_ID_FLIP, ""},
proto_command_t{PROTO_COMMAND_STR_SLEW_PROGRESS_STRING, PROTO_COMMAND_ID_SLEW_PROGRESS_STRING, ""},
proto_command_t{PROTO_COMMAND_STR_NUDGE, PROTO_COMMAND_ID_NUDGE, ""},
proto_command_t{PROTO_COMMAND_STR_SLEW_TO_CENTERING_RATE, PROTO_COMMAND_ID_SLEW_TO_CENTERING_RATE, ""},
proto_command_t{PROTO_COMMAND_STR_SLEW_TO_GUIDING_RATE, PROTO_COMMAND_ID_SLEW_TO_GUIDING_RATE, ""},
proto_command_t{PROTO_COMMAND_STR_SLEW_TO_FIND_RATE, PROTO_COMMAND_ID_SLEW_TO_FIND_RATE, ""},
proto_command_t{PROTO_COMMAND_STR_SLEW_TO_MAX_RATE, PROTO_COMMAND_ID_SLEW_TO_MAX_RATE, ""},
proto_command_t{PROTO_COMMAND_STR_SET_SLEW_RA_RATE, PROTO_COMMAND_ID_SET_SLEW_RA_RATE, ""},
proto_command_t{PROTO_COMMAND_STR_SET_SLEW_DEC_RATE, PROTO_COMMAND_ID_SET_SLEW_DEC_RATE, ""},
proto_command_t{PROTO_COMMAND_STR_SET_GUIDING_RATE, PROTO_COMMAND_ID_SET_GUIDING_RATE, ""},
proto_command_t{PROTO_COMMAND_STR_SET_CENTERING_RATE, PROTO_COMMAND_ID_SET_CENTERING_RATE, ""},
proto_command_t{PROTO_COMMAND_STR_SET_SLEW_RATE, PROTO_COMMAND_ID_SET_SLEW_RATE, ""},
proto_command_t{PROTO_COMMAND_STR_SET_SLEW_ABS_RATE, PROTO_COMMAND_ID_SET_SLEW_ABS_RATE, ""},
proto_command_t{PROTO_COMMAND_STR_GET_SLEW_ABS_RATE, PROTO_COMMAND_ID_GET_SLEW_ABS_RATE, ""},
proto_command_t{PROTO_COMMAND_STR_GET_MIN_SLEW_ABS_RATE, PROTO_COMMAND_ID_GET_MIN_SLEW_ABS_RATE, ""},
proto_command_t{PROTO_COMMAND_STR_GET_MAX_SLEW_ABS_RATE, PROTO_COMMAND_ID_GET_MAX_SLEW_ABS_RATE, ""},
proto_command_t{PROTO_COMMAND_STR_GET_GUIDING_RATE, PROTO_COMMAND_ID_GET_GUIDING_RATE, ""},
proto_command_t{PROTO_COMMAND_STR_SET_DEC_BACKLASH, PROTO_COMMAND_ID_SET_DEC_BACKLASH, ""},
proto_command_t{PROTO_COMMAND_STR_SET_RA_BACKLASH, PROTO_COMMAND_ID_SET_RA_BACKLASH, ""},
proto_command_t{PROTO_COMMAND_STR_SET_TAG_ALT, PROTO_COMMAND_ID_SET_TAG_ALT, ""},
proto_command_t{PROTO_COMMAND_STR_SET_BAUD_RATE, PROTO_COMMAND_ID_SET_BAUD_RATE, ""},
proto_command_t{PROTO_COMMAND_STR_SET_LOCAL_DATE, PROTO_COMMAND_ID_SET_LOCAL_DATE, ""},
proto_command_t{PROTO_COMMAND_STR_SET_TAG_DEC, PROTO_COMMAND_ID_SET_TAG_DEC, ""},
proto_command_t{PROTO_COMMAND_STR_SET_CURR_SITE_LONG, PROTO_COMMAND_ID_SET_CURR_SITE_LONG, ""},
proto_command_t{PROTO_COMMAND_STR_SET_UTC_OFFSET, PROTO_COMMAND_ID_SET_UTC_OFFSET, ""},
proto_command_t{PROTO_COMMAND_STR_SET_HIGHEST_ALT, PROTO_COMMAND_ID_SET_HIGHEST_ALT, ""},
proto_command_t{PROTO_COMMAND_STR_SET_CURR_JULDATE, PROTO_COMMAND_ID_SET_CURR_JULDATE, ""},
proto_command_t{PROTO_COMMAND_STR_SET_LOCAL_TIME, PROTO_COMMAND_ID_SET_LOCAL_TIME, ""},
proto_command_t{PROTO_COMMAND_STR_SET_LOCAL_DATE_TIME, PROTO_COMMAND_ID_SET_LOCAL_DATE_TIME, ""},
proto_command_t{PROTO_COMMAND_STR_SET_UTC_DATE_TIME, PROTO_COMMAND_ID_SET_UTC_DATE_TIME, ""},
proto_command_t{PROTO_COMMAND_STR_SET_MERIDIAN_BEHAV, PROTO_COMMAND_ID_SET_MERIDIAN_BEHAV, ""},
proto_command_t{PROTO_COMMAND_STR_SET_LOWEST_ALT, PROTO_COMMAND_ID_SET_LOWEST_ALT, ""},
proto_command_t{PROTO_COMMAND_STR_SET_TAG_RA, PROTO_COMMAND_ID_SET_TAG_RA, ""},
proto_command_t{PROTO_COMMAND_STR_SET_REFRACT_CORR_STATUS, PROTO_COMMAND_ID_SET_REFRACT_CORR_STATUS, ""},
proto_command_t{PROTO_COMMAND_STR_SET_ATM_PRES, PROTO_COMMAND_ID_SET_ATM_PRES, ""},
proto_command_t{PROTO_COMMAND_STR_SET_ATM_TEMP, PROTO_COMMAND_ID_SET_ATM_TEMP, ""},
proto_command_t{PROTO_COMMAND_STR_SET_SPEED_CORR_STATUS, PROTO_COMMAND_ID_SET_SPEED_CORR_STATUS, ""},
proto_command_t{PROTO_COMMAND_STR_SET_SETTLE_TIME, PROTO_COMMAND_ID_SET_SETTLE_TIME, ""},
proto_command_t{PROTO_COMMAND_STR_SET_TRACK_MERIDIAN_LIMIT, PROTO_COMMAND_ID_SET_TRACK_MERIDIAN_LIMIT, ""},
proto_command_t{PROTO_COMMAND_STR_SET_SLEW_MERIDIAN_LIMIT, PROTO_COMMAND_ID_SET_SLEW_MERIDIAN_LIMIT, ""},
proto_command_t{PROTO_COMMAND_STR_SET_UNATTEND_FLIP_SETTING, PROTO_COMMAND_ID_SET_UNATTEND_FLIP_SETTING, ""},
proto_command_t{PROTO_COMMAND_STR_SET_CURR_SITE_LAT, PROTO_COMMAND_ID_SET_CURR_SITE_LAT, ""},
proto_command_t{PROTO_COMMAND_STR_STOP, PROTO_COMMAND_ID_STOP, ""},
proto_command_t{PROTO_COMMAND_STR_SET_MAX_SLEW_ABS_RATE, PROTO_COMMAND_ID_SET_MAX_SLEW_ABS_RATE, ""},
proto_command_t{PROTO_COMMAND_STR_SET_WOL_CONF, PROTO_COMMAND_ID_SET_WOL_CONF, ""},
proto_command_t{PROTO_COMMAND_STR_SET_MOUNT_IP_ADDR, PROTO_COMMAND_ID_SET_MOUNT_IP_ADDR, ""},
proto_command_t{PROTO_COMMAND_STR_SET_TAG_AZ, PROTO_COMMAND_ID_SET_TAG_AZ, ""},
proto_command_t{PROTO_COMMAND_STR_TOGGLE_PEC, PROTO_COMMAND_ID_TOGGLE_PEC, ""},
proto_command_t{PROTO_COMMAND_STR_PEC_OFF, PROTO_COMMAND_ID_PEC_OFF, ""},
proto_command_t{PROTO_COMMAND_STR_PEC_ON, PROTO_COMMAND_ID_PEC_ON, ""},
proto_command_t{PROTO_COMMAND_STR_INC_CUSTOM_TRACK_RATE, PROTO_COMMAND_ID_INC_CUSTOM_TRACK_RATE, ""},
proto_command_t{PROTO_COMMAND_STR_DEC_CUSTOM_TRACK_RATE, PROTO_COMMAND_ID_DEC_CUSTOM_TRACK_RATE, ""},
proto_command_t{PROTO_COMMAND_STR_LUNAR_TRACK_RATE, PROTO_COMMAND_ID_LUNAR_TRACK_RATE, ""},
proto_command_t{PROTO_COMMAND_STR_SOLAR_TRACK_RATE, PROTO_COMMAND_ID_SOLAR_TRACK_RATE, ""},
proto_command_t{PROTO_COMMAND_STR_CUSTOM_TRACK_RATE_ON, PROTO_COMMAND_ID_CUSTOM_TRACK_RATE_ON, ""},
proto_command_t{PROTO_COMMAND_STR_SIDERAL_TRACK_RATE_ON, PROTO_COMMAND_ID_SIDERAL_TRACK_RATE_ON, ""},
proto_command_t{PROTO_COMMAND_STR_SET_CUSTOM_TRACK_RATE, PROTO_COMMAND_ID_SET_CUSTOM_TRACK_RATE, ""},
proto_command_t{PROTO_COMMAND_STR_SET_TRACK_RATE, PROTO_COMMAND_ID_SET_TRACK_RATE, ""},
proto_command_t{PROTO_COMMAND_STR_LUNAR_TRACK_RATE_EXT, PROTO_COMMAND_ID_LUNAR_TRACK_RATE_EXT, ""},
proto_command_t{PROTO_COMMAND_STR_SOLAR_TRACK_RATE_EXT, PROTO_COMMAND_ID_SOLAR_TRACK_RATE_EXT, ""},
proto_command_t{PROTO_COMMAND_STR_SIDERAL_TRACK_RATE_ON_EXT, PROTO_COMMAND_ID_SIDERAL_TRACK_RATE_ON_EXT, ""},
proto_command_t{PROTO_COMMAND_STR_STOP_TRACK, PROTO_COMMAND_ID_STOP_TRACK, ""},
proto_command_t{PROTO_COMMAND_STR_SET_RA_TRACK_RATE, PROTO_COMMAND_ID_SET_RA_TRACK_RATE, ""},
proto_command_t{PROTO_COMMAND_STR_SET_DEC_TRACK_RATE, PROTO_COMMAND_ID_SET_DEC_TRACK_RATE, ""},
proto_command_t{PROTO_COMMAND_STR_DUAL_TRACK_CONF, PROTO_COMMAND_ID_DUAL_TRACK_CONF, ""},
proto_command_t{PROTO_COMMAND_STR_DUAL_TRACK_STATUS, PROTO_COMMAND_ID_DUAL_TRACK_STATUS, ""},
proto_command_t{PROTO_COMMAND_STR_SET_PREC_MODE, PROTO_COMMAND_ID_SET_PREC_MODE, ""},
proto_command_t{PROTO_COMMAND_STR_SET_PREC_MODE_0, PROTO_COMMAND_ID_SET_PREC_MODE_0, ""},
proto_command_t{PROTO_COMMAND_STR_SET_PREC_MODE_1, PROTO_COMMAND_ID_SET_PREC_MODE_1, ""},
proto_command_t{PROTO_COMMAND_STR_SET_PREC_MODE_2, PROTO_COMMAND_ID_SET_PREC_MODE_2, ""},
proto_command_t{PROTO_COMMAND_STR_SET_FINAL_APP_TC, PROTO_COMMAND_ID_SET_FINAL_APP_TC, ""},
proto_command_t{PROTO_COMMAND_STR_GET_FINAL_APP_TC, PROTO_COMMAND_ID_GET_FINAL_APP_TC, ""},
proto_command_t{PROTO_COMMAND_STR_SET_FINAL_APP_DL, PROTO_COMMAND_ID_SET_FINAL_APP_DL, ""},
proto_command_t{PROTO_COMMAND_STR_GET_FINAL_APP_DL, PROTO_COMMAND_ID_GET_FINAL_APP_DL, ""},
proto_command_t{PROTO_COMMAND_STR_SET_FINAL_APP_MODE, PROTO_COMMAND_ID_SET_FINAL_APP_MODE, ""},
proto_command_t{PROTO_COMMAND_STR_GET_FINAL_APP_MODE, PROTO_COMMAND_ID_GET_FINAL_APP_MODE, ""},
proto_command_t{PROTO_COMMAND_STR_GET_ANG_RA_POS, PROTO_COMMAND_ID_GET_ANG_RA_POS, ""},
proto_command_t{PROTO_COMMAND_STR_GET_ANG_DEC_POS, PROTO_COMMAND_ID_GET_ANG_DEC_POS, ""},
proto_command_t{PROTO_COMMAND_STR_SET_ANG_TAG_RA_POS, PROTO_COMMAND_ID_SET_ANG_TAG_RA_POS, ""},
proto_command_t{PROTO_COMMAND_STR_SET_ANG_TAG_DEC_POS, PROTO_COMMAND_ID_SET_ANG_TAG_DEC_POS, ""},
proto_command_t{PROTO_COMMAND_STR_GET_ANG_TAG_RA_POS, PROTO_COMMAND_ID_GET_ANG_TAG_RA_POS, ""},
proto_command_t{PROTO_COMMAND_STR_GET_ANG_TAG_DEC_POS, PROTO_COMMAND_ID_GET_ANG_TAG_DEC_POS, ""},
proto_command_t{PROTO_COMMAND_STR_SLEW_TO_ANG_TAG, PROTO_COMMAND_ID_SLEW_TO_ANG_TAG, ""},
proto_command_t{PROTO_COMMAND_STR_SLEW_TO_ANG_TAG_PARK, PROTO_COMMAND_ID_SLEW_TO_ANG_TAG_PARK, ""},
proto_command_t{PROTO_COMMAND_STR_PARK_IN_CURR_POS, PROTO_COMMAND_ID_PARK_IN_CURR_POS, ""},
proto_command_t{PROTO_COMMAND_STR_SLEW_TO_PARK_ANG_POS, PROTO_COMMAND_ID_SLEW_TO_PARK_ANG_POS, ""},
proto_command_t{PROTO_COMMAND_STR_SAVE_PARK_ANG_POS, PROTO_COMMAND_ID_SAVE_PARK_ANG_POS, ""},
proto_command_t{PROTO_COMMAND_STR_ORBITAL_ELEM_LOAD, PROTO_COMMAND_ID_ORBITAL_ELEM_LOAD, ""},
proto_command_t{PROTO_COMMAND_STR_ORBITAL_ELEM_NUM, PROTO_COMMAND_ID_ORBITAL_ELEM_NUM, ""},
proto_command_t{PROTO_COMMAND_STR_ORBITAL_ELEM_GET, PROTO_COMMAND_ID_ORBITAL_ELEM_GET, ""},
proto_command_t{PROTO_COMMAND_STR_ORBITAL_ELEM_LOAD0, PROTO_COMMAND_ID_ORBITAL_ELEM_LOAD0, ""},
proto_command_t{PROTO_COMMAND_STR_ORBITAL_ELEM_GET_AZ, PROTO_COMMAND_ID_ORBITAL_ELEM_GET_AZ, ""},
proto_command_t{PROTO_COMMAND_STR_ORBITAL_ELEM_GET_EQ, PROTO_COMMAND_ID_ORBITAL_ELEM_GET_EQ, ""},
proto_command_t{PROTO_COMMAND_STR_ORBITAL_ELEM_PRE_TRANS, PROTO_COMMAND_ID_ORBITAL_ELEM_PRE_TRANS, ""},
proto_command_t{PROTO_COMMAND_STR_ORBITAL_ELEM_SLEW, PROTO_COMMAND_ID_ORBITAL_ELEM_SLEW, ""},
proto_command_t{PROTO_COMMAND_STR_ORBITAL_ELEM_SLEW_STATUS, PROTO_COMMAND_ID_ORBITAL_ELEM_SLEW_STATUS, ""},
proto_command_t{PROTO_COMMAND_STR_EMUAP, PROTO_COMMAND_ID_EMUAP, ""},
proto_command_t{PROTO_COMMAND_STR_EMULX, PROTO_COMMAND_ID_EMULX, ""},
proto_command_t{PROTO_COMMAND_STR_START_COMM_LOG, PROTO_COMMAND_ID_START_COMM_LOG, ""},
proto_command_t{PROTO_COMMAND_STR_STOP_COMM_LOG, PROTO_COMMAND_ID_STOP_COMM_LOG, ""},
proto_command_t{PROTO_COMMAND_STR_MOUNT_SHUTDOWN, PROTO_COMMAND_ID_MOUNT_SHUTDOWN, ""},
proto_command_t{PROTO_COMMAND_STR_GET_COMM_LOG, PROTO_COMMAND_ID_GET_COMM_LOG, ""},
proto_command_t{PROTO_COMMAND_STR_GET_EV_LOG, PROTO_COMMAND_ID_GET_EV_LOG, ""},
proto_command_t{PROTO_COMMAND_STR_USEROK, PROTO_COMMAND_ID_USEROK, ""},
proto_command_t{PROTO_COMMAND_STR_USERWAIT, PROTO_COMMAND_ID_USERWAIT, ""},
proto_command_t{PROTO_COMMAND_STR_GETID, PROTO_COMMAND_ID_GETID, ""},
proto_command_t{PROTO_COMMAND_STR_ADJUST_TIME, PROTO_COMMAND_ID_ADJUST_TIME, ""},
proto_command_t{PROTO_COMMAND_STR_PCS_ADD_ALIGN_TAG, PROTO_COMMAND_ID_PCS_ADD_ALIGN_TAG, ""},
proto_command_t{PROTO_COMMAND_STR_PCS_SYNC_WITH_TAG, PROTO_COMMAND_ID_PCS_SYNC_WITH_TAG, ""},
proto_command_t{PROTO_COMMAND_STR_PCS_SYNC_WITH_TAG1, PROTO_COMMAND_ID_PCS_SYNC_WITH_TAG1, ""},
proto_command_t{PROTO_COMMAND_STR_PCS_SYNC_CFG, PROTO_COMMAND_ID_PCS_SYNC_CFG, ""},
proto_command_t{PROTO_COMMAND_STR_PCS_ALIGN_POINTS_NUM, PROTO_COMMAND_ID_PCS_ALIGN_POINTS_NUM, ""},
proto_command_t{PROTO_COMMAND_STR_PCS_DEL_CURR_MODEL, PROTO_COMMAND_ID_PCS_DEL_CURR_MODEL, ""},
proto_command_t{PROTO_COMMAND_STR_PCS_GET_ALIGN_POINT_INFO, PROTO_COMMAND_ID_PCS_GET_ALIGN_POINT_INFO, ""},
proto_command_t{PROTO_COMMAND_STR_PCS_GET_MODEL_INFO, PROTO_COMMAND_ID_PCS_GET_MODEL_INFO, ""},
proto_command_t{PROTO_COMMAND_STR_PCS_GET_ALIGN_POINT_INFO1, PROTO_COMMAND_ID_PCS_GET_ALIGN_POINT_INFO1, ""},
proto_command_t{PROTO_COMMAND_STR_PCS_DEL_ALIGN_POINT, PROTO_COMMAND_ID_PCS_DEL_ALIGN_POINT, ""},
proto_command_t{PROTO_COMMAND_STR_PCS_START, PROTO_COMMAND_ID_PCS_START, ""},
proto_command_t{PROTO_COMMAND_STR_PCS_NEW_ALIGN_POINT, PROTO_COMMAND_ID_PCS_NEW_ALIGN_POINT, ""},
proto_command_t{PROTO_COMMAND_STR_PCS_STOP, PROTO_COMMAND_ID_PCS_STOP, ""},
proto_command_t{PROTO_COMMAND_STR_PCS_GET_MODELS_NUM, PROTO_COMMAND_ID_PCS_GET_MODELS_NUM, ""},
proto_command_t{PROTO_COMMAND_STR_PCS_GET_MODEL_NAME, PROTO_COMMAND_ID_PCS_GET_MODEL_NAME, ""},
proto_command_t{PROTO_COMMAND_STR_PCS_LOAD_MODEL, PROTO_COMMAND_ID_PCS_LOAD_MODEL, ""},
proto_command_t{PROTO_COMMAND_STR_PCS_SAVE_MODEL, PROTO_COMMAND_ID_PCS_SAVE_MODEL, ""},
proto_command_t{PROTO_COMMAND_STR_PCS_DEL_MODEL, PROTO_COMMAND_ID_PCS_DEL_MODEL, ""},
};
class ControlCommandParser
{
public: