Add check call before starting a timeactivated operate, so operates can be denied before the waiting state

pull/183/head
Király Péter 6 years ago
parent 8b6e4b0b29
commit a39397d21d

@ -1581,16 +1581,32 @@ Control_writeAccessControlObject(MmsMapping* self, MmsDomain* domain, char* vari
controlObject->interlockCheck = interlockCheck; controlObject->interlockCheck = interlockCheck;
controlObject->mmsConnection = connection; controlObject->mmsConnection = connection;
initiateControlTask(controlObject); CheckHandlerResult checkResult = CONTROL_ACCEPTED;
if (controlObject->checkHandler != NULL) { /* perform operative tests */
setState(controlObject, STATE_WAIT_FOR_ACTIVATION_TIME); checkResult = controlObject->checkHandler((ControlAction) controlObject,
controlObject->checkHandlerParameter, ctlVal, testCondition, interlockCheck);
if (DEBUG_IED_SERVER) }
printf("Oper: activate time activated control\n");
indication = DATA_ACCESS_ERROR_SUCCESS; if(checkResult == CONTROL_ACCEPTED){
initiateControlTask(controlObject);
setState(controlObject, STATE_WAIT_FOR_ACTIVATION_TIME);
if (DEBUG_IED_SERVER)
printf("Oper: activate time activated control\n");
indication = DATA_ACCESS_ERROR_SUCCESS;
}
else{
indication = (MmsDataAccessError) checkResult;
}
} }
} }
else{
controlObject->operateTime = 0;
}
MmsValue_update(controlObject->oper, value); MmsValue_update(controlObject->oper, value);
@ -1681,7 +1697,6 @@ Control_writeAccessControlObject(MmsMapping* self, MmsDomain* domain, char* vari
if (controlObject->timeActivatedOperate) { if (controlObject->timeActivatedOperate) {
controlObject->timeActivatedOperate = false; controlObject->timeActivatedOperate = false;
abortControlOperation(controlObject); abortControlOperation(controlObject);
indication = DATA_ACCESS_ERROR_SUCCESS;
goto free_and_return; goto free_and_return;
} }
} }

Loading…
Cancel
Save