|
|
|
@ -2,19 +2,17 @@
|
|
|
|
|
|
|
|
|
|
#include <fsfw/objectmanager/ObjectManager.h>
|
|
|
|
|
|
|
|
|
|
TestAssembly::TestAssembly(object_id_t objectId, object_id_t parentId, object_id_t testDevice0,
|
|
|
|
|
object_id_t testDevice1)
|
|
|
|
|
: AssemblyBase(objectId, parentId),
|
|
|
|
|
deviceHandler0Id(testDevice0),
|
|
|
|
|
deviceHandler1Id(testDevice1) {
|
|
|
|
|
TestAssembly::TestAssembly(object_id_t objectId, object_id_t parentId, ModeTreeChildIF& testDevice0,
|
|
|
|
|
ModeTreeChildIF& testDevice1)
|
|
|
|
|
: AssemblyBase(objectId, parentId), deviceHandler0(testDevice0), deviceHandler1(testDevice1) {
|
|
|
|
|
ModeListEntry newModeListEntry;
|
|
|
|
|
newModeListEntry.setObject(testDevice0);
|
|
|
|
|
newModeListEntry.setObject(testDevice0.getObjectId());
|
|
|
|
|
newModeListEntry.setMode(MODE_OFF);
|
|
|
|
|
newModeListEntry.setSubmode(SUBMODE_NONE);
|
|
|
|
|
|
|
|
|
|
commandTable.insert(newModeListEntry);
|
|
|
|
|
|
|
|
|
|
newModeListEntry.setObject(testDevice1);
|
|
|
|
|
newModeListEntry.setObject(testDevice1.getObjectId());
|
|
|
|
|
newModeListEntry.setMode(MODE_OFF);
|
|
|
|
|
newModeListEntry.setSubmode(SUBMODE_NONE);
|
|
|
|
|
|
|
|
|
@ -43,8 +41,8 @@ ReturnValue_t TestAssembly::commandChildren(Mode_t mode, Submode_t submode) {
|
|
|
|
|
commandTable[1].setMode(MODE_OFF);
|
|
|
|
|
commandTable[1].setSubmode(SUBMODE_NONE);
|
|
|
|
|
// We try to prefer 0 here but we try to switch to 1 even if it might fail
|
|
|
|
|
if (isDeviceAvailable(deviceHandler0Id)) {
|
|
|
|
|
if (childrenMap[deviceHandler0Id].mode == MODE_ON) {
|
|
|
|
|
if (isDeviceAvailable(deviceHandler0.getObjectId())) {
|
|
|
|
|
if (childrenMap[deviceHandler0.getObjectId()].mode == MODE_ON) {
|
|
|
|
|
commandTable[0].setMode(mode);
|
|
|
|
|
commandTable[0].setSubmode(SUBMODE_NONE);
|
|
|
|
|
} else {
|
|
|
|
@ -53,7 +51,7 @@ ReturnValue_t TestAssembly::commandChildren(Mode_t mode, Submode_t submode) {
|
|
|
|
|
result = NEED_SECOND_STEP;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if (childrenMap[deviceHandler1Id].mode == MODE_ON) {
|
|
|
|
|
if (childrenMap[deviceHandler1.getObjectId()].mode == MODE_ON) {
|
|
|
|
|
commandTable[1].setMode(mode);
|
|
|
|
|
commandTable[1].setSubmode(SUBMODE_NONE);
|
|
|
|
|
} else {
|
|
|
|
@ -64,7 +62,7 @@ ReturnValue_t TestAssembly::commandChildren(Mode_t mode, Submode_t submode) {
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// Dual Mode Normal
|
|
|
|
|
if (childrenMap[deviceHandler0Id].mode == MODE_ON) {
|
|
|
|
|
if (childrenMap[deviceHandler0.getObjectId()].mode == MODE_ON) {
|
|
|
|
|
commandTable[0].setMode(mode);
|
|
|
|
|
commandTable[0].setSubmode(SUBMODE_NONE);
|
|
|
|
|
} else {
|
|
|
|
@ -72,7 +70,7 @@ ReturnValue_t TestAssembly::commandChildren(Mode_t mode, Submode_t submode) {
|
|
|
|
|
commandTable[0].setSubmode(SUBMODE_NONE);
|
|
|
|
|
result = NEED_SECOND_STEP;
|
|
|
|
|
}
|
|
|
|
|
if (childrenMap[deviceHandler1Id].mode == MODE_ON) {
|
|
|
|
|
if (childrenMap[deviceHandler1.getObjectId()].mode == MODE_ON) {
|
|
|
|
|
commandTable[1].setMode(mode);
|
|
|
|
|
commandTable[1].setSubmode(SUBMODE_NONE);
|
|
|
|
|
} else {
|
|
|
|
@ -89,7 +87,7 @@ ReturnValue_t TestAssembly::commandChildren(Mode_t mode, Submode_t submode) {
|
|
|
|
|
commandTable[1].setMode(MODE_OFF);
|
|
|
|
|
commandTable[1].setSubmode(SUBMODE_NONE);
|
|
|
|
|
// We try to prefer 0 here but we try to switch to 1 even if it might fail
|
|
|
|
|
if (isDeviceAvailable(deviceHandler0Id)) {
|
|
|
|
|
if (isDeviceAvailable(deviceHandler0.getObjectId())) {
|
|
|
|
|
commandTable[0].setMode(MODE_ON);
|
|
|
|
|
commandTable[0].setSubmode(SUBMODE_NONE);
|
|
|
|
|
} else {
|
|
|
|
@ -133,23 +131,14 @@ ReturnValue_t TestAssembly::initialize() {
|
|
|
|
|
if (result != returnvalue::OK) {
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
handler0 = ObjectManager::instance()->get<TestDevice>(deviceHandler0Id);
|
|
|
|
|
handler1 = ObjectManager::instance()->get<TestDevice>(deviceHandler1Id);
|
|
|
|
|
auto* handler0 = ObjectManager::instance()->get<TestDevice>(deviceHandler0.getObjectId());
|
|
|
|
|
auto* handler1 = ObjectManager::instance()->get<TestDevice>(deviceHandler1.getObjectId());
|
|
|
|
|
if ((handler0 == nullptr) or (handler1 == nullptr)) {
|
|
|
|
|
return returnvalue::FAILED;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
handler0->setParentQueue(this->getCommandQueue());
|
|
|
|
|
handler1->setParentQueue(this->getCommandQueue());
|
|
|
|
|
|
|
|
|
|
result = registerChild(deviceHandler0Id);
|
|
|
|
|
if (result != returnvalue::OK) {
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
result = registerChild(deviceHandler1Id);
|
|
|
|
|
if (result != returnvalue::OK) {
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
handler0->connectModeTreeParent(*this);
|
|
|
|
|
handler1->connectModeTreeParent(*this);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|