diff --git a/cxx/comm_proto.h b/cxx/comm_proto.h index 6b982e1..9c62206 100644 --- a/cxx/comm_proto.h +++ b/cxx/comm_proto.h @@ -6,10 +6,8 @@ */ -#include #include #include -#include #include 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, // - "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, ""}, + 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: