#pragma once /* * Astrosib BM-700 mount client-to-server communication protocol * (extended by 10Micron LX200 protocol) */ #include #include #include #include #include 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, // "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