From 9c383fe7831e003efb738485268e4b31a5f7b820 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Betto?= <niccolo.betto@skywarder.eu> Date: Wed, 27 Nov 2024 14:47:35 +0100 Subject: [PATCH] [RIGv2] Update registry for new valves --- src/RIGv2/Actuators/Actuators.cpp | 28 ++++++------- src/RIGv2/Radio/Radio.cpp | 17 ++++++-- src/RIGv2/Registry/Registry.cpp | 67 +++++++++++++++++++++---------- src/RIGv2/Registry/Registry.h | 59 ++++++++++++++++++++------- 4 files changed, 118 insertions(+), 53 deletions(-) diff --git a/src/RIGv2/Actuators/Actuators.cpp b/src/RIGv2/Actuators/Actuators.cpp index d2a92c244..f22a2aabb 100644 --- a/src/RIGv2/Actuators/Actuators.cpp +++ b/src/RIGv2/Actuators/Actuators.cpp @@ -168,8 +168,8 @@ Actuators::Actuators() info->flipped = Config::Servos::FILLING_FLIPPED; info->openingEvent = Common::Events::MOTOR_OPEN_FILLING_VALVE; info->closingEvent = Common::Events::MOTOR_CLOSE_FILLING_VALVE; - info->openingTimeKey = CONFIG_ID_FILLING_OPENING_TIME; - info->maxApertureKey = CONFIG_ID_FILLING_MAX_APERTURE; + info->openingTimeKey = CONFIG_ID_N2O_FILLING_OPENING_TIME; + info->maxApertureKey = CONFIG_ID_N2O_FILLING_MAX_APERTURE; info->unsafeSetServoPosition(0.0f); info = getServo(ServosList::N2O_RELEASE_VALVE); @@ -179,8 +179,8 @@ Actuators::Actuators() info->flipped = Config::Servos::RELEASE_FLIPPED; info->openingEvent = Common::Events::MOTOR_OPEN_RELEASE_VALVE; info->closingEvent = Common::Events::MOTOR_CLOSE_RELEASE_VALVE; - info->openingTimeKey = CONFIG_ID_RELEASE_OPENING_TIME; - info->maxApertureKey = CONFIG_ID_RELEASE_MAX_APERTURE; + info->openingTimeKey = CONFIG_ID_N2O_RELEASE_OPENING_TIME; + info->maxApertureKey = CONFIG_ID_N2O_RELEASE_MAX_APERTURE; info->unsafeSetServoPosition(0.0f); info = getServo(ServosList::N2O_VENTING_VALVE); @@ -190,8 +190,8 @@ Actuators::Actuators() info->flipped = Config::Servos::VENTING_FLIPPED; info->openingEvent = Common::Events::MOTOR_OPEN_VENTING_VALVE; info->closingEvent = Common::Events::MOTOR_CLOSE_VENTING_VALVE; - info->openingTimeKey = CONFIG_ID_VENTING_OPENING_TIME; - info->maxApertureKey = CONFIG_ID_VENTING_MAX_APERTURE; + info->openingTimeKey = CONFIG_ID_N2O_VENTING_OPENING_TIME; + info->maxApertureKey = CONFIG_ID_N2O_VENTING_MAX_APERTURE; info->unsafeSetServoPosition(0.0f); info = getServo(ServosList::N2_FILLING_VALVE); @@ -201,8 +201,8 @@ Actuators::Actuators() info->flipped = Config::Servos::FILLING_FLIPPED; info->openingEvent = Common::Events::MOTOR_OPEN_FILLING_VALVE; info->closingEvent = Common::Events::MOTOR_CLOSE_FILLING_VALVE; - info->openingTimeKey = CONFIG_ID_FILLING_OPENING_TIME; - info->maxApertureKey = CONFIG_ID_FILLING_MAX_APERTURE; + info->openingTimeKey = CONFIG_ID_N2_FILLING_OPENING_TIME; + info->maxApertureKey = CONFIG_ID_N2_FILLING_MAX_APERTURE; info->unsafeSetServoPosition(0.0f); info = getServo(ServosList::N2_RELEASE_VALVE); @@ -212,8 +212,8 @@ Actuators::Actuators() info->flipped = Config::Servos::RELEASE_FLIPPED; info->openingEvent = Common::Events::MOTOR_OPEN_RELEASE_VALVE; info->closingEvent = Common::Events::MOTOR_CLOSE_RELEASE_VALVE; - info->openingTimeKey = CONFIG_ID_RELEASE_OPENING_TIME; - info->maxApertureKey = CONFIG_ID_RELEASE_MAX_APERTURE; + info->openingTimeKey = CONFIG_ID_N2_RELEASE_OPENING_TIME; + info->maxApertureKey = CONFIG_ID_N2_RELEASE_MAX_APERTURE; info->unsafeSetServoPosition(0.0f); info = getServo(ServosList::N2_DETACH_SERVO); @@ -222,8 +222,8 @@ Actuators::Actuators() info->limit = Config::Servos::DISCONNECT_LIMIT; info->flipped = Config::Servos::DISCONNECT_FLIPPED; info->openingEvent = Common::Events::MOTOR_DISCONNECT; - info->openingTimeKey = CONFIG_ID_DISCONNECT_OPENING_TIME; - info->maxApertureKey = CONFIG_ID_DISCONNECT_MAX_APERTURE; + info->openingTimeKey = CONFIG_ID_N2_DETACH_OPENING_TIME; + info->maxApertureKey = CONFIG_ID_N2_DETACH_MAX_APERTURE; info->unsafeSetServoPosition(0.0f); info = getServo(ServosList::MAIN_VALVE); @@ -244,8 +244,8 @@ Actuators::Actuators() info->flipped = Config::Servos::MAIN_FLIPPED; info->openingEvent = 0; info->closingEvent = 0; - info->openingTimeKey = CONFIG_ID_MAIN_OPENING_TIME; - info->maxApertureKey = CONFIG_ID_MAIN_MAX_APERTURE; + info->openingTimeKey = CONFIG_ID_NITROGEN_OPENING_TIME; + info->maxApertureKey = CONFIG_ID_NITROGEN_MAX_APERTURE; info->unsafeSetServoPosition(0.0f); } diff --git a/src/RIGv2/Radio/Radio.cpp b/src/RIGv2/Radio/Radio.cpp index fe44a57c2..09c2aba51 100644 --- a/src/RIGv2/Radio/Radio.cpp +++ b/src/RIGv2/Radio/Radio.cpp @@ -364,6 +364,17 @@ void Radio::enqueueRegistry() mavlink_message_t msg; const char* name = configurationIdToName(id); + // A safe copy function for key names + auto copyKeyName = [](auto& dest, const char* src) + { + // Ensure dest is not a pointer + static_assert(sizeof(dest) != sizeof(char*)); + + constexpr size_t maxKeyLen = sizeof(dest) / sizeof(dest[0]) - 1; + std::strncpy(dest, src, maxKeyLen); + dest[maxKeyLen] = '\0'; // Ensure null-termination + }; + switch (value.getType()) { case TypesEnum::UINT32: @@ -372,7 +383,7 @@ void Radio::enqueueRegistry() tm.timestamp = TimestampTimer::getTimestamp(); tm.key_id = id; - strcpy(tm.key_name, name); + copyKeyName(tm.key_name, name); value.get(tm.value); mavlink_msg_registry_int_tm_encode( @@ -386,7 +397,7 @@ void Radio::enqueueRegistry() tm.timestamp = TimestampTimer::getTimestamp(); tm.key_id = id; - strcpy(tm.key_name, name); + copyKeyName(tm.key_name, name); value.get(tm.value); mavlink_msg_registry_float_tm_encode( @@ -400,7 +411,7 @@ void Radio::enqueueRegistry() tm.timestamp = TimestampTimer::getTimestamp(); tm.key_id = id; - strcpy(tm.key_name, name); + copyKeyName(tm.key_name, name); Coordinates coord; value.get(coord); tm.latitude = coord.latitude; diff --git a/src/RIGv2/Registry/Registry.cpp b/src/RIGv2/Registry/Registry.cpp index 847764c60..2fa748947 100644 --- a/src/RIGv2/Registry/Registry.cpp +++ b/src/RIGv2/Registry/Registry.cpp @@ -33,32 +33,57 @@ const char* RIGv2::configurationIdToName(ConfigurationId id) { switch (id) { - case CONFIG_ID_FILLING_OPENING_TIME: - return "FillingOpeningTime"; - case CONFIG_ID_VENTING_OPENING_TIME: - return "VentingOpeningTime"; + case CONFIG_ID_N2O_FILLING_OPENING_TIME: + return "N2O_FILLING_OPENING_TIME"; + case CONFIG_ID_N2O_FILLING_MAX_APERTURE: + return "N2O_FILLING_MAX_APERTURE"; + case CONFIG_ID_N2O_RELEASE_OPENING_TIME: + return "N2O_RELEASE_OPENING_TIME"; + case CONFIG_ID_N2O_RELEASE_MAX_APERTURE: + return "N2O_RELEASE_MAX_APERTURE"; + case CONFIG_ID_N2O_DETACH_OPENING_TIME: + return "N2O_DETACH_OPENING_TIME"; + case CONFIG_ID_N2O_DETACH_MAX_APERTURE: + return "N2O_DETACH_MAX_APERTURE"; + case CONFIG_ID_N2O_VENTING_OPENING_TIME: + return "N2O_VENTING_OPENING_TIME"; + case CONFIG_ID_N2O_VENTING_MAX_APERTURE: + return "N2O_VENTING_MAX_APERTURE"; + case CONFIG_ID_N2_FILLING_OPENING_TIME: + return "N2_FILLING_OPENING_TIME"; + case CONFIG_ID_N2_FILLING_MAX_APERTURE: + return "N2_FILLING_MAX_APERTURE"; + case CONFIG_ID_N2_RELEASE_OPENING_TIME: + return "N2_RELEASE_OPENING_TIME"; + case CONFIG_ID_N2_RELEASE_MAX_APERTURE: + return "N2_RELEASE_MAX_APERTURE"; + case CONFIG_ID_N2_DETACH_OPENING_TIME: + return "N2_DETACH_OPENING_TIME"; + case CONFIG_ID_N2_DETACH_MAX_APERTURE: + return "N2_DETACH_MAX_APERTURE"; + case CONFIG_ID_N2_QUENCHING_OPENING_TIME: + return "N2_QUENCHING_OPENING_TIME"; + case CONFIG_ID_N2_QUENCHING_MAX_APERTURE: + return "N2_QUENCHING_MAX_APERTURE"; case CONFIG_ID_MAIN_OPENING_TIME: - return "MainOpeningTime"; - case CONFIG_ID_RELEASE_OPENING_TIME: - return "ReleaseOpeningTime"; - case CONFIG_ID_DISCONNECT_OPENING_TIME: - return "DisconOpeningTime"; - case CONFIG_ID_FILLING_MAX_APERTURE: - return "FillingMaxAperture"; - case CONFIG_ID_VENTING_MAX_APERTURE: - return "VentingMaxAperture"; + return "MAIN_OPENING_TIME"; case CONFIG_ID_MAIN_MAX_APERTURE: - return "MainMaxAperture"; - case CONFIG_ID_RELEASE_MAX_APERTURE: - return "ReleaseMaxAperture"; - case CONFIG_ID_DISCONNECT_MAX_APERTURE: - return "DisconMaxAperture"; + return "MAIN_MAX_APERTURE"; + case CONFIG_ID_NITROGEN_OPENING_TIME: + return "NITROGEN_OPENING_TIME"; + case CONFIG_ID_NITROGEN_MAX_APERTURE: + return "NITROGEN_MAX_APERTURE"; case CONFIG_ID_IGNITION_TIME: - return "IgnitionTime"; + return "IGNITION_TIME"; case CONFIG_ID_DEFAULT_OPENING_TIME: - return "DefOpeningTime"; + return "DEFAULT_OPENING_TIME"; case CONFIG_ID_DEFAULT_MAX_APERTURE: - return "DefMaxAperture"; + return "DEFAULT_MAX_APERTURE"; + case CONFIG_ID_CHAMBER_TIME: + return "CHAMBER_TIME"; + case CONFIG_ID_CHAMBER_DELAY: + return "CHAMBER_DELAY"; + default: return "<invalid>"; } diff --git a/src/RIGv2/Registry/Registry.h b/src/RIGv2/Registry/Registry.h index 1f9b99b61..b1f8e4cd2 100644 --- a/src/RIGv2/Registry/Registry.h +++ b/src/RIGv2/Registry/Registry.h @@ -30,21 +30,50 @@ namespace RIGv2 enum ConfigurationKeys { - CONFIG_ID_FILLING_OPENING_TIME = 1, - CONFIG_ID_VENTING_OPENING_TIME = 2, - CONFIG_ID_MAIN_OPENING_TIME = 3, - CONFIG_ID_RELEASE_OPENING_TIME = 4, - CONFIG_ID_DISCONNECT_OPENING_TIME = 5, - CONFIG_ID_FILLING_MAX_APERTURE = 6, - CONFIG_ID_VENTING_MAX_APERTURE = 7, - CONFIG_ID_MAIN_MAX_APERTURE = 8, - CONFIG_ID_RELEASE_MAX_APERTURE = 9, - CONFIG_ID_DISCONNECT_MAX_APERTURE = 10, - CONFIG_ID_IGNITION_TIME = 11, - CONFIG_ID_DEFAULT_OPENING_TIME = 12, - CONFIG_ID_DEFAULT_MAX_APERTURE = 13, - CONFIG_ID_CHAMBER_TIME = 14, - CONFIG_ID_CHAMBER_DELAY = 15, + // N2O + CONFIG_ID_N2O_FILLING_OPENING_TIME, + CONFIG_ID_N2O_FILLING_MAX_APERTURE, + + CONFIG_ID_N2O_RELEASE_OPENING_TIME, + CONFIG_ID_N2O_RELEASE_MAX_APERTURE, + + CONFIG_ID_N2O_DETACH_OPENING_TIME, + CONFIG_ID_N2O_DETACH_MAX_APERTURE, + + CONFIG_ID_N2O_VENTING_OPENING_TIME, + CONFIG_ID_N2O_VENTING_MAX_APERTURE, + + // N2 + CONFIG_ID_N2_FILLING_OPENING_TIME, + CONFIG_ID_N2_FILLING_MAX_APERTURE, + + CONFIG_ID_N2_RELEASE_OPENING_TIME, + CONFIG_ID_N2_RELEASE_MAX_APERTURE, + + CONFIG_ID_N2_DETACH_OPENING_TIME, + CONFIG_ID_N2_DETACH_MAX_APERTURE, + + CONFIG_ID_N2_QUENCHING_OPENING_TIME, + CONFIG_ID_N2_QUENCHING_MAX_APERTURE, + + // Main & Nitrogen + CONFIG_ID_MAIN_OPENING_TIME, + CONFIG_ID_MAIN_MAX_APERTURE, + + CONFIG_ID_NITROGEN_OPENING_TIME, + CONFIG_ID_NITROGEN_MAX_APERTURE, + + // Ignition parameters + CONFIG_ID_IGNITION_TIME, + + // Default valve parameters + CONFIG_ID_DEFAULT_OPENING_TIME, + CONFIG_ID_DEFAULT_MAX_APERTURE, + + // Chamber valve parameters + CONFIG_ID_CHAMBER_TIME, // Time the chamber valve stays open + CONFIG_ID_CHAMBER_DELAY, // Delay of opening the chamber valve after + // opening the main valve }; const char* configurationIdToName(Boardcore::ConfigurationId id); -- GitLab