|
|
|
@ -989,6 +989,11 @@ IedServer_updateAttributeValue(IedServer self, DataAttribute* dataAttribute, Mms
|
|
|
|
|
checkForUpdateTrigger(self, dataAttribute);
|
|
|
|
|
else {
|
|
|
|
|
|
|
|
|
|
if (dataAttribute->type == IEC61850_BOOLEAN) {
|
|
|
|
|
/* Special treatment because of transient option */
|
|
|
|
|
IedServer_updateBooleanAttributeValue(self, dataAttribute, MmsValue_getBoolean(value));
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
#if (CONFIG_MMS_THREADLESS_STACK != 1)
|
|
|
|
|
Semaphore_wait(self->dataModelLock);
|
|
|
|
|
#endif
|
|
|
|
@ -1002,6 +1007,7 @@ IedServer_updateAttributeValue(IedServer self, DataAttribute* dataAttribute, Mms
|
|
|
|
|
checkForChangedTriggers(self, dataAttribute);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
IedServer_updateFloatAttributeValue(IedServer self, DataAttribute* dataAttribute, float value)
|
|
|
|
@ -1161,6 +1167,14 @@ IedServer_updateBooleanAttributeValue(IedServer self, DataAttribute* dataAttribu
|
|
|
|
|
checkForUpdateTrigger(self, dataAttribute);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
|
|
|
|
|
bool callCheckTriggers = true;
|
|
|
|
|
|
|
|
|
|
if (dataAttribute->triggerOptions & TRG_OPT_TRANSIENT) {
|
|
|
|
|
if (currentValue == true)
|
|
|
|
|
callCheckTriggers = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#if (CONFIG_MMS_THREADLESS_STACK != 1)
|
|
|
|
|
Semaphore_wait(self->dataModelLock);
|
|
|
|
|
#endif
|
|
|
|
@ -1169,6 +1183,7 @@ IedServer_updateBooleanAttributeValue(IedServer self, DataAttribute* dataAttribu
|
|
|
|
|
Semaphore_post(self->dataModelLock);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
if (callCheckTriggers)
|
|
|
|
|
checkForChangedTriggers(self, dataAttribute);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|