You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2020/09/16 11:42:44 UTC

[plc4x] 02/02: - Continued working on the S7 C driver

This is an automated email from the ASF dual-hosted git repository.

cdutz pushed a commit to branch feature/plc4c
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit a536ba9c792a457d4b2c1b31d30ce153e7bc8c69
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Wed Sep 16 13:42:34 2020 +0200

    - Continued working on the S7 C driver
---
 .../drivers/modbus/src/driver_modbus_sm_read.c     |  1 -
 sandbox/plc4c/drivers/s7/src/driver_s7_sm_read.c   | 30 ++++++++++++++++++++--
 .../plc4c/examples/hello-world/src/hello_world.c   |  1 +
 .../generated-sources/modbus/src/modbus_pdu.c      | 19 +++-----------
 .../plc4c/generated-sources/s7/src/cotp_packet.c   |  2 +-
 .../generated-sources/s7/src/cotp_parameter.c      |  1 -
 .../plc4c/generated-sources/s7/src/s7_parameter.c  |  6 ++---
 .../plc4c/generated-sources/s7/src/s7_payload.c    |  8 +++---
 .../s7/src/s7_payload_user_data_item.c             |  2 +-
 .../s7/src/s7_var_payload_data_item.c              |  1 -
 .../generated-sources/s7/src/szl_data_tree_item.c  |  1 -
 11 files changed, 42 insertions(+), 30 deletions(-)

diff --git a/sandbox/plc4c/drivers/modbus/src/driver_modbus_sm_read.c b/sandbox/plc4c/drivers/modbus/src/driver_modbus_sm_read.c
index 689bc79..b855edd 100644
--- a/sandbox/plc4c/drivers/modbus/src/driver_modbus_sm_read.c
+++ b/sandbox/plc4c/drivers/modbus/src/driver_modbus_sm_read.c
@@ -17,7 +17,6 @@
   under the License.
 */
 
-#include <plc4c/plc4c.h>
 #include <plc4c/spi/types_private.h>
 #include <stdlib.h>
 #include <string.h>
diff --git a/sandbox/plc4c/drivers/s7/src/driver_s7_sm_read.c b/sandbox/plc4c/drivers/s7/src/driver_s7_sm_read.c
index d554e43..94c7f31 100644
--- a/sandbox/plc4c/drivers/s7/src/driver_s7_sm_read.c
+++ b/sandbox/plc4c/drivers/s7/src/driver_s7_sm_read.c
@@ -80,8 +80,34 @@ plc4c_return_code plc4c_driver_s7_read_machine_function(
         return return_code;
       }
 
-      // TODO: Check the response ...
-      // TODO: Decode the items in the response ...
+      // Check the response.
+      plc4c_s7_read_write_s7_parameter* parameter = s7_read_response_packet->payload->payload->parameter;
+      if(parameter->_type != plc4c_s7_read_write_s7_parameter_type_plc4c_s7_read_write_s7_parameter_read_var_response) {
+        return INTERNAL_ERROR;
+      }
+      // Check if the number of items matches that of the request
+      // (Otherwise we won't know how to interpret the items)
+      if(parameter->s7_parameter_read_var_response_num_items != plc4c_utils_list_size(read_request->items)) {
+        return INTERNAL_ERROR;
+      }
+      // Iterate over the request items and use the types to decode the
+      // response items.
+      plc4c_s7_read_write_s7_payload* payload = s7_read_response_packet->payload->payload->payload;
+      plc4c_list_element* cur_request_item_element = plc4c_utils_list_tail(read_request->items);
+      plc4c_list_element* cur_response_item_element = plc4c_utils_list_tail(payload->s7_payload_read_var_response_items);
+      while((cur_request_item_element != NULL) && (cur_response_item_element != NULL)) {
+        plc4c_item* cur_request_item = cur_request_item_element->value;
+        plc4c_s7_read_write_s7_address* s7_address = cur_request_item->address;
+        plc4c_s7_read_write_transport_size transport_size = s7_address->s7_address_any_transport_size;
+        uint16_t num_elements = s7_address->s7_address_any_number_of_elements;
+
+        plc4c_s7_read_write_s7_var_payload_data_item* cur_response_item = cur_response_item_element->value;
+        
+
+        cur_request_item_element = cur_request_item_element->next;
+        cur_request_item_element = cur_response_item_element->next;
+      }
+
       // TODO: Return the results to the API ...
 
       task->completed = true;
