|
|
@ -157,38 +157,34 @@ svReceiverLoop(void* threadParameter)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
SVReceiver self = (SVReceiver) threadParameter;
|
|
|
|
SVReceiver self = (SVReceiver) threadParameter;
|
|
|
|
|
|
|
|
|
|
|
|
self->running = true;
|
|
|
|
|
|
|
|
self->stopped = false;
|
|
|
|
self->stopped = false;
|
|
|
|
|
|
|
|
|
|
|
|
if (SVReceiver_startThreadless(self)) {
|
|
|
|
while (self->running) {
|
|
|
|
|
|
|
|
|
|
|
|
while (self->running) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (SVReceiver_tick(self) == false)
|
|
|
|
if (SVReceiver_tick(self) == false)
|
|
|
|
Thread_sleep(1);
|
|
|
|
Thread_sleep(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SVReceiver_stopThreadless(self);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else {
|
|
|
|
|
|
|
|
if (DEBUG_SV_SUBSCRIBER)
|
|
|
|
|
|
|
|
printf("SV_SUBSCRIBER: Failed to start SV receiver\n");
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
self->stopped = true;
|
|
|
|
self->stopped = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
void
|
|
|
|
SVReceiver_start(SVReceiver self)
|
|
|
|
SVReceiver_start(SVReceiver self)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Thread thread = Thread_create((ThreadExecutionFunction) svReceiverLoop, (void*) self, true);
|
|
|
|
if (SVReceiver_startThreadless(self)) {
|
|
|
|
|
|
|
|
|
|
|
|
if (thread != NULL) {
|
|
|
|
|
|
|
|
if (DEBUG_SV_SUBSCRIBER)
|
|
|
|
if (DEBUG_SV_SUBSCRIBER)
|
|
|
|
printf("SV_SUBSCRIBER: SV receiver started for interface %s\n", self->interfaceId);
|
|
|
|
printf("SV_SUBSCRIBER: SV receiver started for interface %s\n", self->interfaceId);
|
|
|
|
|
|
|
|
|
|
|
|
Thread_start(thread);
|
|
|
|
Thread thread = Thread_create((ThreadExecutionFunction) svReceiverLoop, (void*) self, true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (thread) {
|
|
|
|
|
|
|
|
Thread_start(thread);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else {
|
|
|
|
|
|
|
|
if (DEBUG_SV_SUBSCRIBER)
|
|
|
|
|
|
|
|
printf("SV_SUBSCRIBER: Failed to start thread\n");
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
if (DEBUG_SV_SUBSCRIBER)
|
|
|
|
if (DEBUG_SV_SUBSCRIBER)
|
|
|
@ -206,10 +202,12 @@ SVReceiver_isRunning(SVReceiver self)
|
|
|
|
void
|
|
|
|
void
|
|
|
|
SVReceiver_stop(SVReceiver self)
|
|
|
|
SVReceiver_stop(SVReceiver self)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
self->running = false;
|
|
|
|
if (self->running) {
|
|
|
|
|
|
|
|
SVReceiver_stopThreadless(self);
|
|
|
|
|
|
|
|
|
|
|
|
while (self->stopped == false)
|
|
|
|
while (self->stopped == false)
|
|
|
|
Thread_sleep(1);
|
|
|
|
Thread_sleep(1);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
void
|
|
|
@ -218,6 +216,9 @@ SVReceiver_destroy(SVReceiver self)
|
|
|
|
LinkedList_destroyDeep(self->subscriberList,
|
|
|
|
LinkedList_destroyDeep(self->subscriberList,
|
|
|
|
(LinkedListValueDeleteFunction) SVSubscriber_destroy);
|
|
|
|
(LinkedListValueDeleteFunction) SVSubscriber_destroy);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (self->interfaceId != NULL)
|
|
|
|
|
|
|
|
GLOBAL_FREEMEM(self->interfaceId);
|
|
|
|
|
|
|
|
|
|
|
|
#if (CONFIG_MMS_THREADLESS_STACK == 0)
|
|
|
|
#if (CONFIG_MMS_THREADLESS_STACK == 0)
|
|
|
|
Semaphore_destroy(self->subscriberListLock);
|
|
|
|
Semaphore_destroy(self->subscriberListLock);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
@ -247,7 +248,8 @@ SVReceiver_startThreadless(SVReceiver self)
|
|
|
|
void
|
|
|
|
void
|
|
|
|
SVReceiver_stopThreadless(SVReceiver self)
|
|
|
|
SVReceiver_stopThreadless(SVReceiver self)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Ethernet_destroySocket(self->ethSocket);
|
|
|
|
if (self->ethSocket)
|
|
|
|
|
|
|
|
Ethernet_destroySocket(self->ethSocket);
|
|
|
|
|
|
|
|
|
|
|
|
self->running = false;
|
|
|
|
self->running = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|