- 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
{
/// <summary>
/// IedServer configuration object
/// </summary>
public class IedServerConfig : IDisposable
{
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern IntPtr IedServerConfig_create();
/// <summary>
/// IedServer configuration object
/// </summary>
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 ();
}
/// <summary>
/// Gets or sets the size of the report buffer for buffered report control blocks
/// </summary>
/// <value>The size of the report buffer.</value>
public int ReportBufferSize
{
get {
return IedServerConfig_getReportBufferSize (self);
}
set {
IedServerConfig_setReportBufferSize (self, value);
}
}
/// <summary>
/// Gets or sets the size of the report buffer for unbuffered report control blocks
/// </summary>
/// <value>The size of the report buffer.</value>
public int ReportBufferSizeForURCBs
{
get
{
return IedServerConfig_getReportBufferSizeForURCBs(self);
}
set
{
IedServerConfig_setReportBufferSizeForURCBs(self, value);
}
}
/// <summary>
/// Gets or sets the file service base path.
/// </summary>
/// <value>The file service base path.</value>
public string FileServiceBasePath
{
get {
return Marshal.PtrToStringAnsi (IedServerConfig_getFileServiceBasePath (self));
}
set {
IedServerConfig_setFileServiceBasePath (self, value);
}
}
/// <summary>
/// Enable/Disable file service for MMS
/// </summary>
/// <value><c>true</c> if file service is enabled; otherwise, <c>false</c>.</value>
public bool FileServiceEnabled
{
get
{
return IedServerConfig_isFileServiceEnabled(self);
}
set
{
IedServerConfig_enableFileService(self, value);
}
}
/// <summary>
/// Gets or sets the edition of the IEC 61850 standard to use
/// </summary>
/// <value>The IEC 61850 edition to use.</value>
public Iec61850Edition Edition
{
get {
return (Iec61850Edition)IedServerConfig_getEdition (self);
}
set {
IedServerConfig_setEdition (self, (byte) value);
}
}
/// <summary>
/// Gets or sets maximum number of MMS clients
/// </summary>
/// <value>The max number of MMS client connections.</value>
public int MaxMmsConnections
{
get {
return IedServerConfig_getMaxMmsConnections (self);
}
set {
IedServerConfig_setMaxMmsConnections (self, value);
}
}
/// <summary>
/// Enable/Disable dynamic data set service for MMS
/// </summary>
/// <value><c>true</c> if dynamic data set service enabled; otherwise, <c>false</c>.</value>
public bool DynamicDataSetServiceEnabled
{
get {
return IedServerConfig_isDynamicDataSetServiceEnabled (self);
}
set {
IedServerConfig_enableDynamicDataSetService (self, value);
}
}
/// <summary>
/// Gets or sets the maximum number of data set entries for dynamic data sets
/// </summary>
/// <value>The max. number data set entries.</value>
public int MaxDataSetEntries
{
get {
return IedServerConfig_getMaxDatasSetEntries (self);
}
set {
IedServerConfig_setMaxDataSetEntries (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>
public int MaxAssociationSpecificDataSets
{
get {
return IedServerConfig_getMaxAssociationSpecificDataSets (self);
}
set {
IedServerConfig_setMaxAssociationSpecificDataSets (self, value);
}
}
/// <summary>
/// Gets or sets the maximum number of domain specific (permanent) data sets.
/// </summary>
/// <value>The max. numebr of domain specific data sets.</value>
public int MaxDomainSpecificDataSets
{
get {
return IedServerConfig_getMaxDomainSpecificDataSets (self);
}
set {
IedServerConfig_setMaxDomainSpecificDataSets (self, value);
}
}
/// <summary>
/// Enable/Disable log service for MMS
/// </summary>
/// <value><c>true</c> if log service is enabled; otherwise, <c>false</c>.</value>
public bool LogServiceEnabled
{
get
{
return IedServerConfig_isLogServiceEnabled(self);
}
set
{
IedServerConfig_enableLogService(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 ();
}
}
[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();
}
/// <summary>
/// Gets or sets the size of the report buffer for buffered report control blocks
/// </summary>
/// <value>The size of the report buffer.</value>
public int ReportBufferSize
{
get
{
return IedServerConfig_getReportBufferSize(self);
}
set
{
IedServerConfig_setReportBufferSize(self, value);
}
}
/// <summary>
/// Gets or sets the size of the report buffer for unbuffered report control blocks
/// </summary>
/// <value>The size of the report buffer.</value>
public int ReportBufferSizeForURCBs
{
get
{
return IedServerConfig_getReportBufferSizeForURCBs(self);
}
set
{
IedServerConfig_setReportBufferSizeForURCBs(self, value);
}
}
/// <summary>
/// Gets or sets the file service base path.
/// </summary>
/// <value>The file service base path.</value>
public string FileServiceBasePath
{
get
{
return Marshal.PtrToStringAnsi(IedServerConfig_getFileServiceBasePath(self));
}
set
{
IedServerConfig_setFileServiceBasePath(self, value);
}
}
/// <summary>
/// Enable/Disable file service for MMS
/// </summary>
/// <value><c>true</c> if file service is enabled; otherwise, <c>false</c>.</value>
public bool FileServiceEnabled
{
get
{
return IedServerConfig_isFileServiceEnabled(self);
}
set
{
IedServerConfig_enableFileService(self, value);
}
}
/// <summary>
/// Gets or sets the edition of the IEC 61850 standard to use
/// </summary>
/// <value>The IEC 61850 edition to use.</value>
public Iec61850Edition Edition
{
get
{
return (Iec61850Edition)IedServerConfig_getEdition(self);
}
set
{
IedServerConfig_setEdition(self, (byte)value);
}
}
/// <summary>
/// Gets or sets maximum number of MMS clients
/// </summary>
/// <value>The max number of MMS client connections.</value>
public int MaxMmsConnections
{
get
{
return IedServerConfig_getMaxMmsConnections(self);
}
set
{
IedServerConfig_setMaxMmsConnections(self, value);
}
}
/// <summary>
/// Enable/Disable dynamic data set service for MMS
/// </summary>
/// <value><c>true</c> if dynamic data set service enabled; otherwise, <c>false</c>.</value>
public bool DynamicDataSetServiceEnabled
{
get
{
return IedServerConfig_isDynamicDataSetServiceEnabled(self);
}
set
{
IedServerConfig_enableDynamicDataSetService(self, value);
}
}
/// <summary>
/// Gets or sets the maximum number of data set entries for dynamic data sets
/// </summary>
/// <value>The max. number data set entries.</value>
public int MaxDataSetEntries
{
get
{
return IedServerConfig_getMaxDatasSetEntries(self);
}
set
{
IedServerConfig_setMaxDataSetEntries(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>
public int MaxAssociationSpecificDataSets
{
get
{
return IedServerConfig_getMaxAssociationSpecificDataSets(self);
}
set
{
IedServerConfig_setMaxAssociationSpecificDataSets(self, value);
}
}
/// <summary>
/// Gets or sets the maximum number of domain specific (permanent) data sets.
/// </summary>
/// <value>The max. numebr of domain specific data sets.</value>
public int MaxDomainSpecificDataSets
{
get
{
return IedServerConfig_getMaxDomainSpecificDataSets(self);
}
set
{
IedServerConfig_setMaxDomainSpecificDataSets(self, value);
}
}
/// <summary>
/// Enable/Disable log service for MMS
/// </summary>
/// <value><c>true</c> if log service is enabled; otherwise, <c>false</c>.</value>
public bool LogServiceEnabled
{
get
{
return IedServerConfig_isLogServiceEnabled(self);
}
set
{
IedServerConfig_enableLogService(self, value);
}
}
/// <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) */
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
*

@ -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)

@ -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

@ -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)
{

@ -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)

Loading…
Cancel
Save