Sfoglia il codice sorgente

Adds MoveNOctets and FillNextNMessageOctets functions plus test, and uses it in AssembleLinarMessage. Also updates some formatting

capxilinx 10 anni fa
parent
commit
264da313bf
2 ha cambiato i file con 79 aggiunte e 47 eliminazioni
  1. 60 46
      source/src/enet_encap/cpf.c
  2. 19 1
      source/tests/enet_encap/endianconvtest.cpp

+ 60 - 46
source/src/enet_encap/cpf.c

@@ -113,10 +113,11 @@ int NotifyConnectedCommonPacketFormat(EncapsulationData *received_data,
   return return_value;
 }
 
-/*   @brief Creates Common Packet Format structure out of data.
- *   @param data		pointer to data which need to be structured.
- *   @param data_length	length of data in pa_Data.
- *   @param common_packet_format_data	pointer to structure of CPF data item.
+/**
+ * @brief Creates Common Packet Format structure out of data.
+ * @param data Pointer to data which need to be structured.
+ * @param data_length	Length of data in pa_Data.
+ * @param common_packet_format_data	Pointer to structure of CPF data item.
  *
  *   @return kEipStatusOk .. success
  * 	       kEipStatusError .. error
@@ -317,7 +318,8 @@ int EncodeDataItemData(
     CipCommonPacketFormatData* common_packet_format_data_item,
     EipUint8** message, int size) {
   for (int i = 0; i < common_packet_format_data_item->data_item.length; i++) {
-    size += AddSintToMessage(*(common_packet_format_data_item->data_item.data + i), message);
+    size += AddSintToMessage(
+        *(common_packet_format_data_item->data_item.data + i), message);
   }
   return size;
 }
@@ -420,11 +422,11 @@ int EncodeSockaddrInfoItemTypeId(
   return size;
 }
 
-int EncodeSockaddrInfoLength(int size,
-    int j, CipCommonPacketFormatData* common_packet_format_data_item,
+int EncodeSockaddrInfoLength(
+    int size, int j, CipCommonPacketFormatData* common_packet_format_data_item,
     EipUint8** message) {
-  size += AddIntToMessage(common_packet_format_data_item->address_info_item[j].length,
-                  message);
+  size += AddIntToMessage(
+      common_packet_format_data_item->address_info_item[j].length, message);
   return size;
 }
 
@@ -442,30 +444,34 @@ int AssembleLinearMessage(
     CipCommonPacketFormatData *common_packet_format_data_item,
     EipUint8 *message) {
 
-  int size = 0;
+  int message_size = 0;
+
   if (message_router_response) {
     /* add Interface Handle and Timeout = 0 -> only for SendRRData and SendUnitData necessary */
     AddDintToMessage(0, &message);
     AddIntToMessage(0, &message);
-    size += 6;
+    message_size += 6;
   }
 
-  size = EncodeItemCount(common_packet_format_data_item, &message, size);
+  message_size = EncodeItemCount(common_packet_format_data_item, &message,
+                                 message_size);
 
   /* process Address Item */
   switch (common_packet_format_data_item->address_item.type_id) {
     case kCipItemIdNullAddress: {
-      size = EncodeNullAddressItem(&message, size);
+      message_size = EncodeNullAddressItem(&message, message_size);
       break;
     }
     case kCipItemIdConnectionAddress: {
-      size = EncodeConnectedAddressItem(&message,
-                                        common_packet_format_data_item, size);
+      message_size = EncodeConnectedAddressItem(&message,
+                                                common_packet_format_data_item,
+                                                message_size);
       break;
     }
     case kCipItemIdSequencedAddressItem: {
-      size = EncodeSequencedAddressItem(&message,
-                                        common_packet_format_data_item, size);
+      message_size = EncodeSequencedAddressItem(&message,
+                                                common_packet_format_data_item,
+                                                message_size);
       break;
     }
   }
