only handle one message per cycle
This commit is contained in:
parent
15a67b81f9
commit
1e767afa11
@ -105,25 +105,23 @@ ReturnValue_t HeaterHandler::initializeHeaterMap() {
|
|||||||
void HeaterHandler::readCommandQueue() {
|
void HeaterHandler::readCommandQueue() {
|
||||||
ReturnValue_t result = returnvalue::OK;
|
ReturnValue_t result = returnvalue::OK;
|
||||||
CommandMessage command;
|
CommandMessage command;
|
||||||
do {
|
if (not busyWithSwitchCommanding) {
|
||||||
if (not busyWithSwitchCommanding) {
|
result = commandQueue->receiveMessage(&command);
|
||||||
result = commandQueue->receiveMessage(&command);
|
if (result == MessageQueueIF::EMPTY) {
|
||||||
if (result == MessageQueueIF::EMPTY) {
|
return;
|
||||||
break;
|
} else if (result != returnvalue::OK) {
|
||||||
} else if (result != returnvalue::OK) {
|
sif::warning << "HeaterHandler::readCommandQueue: Message reception error" << std::endl;
|
||||||
sif::warning << "HeaterHandler::readCommandQueue: Message reception error" << std::endl;
|
return;
|
||||||
break;
|
|
||||||
}
|
|
||||||
result = modeHelper.handleModeCommand(&command);
|
|
||||||
if (result == returnvalue::OK) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
result = actionHelper.handleActionMessage(&command);
|
|
||||||
if (result == returnvalue::OK) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} while (result == returnvalue::OK);
|
result = modeHelper.handleModeCommand(&command);
|
||||||
|
if (result == returnvalue::OK) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
result = actionHelper.handleActionMessage(&command);
|
||||||
|
if (result == returnvalue::OK) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t HeaterHandler::executeAction(ActionId_t actionId, MessageQueueId_t commandedBy,
|
ReturnValue_t HeaterHandler::executeAction(ActionId_t actionId, MessageQueueId_t commandedBy,
|
||||||
@ -276,15 +274,10 @@ void HeaterHandler::handleSwitchOnCommand(heater::Switch heaterIdx) {
|
|||||||
triggerEvent(GPIO_PULL_HIGH_FAILED, result);
|
triggerEvent(GPIO_PULL_HIGH_FAILED, result);
|
||||||
}
|
}
|
||||||
if (result == returnvalue::OK) {
|
if (result == returnvalue::OK) {
|
||||||
if (getSwitchState(heaterIdx) == SwitchState::OFF) {
|
triggerEvent(HEATER_WENT_ON, heaterIdx, 0);
|
||||||
triggerEvent(HEATER_WENT_ON, heaterIdx, 0);
|
{
|
||||||
{
|
MutexGuard mg(handlerLock, LOCK_TYPE, LOCK_TIMEOUT, LOCK_CTX);
|
||||||
MutexGuard mg(handlerLock, LOCK_TYPE, LOCK_TIMEOUT, LOCK_CTX);
|
heater.switchState = ON;
|
||||||
heater.switchState = ON;
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
triggerEvent(SWITCH_ALREADY_ON, heaterIdx);
|
|
||||||
}
|
}
|
||||||
EventManagerIF::triggerEvent(helper.heaters[heaterIdx].first->getObjectId(), MODE_INFO,
|
EventManagerIF::triggerEvent(helper.heaters[heaterIdx].first->getObjectId(), MODE_INFO,
|
||||||
MODE_ON, 0);
|
MODE_ON, 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user