diff --git a/dotnet/IEC61850forCSharp/IedServerConfig.cs b/dotnet/IEC61850forCSharp/IedServerConfig.cs
index d2b4f71b..acf7cbf3 100644
--- a/dotnet/IEC61850forCSharp/IedServerConfig.cs
+++ b/dotnet/IEC61850forCSharp/IedServerConfig.cs
@@ -27,275 +27,316 @@ using IEC61850.Common;
namespace IEC61850.Server
{
- ///
- /// IedServer configuration object
- ///
- public class IedServerConfig : IDisposable
- {
- [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
- static extern IntPtr IedServerConfig_create();
+ ///
+ /// IedServer configuration object
+ ///
+ public class IedServerConfig : IDisposable
+ {
+ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
+ static extern IntPtr IedServerConfig_create();
- [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
- static extern IntPtr IedServerConfig_destroy(IntPtr self);
+ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
+ static extern IntPtr IedServerConfig_destroy(IntPtr self);
- [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
- static extern void IedServerConfig_setReportBufferSize(IntPtr self, int reportBufferSize);
-
- [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
- static extern int IedServerConfig_getReportBufferSize(IntPtr self);
-
- [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
- static extern void IedServerConfig_setReportBufferSizeForURCBs(IntPtr self, int reportBufferSize);
-
- [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
- static extern int IedServerConfig_getReportBufferSizeForURCBs(IntPtr self);
-
- [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
- static extern void IedServerConfig_setFileServiceBasePath(IntPtr self, string basepath);
-
- [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
- static extern IntPtr IedServerConfig_getFileServiceBasePath(IntPtr self);
-
- [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
- static extern void IedServerConfig_enableFileService(IntPtr self, [MarshalAs(UnmanagedType.I1)] bool enable);
-
- [return: MarshalAs(UnmanagedType.I1)]
- [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
- static extern bool IedServerConfig_isFileServiceEnabled(IntPtr self);
-
- [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
- static extern void IedServerConfig_setEdition(IntPtr self, byte edition);
-
- [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
- static extern byte IedServerConfig_getEdition(IntPtr self);
-
- [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
- static extern void IedServerConfig_setMaxMmsConnections(IntPtr self, int maxConnections);
-
- [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
- static extern int IedServerConfig_getMaxMmsConnections(IntPtr self);
-
- [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
- [return: MarshalAs(UnmanagedType.I1)]
- static extern bool IedServerConfig_isDynamicDataSetServiceEnabled(IntPtr self);
-
- [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
- static extern void IedServerConfig_enableDynamicDataSetService(IntPtr self, [MarshalAs(UnmanagedType.I1)] bool enable);
-
- [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
- static extern void IedServerConfig_setMaxAssociationSpecificDataSets(IntPtr self, int maxDataSets);
-
- [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
- static extern int IedServerConfig_getMaxAssociationSpecificDataSets(IntPtr self);
-
- [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
- static extern void IedServerConfig_setMaxDomainSpecificDataSets(IntPtr self, int maxDataSets);
-
- [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
- static extern int IedServerConfig_getMaxDomainSpecificDataSets(IntPtr self);
-
- [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
- static extern void IedServerConfig_setMaxDataSetEntries(IntPtr self, int maxDataSetEntries);
-
- [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
- static extern int IedServerConfig_getMaxDatasSetEntries(IntPtr self);
-
- [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
- static extern void IedServerConfig_enableLogService(IntPtr self, [MarshalAs(UnmanagedType.I1)] bool enable);
-
- [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
- [return: MarshalAs(UnmanagedType.I1)]
- static extern bool IedServerConfig_isLogServiceEnabled(IntPtr self);
-
- internal IntPtr self;
-
- public IedServerConfig ()
- {
- self = IedServerConfig_create ();
- }
-
- ///
- /// Gets or sets the size of the report buffer for buffered report control blocks
- ///
- /// The size of the report buffer.
- public int ReportBufferSize
- {
- get {
- return IedServerConfig_getReportBufferSize (self);
- }
- set {
- IedServerConfig_setReportBufferSize (self, value);
- }
- }
-
- ///
- /// Gets or sets the size of the report buffer for unbuffered report control blocks
- ///
- /// The size of the report buffer.
- public int ReportBufferSizeForURCBs
- {
- get
- {
- return IedServerConfig_getReportBufferSizeForURCBs(self);
- }
- set
- {
- IedServerConfig_setReportBufferSizeForURCBs(self, value);
- }
- }
-
- ///
- /// Gets or sets the file service base path.
- ///
- /// The file service base path.
- public string FileServiceBasePath
- {
- get {
- return Marshal.PtrToStringAnsi (IedServerConfig_getFileServiceBasePath (self));
- }
- set {
- IedServerConfig_setFileServiceBasePath (self, value);
- }
- }
-
- ///
- /// Enable/Disable file service for MMS
- ///
- /// true if file service is enabled; otherwise, false.
- public bool FileServiceEnabled
- {
- get
- {
- return IedServerConfig_isFileServiceEnabled(self);
- }
- set
- {
- IedServerConfig_enableFileService(self, value);
- }
- }
-
- ///
- /// Gets or sets the edition of the IEC 61850 standard to use
- ///
- /// The IEC 61850 edition to use.
- public Iec61850Edition Edition
- {
- get {
- return (Iec61850Edition)IedServerConfig_getEdition (self);
- }
- set {
- IedServerConfig_setEdition (self, (byte) value);
- }
- }
-
- ///
- /// Gets or sets maximum number of MMS clients
- ///
- /// The max number of MMS client connections.
- public int MaxMmsConnections
- {
- get {
- return IedServerConfig_getMaxMmsConnections (self);
- }
- set {
- IedServerConfig_setMaxMmsConnections (self, value);
- }
- }
-
- ///
- /// Enable/Disable dynamic data set service for MMS
- ///
- /// true if dynamic data set service enabled; otherwise, false.
- public bool DynamicDataSetServiceEnabled
- {
- get {
- return IedServerConfig_isDynamicDataSetServiceEnabled (self);
- }
- set {
- IedServerConfig_enableDynamicDataSetService (self, value);
- }
- }
-
- ///
- /// Gets or sets the maximum number of data set entries for dynamic data sets
- ///
- /// The max. number data set entries.
- public int MaxDataSetEntries
- {
- get {
- return IedServerConfig_getMaxDatasSetEntries (self);
- }
- set {
- IedServerConfig_setMaxDataSetEntries (self, value);
- }
- }
-
- ///
- /// Gets or sets the maximum number of association specific (non-permanent) data sets.
- ///
- /// The max. number of association specific data sets.
- public int MaxAssociationSpecificDataSets
- {
- get {
- return IedServerConfig_getMaxAssociationSpecificDataSets (self);
- }
- set {
- IedServerConfig_setMaxAssociationSpecificDataSets (self, value);
- }
- }
-
- ///
- /// Gets or sets the maximum number of domain specific (permanent) data sets.
- ///
- /// The max. numebr of domain specific data sets.
- public int MaxDomainSpecificDataSets
- {
- get {
- return IedServerConfig_getMaxDomainSpecificDataSets (self);
- }
- set {
- IedServerConfig_setMaxDomainSpecificDataSets (self, value);
- }
- }
-
- ///
- /// Enable/Disable log service for MMS
- ///
- /// true if log service is enabled; otherwise, false.
- public bool LogServiceEnabled
- {
- get
- {
- return IedServerConfig_isLogServiceEnabled(self);
- }
- set
- {
- IedServerConfig_enableLogService(self, value);
- }
- }
-
- ///
- /// Releases all resource used by the object.
- ///
- /// Call when you are finished using the . The
- /// method leaves the in an unusable state. After
- /// calling , you must release all references to the
- /// so the garbage collector can reclaim the memory that the
- /// was occupying.
- public void Dispose()
- {
- lock (this) {
- if (self != IntPtr.Zero) {
- IedServerConfig_destroy (self);
- self = IntPtr.Zero;
- }
- }
- }
-
- ~IedServerConfig()
- {
- Dispose ();
- }
- }
+ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
+ static extern void IedServerConfig_setReportBufferSize(IntPtr self, int reportBufferSize);
+
+ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
+ static extern int IedServerConfig_getReportBufferSize(IntPtr self);
+
+ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
+ static extern void IedServerConfig_setReportBufferSizeForURCBs(IntPtr self, int reportBufferSize);
+
+ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
+ static extern int IedServerConfig_getReportBufferSizeForURCBs(IntPtr self);
+
+ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
+ static extern void IedServerConfig_setFileServiceBasePath(IntPtr self, string basepath);
+
+ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
+ static extern IntPtr IedServerConfig_getFileServiceBasePath(IntPtr self);
+
+ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
+ static extern void IedServerConfig_enableFileService(IntPtr self, [MarshalAs(UnmanagedType.I1)] bool enable);
+
+ [return: MarshalAs(UnmanagedType.I1)]
+ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
+ static extern bool IedServerConfig_isFileServiceEnabled(IntPtr self);
+
+ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
+ static extern void IedServerConfig_setEdition(IntPtr self, byte edition);
+
+ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
+ static extern byte IedServerConfig_getEdition(IntPtr self);
+
+ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
+ static extern void IedServerConfig_setMaxMmsConnections(IntPtr self, int maxConnections);
+
+ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
+ static extern int IedServerConfig_getMaxMmsConnections(IntPtr self);
+
+ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
+ [return: MarshalAs(UnmanagedType.I1)]
+ static extern bool IedServerConfig_isDynamicDataSetServiceEnabled(IntPtr self);
+
+ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
+ static extern void IedServerConfig_enableDynamicDataSetService(IntPtr self, [MarshalAs(UnmanagedType.I1)] bool enable);
+
+ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
+ static extern void IedServerConfig_setMaxAssociationSpecificDataSets(IntPtr self, int maxDataSets);
+
+ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
+ static extern int IedServerConfig_getMaxAssociationSpecificDataSets(IntPtr self);
+
+ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
+ static extern void IedServerConfig_setMaxDomainSpecificDataSets(IntPtr self, int maxDataSets);
+
+ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
+ static extern int IedServerConfig_getMaxDomainSpecificDataSets(IntPtr self);
+
+ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
+ static extern void IedServerConfig_setMaxDataSetEntries(IntPtr self, int maxDataSetEntries);
+
+ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
+ static extern int IedServerConfig_getMaxDatasSetEntries(IntPtr self);
+
+ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
+ static extern void IedServerConfig_enableLogService(IntPtr self, [MarshalAs(UnmanagedType.I1)] bool enable);
+
+ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
+ [return: MarshalAs(UnmanagedType.I1)]
+ static extern bool IedServerConfig_isLogServiceEnabled(IntPtr self);
+
+ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
+ static extern void IedServerConfig_enableResvTmsForBRCB(IntPtr self, [MarshalAs(UnmanagedType.I1)] bool enable);
+
+ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
+ [return: MarshalAs(UnmanagedType.I1)]
+ static extern bool IedServerConfig_isResvTmsForBRCBEnabled(IntPtr self);
+
+ internal IntPtr self;
+
+ public IedServerConfig()
+ {
+ self = IedServerConfig_create();
+ }
+
+ ///
+ /// Gets or sets the size of the report buffer for buffered report control blocks
+ ///
+ /// The size of the report buffer.
+ public int ReportBufferSize
+ {
+ get
+ {
+ return IedServerConfig_getReportBufferSize(self);
+ }
+ set
+ {
+ IedServerConfig_setReportBufferSize(self, value);
+ }
+ }
+
+ ///
+ /// Gets or sets the size of the report buffer for unbuffered report control blocks
+ ///
+ /// The size of the report buffer.
+ public int ReportBufferSizeForURCBs
+ {
+ get
+ {
+ return IedServerConfig_getReportBufferSizeForURCBs(self);
+ }
+ set
+ {
+ IedServerConfig_setReportBufferSizeForURCBs(self, value);
+ }
+ }
+
+ ///
+ /// Gets or sets the file service base path.
+ ///
+ /// The file service base path.
+ public string FileServiceBasePath
+ {
+ get
+ {
+ return Marshal.PtrToStringAnsi(IedServerConfig_getFileServiceBasePath(self));
+ }
+ set
+ {
+ IedServerConfig_setFileServiceBasePath(self, value);
+ }
+ }
+
+ ///
+ /// Enable/Disable file service for MMS
+ ///
+ /// true if file service is enabled; otherwise, false.
+ public bool FileServiceEnabled
+ {
+ get
+ {
+ return IedServerConfig_isFileServiceEnabled(self);
+ }
+ set
+ {
+ IedServerConfig_enableFileService(self, value);
+ }
+ }
+
+ ///
+ /// Gets or sets the edition of the IEC 61850 standard to use
+ ///
+ /// The IEC 61850 edition to use.
+ public Iec61850Edition Edition
+ {
+ get
+ {
+ return (Iec61850Edition)IedServerConfig_getEdition(self);
+ }
+ set
+ {
+ IedServerConfig_setEdition(self, (byte)value);
+ }
+ }
+
+ ///
+ /// Gets or sets maximum number of MMS clients
+ ///
+ /// The max number of MMS client connections.
+ public int MaxMmsConnections
+ {
+ get
+ {
+ return IedServerConfig_getMaxMmsConnections(self);
+ }
+ set
+ {
+ IedServerConfig_setMaxMmsConnections(self, value);
+ }
+ }
+
+ ///
+ /// Enable/Disable dynamic data set service for MMS
+ ///
+ /// true if dynamic data set service enabled; otherwise, false.
+ public bool DynamicDataSetServiceEnabled
+ {
+ get
+ {
+ return IedServerConfig_isDynamicDataSetServiceEnabled(self);
+ }
+ set
+ {
+ IedServerConfig_enableDynamicDataSetService(self, value);
+ }
+ }
+
+ ///
+ /// Gets or sets the maximum number of data set entries for dynamic data sets
+ ///
+ /// The max. number data set entries.
+ public int MaxDataSetEntries
+ {
+ get
+ {
+ return IedServerConfig_getMaxDatasSetEntries(self);
+ }
+ set
+ {
+ IedServerConfig_setMaxDataSetEntries(self, value);
+ }
+ }
+
+ ///
+ /// Gets or sets the maximum number of association specific (non-permanent) data sets.
+ ///
+ /// The max. number of association specific data sets.
+ public int MaxAssociationSpecificDataSets
+ {
+ get
+ {
+ return IedServerConfig_getMaxAssociationSpecificDataSets(self);
+ }
+ set
+ {
+ IedServerConfig_setMaxAssociationSpecificDataSets(self, value);
+ }
+ }
+
+ ///
+ /// Gets or sets the maximum number of domain specific (permanent) data sets.
+ ///
+ /// The max. numebr of domain specific data sets.
+ public int MaxDomainSpecificDataSets
+ {
+ get
+ {
+ return IedServerConfig_getMaxDomainSpecificDataSets(self);
+ }
+ set
+ {
+ IedServerConfig_setMaxDomainSpecificDataSets(self, value);
+ }
+ }
+
+ ///
+ /// Enable/Disable log service for MMS
+ ///
+ /// true if log service is enabled; otherwise, false.
+ public bool LogServiceEnabled
+ {
+ get
+ {
+ return IedServerConfig_isLogServiceEnabled(self);
+ }
+ set
+ {
+ IedServerConfig_enableLogService(self, value);
+ }
+ }
+
+ ///
+ /// Enable/Disable the presence of ResvTms attribute in BRCBs (buffered report control blocks)
+ ///
+ /// true if BRCB has ResvTms; otherwise, false.
+ public bool BRCBHasResvTms
+ {
+ get
+ {
+ return IedServerConfig_isResvTmsForBRCBEnabled(self);
+ }
+ set
+ {
+ IedServerConfig_enableResvTmsForBRCB(self, value);
+ }
+ }
+
+ ///
+ /// Releases all resource used by the object.
+ ///
+ /// Call when you are finished using the . The
+ /// method leaves the in an unusable state. After
+ /// calling , you must release all references to the
+ /// so the garbage collector can reclaim the memory that the
+ /// was occupying.
+ public void Dispose()
+ {
+ lock (this)
+ {
+ if (self != IntPtr.Zero)
+ {
+ IedServerConfig_destroy(self);
+ self = IntPtr.Zero;
+ }
+ }
+ }
+
+ ~IedServerConfig()
+ {
+ Dispose();
+ }
+ }
}
diff --git a/src/iec61850/inc/iec61850_server.h b/src/iec61850/inc/iec61850_server.h
index 4d111d4e..0615defa 100644
--- a/src/iec61850/inc/iec61850_server.h
+++ b/src/iec61850/inc/iec61850_server.h
@@ -89,6 +89,9 @@ struct sIedServerConfig
/** enable visibility of SGCB.ResvTms (default: true) */
bool enableResvTmsForSGCB;
+
+ /** BRCB has resvTms attribute - only edition 2 (default: true) */
+ bool enableResvTmsForBRCB;
};
/**
@@ -304,6 +307,22 @@ IedServerConfig_enableEditSG(IedServerConfig self, bool enable);
LIB61850_API void
IedServerConfig_enableResvTmsForSGCB(IedServerConfig self, bool enable);
+/**
+ * \brief Enable/disable the presence of BRCB.ResvTms
+ *
+ * \param[in] enable set true to enable, otherwise false (default value it true)
+ */
+LIB61850_API void
+IedServerConfig_enableResvTmsForBRCB(IedServerConfig self, bool enable);
+
+/**
+ * \brief ResvTms for BRCB enabled (visible)
+ *
+ * \return true if enabled, false otherwise
+ */
+LIB61850_API bool
+IedServerConfig_isResvTmsForBRCBEnabled(IedServerConfig self);
+
/**
* \brief Enable/disable using the integrated GOOSE publisher for configured GoCBs
*
diff --git a/src/iec61850/inc_private/ied_server_private.h b/src/iec61850/inc_private/ied_server_private.h
index 6b1aad8a..0c05efe2 100644
--- a/src/iec61850/inc_private/ied_server_private.h
+++ b/src/iec61850/inc_private/ied_server_private.h
@@ -47,6 +47,7 @@ struct sIedServer
#if (CONFIG_IEC61850_REPORT_SERVICE == 1)
int reportBufferSizeBRCBs;
int reportBufferSizeURCBs;
+ bool enableBRCBResvTms;
#endif
#if (CONFIG_MMS_THREADLESS_STACK != 1)
diff --git a/src/iec61850/server/impl/ied_server.c b/src/iec61850/server/impl/ied_server.c
index d2199c2c..c24ee4a9 100644
--- a/src/iec61850/server/impl/ied_server.c
+++ b/src/iec61850/server/impl/ied_server.c
@@ -482,10 +482,16 @@ IedServer_createWithConfig(IedModel* dataModel, TLSConfiguration tlsConfiguratio
if (serverConfiguration) {
self->reportBufferSizeBRCBs = serverConfiguration->reportBufferSize;
self->reportBufferSizeURCBs = serverConfiguration->reportBufferSizeURCBs;
+ self->enableBRCBResvTms = serverConfiguration->enableResvTmsForBRCB;
}
else {
self->reportBufferSizeBRCBs = CONFIG_REPORTING_DEFAULT_REPORT_BUFFER_SIZE;
self->reportBufferSizeURCBs = CONFIG_REPORTING_DEFAULT_REPORT_BUFFER_SIZE;
+#if (CONFIG_IEC61850_BRCB_WITH_RESVTMS == 1)
+ self->enableBRCBResvTms = true;
+#else
+ self->enableBRCBResvTms = false;
+#endif
}
#endif
diff --git a/src/iec61850/server/impl/ied_server_config.c b/src/iec61850/server/impl/ied_server_config.c
index 4f79819d..6d294765 100644
--- a/src/iec61850/server/impl/ied_server_config.c
+++ b/src/iec61850/server/impl/ied_server_config.c
@@ -55,6 +55,7 @@ IedServerConfig_create()
self->edition = IEC_61850_EDITION_2;
self->maxMmsConnections = 5;
self->enableEditSG = true;
+ self->enableResvTmsForBRCB = true;
}
return self;
@@ -199,6 +200,19 @@ IedServerConfig_enableResvTmsForSGCB(IedServerConfig self, bool enable)
self->enableResvTmsForSGCB = enable;
}
+void
+IedServerConfig_enableResvTmsForBRCB(IedServerConfig self, bool enable)
+{
+ self->enableResvTmsForBRCB = enable;
+}
+
+bool
+IedServerConfig_isResvTmsForBRCBEnabled(IedServerConfig self)
+{
+ return self->enableResvTmsForBRCB;
+}
+
+
void
IedServerConfig_useIntegratedGoosePublisher(IedServerConfig self, bool enable)
{
diff --git a/src/iec61850/server/mms_mapping/reporting.c b/src/iec61850/server/mms_mapping/reporting.c
index 40454739..1aa0cffa 100644
--- a/src/iec61850/server/mms_mapping/reporting.c
+++ b/src/iec61850/server/mms_mapping/reporting.c
@@ -269,10 +269,16 @@ ReportControl_getRCBValue(ReportControl* rc, char* elementName)
if (rc->server->edition >= IEC_61850_EDITION_2) {
#if (CONFIG_IEC61850_BRCB_WITH_RESVTMS == 1)
- if (strcmp(elementName, "ResvTms") == 0)
- return MmsValue_getElement(rc->rcbValues, 13);
- if (strcmp(elementName, "Owner") == 0)
- return MmsValue_getElement(rc->rcbValues, 14);
+ if (rc->server->enableBRCBResvTms) {
+ if (strcmp(elementName, "ResvTms") == 0)
+ return MmsValue_getElement(rc->rcbValues, 13);
+ if (strcmp(elementName, "Owner") == 0)
+ return MmsValue_getElement(rc->rcbValues, 14);
+ }
+ else {
+ if (strcmp(elementName, "Owner") == 0)
+ return MmsValue_getElement(rc->rcbValues, 13);
+ }
#else
if (strcmp(elementName, "Owner") == 0)
return MmsValue_getElement(rc->rcbValues, 13);
@@ -1118,7 +1124,8 @@ createBufferedReportControlBlock(ReportControlBlock* reportControlBlock,
if (reportControl->server->edition >= IEC_61850_EDITION_2) {
#if (CONFIG_IEC61850_BRCB_WITH_RESVTMS == 1)
- brcbElementCount++;
+ if (reportControl->server->enableBRCBResvTms)
+ brcbElementCount++;
#endif
if (reportControl->hasOwner)
@@ -1249,16 +1256,17 @@ createBufferedReportControlBlock(ReportControlBlock* reportControlBlock,
int currentIndex = 13;
#if (CONFIG_IEC61850_BRCB_WITH_RESVTMS == 1)
-
int resvTmsIndex = currentIndex;
- namedVariable = (MmsVariableSpecification*) GLOBAL_CALLOC(1, sizeof(MmsVariableSpecification));
- namedVariable->name = StringUtils_copyString("ResvTms");
- namedVariable->type = MMS_INTEGER;
- namedVariable->typeSpec.integer = 16;
- rcb->typeSpec.structure.elements[currentIndex] = namedVariable;
- mmsValue->value.structure.components[currentIndex] = MmsValue_newInteger(16);
- currentIndex++;
+ if (reportControl->server->enableBRCBResvTms) {
+ namedVariable = (MmsVariableSpecification*) GLOBAL_CALLOC(1, sizeof(MmsVariableSpecification));
+ namedVariable->name = StringUtils_copyString("ResvTms");
+ namedVariable->type = MMS_INTEGER;
+ namedVariable->typeSpec.integer = 16;
+ rcb->typeSpec.structure.elements[currentIndex] = namedVariable;
+ mmsValue->value.structure.components[currentIndex] = MmsValue_newInteger(16);
+ currentIndex++;
+ }
#endif /* (CONFIG_IEC61850_BRCB_WITH_RESVTMS == 1) */
if (reportControl->hasOwner) {
@@ -1281,7 +1289,9 @@ createBufferedReportControlBlock(ReportControlBlock* reportControlBlock,
}
#if (CONFIG_IEC61850_BRCB_WITH_RESVTMS == 1)
- MmsValue_setInt16(mmsValue->value.structure.components[resvTmsIndex], reportControl->resvTms);
+ if (reportControl->server->enableBRCBResvTms) {
+ MmsValue_setInt16(mmsValue->value.structure.components[resvTmsIndex], reportControl->resvTms);
+ }
#endif
}
@@ -1569,9 +1579,11 @@ checkReservationTimeout(MmsMapping* self, ReportControl* rc)
printf("IED_SERVER: reservation timeout expired for %s.%s\n", rc->parentLN->name, rc->name);
#if (CONFIG_IEC61850_BRCB_WITH_RESVTMS == 1)
- MmsValue* resvTmsVal = ReportControl_getRCBValue(rc, "ResvTms");
- if (resvTmsVal)
- MmsValue_setInt16(resvTmsVal, rc->resvTms);
+ if (self->iedServer->enableBRCBResvTms) {
+ MmsValue* resvTmsVal = ReportControl_getRCBValue(rc, "ResvTms");
+ if (resvTmsVal)
+ MmsValue_setInt16(resvTmsVal, rc->resvTms);
+ }
#endif
rc->reservationTimeout = 0;
@@ -1641,9 +1653,11 @@ reserveRcb(ReportControl* rc, MmsServerConnection connection)
if (rc->buffered) {
#if (CONFIG_IEC61850_BRCB_WITH_RESVTMS == 1)
- MmsValue* resvTmsVal = ReportControl_getRCBValue(rc, "ResvTms");
- if (resvTmsVal)
- MmsValue_setInt16(resvTmsVal, rc->resvTms);
+ if (rc->server->enableBRCBResvTms) {
+ MmsValue* resvTmsVal = ReportControl_getRCBValue(rc, "ResvTms");
+ if (resvTmsVal)
+ MmsValue_setInt16(resvTmsVal, rc->resvTms);
+ }
#endif
}
else {
@@ -1655,7 +1669,6 @@ reserveRcb(ReportControl* rc, MmsServerConnection connection)
updateOwner(rc, connection);
}
-#if 1
MmsDataAccessError
Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, char* elementName, MmsValue* value,
MmsServerConnection connection)
@@ -2087,7 +2100,6 @@ exit_function:
return retVal;
}
-#endif
void
Reporting_deactivateReportsForConnection(MmsMapping* self, MmsServerConnection connection)