diff --git a/examples/mms_utility/mms_utility.c b/examples/mms_utility/mms_utility.c index cdb9791f..792833be 100644 --- a/examples/mms_utility/mms_utility.c +++ b/examples/mms_utility/mms_utility.c @@ -156,6 +156,20 @@ int main(int argc, char** argv) { printf(" %s\n", name); } + variableList = MmsConnection_getDomainJournals(con, &error, domainName); + + if (variableList != NULL) { + + element = variableList; + + printf("\nMMS journals for domain %s\n", domainName); + + while ((element = LinkedList_getNext(element)) != NULL) { + char* name = (char*) element->data; + + printf(" %s\n", name); + } + } } if (readVariable) { diff --git a/src/mms/inc/mms_client_connection.h b/src/mms/inc/mms_client_connection.h index fc234e7e..85794d2a 100644 --- a/src/mms/inc/mms_client_connection.h +++ b/src/mms/inc/mms_client_connection.h @@ -269,6 +269,20 @@ MmsConnection_getDomainVariableNames(MmsConnection self, MmsError* mmsError, con LinkedList /* */ MmsConnection_getDomainVariableListNames(MmsConnection self, MmsError* mmsError, const char* domainId); +/** + * \brief Get the names of all journals present in a MMS domain of the server + * + * This will result in a domain specific GetNameList request. + * + * \param self MmsConnection instance to operate on + * \param mmsError user provided variable to store error code + * \param domainId the domain name for the domain specific request + * + * \return the domain specific journal names or NULL if the request failed. + */ +LinkedList /* */ +MmsConnection_getDomainJournals(MmsConnection self, MmsError* mmsError, const char* domainId); + /** * \brief Get the names of all named variable lists associated with this client connection. * diff --git a/src/mms/inc_private/mms_client_internal.h b/src/mms/inc_private/mms_client_internal.h index 8406f9c6..b31891b0 100644 --- a/src/mms/inc_private/mms_client_internal.h +++ b/src/mms/inc_private/mms_client_internal.h @@ -94,9 +94,10 @@ struct sMmsConnection { * MMS Object class enumeration type */ typedef enum { - MMS_NAMED_VARIABLE, - MMS_NAMED_VARIABLE_LIST, - MMS_DOMAIN_NAMES + MMS_OBJECT_CLASS_NAMED_VARIABLE = 0, + MMS_OBJECT_CLASS_NAMED_VARIABLE_LIST = 2, + MMS_OBJECT_CLASS_JOURNAL = 8, + MMS_OBJECT_CLASS_DOMAIN = 9 } MmsObjectClass; MmsValue* diff --git a/src/mms/iso_mms/client/mms_client_connection.c b/src/mms/iso_mms/client/mms_client_connection.c index 166ed6f4..f76e28ff 100644 --- a/src/mms/iso_mms/client/mms_client_connection.c +++ b/src/mms/iso_mms/client/mms_client_connection.c @@ -1048,7 +1048,7 @@ mmsClient_getNameListSingleRequest( payload, continueAfter); else { - if (objectClass == MMS_DOMAIN_NAMES) + if (objectClass == MMS_OBJECT_CLASS_DOMAIN) mmsClient_createMmsGetNameListRequestVMDspecific(invokeId, payload, continueAfter); else @@ -1104,31 +1104,37 @@ mmsClient_getNameList(MmsConnection self, MmsError *mmsError, LinkedList /* */ MmsConnection_getVMDVariableNames(MmsConnection self, MmsError* mmsError) { - return mmsClient_getNameList(self, mmsError, NULL, MMS_NAMED_VARIABLE, false); + return mmsClient_getNameList(self, mmsError, NULL, MMS_OBJECT_CLASS_NAMED_VARIABLE, false); } LinkedList /* */ MmsConnection_getDomainNames(MmsConnection self, MmsError* mmsError) { - return mmsClient_getNameList(self, mmsError, NULL, MMS_DOMAIN_NAMES, false); + return mmsClient_getNameList(self, mmsError, NULL, MMS_OBJECT_CLASS_DOMAIN, false); } LinkedList /* */ MmsConnection_getDomainVariableNames(MmsConnection self, MmsError* mmsError, const char* domainId) { - return mmsClient_getNameList(self, mmsError, domainId, MMS_NAMED_VARIABLE, false); + return mmsClient_getNameList(self, mmsError, domainId, MMS_OBJECT_CLASS_NAMED_VARIABLE, false); } LinkedList /* */ MmsConnection_getDomainVariableListNames(MmsConnection self, MmsError* mmsError, const char* domainId) { - return mmsClient_getNameList(self, mmsError, domainId, MMS_NAMED_VARIABLE_LIST, false); + return mmsClient_getNameList(self, mmsError, domainId, MMS_OBJECT_CLASS_NAMED_VARIABLE_LIST, false); +} + +LinkedList /* */ +MmsConnection_getDomainJournals(MmsConnection self, MmsError* mmsError, const char* domainId) +{ + return mmsClient_getNameList(self, mmsError, domainId, MMS_OBJECT_CLASS_JOURNAL, false); } LinkedList /* */ MmsConnection_getVariableListNamesAssociationSpecific(MmsConnection self, MmsError* mmsError) { - return mmsClient_getNameList(self, mmsError, NULL, MMS_NAMED_VARIABLE_LIST, true); + return mmsClient_getNameList(self, mmsError, NULL, MMS_OBJECT_CLASS_NAMED_VARIABLE_LIST, true); } MmsValue* diff --git a/src/mms/iso_mms/client/mms_client_get_namelist.c b/src/mms/iso_mms/client/mms_client_get_namelist.c index b0b03b7c..8ca64b6d 100644 --- a/src/mms/iso_mms/client/mms_client_get_namelist.c +++ b/src/mms/iso_mms/client/mms_client_get_namelist.c @@ -229,12 +229,7 @@ mmsClient_createGetNameListRequestDomainOrVMDSpecific(long invokeId, const char* request->objectClass.present = ObjectClass_PR_basicObjectClass; - if (objectClass == MMS_NAMED_VARIABLE) - asn_long2INTEGER(&request->objectClass.choice.basicObjectClass, - ObjectClass__basicObjectClass_namedVariable); - else if (objectClass == MMS_NAMED_VARIABLE_LIST) - asn_long2INTEGER(&request->objectClass.choice.basicObjectClass, - ObjectClass__basicObjectClass_namedVariableList); + asn_long2INTEGER(&request->objectClass.choice.basicObjectClass, objectClass); asn_enc_rval_t rval; diff --git a/tools/model_generator/src/com/libiec61850/tools/StaticModelGenerator.java b/tools/model_generator/src/com/libiec61850/tools/StaticModelGenerator.java index a0b1ea6d..ea88eeee 100644 --- a/tools/model_generator/src/com/libiec61850/tools/StaticModelGenerator.java +++ b/tools/model_generator/src/com/libiec61850/tools/StaticModelGenerator.java @@ -3,7 +3,7 @@ package com.libiec61850.tools; /* * StaticModelGenerator.java * - * Copyright 2013, 2014 Michael Zillgith + * Copyright 2013-2016 Michael Zillgith * * This file is part of libIEC61850. * @@ -68,6 +68,10 @@ public class StaticModelGenerator { private List rcbVariableNames; private int currentRcbVariableNumber = 0; + private StringBuffer logControlBlocks; + private List lcbVariableNames; + private int currentLcbVariableNumber; + private StringBuffer gseControlBlocks; private List gseVariableNames; private int currentGseVariableNumber = 0;