diff --git a/source/src/cip/cipconnectionobject.c b/source/src/cip/cipconnectionobject.c index a970d7a47..b0c8ebdd8 100644 --- a/source/src/cip/cipconnectionobject.c +++ b/source/src/cip/cipconnectionobject.c @@ -354,6 +354,11 @@ ConnectionObjectGetTransportClassTriggerProductionTrigger( const CipConnectionObject *const connection_object) { const CipByte kTransportClassTriggerProductionTriggerMask = 0x70; + if(kConnectionObjectTransportClassTriggerDirectionServer == + ConnectionObjectGetTransportClassTriggerDirection(connection_object) ) { + return kConnectionObjectTransportClassTriggerProductionTriggerCyclic; + } + ConnectionObjectTransportClassTriggerProductionTrigger production_trigger = kConnectionObjectTransportClassTriggerProductionTriggerInvalid; switch( (connection_object->transport_class_trigger) & diff --git a/source/tests/cip/cipconnectionobjecttest.cpp b/source/tests/cip/cipconnectionobjecttest.cpp index 340ba9100..d85626cef 100644 --- a/source/tests/cip/cipconnectionobjecttest.cpp +++ b/source/tests/cip/cipconnectionobjecttest.cpp @@ -284,6 +284,17 @@ TEST(CipConnectionObject, production_trigger); } +TEST(CipConnectionObject, + TransportClassTriggerProductionTriggerIgnoredForServerDirection) { + CipConnectionObject connection_object = {0}; + connection_object.transport_class_trigger = 0x80 | (3 << 4); + ConnectionObjectTransportClassTriggerProductionTrigger production_trigger = + ConnectionObjectGetTransportClassTriggerProductionTrigger( + &connection_object); + CHECK_EQUAL(kConnectionObjectTransportClassTriggerProductionTriggerCyclic, + production_trigger); +} + TEST(CipConnectionObject, TransportClassTriggerProductionTriggerApplicationObject) { CipConnectionObject connection_object = {0};