From ee3d4f0164a0f162fd537f92e5446bbf6bf72a8a Mon Sep 17 00:00:00 2001 From: Michael Zillgith Date: Thu, 22 Aug 2019 18:36:34 +0200 Subject: [PATCH] - added function GooseReceiver_getInterfaceId - GOOSE receiver: fixed problem with running state detection after receiver start --- src/goose/goose_receiver.c | 31 ++++++++++++++++++++----------- src/goose/goose_receiver.h | 10 ++++++++++ 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/src/goose/goose_receiver.c b/src/goose/goose_receiver.c index c081542c..25050438 100644 --- a/src/goose/goose_receiver.c +++ b/src/goose/goose_receiver.c @@ -111,6 +111,15 @@ GooseReceiver_setInterfaceId(GooseReceiver self, const char* interfaceId) self->interfaceId = StringUtils_copyString(interfaceId); } +const char* +GooseReceiver_getInterfaceId(GooseReceiver self) +{ + if (self->interfaceId) + return self->interfaceId; + else + return CONFIG_ETHERNET_INTERFACE_ID; +} + static void createNewStringFromBufferElement(MmsValue* value, uint8_t* bufferSrc, int elementLength) { @@ -784,8 +793,6 @@ gooseReceiverLoop(void* threadParameter) { GooseReceiver self = (GooseReceiver) threadParameter; - GooseReceiver_startThreadless(self); - if (self->running) { while (self->running) { @@ -807,17 +814,19 @@ void GooseReceiver_start(GooseReceiver self) { #if (CONFIG_MMS_THREADLESS_STACK == 0) - self->thread = Thread_create((ThreadExecutionFunction) gooseReceiverLoop, (void*) self, false); + if (GooseReceiver_startThreadless(self)) { + self->thread = Thread_create((ThreadExecutionFunction) gooseReceiverLoop, (void*) self, false); - if (self->thread != NULL) { - if (DEBUG_GOOSE_SUBSCRIBER) - printf("GOOSE_SUBSCRIBER: GOOSE receiver started for interface %s\n", self->interfaceId); + if (self->thread != NULL) { + if (DEBUG_GOOSE_SUBSCRIBER) + printf("GOOSE_SUBSCRIBER: GOOSE receiver started for interface %s\n", self->interfaceId); - Thread_start(self->thread); - } - else { - if (DEBUG_GOOSE_SUBSCRIBER) - printf("GOOSE_SUBSCRIBER: Starting GOOSE receiver failed for interface %s\n", self->interfaceId); + Thread_start(self->thread); + } + else { + if (DEBUG_GOOSE_SUBSCRIBER) + printf("GOOSE_SUBSCRIBER: Starting GOOSE receiver failed for interface %s\n", self->interfaceId); + } } #endif } diff --git a/src/goose/goose_receiver.h b/src/goose/goose_receiver.h index b13c2d21..5d041d26 100644 --- a/src/goose/goose_receiver.h +++ b/src/goose/goose_receiver.h @@ -73,6 +73,16 @@ GooseReceiver_createEx(uint8_t* buffer); LIB61850_API void GooseReceiver_setInterfaceId(GooseReceiver self, const char* interfaceId); +/** + * \brief return the interface ID used by the GOOSE receiver + * + * \param self the GosseReceiver instance + * + * \return the Ethernet interface ID string + */ +LIB61850_API const char* +GooseReceiver_getInterfaceId(GooseReceiver self); + /** * \brief Add a subscriber to this receiver instance *