From d5a09dc2808ad7e843e96748a9ba38cee6102c73 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 17 Jan 2022 17:11:27 +0100 Subject: [PATCH] added cfg HK --- mission/devices/BpxBatteryHandler.cpp | 11 ++- mission/devices/BpxBatteryHandler.h | 3 + .../devicedefinitions/BpxBatteryDefinitions.h | 82 +++++++++++++++---- 3 files changed, 78 insertions(+), 18 deletions(-) diff --git a/mission/devices/BpxBatteryHandler.cpp b/mission/devices/BpxBatteryHandler.cpp index 7d504105..111a5acf 100644 --- a/mission/devices/BpxBatteryHandler.cpp +++ b/mission/devices/BpxBatteryHandler.cpp @@ -1,7 +1,7 @@ #include "BpxBatteryHandler.h" BpxBatteryHandler::BpxBatteryHandler(object_id_t objectId, object_id_t comIF, CookieIF* comCookie) - : DeviceHandlerBase(objectId, comIF, comCookie) {} + : DeviceHandlerBase(objectId, comIF, comCookie), hkSet(this), cfgSet(this) {} BpxBatteryHandler::~BpxBatteryHandler() {} @@ -17,7 +17,14 @@ ReturnValue_t BpxBatteryHandler::buildTransitionDeviceCommand(DeviceCommandId_t* return HasReturnvaluesIF::RETURN_OK; } -void BpxBatteryHandler::fillCommandAndReplyMap() {} +void BpxBatteryHandler::fillCommandAndReplyMap() { + insertInCommandAndReplyMap(BpxBattery::READ_HK, 1, &hkSet); + insertInCommandAndReplyMap(BpxBattery::PING, 1); + insertInCommandAndReplyMap(BpxBattery::REBOOT, 1); + insertInCommandAndReplyMap(BpxBattery::RESET_COUNTERS, 1); + insertInCommandAndReplyMap(BpxBattery::RESTORE_DEFAULT_CONFIG, 1); + insertInCommandAndReplyMap(BpxBattery::READ_CONFIG, 1); +} ReturnValue_t BpxBatteryHandler::buildCommandFromCommand(DeviceCommandId_t deviceCommand, const uint8_t* commandData, diff --git a/mission/devices/BpxBatteryHandler.h b/mission/devices/BpxBatteryHandler.h index 6ab0ea9c..2699f548 100644 --- a/mission/devices/BpxBatteryHandler.h +++ b/mission/devices/BpxBatteryHandler.h @@ -11,6 +11,9 @@ class BpxBatteryHandler : public DeviceHandlerBase { virtual ~BpxBatteryHandler(); protected: + BpxBatteryHk hkSet; + BpxBatteryCfg cfgSet; + void doStartUp() override; void doShutDown() override; ReturnValue_t buildNormalDeviceCommand(DeviceCommandId_t* id) override; diff --git a/mission/devices/devicedefinitions/BpxBatteryDefinitions.h b/mission/devices/devicedefinitions/BpxBatteryDefinitions.h index b0ab8df7..1fbe4653 100644 --- a/mission/devices/devicedefinitions/BpxBatteryDefinitions.h +++ b/mission/devices/devicedefinitions/BpxBatteryDefinitions.h @@ -8,7 +8,7 @@ namespace BpxBattery { -enum BpxPoolIds { +enum HkPoolIds { CHARGE_CURRENT = 0, DISCHARGE_CURRENT = 1, HEATER_CURRENT = 2, @@ -21,7 +21,21 @@ enum BpxPoolIds { BOOTCAUSE = 9 }; +enum CfgPoolIds { BATTERY_HEATER_MODE = 0, BATTHEAT_LOW_LIMIT = 1, BATTHEAT_HIGH_LIMIT = 2 }; + +static constexpr DeviceCommandId_t READ_HK = 0; +static constexpr DeviceCommandId_t PING = 1; +static constexpr DeviceCommandId_t REBOOT = 2; +static constexpr DeviceCommandId_t RESET_COUNTERS = 3; +static constexpr DeviceCommandId_t RESTORE_DEFAULT_CONFIG = 4; +static constexpr DeviceCommandId_t READ_CONFIG = 5; +static constexpr DeviceCommandId_t WRITE_CONFIG = 6; + +static constexpr DeviceCommandId_t MANUAL_HEATER_ON = 10; +static constexpr DeviceCommandId_t MANUAL_HEATER_OFF = 11; + static constexpr uint32_t HK_SET_ID = 0; +static constexpr uint32_t CFG_SET_ID = 1; static constexpr uint8_t PORT_PING = 1; static constexpr uint8_t PORT_REBOOT = 4; @@ -34,7 +48,7 @@ static constexpr uint8_t PORT_MAN_HEAT_ON = 20; static constexpr uint8_t PORT_MAN_HEAT_OFF = 21; static constexpr uint8_t HK_ENTRIES = 10; - +static constexpr uint8_t CFG_ENTRIES = 3; // Taken from BPX manual 3.14 typedef struct __attribute__((packed)) { @@ -46,7 +60,6 @@ typedef struct __attribute__((packed)) { //! Turn heater off at [degC] } bpx_config_t; - //! Not used for more but might still be useful class BpxHkDeserializer : public SerialLinkedListAdapter { public: @@ -88,11 +101,12 @@ class BpxHkDeserializer : public SerialLinkedListAdapter { } }; +}; // namespace BpxBattery /** * @brief BPX HK data holder */ -class BpxBatteryHk : public StaticLocalDataSet { +class BpxBatteryHk : public StaticLocalDataSet { public: /** * Constructor for data users @@ -148,38 +162,36 @@ class BpxBatteryHk : public StaticLocalDataSet { return result; } - BpxBatteryHk(); - private: //! Charge current in mA lp_var_t chargeCurrent = - lp_var_t(sid.objectId, BpxBattery::BpxPoolIds::CHARGE_CURRENT, this); + lp_var_t(sid.objectId, BpxBattery::HkPoolIds::CHARGE_CURRENT, this); //! Discharge current in mA lp_var_t dischargeCurrent = - lp_var_t(sid.objectId, BpxBattery::BpxPoolIds::DISCHARGE_CURRENT, this); + lp_var_t(sid.objectId, BpxBattery::HkPoolIds::DISCHARGE_CURRENT, this); //! Heater current in mA lp_var_t heaterCurrent = - lp_var_t(sid.objectId, BpxBattery::BpxPoolIds::HEATER_CURRENT, this); + lp_var_t(sid.objectId, BpxBattery::HkPoolIds::HEATER_CURRENT, this); //! Battery voltage in mV lp_var_t battVoltage = - lp_var_t(sid.objectId, BpxBattery::BpxPoolIds::BATT_VOLTAGE, this); + lp_var_t(sid.objectId, BpxBattery::HkPoolIds::BATT_VOLTAGE, this); //! Battery temperature 1 in degC SerializeElement battTemp1 = - lp_var_t(sid.objectId, BpxBattery::BpxPoolIds::BATT_TEMP_1, this); + lp_var_t(sid.objectId, BpxBattery::HkPoolIds::BATT_TEMP_1, this); //! Battery temperature 2 in degC SerializeElement battTemp2 = - lp_var_t(sid.objectId, BpxBattery::BpxPoolIds::BATT_TEMP_2, this); + lp_var_t(sid.objectId, BpxBattery::HkPoolIds::BATT_TEMP_2, this); //! Battery temperature 3 in degC SerializeElement battTemp3 = - lp_var_t(sid.objectId, BpxBattery::BpxPoolIds::BATT_TEMP_3, this); + lp_var_t(sid.objectId, BpxBattery::HkPoolIds::BATT_TEMP_3, this); //! Battery temperature 4 in degC SerializeElement battTemp4 = - lp_var_t(sid.objectId, BpxBattery::BpxPoolIds::BATT_TEMP_4, this); + lp_var_t(sid.objectId, BpxBattery::HkPoolIds::BATT_TEMP_4, this); SerializeElement rebootCounter = - lp_var_t(sid.objectId, BpxBattery::BpxPoolIds::REBOOT_COUNTER, this); + lp_var_t(sid.objectId, BpxBattery::HkPoolIds::REBOOT_COUNTER, this); SerializeElement bootcause = - lp_var_t(sid.objectId, BpxBattery::BpxPoolIds::BOOTCAUSE, this); + lp_var_t(sid.objectId, BpxBattery::HkPoolIds::BOOTCAUSE, this); friend class BpxBatteryHandler; /** @@ -189,6 +201,44 @@ class BpxBatteryHk : public StaticLocalDataSet { BpxBatteryHk(HasLocalDataPoolIF* hkOwner) : StaticLocalDataSet(hkOwner, BpxBattery::HK_SET_ID) {} }; +class BpxBatteryCfg : public StaticLocalDataSet { + public: + /** + * Constructor for data users + * @param gyroId + */ + BpxBatteryCfg(object_id_t bpxId) : StaticLocalDataSet(sid_t(bpxId, BpxBattery::CFG_SET_ID)) { + setAllVariablesReadOnly(); + } + + ReturnValue_t parseRawHk(const uint8_t* data, size_t size) { + if (size < 3) { + return SerializeIF::STREAM_TOO_SHORT; + } + battheatermode.value = data[0]; + battheaterLow.value = data[1]; + battheaterHigh.value = data[2]; + return HasReturnvaluesIF::RETURN_OK; + } + + //! Mode for battheater [0=OFF,1=Auto] + lp_var_t battheatermode = + lp_var_t(sid.objectId, BpxBattery::CfgPoolIds::BATTERY_HEATER_MODE, this); + //! Turn heater on at [degC] + lp_var_t battheaterLow = + lp_var_t(sid.objectId, BpxBattery::CfgPoolIds::BATTHEAT_LOW_LIMIT, this); + //! Turn heater off at [degC] + lp_var_t battheaterHigh = + lp_var_t(sid.objectId, BpxBattery::CfgPoolIds::BATTHEAT_HIGH_LIMIT, this); + + private: + friend class BpxBatteryHandler; + /** + * Constructor for data creator + * @param hkOwner + */ + BpxBatteryCfg(HasLocalDataPoolIF* hkOwner) + : StaticLocalDataSet(hkOwner, BpxBattery::CFG_SET_ID) {} }; #endif /* MISSION_DEVICES_DEVICEDEFINITIONS_BPXBATTERYDEFINITIONS_H_ */