@@ -477,36 +483,44 @@ int AssembleLinearMessage(
           == kCipItemIdConnectedDataItem)) {
 
     if (message_router_response) {
-      size += EncodeDataItemType(common_packet_format_data_item, &message,
-                                 size);
+      message_size += EncodeDataItemType(common_packet_format_data_item,
+                                         &message, message_size);
 
       if (common_packet_format_data_item->data_item.type_id
           == kCipItemIdConnectedDataItem) { /* Connected Item */
-        size = EncodeConnectedDataItemLength(message_router_response, &message,
-                                             size);
-        size = EncodeSequenceNumber(size, &g_common_packet_format_data_item,
-                                    &message);
+        message_size = EncodeConnectedDataItemLength(message_router_response,
+                                                     &message, message_size);
+        message_size = EncodeSequenceNumber(message_size,
+                                            &g_common_packet_format_data_item,
+                                            &message);
 
       } else { /* Unconnected Item */
-        size = EncodeUnconnectedDataItemLength(size, message_router_response,
-                                               &message);
+        message_size = EncodeUnconnectedDataItemLength(message_size,
+                                                       message_router_response,
+                                                       &message);
       }
 
       /* write message router response into linear memory */
-      size = EncodeReplyService(size, &message, message_router_response);
-      size = EnocdeReservedFieldOfLengthByte(size, &message,
-                                             message_router_response);
-      size = EncodeGeneralStatus(size, &message, message_router_response);
-      size = EncodeExtendedStatus(size, &message, message_router_response);
-      size = EncodeMessageRouterResponseData(size, message_router_response,
-                                             &message);
+      message_size = EncodeReplyService(message_size, &message,
+                                        message_router_response);
+      message_size = EnocdeReservedFieldOfLengthByte(message_size, &message,
+                                                     message_router_response);
+      message_size = EncodeGeneralStatus(message_size, &message,
+                                         message_router_response);
+      message_size = EncodeExtendedStatus(message_size, &message,
+                                          message_router_response);
+      message_size = EncodeMessageRouterResponseData(message_size,
+                                                     message_router_response,
+                                                     &message);
     } else { /* connected IO Message to send */
-      size = EncodeDataItemType(common_packet_format_data_item, &message, size);
+      message_size = EncodeDataItemType(common_packet_format_data_item,
+                                        &message, message_size);
 
-      size = EncodeDataItemLength(common_packet_format_data_item, &message,
-                                  size);
+      message_size = EncodeDataItemLength(common_packet_format_data_item,
+                                          &message, message_size);
 
-      size = EncodeDataItemData(common_packet_format_data_item, &message, size);
+      message_size = EncodeDataItemData(common_packet_format_data_item,
+                                        &message, message_size);
     }
   }
 
@@ -520,25 +534,25 @@ int AssembleLinearMessage(
     for (int j = 0; j < 2; j++) {
       if (common_packet_format_data_item->address_info_item[j].type_id
           == type) {
-        size = EncodeSockaddrInfoItemTypeId(size, j,
-                                          common_packet_format_data_item,
-                                          &message);
-        size = EncodeSockaddrInfoLength(size, j, common_packet_format_data_item,
-                                           &message);
+        message_size = EncodeSockaddrInfoItemTypeId(
+            message_size, j, common_packet_format_data_item, &message);
 
-        size += EncapsulateIpAddress(
+        message_size = EncodeSockaddrInfoLength(message_size, j,
+                                                common_packet_format_data_item,
+                                                &message);
+
+        message_size += EncapsulateIpAddress(
             common_packet_format_data_item->address_info_item[j].sin_port,
             common_packet_format_data_item->address_info_item[j].sin_addr,
             &message);
 
-        memset(message, 0, 8);
-        message += 8;
-        size += 8;
+        message_size += FillNextNMessageOctetsWithValueAndMoveToNextPosition(
+            0, 8, &message);
         break;
       }
     }
   }
-  return size;
+  return message_size;
 }
 
 int AssembleIOMessage(CipCommonPacketFormatData *common_packet_format_data_item,

+ 19 - 1
source/tests/enet_encap/endianconvtest.cpp

@@ -6,6 +6,7 @@
 
 #include <CppUTest/TestHarness.h>
 #include <stdint.h>
+#include <string.h>
 
 extern "C" {
 
@@ -118,7 +119,24 @@ TEST(EndianConversion, MoveMessageNOctets) {
   CipOctet message[8];
   CipOctet *message_runner = message;
 
-  MoveMessageNOctets(&message_runner, 4);
+  MoveMessageNOctets(4, &message_runner);
 
   POINTERS_EQUAL(message + 4, message_runner);
 }
+
+TEST(EndianConversion, FillNextNMEssageOctetsWith) {
+  CipOctet message[8];
+  CipOctet *message_runner = message;
+  memset(message, 15, 8);
+
+  FillNextNMessageOctetsWith(0, 8, &message_runner);
+  BYTES_EQUAL(0, message_runner[0]);
+  BYTES_EQUAL(0, message_runner[1]);
+  BYTES_EQUAL(0, message_runner[2]);
+  BYTES_EQUAL(0, message_runner[3]);
+  BYTES_EQUAL(0, message_runner[4]);
+  BYTES_EQUAL(0, message_runner[5]);
+  BYTES_EQUAL(0, message_runner[6]);
+  BYTES_EQUAL(0, message_runner[7]);
+
+}