bpx handler now working
All checks were successful
EIVE/eive-obsw/pipeline/head This commit looks good
All checks were successful
EIVE/eive-obsw/pipeline/head This commit looks good
This commit is contained in:
@ -1,11 +1,11 @@
|
||||
#include "BpxBatteryHandler.h"
|
||||
#include "OBSWConfig.h"
|
||||
|
||||
#include <fsfw/datapool/PoolReadGuard.h>
|
||||
|
||||
#include "OBSWConfig.h"
|
||||
|
||||
BpxBatteryHandler::BpxBatteryHandler(object_id_t objectId, object_id_t comIF, CookieIF* comCookie)
|
||||
: DeviceHandlerBase(objectId, comIF, comCookie), hkSet(this), cfgSet(this) {
|
||||
}
|
||||
: DeviceHandlerBase(objectId, comIF, comCookie), hkSet(this), cfgSet(this) {}
|
||||
|
||||
BpxBatteryHandler::~BpxBatteryHandler() {}
|
||||
|
||||
@ -34,7 +34,7 @@ ReturnValue_t BpxBatteryHandler::buildNormalDeviceCommand(DeviceCommandId_t* id)
|
||||
}
|
||||
|
||||
ReturnValue_t BpxBatteryHandler::buildTransitionDeviceCommand(DeviceCommandId_t* id) {
|
||||
if(state == States::CHECK_COM) {
|
||||
if (state == States::CHECK_COM) {
|
||||
*id = BpxBattery::PING;
|
||||
return buildCommandFromCommand(*id, nullptr, 0);
|
||||
}
|
||||
@ -42,18 +42,23 @@ ReturnValue_t BpxBatteryHandler::buildTransitionDeviceCommand(DeviceCommandId_t*
|
||||
}
|
||||
|
||||
void BpxBatteryHandler::fillCommandAndReplyMap() {
|
||||
insertInCommandAndReplyMap(BpxBattery::GET_HK, 1, &hkSet);
|
||||
insertInCommandAndReplyMap(BpxBattery::PING, 1);
|
||||
insertInCommandAndReplyMap(BpxBattery::GET_HK, 1, &hkSet, 23);
|
||||
insertInCommandAndReplyMap(BpxBattery::PING, 1, nullptr, 3);
|
||||
insertInCommandAndReplyMap(BpxBattery::REBOOT, 1);
|
||||
insertInCommandAndReplyMap(BpxBattery::RESET_COUNTERS, 1);
|
||||
insertInCommandAndReplyMap(BpxBattery::CONFIG_CMD, 1);
|
||||
insertInCommandAndReplyMap(BpxBattery::CONFIG_GET, 1, &cfgSet);
|
||||
insertInCommandAndReplyMap(BpxBattery::CONFIG_GET, 1, &cfgSet, 3);
|
||||
}
|
||||
|
||||
ReturnValue_t BpxBatteryHandler::buildCommandFromCommand(DeviceCommandId_t deviceCommand,
|
||||
const uint8_t* commandData,
|
||||
size_t commandDataLen) {
|
||||
switch (deviceCommand) {
|
||||
case (BpxBattery::GET_HK): {
|
||||
cmdBuf[0] = BpxBattery::PORT_GET_HK;
|
||||
this->rawPacketLen = 1;
|
||||
break;
|
||||
}
|
||||
case (BpxBattery::PING): {
|
||||
if (commandDataLen == 1 and commandData != nullptr) {
|
||||
sentPingByte = commandData[0];
|
||||
@ -137,42 +142,40 @@ ReturnValue_t BpxBatteryHandler::scanForReply(const uint8_t* start, size_t remai
|
||||
DeviceCommandId_t* foundId, size_t* foundLen) {
|
||||
switch (lastCmd) {
|
||||
case (BpxBattery::GET_HK): {
|
||||
if (remainingSize != 21) {
|
||||
if (remainingSize != 23) {
|
||||
return DeviceHandlerIF::LENGTH_MISSMATCH;
|
||||
}
|
||||
*foundLen = 21;
|
||||
break;
|
||||
}
|
||||
case (BpxBattery::PING):
|
||||
case (BpxBattery::MAN_HEAT_ON):
|
||||
case (BpxBattery::MAN_HEAT_OFF): {
|
||||
if (remainingSize != 1) {
|
||||
if (remainingSize != 3) {
|
||||
return DeviceHandlerIF::LENGTH_MISSMATCH;
|
||||
}
|
||||
*foundLen = 1;
|
||||
break;
|
||||
}
|
||||
case (BpxBattery::REBOOT):
|
||||
case (BpxBattery::RESET_COUNTERS):
|
||||
case (BpxBattery::CONFIG_CMD):
|
||||
case (BpxBattery::CONFIG_SET): {
|
||||
if (remainingSize != 0) {
|
||||
if (remainingSize != 2) {
|
||||
return DeviceHandlerIF::LENGTH_MISSMATCH;
|
||||
}
|
||||
*foundLen = 0;
|
||||
break;
|
||||
}
|
||||
case (BpxBattery::CONFIG_GET): {
|
||||
if (remainingSize != 3) {
|
||||
if (remainingSize != 5) {
|
||||
return DeviceHandlerIF::LENGTH_MISSMATCH;
|
||||
}
|
||||
*foundLen = 3;
|
||||
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
return DeviceHandlerIF::UNKNOWN_DEVICE_REPLY;
|
||||
}
|
||||
}
|
||||
*foundLen = remainingSize;
|
||||
*foundId = lastCmd;
|
||||
return HasReturnvaluesIF::RETURN_OK;
|
||||
}
|
||||
@ -181,30 +184,30 @@ ReturnValue_t BpxBatteryHandler::interpretDeviceReply(DeviceCommandId_t id, cons
|
||||
switch (id) {
|
||||
case (BpxBattery::GET_HK): {
|
||||
PoolReadGuard rg(&hkSet);
|
||||
ReturnValue_t result = hkSet.parseRawHk(packet, 21);
|
||||
ReturnValue_t result = hkSet.parseRawHk(packet + 2, 21);
|
||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||
return result;
|
||||
}
|
||||
#if OBSW_DEBUG_BPX_BATT == 1
|
||||
sif::info << "BPX Battery HK output:" << std::endl;
|
||||
sif::info << "Charge current [mA]: " << hkSet.chargeCurrent << std::endl;
|
||||
sif::info << "Discharge current [mA]; " << hkSet.dischargeCurrent << std::endl;
|
||||
sif::info << "Heater current [mA]: " << hkSet.heaterCurrent << std::endl;
|
||||
sif::info << "Battery voltage [mV]: " << hkSet.battVoltage << std::endl;
|
||||
sif::info << "Battery Temperature 1 [C]: " << hkSet.battTemp1 << std::endl;
|
||||
sif::info << "Battery Temperature 2 [C]: " << hkSet.battTemp2 << std::endl;
|
||||
sif::info << "Battery Temperature 3 [C]: " << hkSet.battTemp3 << std::endl;
|
||||
sif::info << "Battery Temperature 4 [C]: " << hkSet.battTemp4 << std::endl;
|
||||
sif::info << "Battery Reboot Counter: " << hkSet.rebootCounter << std::endl;
|
||||
sif::info << "Battery Boot Cause: " << hkSet.bootcause << std::endl;
|
||||
sif::info << "BPX Battery HK output:" << std::endl;
|
||||
sif::info << "Charge current [mA]: " << hkSet.chargeCurrent << std::endl;
|
||||
sif::info << "Discharge current [mA]: " << hkSet.dischargeCurrent << std::endl;
|
||||
sif::info << "Heater current [mA]: " << hkSet.heaterCurrent << std::endl;
|
||||
sif::info << "Battery voltage [mV]: " << hkSet.battVoltage << std::endl;
|
||||
sif::info << "Battery Temperature 1 [C]: " << hkSet.battTemp1 << std::endl;
|
||||
sif::info << "Battery Temperature 2 [C]: " << hkSet.battTemp2 << std::endl;
|
||||
sif::info << "Battery Temperature 3 [C]: " << hkSet.battTemp3 << std::endl;
|
||||
sif::info << "Battery Temperature 4 [C]: " << hkSet.battTemp4 << std::endl;
|
||||
sif::info << "Battery Reboot Counter: " << hkSet.rebootCounter << std::endl;
|
||||
sif::info << "Battery Boot Cause: " << static_cast<int>(hkSet.bootcause.value) << std::endl;
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
case (BpxBattery::PING): {
|
||||
if (packet[0] != sentPingByte) {
|
||||
return DeviceHandlerIF::INVALID_DATA;
|
||||
if (packet[2] != sentPingByte) {
|
||||
return DeviceHandlerIF::INVALID_DATA;
|
||||
}
|
||||
if(mode == _MODE_START_UP) {
|
||||
if (mode == _MODE_START_UP) {
|
||||
commandExecuted = true;
|
||||
}
|
||||
break;
|
||||
@ -216,14 +219,14 @@ ReturnValue_t BpxBatteryHandler::interpretDeviceReply(DeviceCommandId_t id, cons
|
||||
}
|
||||
case (BpxBattery::MAN_HEAT_ON):
|
||||
case (BpxBattery::MAN_HEAT_OFF): {
|
||||
if (packet[0] != 0x01) {
|
||||
if (packet[2] != 0x01) {
|
||||
return DeviceHandlerIF::DEVICE_DID_NOT_EXECUTE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case (BpxBattery::CONFIG_GET): {
|
||||
PoolReadGuard rg(&cfgSet);
|
||||
ReturnValue_t result = cfgSet.parseRawHk(packet, 3);
|
||||
ReturnValue_t result = cfgSet.parseRawHk(packet + 2, 3);
|
||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||
return result;
|
||||
}
|
||||
@ -250,6 +253,7 @@ ReturnValue_t BpxBatteryHandler::initializeLocalDataPool(localpool::DataPool& lo
|
||||
localDataPoolMap.emplace(BpxBattery::HkPoolIds::BATT_VOLTAGE, &battVolt);
|
||||
localDataPoolMap.emplace(BpxBattery::HkPoolIds::REBOOT_COUNTER, &rebootCounter);
|
||||
localDataPoolMap.emplace(BpxBattery::HkPoolIds::BOOTCAUSE, &bootCause);
|
||||
poolManager.subscribeForPeriodicPacket(hkSet.getSid(), false, 1.0, false);
|
||||
return HasReturnvaluesIF::RETURN_OK;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user