diff --git a/config/stack_config.h.cmake b/config/stack_config.h.cmake index b3fcadf7..9365b492 100644 --- a/config/stack_config.h.cmake +++ b/config/stack_config.h.cmake @@ -137,7 +137,10 @@ #cmakedefine01 CONFIG_IEC61850_REPORT_SERVICE /* support buffered report control blocks with ResvTms field */ -#define CONFIG_IEC61850_BRCB_WITH_RESVTMS 0 +#define CONFIG_IEC61850_BRCB_WITH_RESVTMS 1 + +/* allow only configured clients (when pre-configured by ClientLN) - note behavior in PIXIT Rp13 */ +#define CONFIG_IEC61850_RCB_ALLOW_ONLY_PRECONFIGURED_CLIENT 0 /* The default buffer size of buffered RCBs in bytes */ #cmakedefine CONFIG_REPORTING_DEFAULT_REPORT_BUFFER_SIZE @CONFIG_REPORTING_DEFAULT_REPORT_BUFFER_SIZE@ diff --git a/src/iec61850/client/client_report_control.c b/src/iec61850/client/client_report_control.c index bce37e21..9b38d69e 100644 --- a/src/iec61850/client/client_report_control.c +++ b/src/iec61850/client/client_report_control.c @@ -324,6 +324,12 @@ ClientReportControlBlock_setPurgeBuf(ClientReportControlBlock self, bool purgeBu MmsValue_setBoolean(self->purgeBuf, purgeBuf); } +bool +ClientReportControlBlock_hasResvTms(ClientReportControlBlock self) +{ + return (self->resvTms != NULL); +} + int16_t ClientReportControlBlock_getResvTms(ClientReportControlBlock self) { diff --git a/src/iec61850/inc/iec61850_client.h b/src/iec61850/inc/iec61850_client.h index 8bddf07a..91a0eeed 100644 --- a/src/iec61850/inc/iec61850_client.h +++ b/src/iec61850/inc/iec61850_client.h @@ -1198,9 +1198,24 @@ ClientReportControlBlock_setGI(ClientReportControlBlock self, bool gi); bool ClientReportControlBlock_getPurgeBuf(ClientReportControlBlock self); +/** + * \brief Set the "PurgeBuf" attribute value (only BRCB) + * + * When set to true the report buffer will be cleared. + * + * \param purgeBuf attribute value + */ void ClientReportControlBlock_setPurgeBuf(ClientReportControlBlock self, bool purgeBuf); +/** + * \brief Check if optional attribute "ResvTms" is present in BRCB + * + * \return true when present, false otherwise + */ +bool +ClientReportControlBlock_hasResvTms(ClientReportControlBlock self); + int16_t ClientReportControlBlock_getResvTms(ClientReportControlBlock self); diff --git a/src/iec61850/server/mms_mapping/reporting.c b/src/iec61850/server/mms_mapping/reporting.c index 017999fe..0f1a260c 100644 --- a/src/iec61850/server/mms_mapping/reporting.c +++ b/src/iec61850/server/mms_mapping/reporting.c @@ -1759,9 +1759,9 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, char* eleme rc->triggered = false; rc->reserved = false; - } - updateOwner(rc, NULL); + updateOwner(rc, NULL); + } rc->enabled = false; }