- IEC 61850 client: added implementations for functions IedConnection_getLogicalDeviceVariables, IedConnection_getLogicalDeviceDataSets, and IedConnection_getLogicalDeviceDataSetsAsync to address #89

pull/93/head
Michael Zillgith 7 years ago
parent e5be822032
commit f78f338b49

@ -588,8 +588,10 @@ IedConnection_setState(IedConnection self, IedConnectionState newState)
{
Semaphore_wait(self->stateMutex);
if (self->state != newState)
self->connectionStateChangedHandler(self->connectionStateChangedHandlerParameter, self, newState);
if (self->state != newState) {
if (self->connectionStateChangedHandler)
self->connectionStateChangedHandler(self->connectionStateChangedHandlerParameter, self, newState);
}
self->state = newState;
@ -784,6 +786,30 @@ IedConnection_destroy(IedConnection self)
GLOBAL_FREEMEM(self);
}
LinkedList
IedConnection_getLogicalDeviceVariables(IedConnection self, IedClientError* error, const char* ldName)
{
MmsError err = MMS_ERROR_NONE;
LinkedList result = MmsConnection_getDomainVariableNames(self->connection, &err, ldName);
*error = iedConnection_mapMmsErrorToIedError(err);
return result;
}
LinkedList
IedConnection_getLogicalDeviceDataSets(IedConnection self, IedClientError* error, const char* ldName)
{
MmsError err = MMS_ERROR_NONE;
LinkedList result = MmsConnection_getDomainVariableListNames(self->connection, &err, ldName);
*error = iedConnection_mapMmsErrorToIedError(err);
return result;
}
MmsVariableSpecification*
IedConnection_getVariableSpecification(IedConnection self, IedClientError* error, const char* objectReference,
FunctionalConstraint fc)
@ -974,6 +1000,39 @@ IedConnection_getLogicalDeviceVariablesAsync(IedConnection self, IedClientError*
return call->invokeId;
}
uint32_t
IedConnection_getLogicalDeviceDataSetsAsync(IedConnection self, IedClientError* error, const char* ldName, const char* continueAfter, LinkedList result,
IedConnection_GetNameListHandler handler, void* parameter)
{
//TODO implement
IedConnectionOutstandingCall call = iedConnection_allocateOutstandingCall(self);
if (call == NULL) {
*error = IED_ERROR_OUTSTANDING_CALL_LIMIT_REACHED;
return 0;
}
call->callback = handler;
call->callbackParameter = parameter;
MmsError err = MMS_ERROR_NONE;
call->invokeId = MmsConnection_getDomainVariableListNamesAsync(self->connection, &err, ldName, continueAfter, result, getNameListHandler, self);
if (err != MMS_ERROR_NONE) {
*error = iedConnection_mapMmsErrorToIedError(err);
iedConnection_releaseOutstandingCall(self, call);
return 0;
}
else {
*error = IED_ERROR_OK;
}
return call->invokeId;
}
static void
readObjectHandlerInternal(uint32_t invokeId, void* parameter, MmsError err, MmsValue* value)
{

Loading…
Cancel
Save