Ver código fonte

Fixes #99 Updates GetAttributeAll answer for Message Router

Signed-off-by: CapXilinx <melik-merkumians@acin.tuwien.ac.at>
CapXilinx 8 anos atrás
pai
commit
098b6a64d4
1 arquivos alterados com 27 adições e 2 exclusões
  1. 27 2
      source/src/cip/cipmessagerouter.c

+ 27 - 2
source/src/cip/cipmessagerouter.c

@@ -48,6 +48,31 @@ CipError CreateMessageRouterRequestStructure(
   EipInt16 data_length,
   CipMessageRouterRequest *message_router_request);
 
+
+void InitializeCipMessageRouterClass(CipClass *cip_class) {
+
+	CipClass *meta_class = cip_class->class_instance.cip_class;
+
+    InsertAttribute( (CipInstance *) cip_class, 1, kCipUint,
+                     (void *) &cip_class->revision, kGetableSingleAndAll ); /* revision */
+    InsertAttribute( (CipInstance *) cip_class, 2, kCipUint,
+                     (void *) &cip_class->number_of_instances,
+                     kGetableSingle );                                     /*  largest instance number */
+    InsertAttribute( (CipInstance *) cip_class, 3, kCipUint,
+                     (void *) &cip_class->number_of_instances,
+					 kGetableSingle );                                     /* number of instances currently existing*/
+    InsertAttribute( (CipInstance *) cip_class, 4, kCipUint, (void *) &kCipUintZero,
+                     kGetableAll ); /* optional attribute list - default = 0 */
+    InsertAttribute( (CipInstance *) cip_class, 5, kCipUint, (void *) &kCipUintZero,
+    		kGetableAll ); /* optional service list - default = 0 */
+    InsertAttribute( (CipInstance *) cip_class, 6, kCipUint,
+                     (void *) &meta_class->highest_attribute_number,
+					 kGetableSingleAndAll ); /* max class attribute number*/
+    InsertAttribute( (CipInstance *) cip_class, 7, kCipUint,
+                     (void *) &cip_class->highest_attribute_number,
+					 kGetableSingleAndAll ); /* max instance attribute number*/
+}
+
 EipStatus CipMessageRouterInit() {
 
   CipClass *message_router = CreateCipClass(kCipMessageRouterClassCode, /* class ID*/
@@ -55,12 +80,12 @@ EipStatus CipMessageRouterInit() {
                                             7, /* # highest class attribute number*/
                                             2, /* # of class services*/
                                             0, /* # of instance attributes*/
-                                            4, /* # highest instance attribute number*/
+                                            0, /* # highest instance attribute number*/
                                             1, /* # of instance services*/
                                             1, /* # of instances*/
                                             "message router", /* class name*/
                                             1, /* # class revision*/
-                                            NULL); /* # function pointer for initialization*/
+											InitializeCipMessageRouterClass); /* # function pointer for initialization*/
   if (NULL == message_router) {
     return kEipStatusError;
   }