split P60 dock HK into core and aux HK
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:
@ -6,9 +6,9 @@
|
||||
|
||||
P60DockHandler::P60DockHandler(object_id_t objectId, object_id_t comIF, CookieIF *comCookie)
|
||||
: GomspaceDeviceHandler(objectId, comIF, comCookie, P60Dock::MAX_CONFIGTABLE_ADDRESS,
|
||||
P60Dock::MAX_HKTABLE_ADDRESS, P60Dock::HK_TABLE_REPLY_SIZE,
|
||||
&p60dockHkTableDataset),
|
||||
p60dockHkTableDataset(this) {}
|
||||
P60Dock::MAX_HKTABLE_ADDRESS, P60Dock::HK_TABLE_REPLY_SIZE),
|
||||
coreHk(this),
|
||||
auxHk(this) {}
|
||||
|
||||
P60DockHandler::~P60DockHandler() {}
|
||||
|
||||
@ -23,7 +23,7 @@ void P60DockHandler::letChildHandleHkReply(DeviceCommandId_t id, const uint8_t *
|
||||
* Hk table will be sent to the commander if hk table request was not triggered by the
|
||||
* P60DockHandler itself.
|
||||
*/
|
||||
handleDeviceTM(&p60dockHkTableDataset, id, true);
|
||||
handleDeviceTM(&coreHk, id, true);
|
||||
|
||||
#if OBSW_VERBOSE_LEVEL >= 1 && OBSW_DEBUG_P60DOCK == 1
|
||||
p60dockHkTableDataset.read();
|
||||
@ -73,8 +73,12 @@ void P60DockHandler::letChildHandleHkReply(DeviceCommandId_t id, const uint8_t *
|
||||
void P60DockHandler::parseHkTableReply(const uint8_t *packet) {
|
||||
using namespace P60Dock;
|
||||
uint16_t dataOffset = 0;
|
||||
PoolReadGuard pg(&p60dockHkTableDataset);
|
||||
if (pg.getReadResult() != HasReturnvaluesIF::RETURN_OK) {
|
||||
PoolReadGuard pg0(&coreHk);
|
||||
PoolReadGuard pg1(&auxHk);
|
||||
if (pg0.getReadResult() != HasReturnvaluesIF::RETURN_OK or
|
||||
pg1.getReadResult() != HasReturnvaluesIF::RETURN_OK) {
|
||||
coreHk.setValidity(false, true);
|
||||
auxHk.setValidity(false, true);
|
||||
return;
|
||||
}
|
||||
/**
|
||||
@ -83,129 +87,116 @@ void P60DockHandler::parseHkTableReply(const uint8_t *packet) {
|
||||
*/
|
||||
dataOffset += 12;
|
||||
for (uint8_t idx = 0; idx < hk::CHNLS_LEN; idx++) {
|
||||
p60dockHkTableDataset.currents[idx] = *(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
coreHk.currents[idx] = *(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
dataOffset += 4;
|
||||
}
|
||||
for (uint8_t idx = 0; idx < hk::CHNLS_LEN; idx++) {
|
||||
p60dockHkTableDataset.voltages[idx] = *(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
coreHk.voltages[idx] = *(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
dataOffset += 4;
|
||||
}
|
||||
for (uint8_t idx = 0; idx < hk::CHNLS_LEN; idx++) {
|
||||
p60dockHkTableDataset.outputEnables[idx] = *(packet + dataOffset);
|
||||
coreHk.outputEnables[idx] = *(packet + dataOffset);
|
||||
dataOffset += 3;
|
||||
}
|
||||
|
||||
p60dockHkTableDataset.temperature1 = *(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
coreHk.temperature1 = *(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
dataOffset += 4;
|
||||
p60dockHkTableDataset.temperature2 = *(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
coreHk.temperature2 = *(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
dataOffset += 4;
|
||||
|
||||
p60dockHkTableDataset.bootcause = *(packet + dataOffset) << 24 |
|
||||
auxHk.bootcause = *(packet + dataOffset) << 24 |
|
||||
|
||||
*(packet + dataOffset + 1) << 16 |
|
||||
*(packet + dataOffset + 2) << 8 | *(packet + dataOffset + 3);
|
||||
*(packet + dataOffset + 1) << 16 | *(packet + dataOffset + 2) << 8 |
|
||||
*(packet + dataOffset + 3);
|
||||
dataOffset += 6;
|
||||
p60dockHkTableDataset.bootCount = *(packet + dataOffset) << 24 |
|
||||
*(packet + dataOffset + 1) << 16 |
|
||||
*(packet + dataOffset + 2) << 8 | *(packet + dataOffset + 3);
|
||||
coreHk.bootCount = *(packet + dataOffset) << 24 | *(packet + dataOffset + 1) << 16 |
|
||||
*(packet + dataOffset + 2) << 8 | *(packet + dataOffset + 3);
|
||||
dataOffset += 6;
|
||||
p60dockHkTableDataset.uptime = *(packet + dataOffset) << 24 | *(packet + dataOffset + 1) << 16 |
|
||||
*(packet + dataOffset + 2) << 8 | *(packet + dataOffset + 3);
|
||||
auxHk.uptime = *(packet + dataOffset) << 24 | *(packet + dataOffset + 1) << 16 |
|
||||
*(packet + dataOffset + 2) << 8 | *(packet + dataOffset + 3);
|
||||
dataOffset += 6;
|
||||
p60dockHkTableDataset.resetcause = *(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
auxHk.resetcause = *(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
dataOffset += 4;
|
||||
p60dockHkTableDataset.battMode = *(packet + dataOffset);
|
||||
coreHk.battMode = *(packet + dataOffset);
|
||||
dataOffset += 3;
|
||||
p60dockHkTableDataset.heaterOn = *(packet + dataOffset);
|
||||
auxHk.heaterOn = *(packet + dataOffset);
|
||||
/* + 13 because here begins a new gomspace csp data field */
|
||||
dataOffset += 13;
|
||||
p60dockHkTableDataset.converter5VStatus = *(packet + dataOffset);
|
||||
auxHk.converter5VStatus = *(packet + dataOffset);
|
||||
dataOffset += 3;
|
||||
|
||||
for (uint8_t idx = 0; idx < hk::CHNLS_LEN; idx++) {
|
||||
p60dockHkTableDataset.latchups[idx] = *(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
auxHk.latchups[idx] = *(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
dataOffset += 4;
|
||||
}
|
||||
|
||||
p60dockHkTableDataset.dockVbatVoltageValue =
|
||||
*(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
auxHk.dockVbatVoltageValue = *(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
dataOffset += 4;
|
||||
p60dockHkTableDataset.dockVccCurrent = *(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
auxHk.dockVccCurrent = *(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
dataOffset += 4;
|
||||
p60dockHkTableDataset.batteryCurrent = *(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
coreHk.batteryCurrent = *(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
dataOffset += 4;
|
||||
p60dockHkTableDataset.batteryVoltage = *(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
coreHk.batteryVoltage = *(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
dataOffset += 4;
|
||||
|
||||
p60dockHkTableDataset.batteryTemperature1 =
|
||||
*(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
auxHk.batteryTemperature1 = *(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
dataOffset += 4;
|
||||
p60dockHkTableDataset.batteryTemperature2 =
|
||||
*(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
auxHk.batteryTemperature2 = *(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
dataOffset += 4;
|
||||
|
||||
for (uint8_t idx = 0; idx < NUM_DEVS; idx++) {
|
||||
p60dockHkTableDataset.devicesType[idx] = *(packet + dataOffset);
|
||||
auxHk.devicesType[idx] = *(packet + dataOffset);
|
||||
dataOffset += 3;
|
||||
}
|
||||
for (uint8_t idx = 0; idx < NUM_DEVS; idx++) {
|
||||
p60dockHkTableDataset.devicesStatus[idx] = *(packet + dataOffset);
|
||||
auxHk.devicesStatus[idx] = *(packet + dataOffset);
|
||||
dataOffset += 3;
|
||||
}
|
||||
|
||||
p60dockHkTableDataset.dearmStatus = *(packet + dataOffset);
|
||||
auxHk.dearmStatus = *(packet + dataOffset);
|
||||
dataOffset += 3;
|
||||
|
||||
p60dockHkTableDataset.wdtCntGnd = *(packet + dataOffset) << 24 |
|
||||
*(packet + dataOffset + 1) << 16 |
|
||||
*(packet + dataOffset + 2) << 8 | *(packet + dataOffset + 3);
|
||||
auxHk.wdtCntGnd = *(packet + dataOffset) << 24 | *(packet + dataOffset + 1) << 16 |
|
||||
*(packet + dataOffset + 2) << 8 | *(packet + dataOffset + 3);
|
||||
dataOffset += 6;
|
||||
p60dockHkTableDataset.wdtCntI2c = *(packet + dataOffset) << 24 |
|
||||
*(packet + dataOffset + 1) << 16 |
|
||||
*(packet + dataOffset + 2) << 8 | *(packet + dataOffset + 3);
|
||||
auxHk.wdtCntI2c = *(packet + dataOffset) << 24 | *(packet + dataOffset + 1) << 16 |
|
||||
*(packet + dataOffset + 2) << 8 | *(packet + dataOffset + 3);
|
||||
dataOffset += 6;
|
||||
p60dockHkTableDataset.wdtCntCan = *(packet + dataOffset) << 24 |
|
||||
*(packet + dataOffset + 1) << 16 |
|
||||
*(packet + dataOffset + 2) << 8 | *(packet + dataOffset + 3);
|
||||
auxHk.wdtCntCan = *(packet + dataOffset) << 24 | *(packet + dataOffset + 1) << 16 |
|
||||
*(packet + dataOffset + 2) << 8 | *(packet + dataOffset + 3);
|
||||
dataOffset += 6;
|
||||
p60dockHkTableDataset.wdtCntCsp1 = *(packet + dataOffset) << 24 |
|
||||
*(packet + dataOffset + 1) << 16 |
|
||||
*(packet + dataOffset + 2) << 8 | *(packet + dataOffset + 3);
|
||||
auxHk.wdtCntCsp1 = *(packet + dataOffset) << 24 | *(packet + dataOffset + 1) << 16 |
|
||||
*(packet + dataOffset + 2) << 8 | *(packet + dataOffset + 3);
|
||||
dataOffset += 6;
|
||||
p60dockHkTableDataset.wdtCntCsp2 = *(packet + dataOffset) << 24 |
|
||||
*(packet + dataOffset + 1) << 16 |
|
||||
*(packet + dataOffset + 2) << 8 | *(packet + dataOffset + 3);
|
||||
auxHk.wdtCntCsp2 = *(packet + dataOffset) << 24 | *(packet + dataOffset + 1) << 16 |
|
||||
*(packet + dataOffset + 2) << 8 | *(packet + dataOffset + 3);
|
||||
dataOffset += 6;
|
||||
|
||||
p60dockHkTableDataset.wdtGndLeft = *(packet + dataOffset) << 24 |
|
||||
*(packet + dataOffset + 1) << 16 |
|
||||
*(packet + dataOffset + 2) << 8 | *(packet + dataOffset + 3);
|
||||
auxHk.wdtGndLeft = *(packet + dataOffset) << 24 | *(packet + dataOffset + 1) << 16 |
|
||||
*(packet + dataOffset + 2) << 8 | *(packet + dataOffset + 3);
|
||||
dataOffset += 6;
|
||||
p60dockHkTableDataset.wdtI2cLeft = *(packet + dataOffset) << 24 |
|
||||
*(packet + dataOffset + 1) << 16 |
|
||||
*(packet + dataOffset + 2) << 8 | *(packet + dataOffset + 3);
|
||||
auxHk.wdtI2cLeft = *(packet + dataOffset) << 24 | *(packet + dataOffset + 1) << 16 |
|
||||
*(packet + dataOffset + 2) << 8 | *(packet + dataOffset + 3);
|
||||
dataOffset += 6;
|
||||
p60dockHkTableDataset.wdtCanLeft = *(packet + dataOffset) << 24 |
|
||||
*(packet + dataOffset + 1) << 16 |
|
||||
*(packet + dataOffset + 2) << 8 | *(packet + dataOffset + 3);
|
||||
auxHk.wdtCanLeft = *(packet + dataOffset) << 24 | *(packet + dataOffset + 1) << 16 |
|
||||
*(packet + dataOffset + 2) << 8 | *(packet + dataOffset + 3);
|
||||
/* +16 because here begins a new gomspace csp packet */
|
||||
dataOffset += 16;
|
||||
|
||||
p60dockHkTableDataset.wdtCspLeft1 = *(packet + dataOffset);
|
||||
auxHk.wdtCspLeft1 = *(packet + dataOffset);
|
||||
dataOffset += 3;
|
||||
p60dockHkTableDataset.wdtCspLeft2 = *(packet + dataOffset);
|
||||
auxHk.wdtCspLeft2 = *(packet + dataOffset);
|
||||
dataOffset += 3;
|
||||
|
||||
p60dockHkTableDataset.batteryChargeCurrent =
|
||||
*(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
auxHk.batteryChargeCurrent = *(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
dataOffset += 4;
|
||||
p60dockHkTableDataset.batteryDischargeCurrent =
|
||||
*(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
auxHk.batteryDischargeCurrent = *(packet + dataOffset) << 8 | *(packet + dataOffset + 1);
|
||||
dataOffset += 4;
|
||||
p60dockHkTableDataset.ant6Depl = *(packet + dataOffset);
|
||||
auxHk.ant6Depl = *(packet + dataOffset);
|
||||
dataOffset += 3;
|
||||
p60dockHkTableDataset.ar6Depl = *(packet + dataOffset);
|
||||
p60dockHkTableDataset.setValidity(true, true);
|
||||
auxHk.ar6Depl = *(packet + dataOffset);
|
||||
coreHk.setValidity(true, true);
|
||||
auxHk.setValidity(true, true);
|
||||
}
|
||||
|
||||
ReturnValue_t P60DockHandler::initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
|
||||
@ -260,7 +251,8 @@ ReturnValue_t P60DockHandler::initializeLocalDataPool(localpool::DataPool &local
|
||||
|
||||
localDataPoolMap.emplace(pool::P60DOCK_ANT6_DEPL, new PoolEntry<int8_t>({0}));
|
||||
localDataPoolMap.emplace(pool::P60DOCK_AR6_DEPL, new PoolEntry<int8_t>({0}));
|
||||
poolManager.subscribeForPeriodicPacket(p60dockHkTableDataset.getSid(), false, 10.0, false);
|
||||
poolManager.subscribeForPeriodicPacket(coreHk.getSid(), false, 10.0, false);
|
||||
poolManager.subscribeForPeriodicPacket(auxHk.getSid(), false, 30.0, false);
|
||||
return HasReturnvaluesIF::RETURN_OK;
|
||||
}
|
||||
|
||||
@ -268,16 +260,17 @@ ReturnValue_t P60DockHandler::printStatus(DeviceCommandId_t cmd) {
|
||||
ReturnValue_t result = RETURN_OK;
|
||||
switch (cmd) {
|
||||
case (GOMSPACE::PRINT_SWITCH_V_I): {
|
||||
PoolReadGuard pg(&p60dockHkTableDataset);
|
||||
result = pg.getReadResult();
|
||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||
PoolReadGuard pg0(&coreHk);
|
||||
PoolReadGuard pg1(&auxHk);
|
||||
if (pg0.getReadResult() != HasReturnvaluesIF::RETURN_OK or
|
||||
pg1.getReadResult() != HasReturnvaluesIF::RETURN_OK) {
|
||||
break;
|
||||
}
|
||||
printHkTableSwitchIV();
|
||||
return HasReturnvaluesIF::RETURN_OK;
|
||||
}
|
||||
case (GOMSPACE::PRINT_LATCHUPS): {
|
||||
PoolReadGuard pg(&p60dockHkTableDataset);
|
||||
PoolReadGuard pg(&auxHk);
|
||||
result = pg.getReadResult();
|
||||
printHkTableLatchups();
|
||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||
@ -296,25 +289,22 @@ ReturnValue_t P60DockHandler::printStatus(DeviceCommandId_t cmd) {
|
||||
void P60DockHandler::printHkTableSwitchIV() {
|
||||
using namespace P60Dock;
|
||||
sif::info << "P60 Dock Info:" << std::endl;
|
||||
sif::info << "Boot Cause: " << p60dockHkTableDataset.bootcause
|
||||
<< " | Boot Count: " << std::setw(4) << std::right << p60dockHkTableDataset.bootCount
|
||||
<< std::endl;
|
||||
sif::info << "Reset Cause: " << p60dockHkTableDataset.resetcause
|
||||
<< " | Battery Mode: " << static_cast<int>(p60dockHkTableDataset.battMode.value)
|
||||
<< std::endl;
|
||||
sif::info << "Boot Cause: " << auxHk.bootcause << " | Boot Count: " << std::setw(4) << std::right
|
||||
<< coreHk.bootCount << std::endl;
|
||||
sif::info << "Reset Cause: " << auxHk.resetcause
|
||||
<< " | Battery Mode: " << static_cast<int>(coreHk.battMode.value) << std::endl;
|
||||
sif::info << "SwitchState, Currents [mA], Voltages [mV]:" << std::endl;
|
||||
sif::info << std::setw(MAX_CHANNEL_STR_WIDTH) << std::left << "Dock VBAT VCC" << std::dec
|
||||
<< "| -, " << std::setw(4) << std::right << p60dockHkTableDataset.dockVccCurrent << ", "
|
||||
<< std::setw(5) << p60dockHkTableDataset.dockVbatVoltageValue << std::endl;
|
||||
<< "| -, " << std::setw(4) << std::right << auxHk.dockVccCurrent << ", " << std::setw(5)
|
||||
<< auxHk.dockVbatVoltageValue << std::endl;
|
||||
sif::info << std::setw(MAX_CHANNEL_STR_WIDTH) << std::left << "BATT" << std::dec << "| -, "
|
||||
<< std::setw(4) << std::right << p60dockHkTableDataset.batteryCurrent.value << ", "
|
||||
<< std::setw(5) << p60dockHkTableDataset.batteryVoltage.value << std::endl;
|
||||
<< std::setw(4) << std::right << coreHk.batteryCurrent.value << ", " << std::setw(5)
|
||||
<< coreHk.batteryVoltage.value << std::endl;
|
||||
|
||||
auto genericPrintoutHandler = [&](std::string name, uint8_t idx) {
|
||||
sif::info << std::setw(MAX_CHANNEL_STR_WIDTH) << std::left << name << std::dec << "| "
|
||||
<< unsigned(p60dockHkTableDataset.outputEnables[idx]) << ", " << std::setw(4)
|
||||
<< std::right << p60dockHkTableDataset.currents[idx] << ", " << std::setw(5)
|
||||
<< p60dockHkTableDataset.voltages[idx] << std::endl;
|
||||
<< unsigned(coreHk.outputEnables[idx]) << ", " << std::setw(4) << std::right
|
||||
<< coreHk.currents[idx] << ", " << std::setw(5) << coreHk.voltages[idx] << std::endl;
|
||||
};
|
||||
|
||||
genericPrintoutHandler("ACU VCC", hk::ACU_VCC);
|
||||
@ -328,12 +318,21 @@ void P60DockHandler::printHkTableSwitchIV() {
|
||||
genericPrintoutHandler("Stack 5V", hk::STACK_5V);
|
||||
}
|
||||
|
||||
LocalPoolDataSetBase *P60DockHandler::getDataSetHandle(sid_t sid) {
|
||||
if (sid == coreHk.getSid()) {
|
||||
return &coreHk;
|
||||
} else if (sid == auxHk.getSid()) {
|
||||
return &auxHk;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void P60DockHandler::printHkTableLatchups() {
|
||||
using namespace P60Dock;
|
||||
sif::info << "P60 Latchup Information" << std::endl;
|
||||
auto genericPrintoutHandler = [&](std::string name, uint8_t idx) {
|
||||
sif::info << std::setw(MAX_CHANNEL_STR_WIDTH) << std::left << name << std::dec << "| "
|
||||
<< std::setw(4) << std::right << p60dockHkTableDataset.latchups[idx] << std::endl;
|
||||
<< std::setw(4) << std::right << auxHk.latchups[idx] << std::endl;
|
||||
};
|
||||
genericPrintoutHandler("ACU VCC", hk::ACU_VCC);
|
||||
genericPrintoutHandler("ACU VBAT", hk::ACU_VBAT);
|
||||
|
Reference in New Issue
Block a user