- added additional events for IedServer_RCBEventHandler

pull/374/head
Michael Zillgith 4 years ago
parent 88148f39ac
commit 83e21e207b

@ -1554,7 +1554,12 @@ typedef enum {
/**
* \brief Callback that is called in case of RCB event
*
* \param parameter user provided paramter
* \param parameter user provided parameter
* \param rcb affected report control block
* \param connection client connection that is involved
* \param event event type
* \param parameterName name of the parameter in case of RCB_EVENT_SET_PARAMETER
* \param serviceError service error in case of RCB_EVENT_SET_PARAMETER
*/
typedef void (*IedServer_RCBEventHandler) (void* parameter, ReportControlBlock* rcb, ClientConnection connection, IedServer_RCBEventType event, const char* parameterName, MmsDataAccessError serviceError);

@ -1591,6 +1591,12 @@ checkReservationTimeout(MmsMapping* self, ReportControl* rc)
copyRCBValuesToTrackingObject(self, rc);
updateGenericTrackingObjectValues(self, rc, IEC61850_SERVICE_TYPE_INTERNAL_CHANGE, DATA_ACCESS_ERROR_SUCCESS);
#endif /* (CONFIG_IEC61850_SERVICE_TRACKING == 1) */
if (self->rcbEventHandler) {
ClientConnection clientConnection = private_IedServer_getClientConnectionByHandle(self->iedServer, rc->clientConnection);
self->rcbEventHandler(self->rcbEventHandlerParameter, rc->rcb, clientConnection, RCB_EVENT_UNRESERVED, NULL, DATA_ACCESS_ERROR_SUCCESS);
}
}
}
}
@ -1695,6 +1701,10 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, char* eleme
if (isIpAddressMatchingWithOwner(rc, MmsServerConnection_getClientAddress(connection))) {
rc->reserved = true;
rc->clientConnection = connection;
if (self->rcbEventHandler) {
self->rcbEventHandler(self->rcbEventHandlerParameter, rc->rcb, clientConnection, RCB_EVENT_RESERVED, NULL, DATA_ACCESS_ERROR_SUCCESS);
}
}
else {
if (DEBUG_IED_SERVER)
@ -1703,6 +1713,10 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, char* eleme
#else
rc->reserved = true;
rc->clientConnection = connection;
if (self->rcbEventHandler) {
self->rcbEventHandler(self->rcbEventHandlerParameter, rc->rcb, clientConnection, RCB_EVENT_RESERVED, NULL, DATA_ACCESS_ERROR_SUCCESS);
}
#endif
}
@ -1914,6 +1928,10 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, char* eleme
if (rc->resvTms == -1)
dontUpdate = true;
if (self->rcbEventHandler) {
self->rcbEventHandler(self->rcbEventHandlerParameter, rc->rcb, clientConnection, RCB_EVENT_UNRESERVED, NULL, DATA_ACCESS_ERROR_SUCCESS);
}
}
}
@ -2178,13 +2196,25 @@ exit_function:
rc->resvTms = RESV_TMS_IMPLICIT_VALUE;
reserveRcb(rc, connection);
if (self->rcbEventHandler) {
self->rcbEventHandler(self->rcbEventHandlerParameter, rc->rcb, clientConnection, RCB_EVENT_RESERVED, NULL, DATA_ACCESS_ERROR_SUCCESS);
}
}
else if (rc->resvTms == -1) {
reserveRcb(rc, connection);
if (self->rcbEventHandler) {
self->rcbEventHandler(self->rcbEventHandlerParameter, rc->rcb, clientConnection, RCB_EVENT_RESERVED, NULL, DATA_ACCESS_ERROR_SUCCESS);
}
}
}
else {
reserveRcb(rc, connection);
if (self->rcbEventHandler) {
self->rcbEventHandler(self->rcbEventHandlerParameter, rc->rcb, clientConnection, RCB_EVENT_RESERVED, NULL, DATA_ACCESS_ERROR_SUCCESS);
}
}
}
@ -2214,13 +2244,29 @@ exit_function:
static void
Reporting_disableReportControlInstance(MmsMapping* self, ReportControl* rc)
{
if (rc->enabled) {
if (self->rcbEventHandler) {
ClientConnection clientConnection = private_IedServer_getClientConnectionByHandle(self->iedServer, rc->clientConnection);
self->rcbEventHandler(self->rcbEventHandlerParameter, rc->rcb, clientConnection, RCB_EVENT_DISABLE, NULL, DATA_ACCESS_ERROR_SUCCESS);
}
}
rc->enabled = false;
rc->clientConnection = NULL;
MmsValue* rptEna = ReportControl_getRCBValue(rc, "RptEna");
MmsValue_setBoolean(rptEna, false);
rc->reserved = false;
if (rc->reserved) {
rc->reserved = false;
if (self->rcbEventHandler) {
ClientConnection clientConnection = private_IedServer_getClientConnectionByHandle(self->iedServer, rc->clientConnection);
self->rcbEventHandler(self->rcbEventHandlerParameter, rc->rcb, clientConnection, RCB_EVENT_UNRESERVED, NULL, DATA_ACCESS_ERROR_SUCCESS);
}
}
if (rc->buffered == false) {
@ -2239,7 +2285,7 @@ Reporting_disableReportControlInstance(MmsMapping* self, ReportControl* rc)
if (rc->resvTms == 0)
updateOwner(rc, NULL);
else if (rc->resvTms > 0) {
rc->reservationTimeout = Hal_getTimeInMs() + (rc->resvTms * 1000);
rc->reservationTimeout = Hal_getTimeInMs() + (rc->resvTms * 1000);
}
}

Loading…
Cancel
Save