From 3faca719cbfb4b639a1116280133f391b861ed30 Mon Sep 17 00:00:00 2001
From: Michael Zillgith <michael@zillgith.eu>
Date: Mon, 12 Jan 2015 12:13:00 +0100
Subject: [PATCH] - reverted control.c

---
 src/iec61850/server/mms_mapping/control.c | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/src/iec61850/server/mms_mapping/control.c b/src/iec61850/server/mms_mapping/control.c
index 8442354..84c4387 100644
--- a/src/iec61850/server/mms_mapping/control.c
+++ b/src/iec61850/server/mms_mapping/control.c
@@ -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);
 
@@ -949,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;
@@ -962,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));
     }
 
@@ -972,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);
 
@@ -1309,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)