This commit is contained in:
Timur A. Fatkhullin 2025-01-23 18:18:12 +03:00
parent d5b3f188fc
commit 309fc7f56c

View File

@ -109,7 +109,7 @@ static constexpr std::string_view PROTO_COMMAND_STR_GET_EMUL_FWR_REV = "V"; //
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_hP = "hP";
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?";
@ -348,7 +348,7 @@ enum PROTO_COMMAND_ID : size_t {
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_hP = details::FNV1aHash(PROTO_COMMAND_STR_SLEW_TO_PARK_hP),
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),
@ -567,7 +567,7 @@ static constexpr std::array PROTO_COMMAND_DESC = {
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_hP, PROTO_COMMAND_ID_SLEW_TO_PARK_hP, ""},
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, ""},
@ -718,6 +718,25 @@ static constexpr std::array PROTO_COMMAND_DESC = {
};
namespace details
{
consteval bool checkCollision()
{
for (size_t i = 0; i < PROTO_COMMAND_DESC.size() - 1; ++i) {
for (size_t j = i + 1; j < PROTO_COMMAND_DESC.size() - 1; ++j) {
if (PROTO_COMMAND_DESC[i].hash == PROTO_COMMAND_DESC[j].hash) {
return false;
}
}
}
return true;
}
static_assert(checkCollision(), "There are collisions in the hash computation of the commands!!!");
} // namespace details
class ControlCommandParser
{