- added function GooseReceiver_getInterfaceId

- GOOSE receiver: fixed problem with running state detection after receiver start
pull/179/head
Michael Zillgith 6 years ago
parent cbd0008f48
commit ee3d4f0164

@ -111,6 +111,15 @@ GooseReceiver_setInterfaceId(GooseReceiver self, const char* interfaceId)
self->interfaceId = StringUtils_copyString(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 static void
createNewStringFromBufferElement(MmsValue* value, uint8_t* bufferSrc, int elementLength) createNewStringFromBufferElement(MmsValue* value, uint8_t* bufferSrc, int elementLength)
{ {
@ -784,8 +793,6 @@ gooseReceiverLoop(void* threadParameter)
{ {
GooseReceiver self = (GooseReceiver) threadParameter; GooseReceiver self = (GooseReceiver) threadParameter;
GooseReceiver_startThreadless(self);
if (self->running) { if (self->running) {
while (self->running) { while (self->running) {
@ -807,17 +814,19 @@ void
GooseReceiver_start(GooseReceiver self) GooseReceiver_start(GooseReceiver self)
{ {
#if (CONFIG_MMS_THREADLESS_STACK == 0) #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 (self->thread != NULL) {
if (DEBUG_GOOSE_SUBSCRIBER) if (DEBUG_GOOSE_SUBSCRIBER)
printf("GOOSE_SUBSCRIBER: GOOSE receiver started for interface %s\n", self->interfaceId); printf("GOOSE_SUBSCRIBER: GOOSE receiver started for interface %s\n", self->interfaceId);
Thread_start(self->thread); Thread_start(self->thread);
} }
else { else {
if (DEBUG_GOOSE_SUBSCRIBER) if (DEBUG_GOOSE_SUBSCRIBER)
printf("GOOSE_SUBSCRIBER: Starting GOOSE receiver failed for interface %s\n", self->interfaceId); printf("GOOSE_SUBSCRIBER: Starting GOOSE receiver failed for interface %s\n", self->interfaceId);
}
} }
#endif #endif
} }

@ -73,6 +73,16 @@ GooseReceiver_createEx(uint8_t* buffer);
LIB61850_API void LIB61850_API void
GooseReceiver_setInterfaceId(GooseReceiver self, const char* interfaceId); 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 * \brief Add a subscriber to this receiver instance
* *

Loading…
Cancel
Save