Quellcode durchsuchen

Adds GetConnectionObjectInstanceType

Signed-off-by: Martin Melik Merkumians <melik-merkumians@acin.tuwien.ac.at>
Martin Melik Merkumians vor 8 Jahren
Ursprung
Commit
981bea0892
2 geänderte Dateien mit 49 neuen und 0 gelöschten Zeilen
  1. 10 0
      source/src/cip/cipconnectionobject.c
  2. 39 0
      source/tests/cip/cipconnectionobjecttest.cpp

+ 10 - 0
source/src/cip/cipconnectionobject.c

@@ -14,6 +14,10 @@
 #define CIP_CONNECTION_OBJECT_STATE_DEFERRED_DELETE 5U
 #define CIP_CONNECTION_OBJECT_STATE_DEFERRED_DELETE 5U
 #define CIP_CONNECTION_OBJECT_STATE_CLOSING 6U
 #define CIP_CONNECTION_OBJECT_STATE_CLOSING 6U
 
 
+#define CIP_CONNECTION_OBJECT_INSTANCE_TYPE_EXPLICIT_MESSAGING 0
+#define CIP_CONNECTION_OBJECT_INSTANCE_TYPE_IO 1
+#define CIP_CONNECTION_OBJECT_INSTANCE_TYPE_CIP_BRIDGED 2
+
 ConnectionObjectState GetConnectionObjectState(
 ConnectionObjectState GetConnectionObjectState(
   const CipConnectionObject *const connection_object) {
   const CipConnectionObject *const connection_object) {
   switch(connection_object->state) {
   switch(connection_object->state) {
@@ -37,6 +41,12 @@ ConnectionObjectState GetConnectionObjectState(
 
 
 ConnectionObjectInstanceType GetConnectionObjectInstanceType(
 ConnectionObjectInstanceType GetConnectionObjectInstanceType(
   const CipConnectionObject *const connection_object) {
   const CipConnectionObject *const connection_object) {
+	switch(connection_object->instance_type) {
+	case CIP_CONNECTION_OBJECT_INSTANCE_TYPE_EXPLICIT_MESSAGING: return kConnectionObjectInstanceTypeExplicitMessaging; break;
+	case CIP_CONNECTION_OBJECT_INSTANCE_TYPE_IO: return kConnectionObjectInstanceTypeIO; break;
+	case CIP_CONNECTION_OBJECT_INSTANCE_TYPE_CIP_BRIDGED: return kConnectionObjectInstanceTypeCipBridged; break;
+	default: return kConnectionObjectInstanceTypeInvalid;
+	}
 
 
 }
 }
 
 

+ 39 - 0
source/tests/cip/cipconnectionobjecttest.cpp

@@ -31,30 +31,35 @@ TEST(CipConnectionObject, StateConfiguring) {
 	ConnectionObjectState state = GetConnectionObjectState(&connection_object);
 	ConnectionObjectState state = GetConnectionObjectState(&connection_object);
 	CHECK_EQUAL(kConnectionObjectStateConfiguring, state);
 	CHECK_EQUAL(kConnectionObjectStateConfiguring, state);
 }
 }
+
 TEST(CipConnectionObject, StateWaitingForConnectionID) {
 TEST(CipConnectionObject, StateWaitingForConnectionID) {
 	CipConnectionObject connection_object = { 0 };
 	CipConnectionObject connection_object = { 0 };
 	connection_object.state = 2;
 	connection_object.state = 2;
 	ConnectionObjectState state = GetConnectionObjectState(&connection_object);
 	ConnectionObjectState state = GetConnectionObjectState(&connection_object);
 	CHECK_EQUAL(kConnectionObjectStateWaitingForConnectionID, state);
 	CHECK_EQUAL(kConnectionObjectStateWaitingForConnectionID, state);
 }
 }
+
 TEST(CipConnectionObject, StateEstablished) {
 TEST(CipConnectionObject, StateEstablished) {
 	CipConnectionObject connection_object = { 0 };
 	CipConnectionObject connection_object = { 0 };
 	connection_object.state = 3;
 	connection_object.state = 3;
 	ConnectionObjectState state = GetConnectionObjectState(&connection_object);
 	ConnectionObjectState state = GetConnectionObjectState(&connection_object);
 	CHECK_EQUAL(kConnectionObjectStateEstablished, state);
 	CHECK_EQUAL(kConnectionObjectStateEstablished, state);
 }
 }
+
 TEST(CipConnectionObject, StateTimedOut) {
 TEST(CipConnectionObject, StateTimedOut) {
 	CipConnectionObject connection_object = { 0 };
 	CipConnectionObject connection_object = { 0 };
 	connection_object.state = 4;
 	connection_object.state = 4;
 	ConnectionObjectState state = GetConnectionObjectState(&connection_object);
 	ConnectionObjectState state = GetConnectionObjectState(&connection_object);
 	CHECK_EQUAL(kConnectionObjectStateTimedOut, state);
 	CHECK_EQUAL(kConnectionObjectStateTimedOut, state);
 }
 }
+
 TEST(CipConnectionObject, StateDeferredDelete) {
 TEST(CipConnectionObject, StateDeferredDelete) {
 	CipConnectionObject connection_object = { 0 };
 	CipConnectionObject connection_object = { 0 };
 	connection_object.state = 5;
 	connection_object.state = 5;
 	ConnectionObjectState state = GetConnectionObjectState(&connection_object);
 	ConnectionObjectState state = GetConnectionObjectState(&connection_object);
 	CHECK_EQUAL(kConnectionObjectStateDeferredDelete, state);
 	CHECK_EQUAL(kConnectionObjectStateDeferredDelete, state);
 }
 }
+
 TEST(CipConnectionObject, StateClosing) {
 TEST(CipConnectionObject, StateClosing) {
 	CipConnectionObject connection_object = { 0 };
 	CipConnectionObject connection_object = { 0 };
 	connection_object.state = 6;
 	connection_object.state = 6;
@@ -62,3 +67,37 @@ TEST(CipConnectionObject, StateClosing) {
 	CHECK_EQUAL(kConnectionObjectStateClosing, state);
 	CHECK_EQUAL(kConnectionObjectStateClosing, state);
 }
 }
 
 
+TEST(CipConnectionObject, StateInvalid) {
+	CipConnectionObject connection_object = { 0 };
+	connection_object.state = 7;
+	ConnectionObjectState state = GetConnectionObjectState(&connection_object);
+	CHECK_EQUAL(kConnectionObjectStateInvalid, state);
+}
+
+TEST(CipConnectionObject, InstanceTypeInvalid) {
+	CipConnectionObject connection_object = { 0 };
+	connection_object.instance_type = 4;
+	ConnectionObjectInstanceType type = GetConnectionObjectInstanceType(&connection_object);
+	CHECK_EQUAL(kConnectionObjectInstanceTypeInvalid, type);
+}
+
+TEST(CipConnectionObject, InstanceTypeIExplicitMessaging) {
+	CipConnectionObject connection_object = { 0 };
+	connection_object.instance_type = 0;
+	ConnectionObjectInstanceType type = GetConnectionObjectInstanceType(&connection_object);
+	CHECK_EQUAL(kConnectionObjectInstanceTypeExplicitMessaging, type);
+}
+
+TEST(CipConnectionObject, InstanceTypeIO) {
+	CipConnectionObject connection_object = { 0 };
+	connection_object.instance_type = 1;
+	ConnectionObjectInstanceType type = GetConnectionObjectInstanceType(&connection_object);
+	CHECK_EQUAL(kConnectionObjectInstanceTypeIO, type);
+}
+
+TEST(CipConnectionObject, InstanceTypeCipBridged) {
+	CipConnectionObject connection_object = { 0 };
+	connection_object.instance_type = 2;
+	ConnectionObjectInstanceType type = GetConnectionObjectInstanceType(&connection_object);
+	CHECK_EQUAL(kConnectionObjectInstanceTypeCipBridged, type);
+}