From 309fc7f56c10ab01616d48f9c23b6aba8604cef2 Mon Sep 17 00:00:00 2001 From: "Timur A. Fatkhullin" Date: Thu, 23 Jan 2025 18:18:12 +0300 Subject: [PATCH] ... --- cxx/comm_proto.h | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/cxx/comm_proto.h b/cxx/comm_proto.h index 9c62206..5d6931b 100644 --- a/cxx/comm_proto.h +++ b/cxx/comm_proto.h @@ -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 {