- IED server: make presence of BRCB.ResvTms configurable at runtime with function IedServerConfig_enableResvTmsForBRCB (F1558)

pull/331/head
Michael Zillgith 5 years ago
parent d546ebac6f
commit fd3847dcc5

@ -27,275 +27,316 @@ using IEC61850.Common;
namespace IEC61850.Server namespace IEC61850.Server
{ {
/// <summary> /// <summary>
/// IedServer configuration object /// IedServer configuration object
/// </summary> /// </summary>
public class IedServerConfig : IDisposable public class IedServerConfig : IDisposable
{ {
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)] [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern IntPtr IedServerConfig_create(); static extern IntPtr IedServerConfig_create();
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)] [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern IntPtr IedServerConfig_destroy(IntPtr self); static extern IntPtr IedServerConfig_destroy(IntPtr self);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)] [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern void IedServerConfig_setReportBufferSize(IntPtr self, int reportBufferSize); static extern void IedServerConfig_setReportBufferSize(IntPtr self, int reportBufferSize);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)] [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern int IedServerConfig_getReportBufferSize(IntPtr self); static extern int IedServerConfig_getReportBufferSize(IntPtr self);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)] [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern void IedServerConfig_setReportBufferSizeForURCBs(IntPtr self, int reportBufferSize); static extern void IedServerConfig_setReportBufferSizeForURCBs(IntPtr self, int reportBufferSize);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)] [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern int IedServerConfig_getReportBufferSizeForURCBs(IntPtr self); static extern int IedServerConfig_getReportBufferSizeForURCBs(IntPtr self);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)] [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern void IedServerConfig_setFileServiceBasePath(IntPtr self, string basepath); static extern void IedServerConfig_setFileServiceBasePath(IntPtr self, string basepath);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)] [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern IntPtr IedServerConfig_getFileServiceBasePath(IntPtr self); static extern IntPtr IedServerConfig_getFileServiceBasePath(IntPtr self);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)] [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern void IedServerConfig_enableFileService(IntPtr self, [MarshalAs(UnmanagedType.I1)] bool enable); static extern void IedServerConfig_enableFileService(IntPtr self, [MarshalAs(UnmanagedType.I1)] bool enable);
[return: MarshalAs(UnmanagedType.I1)] [return: MarshalAs(UnmanagedType.I1)]
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)] [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern bool IedServerConfig_isFileServiceEnabled(IntPtr self); static extern bool IedServerConfig_isFileServiceEnabled(IntPtr self);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)] [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern void IedServerConfig_setEdition(IntPtr self, byte edition); static extern void IedServerConfig_setEdition(IntPtr self, byte edition);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)] [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern byte IedServerConfig_getEdition(IntPtr self); static extern byte IedServerConfig_getEdition(IntPtr self);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)] [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern void IedServerConfig_setMaxMmsConnections(IntPtr self, int maxConnections); static extern void IedServerConfig_setMaxMmsConnections(IntPtr self, int maxConnections);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)] [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern int IedServerConfig_getMaxMmsConnections(IntPtr self); static extern int IedServerConfig_getMaxMmsConnections(IntPtr self);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)] [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I1)] [return: MarshalAs(UnmanagedType.I1)]
static extern bool IedServerConfig_isDynamicDataSetServiceEnabled(IntPtr self); static extern bool IedServerConfig_isDynamicDataSetServiceEnabled(IntPtr self);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)] [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern void IedServerConfig_enableDynamicDataSetService(IntPtr self, [MarshalAs(UnmanagedType.I1)] bool enable); static extern void IedServerConfig_enableDynamicDataSetService(IntPtr self, [MarshalAs(UnmanagedType.I1)] bool enable);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)] [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern void IedServerConfig_setMaxAssociationSpecificDataSets(IntPtr self, int maxDataSets); static extern void IedServerConfig_setMaxAssociationSpecificDataSets(IntPtr self, int maxDataSets);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)] [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern int IedServerConfig_getMaxAssociationSpecificDataSets(IntPtr self); static extern int IedServerConfig_getMaxAssociationSpecificDataSets(IntPtr self);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)] [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern void IedServerConfig_setMaxDomainSpecificDataSets(IntPtr self, int maxDataSets); static extern void IedServerConfig_setMaxDomainSpecificDataSets(IntPtr self, int maxDataSets);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)] [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern int IedServerConfig_getMaxDomainSpecificDataSets(IntPtr self); static extern int IedServerConfig_getMaxDomainSpecificDataSets(IntPtr self);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)] [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern void IedServerConfig_setMaxDataSetEntries(IntPtr self, int maxDataSetEntries); static extern void IedServerConfig_setMaxDataSetEntries(IntPtr self, int maxDataSetEntries);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)] [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern int IedServerConfig_getMaxDatasSetEntries(IntPtr self); static extern int IedServerConfig_getMaxDatasSetEntries(IntPtr self);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)] [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern void IedServerConfig_enableLogService(IntPtr self, [MarshalAs(UnmanagedType.I1)] bool enable); static extern void IedServerConfig_enableLogService(IntPtr self, [MarshalAs(UnmanagedType.I1)] bool enable);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)] [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I1)] [return: MarshalAs(UnmanagedType.I1)]
static extern bool IedServerConfig_isLogServiceEnabled(IntPtr self); static extern bool IedServerConfig_isLogServiceEnabled(IntPtr self);
internal IntPtr self; [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern void IedServerConfig_enableResvTmsForBRCB(IntPtr self, [MarshalAs(UnmanagedType.I1)] bool enable);
public IedServerConfig ()
{ [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
self = IedServerConfig_create (); [return: MarshalAs(UnmanagedType.I1)]
} static extern bool IedServerConfig_isResvTmsForBRCBEnabled(IntPtr self);
/// <summary> internal IntPtr self;
/// Gets or sets the size of the report buffer for buffered report control blocks
/// </summary> public IedServerConfig()
/// <value>The size of the report buffer.</value> {
public int ReportBufferSize self = IedServerConfig_create();
{ }
get {
return IedServerConfig_getReportBufferSize (self); /// <summary>
} /// Gets or sets the size of the report buffer for buffered report control blocks
set { /// </summary>
IedServerConfig_setReportBufferSize (self, value); /// <value>The size of the report buffer.</value>
} public int ReportBufferSize
} {
get
/// <summary> {
/// Gets or sets the size of the report buffer for unbuffered report control blocks return IedServerConfig_getReportBufferSize(self);
/// </summary> }
/// <value>The size of the report buffer.</value> set
public int ReportBufferSizeForURCBs {
{ IedServerConfig_setReportBufferSize(self, value);
get }
{ }
return IedServerConfig_getReportBufferSizeForURCBs(self);
} /// <summary>
set /// Gets or sets the size of the report buffer for unbuffered report control blocks
{ /// </summary>
IedServerConfig_setReportBufferSizeForURCBs(self, value); /// <value>The size of the report buffer.</value>
} public int ReportBufferSizeForURCBs
} {
get
/// <summary> {
/// Gets or sets the file service base path. return IedServerConfig_getReportBufferSizeForURCBs(self);
/// </summary> }
/// <value>The file service base path.</value> set
public string FileServiceBasePath {
{ IedServerConfig_setReportBufferSizeForURCBs(self, value);
get { }
return Marshal.PtrToStringAnsi (IedServerConfig_getFileServiceBasePath (self)); }
}
set { /// <summary>
IedServerConfig_setFileServiceBasePath (self, value); /// Gets or sets the file service base path.
} /// </summary>
} /// <value>The file service base path.</value>
public string FileServiceBasePath
/// <summary> {
/// Enable/Disable file service for MMS get
/// </summary> {
/// <value><c>true</c> if file service is enabled; otherwise, <c>false</c>.</value> return Marshal.PtrToStringAnsi(IedServerConfig_getFileServiceBasePath(self));
public bool FileServiceEnabled }
{ set
get {
{ IedServerConfig_setFileServiceBasePath(self, value);
return IedServerConfig_isFileServiceEnabled(self); }
} }
set
{ /// <summary>
IedServerConfig_enableFileService(self, value); /// Enable/Disable file service for MMS
} /// </summary>
} /// <value><c>true</c> if file service is enabled; otherwise, <c>false</c>.</value>
public bool FileServiceEnabled
/// <summary> {
/// Gets or sets the edition of the IEC 61850 standard to use get
/// </summary> {
/// <value>The IEC 61850 edition to use.</value> return IedServerConfig_isFileServiceEnabled(self);
public Iec61850Edition Edition }
{ set
get { {
return (Iec61850Edition)IedServerConfig_getEdition (self); IedServerConfig_enableFileService(self, value);
} }
set { }
IedServerConfig_setEdition (self, (byte) value);
} /// <summary>
} /// Gets or sets the edition of the IEC 61850 standard to use
/// </summary>
/// <summary> /// <value>The IEC 61850 edition to use.</value>
/// Gets or sets maximum number of MMS clients public Iec61850Edition Edition
/// </summary> {
/// <value>The max number of MMS client connections.</value> get
public int MaxMmsConnections {
{ return (Iec61850Edition)IedServerConfig_getEdition(self);
get { }
return IedServerConfig_getMaxMmsConnections (self); set
} {
set { IedServerConfig_setEdition(self, (byte)value);
IedServerConfig_setMaxMmsConnections (self, value); }
} }
}
/// <summary>
/// <summary> /// Gets or sets maximum number of MMS clients
/// Enable/Disable dynamic data set service for MMS /// </summary>
/// </summary> /// <value>The max number of MMS client connections.</value>
/// <value><c>true</c> if dynamic data set service enabled; otherwise, <c>false</c>.</value> public int MaxMmsConnections
public bool DynamicDataSetServiceEnabled {
{ get
get { {
return IedServerConfig_isDynamicDataSetServiceEnabled (self); return IedServerConfig_getMaxMmsConnections(self);
} }
set { set
IedServerConfig_enableDynamicDataSetService (self, value); {
} IedServerConfig_setMaxMmsConnections(self, value);
} }
}
/// <summary>
/// Gets or sets the maximum number of data set entries for dynamic data sets /// <summary>
/// </summary> /// Enable/Disable dynamic data set service for MMS
/// <value>The max. number data set entries.</value> /// </summary>
public int MaxDataSetEntries /// <value><c>true</c> if dynamic data set service enabled; otherwise, <c>false</c>.</value>
{ public bool DynamicDataSetServiceEnabled
get { {
return IedServerConfig_getMaxDatasSetEntries (self); get
} {
set { return IedServerConfig_isDynamicDataSetServiceEnabled(self);
IedServerConfig_setMaxDataSetEntries (self, value); }
} set
} {
IedServerConfig_enableDynamicDataSetService(self, value);
/// <summary> }
/// Gets or sets the maximum number of association specific (non-permanent) data sets. }
/// </summary>
/// <value>The max. number of association specific data sets.</value> /// <summary>
public int MaxAssociationSpecificDataSets /// Gets or sets the maximum number of data set entries for dynamic data sets
{ /// </summary>
get { /// <value>The max. number data set entries.</value>
return IedServerConfig_getMaxAssociationSpecificDataSets (self); public int MaxDataSetEntries
} {
set { get
IedServerConfig_setMaxAssociationSpecificDataSets (self, value); {
} return IedServerConfig_getMaxDatasSetEntries(self);
} }
set
/// <summary> {
/// Gets or sets the maximum number of domain specific (permanent) data sets. IedServerConfig_setMaxDataSetEntries(self, value);
/// </summary> }
/// <value>The max. numebr of domain specific data sets.</value> }
public int MaxDomainSpecificDataSets
{ /// <summary>
get { /// Gets or sets the maximum number of association specific (non-permanent) data sets.
return IedServerConfig_getMaxDomainSpecificDataSets (self); /// </summary>
} /// <value>The max. number of association specific data sets.</value>
set { public int MaxAssociationSpecificDataSets
IedServerConfig_setMaxDomainSpecificDataSets (self, value); {
} get
} {
return IedServerConfig_getMaxAssociationSpecificDataSets(self);
/// <summary> }
/// Enable/Disable log service for MMS set
/// </summary> {
/// <value><c>true</c> if log service is enabled; otherwise, <c>false</c>.</value> IedServerConfig_setMaxAssociationSpecificDataSets(self, value);
public bool LogServiceEnabled }
{ }
get
{ /// <summary>
return IedServerConfig_isLogServiceEnabled(self); /// Gets or sets the maximum number of domain specific (permanent) data sets.
} /// </summary>
set /// <value>The max. numebr of domain specific data sets.</value>
{ public int MaxDomainSpecificDataSets
IedServerConfig_enableLogService(self, value); {
} get
} {
return IedServerConfig_getMaxDomainSpecificDataSets(self);
/// <summary> }
/// Releases all resource used by the <see cref="IEC61850.Server.IedServerConfig"/> object. set
/// </summary> {
/// <remarks>Call <see cref="Dispose"/> when you are finished using the <see cref="IEC61850.Server.IedServerConfig"/>. The IedServerConfig_setMaxDomainSpecificDataSets(self, value);
/// <see cref="Dispose"/> method leaves the <see cref="IEC61850.Server.IedServerConfig"/> in an unusable state. After }
/// calling <see cref="Dispose"/>, you must release all references to the }
/// <see cref="IEC61850.Server.IedServerConfig"/> so the garbage collector can reclaim the memory that the
/// <see cref="IEC61850.Server.IedServerConfig"/> was occupying.</remarks> /// <summary>
public void Dispose() /// Enable/Disable log service for MMS
{ /// </summary>
lock (this) { /// <value><c>true</c> if log service is enabled; otherwise, <c>false</c>.</value>
if (self != IntPtr.Zero) { public bool LogServiceEnabled
IedServerConfig_destroy (self); {
self = IntPtr.Zero; get
} {
} return IedServerConfig_isLogServiceEnabled(self);
} }
set
~IedServerConfig() {
{ IedServerConfig_enableLogService(self, value);
Dispose (); }
} }
}
/// <summary>
/// Enable/Disable the presence of ResvTms attribute in BRCBs (buffered report control blocks)
/// </summary>
/// <value><c>true</c> if BRCB has ResvTms; otherwise, <c>false</c>.</value>
public bool BRCBHasResvTms
{
get
{
return IedServerConfig_isResvTmsForBRCBEnabled(self);
}
set
{
IedServerConfig_enableResvTmsForBRCB(self, value);
}
}
/// <summary>
/// Releases all resource used by the <see cref="IEC61850.Server.IedServerConfig"/> object.
/// </summary>
/// <remarks>Call <see cref="Dispose"/> when you are finished using the <see cref="IEC61850.Server.IedServerConfig"/>. The
/// <see cref="Dispose"/> method leaves the <see cref="IEC61850.Server.IedServerConfig"/> in an unusable state. After
/// calling <see cref="Dispose"/>, you must release all references to the
/// <see cref="IEC61850.Server.IedServerConfig"/> so the garbage collector can reclaim the memory that the
/// <see cref="IEC61850.Server.IedServerConfig"/> was occupying.</remarks>
public void Dispose()
{
lock (this)
{
if (self != IntPtr.Zero)
{
IedServerConfig_destroy(self);
self = IntPtr.Zero;
}
}
}
~IedServerConfig()
{
Dispose();
}
}
} }

@ -89,6 +89,9 @@ struct sIedServerConfig
/** enable visibility of SGCB.ResvTms (default: true) */ /** enable visibility of SGCB.ResvTms (default: true) */
bool enableResvTmsForSGCB; 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 LIB61850_API void
IedServerConfig_enableResvTmsForSGCB(IedServerConfig self, bool enable); 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 * \brief Enable/disable using the integrated GOOSE publisher for configured GoCBs
* *

@ -47,6 +47,7 @@ struct sIedServer
#if (CONFIG_IEC61850_REPORT_SERVICE == 1) #if (CONFIG_IEC61850_REPORT_SERVICE == 1)
int reportBufferSizeBRCBs; int reportBufferSizeBRCBs;
int reportBufferSizeURCBs; int reportBufferSizeURCBs;
bool enableBRCBResvTms;
#endif #endif
#if (CONFIG_MMS_THREADLESS_STACK != 1) #if (CONFIG_MMS_THREADLESS_STACK != 1)

@ -482,10 +482,16 @@ IedServer_createWithConfig(IedModel* dataModel, TLSConfiguration tlsConfiguratio
if (serverConfiguration) { if (serverConfiguration) {
self->reportBufferSizeBRCBs = serverConfiguration->reportBufferSize; self->reportBufferSizeBRCBs = serverConfiguration->reportBufferSize;
self->reportBufferSizeURCBs = serverConfiguration->reportBufferSizeURCBs; self->reportBufferSizeURCBs = serverConfiguration->reportBufferSizeURCBs;
self->enableBRCBResvTms = serverConfiguration->enableResvTmsForBRCB;
} }
else { else {
self->reportBufferSizeBRCBs = CONFIG_REPORTING_DEFAULT_REPORT_BUFFER_SIZE; self->reportBufferSizeBRCBs = CONFIG_REPORTING_DEFAULT_REPORT_BUFFER_SIZE;
self->reportBufferSizeURCBs = 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 #endif

@ -55,6 +55,7 @@ IedServerConfig_create()
self->edition = IEC_61850_EDITION_2; self->edition = IEC_61850_EDITION_2;
self->maxMmsConnections = 5; self->maxMmsConnections = 5;
self->enableEditSG = true; self->enableEditSG = true;
self->enableResvTmsForBRCB = true;
} }
return self; return self;
@ -199,6 +200,19 @@ IedServerConfig_enableResvTmsForSGCB(IedServerConfig self, bool enable)
self->enableResvTmsForSGCB = enable; self->enableResvTmsForSGCB = enable;
} }
void
IedServerConfig_enableResvTmsForBRCB(IedServerConfig self, bool enable)
{
self->enableResvTmsForBRCB = enable;
}
bool
IedServerConfig_isResvTmsForBRCBEnabled(IedServerConfig self)
{
return self->enableResvTmsForBRCB;
}
void void
IedServerConfig_useIntegratedGoosePublisher(IedServerConfig self, bool enable) IedServerConfig_useIntegratedGoosePublisher(IedServerConfig self, bool enable)
{ {

@ -269,10 +269,16 @@ ReportControl_getRCBValue(ReportControl* rc, char* elementName)
if (rc->server->edition >= IEC_61850_EDITION_2) { if (rc->server->edition >= IEC_61850_EDITION_2) {
#if (CONFIG_IEC61850_BRCB_WITH_RESVTMS == 1) #if (CONFIG_IEC61850_BRCB_WITH_RESVTMS == 1)
if (strcmp(elementName, "ResvTms") == 0) if (rc->server->enableBRCBResvTms) {
return MmsValue_getElement(rc->rcbValues, 13); if (strcmp(elementName, "ResvTms") == 0)
if (strcmp(elementName, "Owner") == 0) return MmsValue_getElement(rc->rcbValues, 13);
return MmsValue_getElement(rc->rcbValues, 14); if (strcmp(elementName, "Owner") == 0)
return MmsValue_getElement(rc->rcbValues, 14);
}
else {
if (strcmp(elementName, "Owner") == 0)
return MmsValue_getElement(rc->rcbValues, 13);
}
#else #else
if (strcmp(elementName, "Owner") == 0) if (strcmp(elementName, "Owner") == 0)
return MmsValue_getElement(rc->rcbValues, 13); return MmsValue_getElement(rc->rcbValues, 13);
@ -1118,7 +1124,8 @@ createBufferedReportControlBlock(ReportControlBlock* reportControlBlock,
if (reportControl->server->edition >= IEC_61850_EDITION_2) { if (reportControl->server->edition >= IEC_61850_EDITION_2) {
#if (CONFIG_IEC61850_BRCB_WITH_RESVTMS == 1) #if (CONFIG_IEC61850_BRCB_WITH_RESVTMS == 1)
brcbElementCount++; if (reportControl->server->enableBRCBResvTms)
brcbElementCount++;
#endif #endif
if (reportControl->hasOwner) if (reportControl->hasOwner)
@ -1249,16 +1256,17 @@ createBufferedReportControlBlock(ReportControlBlock* reportControlBlock,
int currentIndex = 13; int currentIndex = 13;
#if (CONFIG_IEC61850_BRCB_WITH_RESVTMS == 1) #if (CONFIG_IEC61850_BRCB_WITH_RESVTMS == 1)
int resvTmsIndex = currentIndex; int resvTmsIndex = currentIndex;
namedVariable = (MmsVariableSpecification*) GLOBAL_CALLOC(1, sizeof(MmsVariableSpecification)); if (reportControl->server->enableBRCBResvTms) {
namedVariable->name = StringUtils_copyString("ResvTms"); namedVariable = (MmsVariableSpecification*) GLOBAL_CALLOC(1, sizeof(MmsVariableSpecification));
namedVariable->type = MMS_INTEGER; namedVariable->name = StringUtils_copyString("ResvTms");
namedVariable->typeSpec.integer = 16; namedVariable->type = MMS_INTEGER;
rcb->typeSpec.structure.elements[currentIndex] = namedVariable; namedVariable->typeSpec.integer = 16;
mmsValue->value.structure.components[currentIndex] = MmsValue_newInteger(16); rcb->typeSpec.structure.elements[currentIndex] = namedVariable;
currentIndex++; mmsValue->value.structure.components[currentIndex] = MmsValue_newInteger(16);
currentIndex++;
}
#endif /* (CONFIG_IEC61850_BRCB_WITH_RESVTMS == 1) */ #endif /* (CONFIG_IEC61850_BRCB_WITH_RESVTMS == 1) */
if (reportControl->hasOwner) { if (reportControl->hasOwner) {
@ -1281,7 +1289,9 @@ createBufferedReportControlBlock(ReportControlBlock* reportControlBlock,
} }
#if (CONFIG_IEC61850_BRCB_WITH_RESVTMS == 1) #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 #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); printf("IED_SERVER: reservation timeout expired for %s.%s\n", rc->parentLN->name, rc->name);
#if (CONFIG_IEC61850_BRCB_WITH_RESVTMS == 1) #if (CONFIG_IEC61850_BRCB_WITH_RESVTMS == 1)
MmsValue* resvTmsVal = ReportControl_getRCBValue(rc, "ResvTms"); if (self->iedServer->enableBRCBResvTms) {
if (resvTmsVal) MmsValue* resvTmsVal = ReportControl_getRCBValue(rc, "ResvTms");
MmsValue_setInt16(resvTmsVal, rc->resvTms); if (resvTmsVal)
MmsValue_setInt16(resvTmsVal, rc->resvTms);
}
#endif #endif
rc->reservationTimeout = 0; rc->reservationTimeout = 0;
@ -1641,9 +1653,11 @@ reserveRcb(ReportControl* rc, MmsServerConnection connection)
if (rc->buffered) { if (rc->buffered) {
#if (CONFIG_IEC61850_BRCB_WITH_RESVTMS == 1) #if (CONFIG_IEC61850_BRCB_WITH_RESVTMS == 1)
MmsValue* resvTmsVal = ReportControl_getRCBValue(rc, "ResvTms"); if (rc->server->enableBRCBResvTms) {
if (resvTmsVal) MmsValue* resvTmsVal = ReportControl_getRCBValue(rc, "ResvTms");
MmsValue_setInt16(resvTmsVal, rc->resvTms); if (resvTmsVal)
MmsValue_setInt16(resvTmsVal, rc->resvTms);
}
#endif #endif
} }
else { else {
@ -1655,7 +1669,6 @@ reserveRcb(ReportControl* rc, MmsServerConnection connection)
updateOwner(rc, connection); updateOwner(rc, connection);
} }
#if 1
MmsDataAccessError MmsDataAccessError
Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, char* elementName, MmsValue* value, Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, char* elementName, MmsValue* value,
MmsServerConnection connection) MmsServerConnection connection)
@ -2087,7 +2100,6 @@ exit_function:
return retVal; return retVal;
} }
#endif
void void
Reporting_deactivateReportsForConnection(MmsMapping* self, MmsServerConnection connection) Reporting_deactivateReportsForConnection(MmsMapping* self, MmsServerConnection connection)

Loading…
Cancel
Save