341 lines
21 KiB
C++
341 lines
21 KiB
C++
#pragma once
|
||
|
||
/*
|
||
* Astrosib BM-700 mount client-to-server communication protocol
|
||
* (extended by 10Micron LX200 protocol)
|
||
*/
|
||
|
||
|
||
#include <algorithm>
|
||
#include <array>
|
||
#include <cstddef>
|
||
#include <ranges>
|
||
#include <string_view>
|
||
|
||
namespace BM700
|
||
{
|
||
|
||
namespace details
|
||
{
|
||
|
||
// FVN-1a hash function
|
||
static constexpr size_t FNV1aHash(const std::string_view& r)
|
||
{
|
||
static_assert(sizeof(size_t) == 8 || sizeof(size_t) == 4, "ONLY FOR 32 or 64-bit size_t!!!");
|
||
|
||
size_t hash = 0, prime = 0;
|
||
if constexpr (sizeof(size_t) == 8) { // 64-bit
|
||
prime = 1099511628211UL;
|
||
hash = 14695981039346656037UL;
|
||
} else if constexpr (sizeof(size_t) == 4) { // 32-bit
|
||
prime = 16777619;
|
||
hash = 2166136261;
|
||
}
|
||
|
||
for (const char& ch : r) {
|
||
hash ^= ch;
|
||
hash *= prime;
|
||
}
|
||
|
||
return hash;
|
||
}
|
||
|
||
|
||
|
||
} // 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";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_TRACK_START = "AP";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_TEL_ALT = "GA";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_TAG_ALT = "Ga";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_CURR_DATE = "GC";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_TEL_DEC = "GD";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_TAG_DEC = "Gd";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_CURR_SITE_ELEV = "Gev";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_UTC_OFFSET = "GG";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_CURR_SITE_LONG = "Gg";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_HIGHEST_ALT = "Gh";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GINFO = "Ginfo";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GINQ = "GINQ";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_MOUNT_IP_ADDR = "GIP";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_MOUNT_WIRELESS_IP_ADDR = "GIPW";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_MOUNT_MAC_ADDR = "GMAC";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_MOUNT_WIRELESS_MAC_ADDR = "GMACW";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_CURR_JULDATE = "GJD";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_CURR_JULDATE_EXTPREC = "GJD1";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_CURR_JULDATE_EXTPREC_LEAP_SEC = "GJD2";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_LOCAL_TIME = "GL";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_LOCAL_DATE_TIME = "GLDT";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_UTC_DATE_TIME = "GUDT";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_UTC_UT1_DIFF = "GDUT";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_GPS_UTC_DIFF = "GDGPS";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_NEXT_LEAP_SEC = "GULEAP";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_MERIDIAN_BEHAV = "GMF";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_LOWEST_ALT = "Go";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_PA = "GPA";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_PA_SPEED = "GPAS";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_PA_ZENITH = "GPAZ";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_PA_ZENITH_SPEED = "GPASZ";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_GUIDING_STATUS = "Gpgc";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_TEL_RA = "GR";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_TAG_RA = "Gr";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_ATM_PRES = "GRPRS";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_ATM_TEMP = "GRTMP";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_SIDERAL_TIME = "GS";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_REFRACT_CORR_STATUS = "GREF";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_SPEED_CORR_STATUS = "GSC";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GSTAT = "Gstat";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_SETTLE_TIME = "Gstm";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_TRACK_MERIDIAN_LIMIT = "Glmt";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_SLEW_MERIDIAN_LIMIT = "Glms";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_EST_TRACK_TIME = "Gmte";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_UNATTEND_FLIP_SETTING = "Guaf";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_TRACK_RATE = "GT";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_CURR_SITE_LAT = "Gt";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_MOUNT_TRACK_STATUS = "GTRK";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_TAG_TRACK_STATUS = "GTTRK";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_TAG_DEST_SIDE = "GTsid";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_FWR_DATE = "GVD";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_FWR_NUM = "GVN";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_PROD_NAME = "GVP"; // "Asib BM700"?
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_FWR_TIME = "GVT";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_HWR_VERSION = "GVZ";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_WOL_CONF = "GWOL";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_WLAN_AVAIL = "GWAV"; // always "0#"?
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_TEL_AZ = "GZ";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_TAG_AZ = "Gz";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_POINT_STATE = "pS"; // "side of the pier"
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_EMUL_FWR_REV = "V"; // always returns "G#"
|
||
|
||
static constexpr std::string_view PROTO_COMMAND_STR_HOME_SEEK_AND_STORE = "hS";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_HOME_SEEK_AND_ALIGN = "hF";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SLEW_TO_PARK_hS = "hS";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SLEW_TO_PARK_KA = "KA";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_UNPARK = "PO";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_QUERY_HOME_STATUS = "h?";
|
||
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SLEW_TO_AZ = "MA";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_MOVE_EAST = "Me";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_MOVE_NORTH = "Mn";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_MOVE_SOUTH = "Ms";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_MOVE_WEST = "Mw";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_CORR_EAST = "Mge";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_CORR_NORTH = "Mgn";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_CORR_SOUTH = "Mgs";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_CORR_WEST = "Mgw";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SLEW_TO_TAG = "MS";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SLEW_TO_TAG_SIDE = "MSfs";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SLEW_TO_TAG_DISREG_FINE_MOVE = "MSnf";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SWAP_EAST_WEST = "EW";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SWAP_NORTH_SOUTH = "NS";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_HALT_ALL = "Q";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_HALT_EASTWARD = "Qe";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_HALT_NORTHWARD = "Qn";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_HALT_SOUTHWARD = "Qs";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_HALT_WESTWARD = "Qw";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_FLIP = "FLIP"; // ???????????
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SLEW_PROGRESS_STRING = "D";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_NUDGE = "NUDGE";
|
||
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SLEW_TO_CENTERING_RATE = "RC";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SLEW_TO_GUIDING_RATE = "RG";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SLEW_TO_FIND_RATE = "RM";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SLEW_TO_MAX_RATE = "RS";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_SLEW_RA_RATE = "RA";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_SLEW_DEC_RATE = "RE";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_GUIDING_RATE = "Rg";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_CENTERING_RATE = "Rc";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_SLEW_RATE = "Rs"; // multiple of sideral rate
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_SLEW_ABS_RATE = "RMs"; // in degs/s
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_SLEW_ABS_RATE = "GMs"; // in degs/s
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_MIN_SLEW_ABS_RATE = "GMsa"; // in degs/s
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_MAX_SLEW_ABS_RATE = "GMsb"; // in degs/s
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_GUIDING_RATE = "Ggui"; // in arcsec/s
|
||
|
||
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_DEC_BACKLASH = "Bd";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_RA_BACKLASH = "Br";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_TAG_ALT = "Sa";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_BAUD_RATE = "SB";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_LOCAL_DATE = "SC";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_TAG_DEC = "Sd";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_CURR_SITE_LONG = "Sg";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_UTC_OFFSET = "SG"; // = UTC-LOCAL (hours)
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_HIGHEST_ALT = "Sh";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_CURR_JULDATE = "SJD";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_LOCAL_TIME = "SL";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_LOCAL_DATE_TIME = "SLDT";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_UTC_DATE_TIME = "SUDT";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_MERIDIAN_BEHAV = "SMF";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_LOWEST_ALT = "So";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_TAG_RA = "Sr";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_REFRACT_CORR_STATUS = "SREF";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_ATM_PRES = "SRPRS";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_ATM_TEMP = "SRTMP";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_SPEED_CORR_STATUS = "SSC";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_SETTLE_TIME = "Sstm";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_TRACK_MERIDIAN_LIMIT = "Slmt";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_SLEW_MERIDIAN_LIMIT = "Slms";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_UNATTEND_FLIP_SETTING = "Suaf";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_CURR_SITE_LAT = "St";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_STOP = "STOP";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_MAX_SLEW_ABS_RATE = "Sw"; // in degs/s
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_WOL_CONF = "SWOL";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_MOUNT_IP_ADDR = "SIP";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_TAG_AZ = "Sz";
|
||
|
||
static constexpr std::string_view PROTO_COMMAND_STR_TOGGLE_PEC = "$Q";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_PEC_OFF = "p";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_PEC_ON = "pP";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_INC_CUSTOM_TRACK_RATE = "T+"; // ++0.025 "/s
|
||
static constexpr std::string_view PROTO_COMMAND_STR_DEC_CUSTOM_TRACK_RATE = "T-"; // --0.025 "/s
|
||
static constexpr std::string_view PROTO_COMMAND_STR_LUNAR_TRACK_RATE = "TL";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SOLAR_TRACK_RATE = "TSOLAR";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_CUSTOM_TRACK_RATE_ON = "TM"; // turn on custom tracking rate
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SIDERAL_TRACK_RATE_ON = "TQ"; // turn on sideral tracking rate
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_CUSTOM_TRACK_RATE = "T"; // see "GT"
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_TRACK_RATE = "ST"; // see "GT"
|
||
static constexpr std::string_view PROTO_COMMAND_STR_LUNAR_TRACK_RATE_EXT = "RT0";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SOLAR_TRACK_RATE_EXT = "RT1";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SIDERAL_TRACK_RATE_ON_EXT = "RT2"; // turn on sideral tracking rate
|
||
static constexpr std::string_view PROTO_COMMAND_STR_STOP_TRACK = "RT9";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_RA_TRACK_RATE = "RR";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_DEC_TRACK_RATE = "RD";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_DUAL_TRACK_CONF = "Sdat";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_DUAL_TRACK_STATUS = "Gdat";
|
||
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_PREC_MODE = "U"; // just for compability (do nothing)
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_PREC_MODE_0 = "U0"; // just for compability (do nothing)
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_PREC_MODE_1 = "U1"; // just for compability (do nothing)
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_PREC_MODE_2 = "U2"; // just for compability (do nothing)
|
||
|
||
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_FINAL_APP_TC = "SFAtc"; // time constant
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_FINAL_APP_TC = "GFAtc";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_FINAL_APP_DL = "SFAlm"; // distance limit
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_FINAL_APP_DL = "GFAlm";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_FINAL_APP_MODE = "SFAmd"; // set final approach mode
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_FINAL_APP_MODE = "GFAmd";
|
||
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_ANG_RA_POS = "GaXa";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_ANG_DEC_POS = "GaXb";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_ANG_TAG_RA_POS = "SaXa";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SET_ANG_TAG_DEC_POS = "SaXb";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_ANG_TAG_RA_POS = "QaXa";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_GET_ANG_TAG_DEC_POS = "QaXb";
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SLEW_TO_ANG_TAG = "MaX"; // slew and stop
|
||
static constexpr std::string_view PROTO_COMMAND_STR_SLEW_TO_ANG_TAG_PARK = "PaX"; // slew and park
|
||
static constexpr std::string_view PROTO_COMMAND_STR_PARK_IN_CURR_POS = "PiP";
|
||
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";
|
||
|
||
|
||
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_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),
|
||
PROTO_COMMAND_ID_GET_CURR_SITE_ELEV = details::FNV1aHash(PROTO_COMMAND_STR_GET_CURR_SITE_ELEV),
|
||
PROTO_COMMAND_ID_GET_UTC_OFFSET = details::FNV1aHash(PROTO_COMMAND_STR_GET_UTC_OFFSET),
|
||
PROTO_COMMAND_ID_GET_CURR_SITE_LONG = details::FNV1aHash(PROTO_COMMAND_STR_GET_CURR_SITE_LONG),
|
||
PROTO_COMMAND_ID_GET_HIGHEST_ALT = details::FNV1aHash(PROTO_COMMAND_STR_GET_HIGHEST_ALT),
|
||
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_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),
|
||
PROTO_COMMAND_ID_GET_CURR_JULDATE_EXTPREC_LEAP_SEC =
|
||
details::FNV1aHash(PROTO_COMMAND_STR_GET_CURR_JULDATE_EXTPREC_LEAP_SEC),
|
||
PROTO_COMMAND_ID_GET_LOCAL_TIME = details::FNV1aHash(PROTO_COMMAND_STR_GET_LOCAL_TIME),
|
||
PROTO_COMMAND_ID_GET_LOCAL_DATE_TIME = details::FNV1aHash(PROTO_COMMAND_STR_GET_LOCAL_DATE_TIME),
|
||
PROTO_COMMAND_ID_GET_UTC_DATE_TIME = details::FNV1aHash(PROTO_COMMAND_STR_GET_UTC_DATE_TIME),
|
||
PROTO_COMMAND_ID_GET_UTC_UT1_DIFF = details::FNV1aHash(PROTO_COMMAND_STR_GET_UTC_UT1_DIFF),
|
||
PROTO_COMMAND_ID_GET_GPS_UTC_DIFF = details::FNV1aHash(PROTO_COMMAND_STR_GET_GPS_UTC_DIFF),
|
||
PROTO_COMMAND_ID_GET_NEXT_LEAP_SEC = details::FNV1aHash(PROTO_COMMAND_STR_GET_NEXT_LEAP_SEC),
|
||
PROTO_COMMAND_ID_GET_MERIDIAN_BEHAV = details::FNV1aHash(PROTO_COMMAND_STR_GET_MERIDIAN_BEHAV),
|
||
PROTO_COMMAND_ID_GET_LOWEST_ALT = details::FNV1aHash(PROTO_COMMAND_STR_GET_LOWEST_ALT),
|
||
PROTO_COMMAND_ID_GET_PA = details::FNV1aHash(PROTO_COMMAND_STR_GET_PA),
|
||
PROTO_COMMAND_ID_GET_PA_SPEED = details::FNV1aHash(PROTO_COMMAND_STR_GET_PA_SPEED),
|
||
PROTO_COMMAND_ID_GET_PA_ZENITH = details::FNV1aHash(PROTO_COMMAND_STR_GET_PA_ZENITH),
|
||
PROTO_COMMAND_ID_GET_PA_ZENITH_SPEED = details::FNV1aHash(PROTO_COMMAND_STR_GET_PA_ZENITH_SPEED),
|
||
PROTO_COMMAND_ID_GET_GUIDING_STATUS = details::FNV1aHash(PROTO_COMMAND_STR_GET_GUIDING_STATUS),
|
||
PROTO_COMMAND_ID_GET_TEL_RA = details::FNV1aHash(PROTO_COMMAND_STR_GET_TEL_RA),
|
||
PROTO_COMMAND_ID_GET_TAG_RA = details::FNV1aHash(PROTO_COMMAND_STR_GET_TAG_RA),
|
||
PROTO_COMMAND_ID_GET_ATM_PRES = details::FNV1aHash(PROTO_COMMAND_STR_GET_ATM_PRES),
|
||
PROTO_COMMAND_ID_GET_ATM_TEMP = details::FNV1aHash(PROTO_COMMAND_STR_GET_ATM_TEMP),
|
||
PROTO_COMMAND_ID_GET_SIDERAL_TIME = details::FNV1aHash(PROTO_COMMAND_STR_GET_SIDERAL_TIME),
|
||
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),
|
||
};
|
||
|
||
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
|
||
};
|
||
|
||
class ControlCommandParser
|
||
{
|
||
public:
|
||
static constexpr char COMM_START_SYMBOL = ':';
|
||
static constexpr char COMM_STOP_SYMBOL = '#';
|
||
|
||
static constexpr char COMM_ACK_SYMBOL = 0x06;
|
||
};
|
||
|
||
} // namespace BM700
|