diff --git a/sandbox/plc4c/examples/hello-world/src/hello_world.c b/sandbox/plc4c/examples/hello-world/src/hello_world.c
index 101e3fd..5ed9357 100644
--- a/sandbox/plc4c/examples/hello-world/src/hello_world.c
+++ b/sandbox/plc4c/examples/hello-world/src/hello_world.c
@@ -26,6 +26,7 @@
 #include <plc4c/utils/list.h>
 #include <stdio.h>
 #include <string.h>
+#include <unistd.h>
 
 #include "../../../spi/include/plc4c/spi/types_private.h"
 
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu.c
index d1a22eb..350b6d0 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu.c
@@ -196,7 +196,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t itemCount = byteCount;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
-                  
         int8_t* _value = malloc(sizeof(int8_t));
         _res = plc4c_spi_read_signed_byte(buf, 8, (int8_t*) _value);
         if(_res != OK) {
@@ -253,7 +252,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t itemCount = byteCount;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
-                  
         int8_t* _value = malloc(sizeof(int8_t));
         _res = plc4c_spi_read_signed_byte(buf, 8, (int8_t*) _value);
         if(_res != OK) {
@@ -352,7 +350,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t itemCount = byteCount;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
-                  
         int8_t* _value = malloc(sizeof(int8_t));
         _res = plc4c_spi_read_signed_byte(buf, 8, (int8_t*) _value);
         if(_res != OK) {
@@ -431,7 +428,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t itemCount = byteCount;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
-                  
         int8_t* _value = malloc(sizeof(int8_t));
         _res = plc4c_spi_read_signed_byte(buf, 8, (int8_t*) _value);
         if(_res != OK) {
@@ -488,7 +484,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t itemCount = byteCount;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
-                  
         int8_t* _value = malloc(sizeof(int8_t));
         _res = plc4c_spi_read_signed_byte(buf, 8, (int8_t*) _value);
         if(_res != OK) {
@@ -587,7 +582,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t itemCount = byteCount;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
-                  
         int8_t* _value = malloc(sizeof(int8_t));
         _res = plc4c_spi_read_signed_byte(buf, 8, (int8_t*) _value);
         if(_res != OK) {
@@ -684,7 +678,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t itemCount = byteCount;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
-                  
         int8_t* _value = malloc(sizeof(int8_t));
         _res = plc4c_spi_read_signed_byte(buf, 8, (int8_t*) _value);
         if(_res != OK) {
@@ -719,7 +712,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t itemCount = byteCount;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
-                  
         int8_t* _value = malloc(sizeof(int8_t));
         _res = plc4c_spi_read_signed_byte(buf, 8, (int8_t*) _value);
         if(_res != OK) {
@@ -839,7 +831,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t itemCount = fifoCount;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
-                  
         uint16_t* _value = malloc(sizeof(uint16_t));
         _res = plc4c_spi_read_unsigned_short(buf, 16, (uint16_t*) _value);
         if(_res != OK) {
@@ -874,7 +865,7 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t _itemsLength = byteCount;
       uint8_t itemsEndPos = plc4c_spi_read_get_pos(buf) + _itemsLength;
       while(plc4c_spi_read_get_pos(buf) < itemsEndPos) {
-        plc4c_list* _value = NULL;
+        plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item* _value = NULL;
         _res = plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
@@ -908,7 +899,7 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t _itemsLength = byteCount;
       uint8_t itemsEndPos = plc4c_spi_read_get_pos(buf) + _itemsLength;
       while(plc4c_spi_read_get_pos(buf) < itemsEndPos) {
-        plc4c_list* _value = NULL;
+        plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item* _value = NULL;
         _res = plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
@@ -942,7 +933,7 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t _itemsLength = byteCount;
       uint8_t itemsEndPos = plc4c_spi_read_get_pos(buf) + _itemsLength;
       while(plc4c_spi_read_get_pos(buf) < itemsEndPos) {
-        plc4c_list* _value = NULL;
+        plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item* _value = NULL;
         _res = plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
@@ -976,7 +967,7 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t _itemsLength = byteCount;
       uint8_t itemsEndPos = plc4c_spi_read_get_pos(buf) + _itemsLength;
       while(plc4c_spi_read_get_pos(buf) < itemsEndPos) {
-        plc4c_list* _value = NULL;
+        plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item* _value = NULL;
         _res = plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
@@ -1080,7 +1071,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t itemCount = (byteCount) - (6);
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
-                  
         int8_t* _value = malloc(sizeof(int8_t));
         _res = plc4c_spi_read_signed_byte(buf, 8, (int8_t*) _value);
         if(_res != OK) {
@@ -1118,7 +1108,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t itemCount = byteCount;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
-                  
         int8_t* _value = malloc(sizeof(int8_t));
         _res = plc4c_spi_read_signed_byte(buf, 8, (int8_t*) _value);
         if(_res != OK) {
diff --git a/sandbox/plc4c/generated-sources/s7/src/cotp_packet.c b/sandbox/plc4c/generated-sources/s7/src/cotp_packet.c
index 3238c58..a57dbf2 100644
--- a/sandbox/plc4c/generated-sources/s7/src/cotp_packet.c
+++ b/sandbox/plc4c/generated-sources/s7/src/cotp_packet.c
@@ -254,7 +254,7 @@ plc4c_return_code plc4c_s7_read_write_cotp_packet_parse(plc4c_spi_read_buffer* b
     uint8_t _parametersLength = (((headerLength) + (1))) - (curPos);
     uint8_t parametersEndPos = plc4c_spi_read_get_pos(buf) + _parametersLength;
     while(plc4c_spi_read_get_pos(buf) < parametersEndPos) {
-      plc4c_list* _value = NULL;
+      plc4c_s7_read_write_cotp_parameter* _value = NULL;
       _res = plc4c_s7_read_write_cotp_parameter_parse(buf, (((headerLength) + (1))) - (curPos), (void*) &_value);
       if(_res != OK) {
         return _res;
diff --git a/sandbox/plc4c/generated-sources/s7/src/cotp_parameter.c b/sandbox/plc4c/generated-sources/s7/src/cotp_parameter.c
index ce38827..cad3703 100644
--- a/sandbox/plc4c/generated-sources/s7/src/cotp_parameter.c
+++ b/sandbox/plc4c/generated-sources/s7/src/cotp_parameter.c
@@ -139,7 +139,6 @@ plc4c_return_code plc4c_s7_read_write_cotp_parameter_parse(plc4c_spi_read_buffer
       uint8_t itemCount = rest;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
-                  
         uint8_t* _value = malloc(sizeof(uint8_t));
         _res = plc4c_spi_read_unsigned_byte(buf, 8, (uint8_t*) _value);
         if(_res != OK) {
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_parameter.c b/sandbox/plc4c/generated-sources/s7/src/s7_parameter.c
index fac4180..cdd0bd1 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_parameter.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_parameter.c
@@ -141,7 +141,7 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_parse(plc4c_spi_read_buffer*
       uint8_t itemCount = numItems;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         bool lastItem = curItem == (itemCount - 1);
-                          plc4c_s7_read_write_s7_var_request_parameter_item* _value = NULL;
+        plc4c_s7_read_write_s7_var_request_parameter_item* _value = NULL;
         _res = plc4c_s7_read_write_s7_var_request_parameter_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
@@ -187,7 +187,7 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_parse(plc4c_spi_read_buffer*
       uint8_t itemCount = numItems;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         bool lastItem = curItem == (itemCount - 1);
-                          plc4c_s7_read_write_s7_var_request_parameter_item* _value = NULL;
+        plc4c_s7_read_write_s7_var_request_parameter_item* _value = NULL;
         _res = plc4c_s7_read_write_s7_var_request_parameter_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
@@ -233,7 +233,7 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_parse(plc4c_spi_read_buffer*
       uint8_t itemCount = numItems;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         bool lastItem = curItem == (itemCount - 1);
-                          plc4c_s7_read_write_s7_parameter_user_data_item* _value = NULL;
+        plc4c_s7_read_write_s7_parameter_user_data_item* _value = NULL;
         _res = plc4c_s7_read_write_s7_parameter_user_data_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_payload.c b/sandbox/plc4c/generated-sources/s7/src/s7_payload.c
index 6f035ab..62cf046 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_payload.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_payload.c
@@ -75,7 +75,7 @@ plc4c_return_code plc4c_s7_read_write_s7_payload_parse(plc4c_spi_read_buffer* bu
       uint8_t itemCount = ((plc4c_s7_read_write_s7_parameter*) (parameter))->s7_parameter_read_var_response_num_items;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         bool lastItem = curItem == (itemCount - 1);
-                          plc4c_s7_read_write_s7_var_payload_data_item* _value = NULL;
+        plc4c_s7_read_write_s7_var_payload_data_item* _value = NULL;
         _res = plc4c_s7_read_write_s7_var_payload_data_item_parse(buf, lastItem, (void*) &_value);
         if(_res != OK) {
           return _res;
@@ -100,7 +100,7 @@ plc4c_return_code plc4c_s7_read_write_s7_payload_parse(plc4c_spi_read_buffer* bu
       uint8_t itemCount = plc4c_spi_evaluation_helper_count(((plc4c_s7_read_write_s7_parameter*) (parameter))->s7_parameter_write_var_request_items);
       for(int curItem = 0; curItem < itemCount; curItem++) {
         bool lastItem = curItem == (itemCount - 1);
-                          plc4c_s7_read_write_s7_var_payload_data_item* _value = NULL;
+        plc4c_s7_read_write_s7_var_payload_data_item* _value = NULL;
         _res = plc4c_s7_read_write_s7_var_payload_data_item_parse(buf, lastItem, (void*) &_value);
         if(_res != OK) {
           return _res;
@@ -125,7 +125,7 @@ plc4c_return_code plc4c_s7_read_write_s7_payload_parse(plc4c_spi_read_buffer* bu
       uint8_t itemCount = ((plc4c_s7_read_write_s7_parameter*) (parameter))->s7_parameter_write_var_response_num_items;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         bool lastItem = curItem == (itemCount - 1);
-                          plc4c_s7_read_write_s7_var_payload_status_item* _value = NULL;
+        plc4c_s7_read_write_s7_var_payload_status_item* _value = NULL;
         _res = plc4c_s7_read_write_s7_var_payload_status_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
@@ -150,7 +150,7 @@ plc4c_return_code plc4c_s7_read_write_s7_payload_parse(plc4c_spi_read_buffer* bu
       uint8_t itemCount = plc4c_spi_evaluation_helper_count(((plc4c_s7_read_write_s7_parameter*) (parameter))->s7_parameter_user_data_items);
       for(int curItem = 0; curItem < itemCount; curItem++) {
         bool lastItem = curItem == (itemCount - 1);
-                          plc4c_s7_read_write_s7_payload_user_data_item* _value = NULL;
+        plc4c_s7_read_write_s7_payload_user_data_item* _value = NULL;
         _res = plc4c_s7_read_write_s7_payload_user_data_item_parse(buf, ((plc4c_s7_read_write_s7_parameter_user_data_item*) (plc4c_utils_list_get_value(((plc4c_s7_read_write_s7_parameter*) (parameter))->s7_parameter_user_data_items, 0)))->s7_parameter_user_data_item_cpu_functions_cpu_function_type, (void*) &_value);
         if(_res != OK) {
           return _res;
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data_item.c b/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data_item.c
index 312c246..04f9925 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data_item.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data_item.c
@@ -141,7 +141,7 @@ plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_parse(plc4c_spi_
       uint8_t itemCount = szlItemCount;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         bool lastItem = curItem == (itemCount - 1);
-                          plc4c_s7_read_write_szl_data_tree_item* _value = NULL;
+        plc4c_s7_read_write_szl_data_tree_item* _value = NULL;
         _res = plc4c_s7_read_write_szl_data_tree_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_var_payload_data_item.c b/sandbox/plc4c/generated-sources/s7/src/s7_var_payload_data_item.c
index b7dbe3f..8cb2346 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_var_payload_data_item.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_var_payload_data_item.c
@@ -68,7 +68,6 @@ plc4c_return_code plc4c_s7_read_write_s7_var_payload_data_item_parse(plc4c_spi_r
     uint8_t itemCount = ((plc4c_s7_read_write_data_transport_size_get_size_in_bits(transportSize)) ? plc4c_spi_evaluation_helper_ceil((dataLength) / (8.0)) : dataLength);
     for(int curItem = 0; curItem < itemCount; curItem++) {
       
-                
       int8_t* _value = malloc(sizeof(int8_t));
       _res = plc4c_spi_read_signed_byte(buf, 8, (int8_t*) _value);
       if(_res != OK) {
diff --git a/sandbox/plc4c/generated-sources/s7/src/szl_data_tree_item.c b/sandbox/plc4c/generated-sources/s7/src/szl_data_tree_item.c
index ba34255..99a321d 100644
--- a/sandbox/plc4c/generated-sources/s7/src/szl_data_tree_item.c
+++ b/sandbox/plc4c/generated-sources/s7/src/szl_data_tree_item.c
@@ -53,7 +53,6 @@ plc4c_return_code plc4c_s7_read_write_szl_data_tree_item_parse(plc4c_spi_read_bu
     uint8_t itemCount = 20;
     for(int curItem = 0; curItem < itemCount; curItem++) {
       
-                
       int8_t* _value = malloc(sizeof(int8_t));
       _res = plc4c_spi_read_signed_byte(buf, 8, (int8_t*) _value);
       if(_res != OK) {