2023-03-26 16:13:54 +02:00
|
|
|
#ifndef MISSION_POWER_BPXBATTERYHANDLER_H_
|
|
|
|
#define MISSION_POWER_BPXBATTERYHANDLER_H_
|
2022-01-17 15:03:46 +01:00
|
|
|
|
|
|
|
#include <fsfw/devicehandlers/DeviceHandlerBase.h>
|
2023-03-26 16:13:54 +02:00
|
|
|
#include <mission/power/bpxBattDefs.h>
|
2023-03-26 16:42:00 +02:00
|
|
|
#include <mission/utility/trace.h>
|
2022-01-17 16:44:20 +01:00
|
|
|
|
2022-01-17 15:35:46 +01:00
|
|
|
class BpxBatteryHandler : public DeviceHandlerBase {
|
|
|
|
public:
|
2023-03-26 15:28:00 +02:00
|
|
|
BpxBatteryHandler(object_id_t objectId, object_id_t comIF, CookieIF* comCookie,
|
|
|
|
bool enableHkSets);
|
2022-01-17 15:03:46 +01:00
|
|
|
virtual ~BpxBatteryHandler();
|
2022-01-17 15:35:46 +01:00
|
|
|
|
2022-02-02 17:36:40 +01:00
|
|
|
void setToGoToNormalMode(bool enable);
|
2022-04-26 10:37:25 +02:00
|
|
|
void setDebugMode(bool enable);
|
2022-02-02 17:36:40 +01:00
|
|
|
|
2022-01-17 15:35:46 +01:00
|
|
|
protected:
|
2022-02-02 16:07:28 +01:00
|
|
|
enum class States {
|
|
|
|
CHECK_COM = 0,
|
|
|
|
IDLE = 1,
|
|
|
|
};
|
|
|
|
|
2023-03-26 15:28:00 +02:00
|
|
|
bool enableHkSets = false;
|
2022-02-02 16:07:28 +01:00
|
|
|
States state = States::CHECK_COM;
|
|
|
|
bool commandExecuted = false;
|
2022-04-26 10:37:25 +02:00
|
|
|
bool debugMode = false;
|
2022-02-02 16:07:28 +01:00
|
|
|
bool goToNormalModeImmediately = false;
|
|
|
|
uint8_t sentPingByte = BpxBattery::DEFAULT_PING_SENT_BYTE;
|
2023-02-14 10:59:35 +01:00
|
|
|
#if OBSW_THREAD_TRACING == 1
|
|
|
|
uint32_t opCounter = 0;
|
|
|
|
#endif
|
|
|
|
|
2022-01-17 17:11:27 +01:00
|
|
|
BpxBatteryHk hkSet;
|
2022-02-02 16:07:28 +01:00
|
|
|
DeviceCommandId_t lastCmd = DeviceHandlerIF::NO_COMMAND_ID;
|
2022-01-17 17:11:27 +01:00
|
|
|
BpxBatteryCfg cfgSet;
|
2022-02-02 16:07:28 +01:00
|
|
|
std::array<uint8_t, 8> cmdBuf = {};
|
2022-02-02 16:33:36 +01:00
|
|
|
PoolEntry<uint16_t> chargeCurrent = PoolEntry<uint16_t>({0});
|
|
|
|
PoolEntry<uint16_t> dischargeCurrent = PoolEntry<uint16_t>({0});
|
|
|
|
PoolEntry<uint16_t> heaterCurrent = PoolEntry<uint16_t>({0});
|
|
|
|
PoolEntry<uint16_t> battVolt = PoolEntry<uint16_t>({0});
|
|
|
|
PoolEntry<int16_t> battTemp1 = PoolEntry<int16_t>({0});
|
|
|
|
PoolEntry<int16_t> battTemp2 = PoolEntry<int16_t>({0});
|
|
|
|
PoolEntry<int16_t> battTemp3 = PoolEntry<int16_t>({0});
|
|
|
|
PoolEntry<int16_t> battTemp4 = PoolEntry<int16_t>({0});
|
|
|
|
PoolEntry<uint32_t> rebootCounter = PoolEntry<uint32_t>({0});
|
|
|
|
PoolEntry<uint8_t> bootCause = PoolEntry<uint8_t>({0});
|
2022-02-03 15:31:18 +01:00
|
|
|
PoolEntry<uint8_t> battheatMode = PoolEntry<uint8_t>({0});
|
|
|
|
PoolEntry<int8_t> battheatLow = PoolEntry<int8_t>({0});
|
|
|
|
PoolEntry<int8_t> battheatHigh = PoolEntry<int8_t>({0});
|
2022-01-17 17:11:27 +01:00
|
|
|
|
2022-01-17 15:03:46 +01:00
|
|
|
void doStartUp() override;
|
|
|
|
void doShutDown() override;
|
|
|
|
ReturnValue_t buildNormalDeviceCommand(DeviceCommandId_t* id) override;
|
|
|
|
ReturnValue_t buildTransitionDeviceCommand(DeviceCommandId_t* id) override;
|
|
|
|
void fillCommandAndReplyMap() override;
|
2023-02-14 10:59:35 +01:00
|
|
|
void performOperationHook() override;
|
2022-01-17 15:03:46 +01:00
|
|
|
ReturnValue_t buildCommandFromCommand(DeviceCommandId_t deviceCommand, const uint8_t* commandData,
|
2022-01-17 15:35:46 +01:00
|
|
|
size_t commandDataLen) override;
|
2022-01-17 15:03:46 +01:00
|
|
|
ReturnValue_t scanForReply(const uint8_t* start, size_t remainingSize, DeviceCommandId_t* foundId,
|
2022-01-17 15:35:46 +01:00
|
|
|
size_t* foundLen) override;
|
2022-02-02 16:07:28 +01:00
|
|
|
ReturnValue_t interpretDeviceReply(DeviceCommandId_t id, const uint8_t* packet) override;
|
2022-01-17 15:03:46 +01:00
|
|
|
uint32_t getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) override;
|
|
|
|
ReturnValue_t initializeLocalDataPool(localpool::DataPool& localDataPoolMap,
|
2022-01-17 15:35:46 +01:00
|
|
|
LocalDataPoolManager& poolManager) override;
|
2022-01-17 15:03:46 +01:00
|
|
|
};
|
|
|
|
|
2023-03-26 16:13:54 +02:00
|
|
|
#endif /* MISSION_POWER_BPXBATTERYHANDLER_H_ */
|