- changed back behaviour of LastApplError

pull/6/head
Michael Zillgith 11 years ago
parent 7f1714e4af
commit 98ec51346c

@ -198,9 +198,6 @@ ClientDataSet_getDataSetSize(ClientDataSet self)
static bool
doesControlObjectMatch(char* objRef, char* cntrlObj)
{
printf("objRef: (%s) cntrlObj: (%s)\n", objRef, cntrlObj);
int objRefLen = strlen(objRef);
char* separator = strchr(cntrlObj, '$');
@ -225,31 +222,17 @@ doesControlObjectMatch(char* objRef, char* cntrlObj)
if (separator[3] != '$')
return false;
printf("Compare strings: (%s) vs (%s)\n", cntrlObjName, separator +4);
// char* nextSeparator = strchr(separator + 4, '$');
char* nextSeparator = strchr(separator + 4, '$');
// if (nextSeparator == NULL)
// return false;
if (nextSeparator == NULL)
return false;
int cntrlObjNameLen = strlen(cntrlObjName);
char* secondCntrlObjName = separator + 4;
if (cntrlObjNameLen != strlen(secondCntrlObjName))
if (cntrlObjNameLen != nextSeparator - (separator + 4))
return false;
// if (cntrlObjNameLen != nextSeparator - (separator + 4))
// return false;
// int i;
// for (i = 0; i < cntrlObjNameLen; i++) {
// if (controlObjName )
// }
if (memcmp(cntrlObjName, secondCntrlObjName, cntrlObjNameLen) == 0)
if (memcmp(cntrlObjName, separator + 4, cntrlObjNameLen) == 0)
return true;
return false;

@ -115,7 +115,7 @@ struct sControlObject
};
void
ControlObject_sendLastApplError(ControlObject* self, MmsServerConnection* connection, int error,
ControlObject_sendLastApplError(ControlObject* self, MmsServerConnection* connection, char* ctlVariable, int error,
ControlAddCause addCause, MmsValue* ctlNum, MmsValue* origin, bool handlerMode);
void
@ -361,7 +361,7 @@ executeStateMachine:
if (dynamicCheckResult == CONTROL_RESULT_FAILED) {
if (isTimeActivatedControl) {
ControlObject_sendLastApplError(self, self->mmsConnection,
ControlObject_sendLastApplError(self, self->mmsConnection, "Oper",
CONTROL_ERROR_NO_ERROR, ADD_CAUSE_BLOCKED_BY_SYNCHROCHECK,
self->ctlNum, self->origin, false);
}
@ -688,7 +688,7 @@ Control_processControlActions(MmsMapping* self, uint64_t currentTimeInMs)
executeControlTask(controlObject);
}
else {
ControlObject_sendLastApplError(controlObject, controlObject->mmsConnection,
ControlObject_sendLastApplError(controlObject, controlObject->mmsConnection, "Oper",
CONTROL_ERROR_NO_ERROR, ADD_CAUSE_BLOCKED_BY_INTERLOCKING,
controlObject->ctlNum, controlObject->origin, false);
@ -887,12 +887,16 @@ ControlObject_sendCommandTerminationNegative(ControlObject* self)
lastApplError->value.structure.components = componentContainer;
char ctlObj[130];
createStringInBuffer(ctlObj, 2, self->ctlObjectName, "$Oper");
MmsValue ctlObjValueMemory;
MmsValue* ctlObjValue = &ctlObjValueMemory;
ctlObjValue->type = MMS_VISIBLE_STRING;
ctlObjValue->value.visibleString.buf = self->ctlObjectName;
ctlObjValue->value.visibleString.size = sizeof(self->ctlObjectName);
ctlObjValue->value.visibleString.buf = ctlObj;
ctlObjValue->value.visibleString.size = sizeof(ctlObj);
MmsValue_setElement(lastApplError, 0, ctlObjValue);
@ -922,6 +926,7 @@ ControlObject_sendCommandTerminationNegative(ControlObject* self)
operVarSpec.itemId = itemId;
operVarSpec.domainId = domainId;
/* create response */
if (DEBUG_IED_SERVER)
@ -944,7 +949,7 @@ ControlObject_sendCommandTerminationNegative(ControlObject* self)
void
ControlObject_sendLastApplError(ControlObject* self, MmsServerConnection* connection, int error,
ControlObject_sendLastApplError(ControlObject* self, MmsServerConnection* connection, char* ctlVariable, int error,
ControlAddCause addCause, MmsValue* ctlNum, MmsValue* origin, bool handlerMode)
{
MmsValue lastApplErrorMemory;
@ -957,9 +962,13 @@ ControlObject_sendLastApplError(ControlObject* self, MmsServerConnection* connec
lastApplError->value.structure.components =componentContainer;
char ctlObj[130];
createStringInBuffer(ctlObj, 3, self->ctlObjectName, "$", ctlVariable);
if (DEBUG_IED_SERVER) {
printf("IED_SERVER: sendLastApplError:\n");
printf("IED_SERVER: control object: %s\n", self->ctlObjectName);
printf("IED_SERVER: control object: %s\n", ctlObj);
printf("IED_SERVER: ctlNum: %u\n", MmsValue_toUint32(ctlNum));
}
@ -967,8 +976,8 @@ ControlObject_sendLastApplError(ControlObject* self, MmsServerConnection* connec
MmsValue* ctlObjValue = &ctlObjValueMemory;
ctlObjValue->type = MMS_VISIBLE_STRING;
ctlObjValue->value.visibleString.buf = self->ctlObjectName;
ctlObjValue->value.visibleString.size = sizeof(self->ctlObjectName);
ctlObjValue->value.visibleString.buf = ctlObj;
ctlObjValue->value.visibleString.size = sizeof(ctlObj);
MmsValue_setElement(lastApplError, 0, ctlObjValue);
@ -1304,10 +1313,10 @@ Control_writeAccessControlObject(MmsMapping* self, MmsDomain* domain, char* vari
indication = DATA_ACCESS_ERROR_TEMPORARILY_UNAVAILABLE;
if (connection != controlObject->mmsConnection)
ControlObject_sendLastApplError(controlObject, connection, 0,
ControlObject_sendLastApplError(controlObject, connection, "SBOw", 0,
ADD_CAUSE_LOCKED_BY_OTHER_CLIENT, ctlNum, origin, true);
else
ControlObject_sendLastApplError(controlObject, connection, 0,
ControlObject_sendLastApplError(controlObject, connection, "SBOw", 0,
ADD_CAUSE_OBJECT_ALREADY_SELECTED, ctlNum, origin, true);
if (DEBUG_IED_SERVER)
@ -1344,7 +1353,7 @@ Control_writeAccessControlObject(MmsMapping* self, MmsDomain* domain, char* vari
else {
indication = getDataAccessErrorFromCheckHandlerResult(checkResult);
ControlObject_sendLastApplError(controlObject, connection, 0,
ControlObject_sendLastApplError(controlObject, connection, "SBOw", 0,
ADD_CAUSE_SELECT_FAILED, ctlNum, origin, true);
if (DEBUG_IED_SERVER)
@ -1389,7 +1398,7 @@ Control_writeAccessControlObject(MmsMapping* self, MmsDomain* domain, char* vari
if (state == STATE_WAIT_FOR_ACTICATION_TIME) {
indication = DATA_ACCESS_ERROR_TEMPORARILY_UNAVAILABLE;
ControlObject_sendLastApplError(controlObject, connection,
ControlObject_sendLastApplError(controlObject, connection, "Oper",
CONTROL_ERROR_NO_ERROR, ADD_CAUSE_COMMAND_ALREADY_IN_EXECUTION,
ctlNum, origin, true);
@ -1419,7 +1428,7 @@ Control_writeAccessControlObject(MmsMapping* self, MmsDomain* domain, char* vari
{
indication = DATA_ACCESS_ERROR_TYPE_INCONSISTENT;
ControlObject_sendLastApplError(controlObject, connection,
ControlObject_sendLastApplError(controlObject, connection, "Oper",
CONTROL_ERROR_NO_ERROR, ADD_CAUSE_INCONSISTENT_PARAMETERS,
ctlNum, origin, true);
@ -1499,7 +1508,7 @@ Control_writeAccessControlObject(MmsMapping* self, MmsDomain* domain, char* vari
printf("IED_SERVER: Oper failed - control not selected!\n");
indication = DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED;
ControlObject_sendLastApplError(controlObject, connection,
ControlObject_sendLastApplError(controlObject, connection, "Oper",
CONTROL_ERROR_NO_ERROR, ADD_CAUSE_OBJECT_NOT_SELECTED,
ctlNum, origin, true);
@ -1531,7 +1540,7 @@ Control_writeAccessControlObject(MmsMapping* self, MmsDomain* domain, char* vari
}
else {
indication = DATA_ACCESS_ERROR_TEMPORARILY_UNAVAILABLE;
ControlObject_sendLastApplError(controlObject, connection,
ControlObject_sendLastApplError(controlObject, connection, "Cancel",
CONTROL_ERROR_NO_ERROR, ADD_CAUSE_LOCKED_BY_OTHER_CLIENT,
ctlNum, origin, true);
}

Loading…
Cancel
Save