|
|
@ -57,6 +57,7 @@ struct sControlObjectClient
|
|
|
|
|
|
|
|
|
|
|
|
LastApplError lastApplError;
|
|
|
|
LastApplError lastApplError;
|
|
|
|
MmsError lastMmsError;
|
|
|
|
MmsError lastMmsError;
|
|
|
|
|
|
|
|
MmsDataAccessError lastAccessError; /* last error of read or write command */
|
|
|
|
|
|
|
|
|
|
|
|
CommandTerminationHandler commandTerminationHandler;
|
|
|
|
CommandTerminationHandler commandTerminationHandler;
|
|
|
|
void* commandTerminaionHandlerParameter;
|
|
|
|
void* commandTerminaionHandlerParameter;
|
|
|
@ -316,6 +317,9 @@ ControlObjectClient_getCtlValType(ControlObjectClient self)
|
|
|
|
IedClientError
|
|
|
|
IedClientError
|
|
|
|
ControlObjectClient_getLastError(ControlObjectClient self)
|
|
|
|
ControlObjectClient_getLastError(ControlObjectClient self)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
if (self->lastAccessError != DATA_ACCESS_ERROR_SUCCESS)
|
|
|
|
|
|
|
|
return iedConnection_mapDataAccessErrorToIedError(self->lastAccessError);
|
|
|
|
|
|
|
|
else
|
|
|
|
return iedConnection_mapMmsErrorToIedError(self->lastMmsError);
|
|
|
|
return iedConnection_mapMmsErrorToIedError(self->lastMmsError);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -501,13 +505,14 @@ ControlObjectClient_operate(ControlObjectClient self, MmsValue* ctlVal, uint64_t
|
|
|
|
|
|
|
|
|
|
|
|
MmsError mmsError;
|
|
|
|
MmsError mmsError;
|
|
|
|
|
|
|
|
|
|
|
|
MmsConnection_writeVariable(IedConnection_getMmsConnection(self->connection),
|
|
|
|
MmsDataAccessError writeResult = MmsConnection_writeVariable(IedConnection_getMmsConnection(self->connection),
|
|
|
|
&mmsError, domainId, itemId, operParameters);
|
|
|
|
&mmsError, domainId, itemId, operParameters);
|
|
|
|
|
|
|
|
|
|
|
|
MmsValue_setElement(operParameters, 0, NULL);
|
|
|
|
MmsValue_setElement(operParameters, 0, NULL);
|
|
|
|
MmsValue_delete(operParameters);
|
|
|
|
MmsValue_delete(operParameters);
|
|
|
|
|
|
|
|
|
|
|
|
self->lastMmsError = mmsError;
|
|
|
|
self->lastMmsError = mmsError;
|
|
|
|
|
|
|
|
self->lastAccessError = writeResult;
|
|
|
|
|
|
|
|
|
|
|
|
if (mmsError != MMS_ERROR_NONE) {
|
|
|
|
if (mmsError != MMS_ERROR_NONE) {
|
|
|
|
if (DEBUG_IED_CLIENT)
|
|
|
|
if (DEBUG_IED_CLIENT)
|
|
|
@ -544,6 +549,9 @@ internalOperateHandler(uint32_t invokeId, void* parameter, MmsError err, MmsData
|
|
|
|
|
|
|
|
|
|
|
|
bool success = false;
|
|
|
|
bool success = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self->lastMmsError = err;
|
|
|
|
|
|
|
|
self->lastAccessError = accessError;
|
|
|
|
|
|
|
|
|
|
|
|
if (iedError == IED_ERROR_OK) {
|
|
|
|
if (iedError == IED_ERROR_OK) {
|
|
|
|
iedError = iedConnection_mapDataAccessErrorToIedError(accessError);
|
|
|
|
iedError = iedConnection_mapDataAccessErrorToIedError(accessError);
|
|
|
|
|
|
|
|
|
|
|
@ -728,6 +736,7 @@ ControlObjectClient_selectWithValue(ControlObjectClient self, MmsValue* ctlVal)
|
|
|
|
MmsValue_delete(selValParameters);
|
|
|
|
MmsValue_delete(selValParameters);
|
|
|
|
|
|
|
|
|
|
|
|
self->lastMmsError = mmsError;
|
|
|
|
self->lastMmsError = mmsError;
|
|
|
|
|
|
|
|
self->lastAccessError = writeResult;
|
|
|
|
|
|
|
|
|
|
|
|
if (mmsError != MMS_ERROR_NONE) {
|
|
|
|
if (mmsError != MMS_ERROR_NONE) {
|
|
|
|
if (DEBUG_IED_CLIENT)
|
|
|
|
if (DEBUG_IED_CLIENT)
|
|
|
@ -765,6 +774,9 @@ internalSelWithValHandler(uint32_t invokeId, void* parameter, MmsError err, MmsD
|
|
|
|
|
|
|
|
|
|
|
|
bool success = false;
|
|
|
|
bool success = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self->lastMmsError = err;
|
|
|
|
|
|
|
|
self->lastAccessError = accessError;
|
|
|
|
|
|
|
|
|
|
|
|
if (iedError == IED_ERROR_OK) {
|
|
|
|
if (iedError == IED_ERROR_OK) {
|
|
|
|
iedError = iedConnection_mapDataAccessErrorToIedError(accessError);
|
|
|
|
iedError = iedConnection_mapDataAccessErrorToIedError(accessError);
|
|
|
|
|
|
|
|
|
|
|
@ -881,6 +893,7 @@ ControlObjectClient_select(ControlObjectClient self)
|
|
|
|
self->ctlNum++;
|
|
|
|
self->ctlNum++;
|
|
|
|
|
|
|
|
|
|
|
|
self->lastMmsError = mmsError;
|
|
|
|
self->lastMmsError = mmsError;
|
|
|
|
|
|
|
|
self->lastAccessError = DATA_ACCESS_ERROR_SUCCESS;
|
|
|
|
|
|
|
|
|
|
|
|
if (value == NULL) {
|
|
|
|
if (value == NULL) {
|
|
|
|
if (DEBUG_IED_CLIENT)
|
|
|
|
if (DEBUG_IED_CLIENT)
|
|
|
@ -899,6 +912,12 @@ ControlObjectClient_select(ControlObjectClient self)
|
|
|
|
selected = true;
|
|
|
|
selected = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (MmsValue_getType(value) == MMS_DATA_ACCESS_ERROR) {
|
|
|
|
|
|
|
|
self->lastAccessError = MmsValue_getDataAccessError(value);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (DEBUG_IED_CLIENT)
|
|
|
|
|
|
|
|
printf("IED_CLIENT: select returned data-access-error: %i\n", self->lastAccessError);
|
|
|
|
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
if (DEBUG_IED_CLIENT)
|
|
|
|
if (DEBUG_IED_CLIENT)
|
|
|
|
printf("IED_CLIENT: select: unexpected response from server!\n");
|
|
|
|
printf("IED_CLIENT: select: unexpected response from server!\n");
|
|
|
@ -925,12 +944,17 @@ internalSelectHandler(uint32_t invokeId, void* parameter, MmsError err, MmsValue
|
|
|
|
|
|
|
|
|
|
|
|
bool success = false;
|
|
|
|
bool success = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self->lastMmsError = err;
|
|
|
|
|
|
|
|
self->lastAccessError = DATA_ACCESS_ERROR_SUCCESS;
|
|
|
|
|
|
|
|
|
|
|
|
self->ctlNum++;
|
|
|
|
self->ctlNum++;
|
|
|
|
|
|
|
|
|
|
|
|
if (iedError == IED_ERROR_OK) {
|
|
|
|
if (iedError == IED_ERROR_OK) {
|
|
|
|
|
|
|
|
|
|
|
|
if (MmsValue_getType(value) == MMS_DATA_ACCESS_ERROR) {
|
|
|
|
if (MmsValue_getType(value) == MMS_DATA_ACCESS_ERROR) {
|
|
|
|
iedError = iedConnection_mapDataAccessErrorToIedError(MmsValue_getDataAccessError(value));
|
|
|
|
MmsDataAccessError dataAccessError = MmsValue_getDataAccessError(value);
|
|
|
|
|
|
|
|
self->lastAccessError = dataAccessError;
|
|
|
|
|
|
|
|
iedError = iedConnection_mapDataAccessErrorToIedError(dataAccessError);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (MmsValue_getType(value) == MMS_VISIBLE_STRING) {
|
|
|
|
else if (MmsValue_getType(value) == MMS_VISIBLE_STRING) {
|
|
|
|
|
|
|
|
|
|
|
@ -1082,6 +1106,7 @@ ControlObjectClient_cancel(ControlObjectClient self)
|
|
|
|
&mmsError, domainId, itemId, cancelParameters);
|
|
|
|
&mmsError, domainId, itemId, cancelParameters);
|
|
|
|
|
|
|
|
|
|
|
|
self->lastMmsError = mmsError;
|
|
|
|
self->lastMmsError = mmsError;
|
|
|
|
|
|
|
|
self->lastAccessError = writeResult;
|
|
|
|
|
|
|
|
|
|
|
|
MmsValue_setElement(cancelParameters, 0, NULL);
|
|
|
|
MmsValue_setElement(cancelParameters, 0, NULL);
|
|
|
|
MmsValue_delete(cancelParameters);
|
|
|
|
MmsValue_delete(cancelParameters);
|
|
|
@ -1117,6 +1142,9 @@ internalCancelHandler(uint32_t invokeId, void* parameter, MmsError err, MmsDataA
|
|
|
|
|
|
|
|
|
|
|
|
bool success = false;
|
|
|
|
bool success = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self->lastMmsError = err;
|
|
|
|
|
|
|
|
self->lastAccessError = accessError;
|
|
|
|
|
|
|
|
|
|
|
|
if (iedError == IED_ERROR_OK) {
|
|
|
|
if (iedError == IED_ERROR_OK) {
|
|
|
|
iedError = iedConnection_mapDataAccessErrorToIedError(accessError);
|
|
|
|
iedError = iedConnection_mapDataAccessErrorToIedError(accessError);
|
|
|
|
|
|
|
|
|
|
|
|