|
|
@ -506,37 +506,45 @@ MmsGooseControlBlock_disable(MmsGooseControlBlock self, MmsMapping* mmsMapping)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
void
|
|
|
|
MmsGooseControlBlock_checkAndPublish(MmsGooseControlBlock self, uint64_t currentTime)
|
|
|
|
MmsGooseControlBlock_checkAndPublish(MmsGooseControlBlock self, uint64_t currentTime, MmsMapping* mapping)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (self->publisher) {
|
|
|
|
if (self->publisher) {
|
|
|
|
if (currentTime >= self->nextPublishTime) {
|
|
|
|
if (currentTime >= self->nextPublishTime) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IedServer_lockDataModel(mapping->iedServer);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (currentTime >= self->nextPublishTime) {
|
|
|
|
|
|
|
|
|
|
|
|
#if (CONFIG_MMS_THREADLESS_STACK != 1)
|
|
|
|
#if (CONFIG_MMS_THREADLESS_STACK != 1)
|
|
|
|
Semaphore_wait(self->publisherMutex);
|
|
|
|
Semaphore_wait(self->publisherMutex);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
GoosePublisher_publish(self->publisher, self->dataSetValues);
|
|
|
|
GoosePublisher_publish(self->publisher, self->dataSetValues);
|
|
|
|
|
|
|
|
|
|
|
|
if (self->retransmissionsLeft > 0) {
|
|
|
|
if (self->retransmissionsLeft > 0) {
|
|
|
|
self->nextPublishTime = currentTime + self->minTime;
|
|
|
|
self->nextPublishTime = currentTime + self->minTime;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (self->retransmissionsLeft > 1)
|
|
|
|
if (self->retransmissionsLeft > 1)
|
|
|
|
GoosePublisher_setTimeAllowedToLive(self->publisher, self->minTime * 3);
|
|
|
|
GoosePublisher_setTimeAllowedToLive(self->publisher, self->minTime * 3);
|
|
|
|
else
|
|
|
|
else
|
|
|
|
GoosePublisher_setTimeAllowedToLive(self->publisher, self->maxTime * 3);
|
|
|
|
GoosePublisher_setTimeAllowedToLive(self->publisher, self->maxTime * 3);
|
|
|
|
|
|
|
|
|
|
|
|
self->retransmissionsLeft--;
|
|
|
|
self->retransmissionsLeft--;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
GoosePublisher_setTimeAllowedToLive(self->publisher, self->maxTime * 3);
|
|
|
|
GoosePublisher_setTimeAllowedToLive(self->publisher, self->maxTime * 3);
|
|
|
|
|
|
|
|
|
|
|
|
self->nextPublishTime = currentTime + self->maxTime;
|
|
|
|
self->nextPublishTime = currentTime + self->maxTime;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#if (CONFIG_MMS_THREADLESS_STACK != 1)
|
|
|
|
#if (CONFIG_MMS_THREADLESS_STACK != 1)
|
|
|
|
Semaphore_post(self->publisherMutex);
|
|
|
|
Semaphore_post(self->publisherMutex);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IedServer_unlockDataModel(mapping->iedServer);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if ((self->nextPublishTime - currentTime) > ((uint32_t) self->maxTime * 2)) {
|
|
|
|
else if ((self->nextPublishTime - currentTime) > ((uint32_t) self->maxTime * 2)) {
|
|
|
|
self->nextPublishTime = currentTime + self->minTime;
|
|
|
|
self->nextPublishTime = currentTime + self->minTime;
|
|
|
|