Bladeren bron

add libmodbus from GfA repo

Reinhard Russinger 6 jaren geleden
bovenliggende
commit
ec4369879c
1 gewijzigde bestanden met toevoegingen van 228 en 0 verwijderingen
  1. 228 0
      patches/0010-libmodbus-from-GfA-repo.patch

+ 228 - 0
patches/0010-libmodbus-from-GfA-repo.patch

@@ -0,0 +1,228 @@
+diff --git a/package/libmodbus/001-GfA-echo-rtu.patch b/package/libmodbus/001-GfA-echo-rtu.patch
+deleted file mode 100644
+index 386172f..0000000
+--- a/package/libmodbus/001-GfA-echo-rtu.patch
++++ /dev/null
+@@ -1,105 +0,0 @@
+-diff -Naur a/src/modbus-rtu.c b/src/modbus-rtu.c
+---- a/src/modbus-rtu.c	2017-10-11 23:07:11.623017506 +0200
+-+++ b/src/modbus-rtu.c	2017-10-11 23:07:20.495035402 +0200
+-@@ -257,6 +257,27 @@
+- }
+- #endif
+- 
+-+
+-+ssize_t _modbus_rtu_write_n_read(modbus_t *ctx, const uint8_t *req, int req_length) {
+-+ ssize_t w, r, i;
+-+ uint8_t rb[req_length];
+-+
+-+ // Transmit
+-+ w = write(ctx->s, req, req_length);
+-+
+-+ // Read back written bytes if hw has echo
+-+ r = 0;
+-+ while (r < w)
+-+  r += read(ctx->s, rb + r, w - r);
+-+ if (ctx->debug) {
+-+  for (i = 0; i < r; ++i)
+-+  fprintf(stderr, "|%02X|", rb[i]);
+-+  fprintf(stderr, "\n");
+-+ }
+-+
+-+ return w;
+-+}
+-+
+- ssize_t _modbus_rtu_send(modbus_t *ctx, const uint8_t *req, int req_length)
+- {
+- #if defined(_WIN32)
+-@@ -264,7 +285,14 @@
+-     DWORD n_bytes = 0;
+-     return (WriteFile(ctx_rtu->w_ser.fd, req, req_length, &n_bytes, NULL)) ? n_bytes : -1;
+- #else
+--    return write(ctx->s, req, req_length);
+-+    modbus_rtu_t *ctx_rtu = ctx->backend_data;
+-+    ssize_t w;
+-+    
+-+    if(!ctx_rtu->echohw)    
+-+      w = write(ctx->s, req, req_length);
+-+     else
+-+      w = _modbus_rtu_write_n_read(ctx, req, req_length);
+-+    return w;
+- #endif
+- }
+- 
+-@@ -772,6 +800,30 @@
+-     }
+- }
+- 
+-+
+-+int modbus_rtu_set_echohw_mode(modbus_t* ctx, uint8_t mode) {
+-+ if (ctx->backend->backend_type == _MODBUS_BACKEND_TYPE_RTU) {
+-+ modbus_rtu_t* rtu = (modbus_rtu_t*) ctx->backend_data;
+-+ rtu->echohw= mode;
+-+ return 0;
+-+ }
+-+ /* Wrong backend and invalid mode specified */
+-+ errno = EINVAL;
+-+ return -1;
+-+
+-+}
+-+
+-+int modbus_rtu_get_echohw_mode(modbus_t* ctx) {
+-+ if (ctx->backend->backend_type == _MODBUS_BACKEND_TYPE_RTU) {
+-+ modbus_rtu_t* rtu = (modbus_rtu_t*) ctx->backend_data;
+-+ return rtu->echohw;
+-+ }
+-+ /* Wrong backend and invalid mode specified */
+-+ errno = EINVAL;
+-+ return -1;
+-+
+-+}
+-+
+- void _modbus_rtu_close(modbus_t *ctx)
+- {
+-     /* Closes the file descriptor in RTU mode */
+-diff -Naur a/src/modbus-rtu.h b/src/modbus-rtu.h
+---- a/src/modbus-rtu.h	2017-10-11 23:07:11.623017506 +0200
+-+++ b/src/modbus-rtu.h	2017-10-11 23:07:20.495035402 +0200
+-@@ -37,6 +37,12 @@
+- int modbus_rtu_set_serial_mode(modbus_t *ctx, int mode);
+- int modbus_rtu_get_serial_mode(modbus_t *ctx);
+- 
+-+#define MODBUS_RTU_HAS_ECHOHW 1
+-+#define MODBUS_RTU_NO_ECHOHW 0
+-+
+-+int modbus_rtu_set_echohw_mode(modbus_t *ctx, uint8_t mode);
+-+int modbus_rtu_get_echohw_mode(modbus_t *ctx);
+-+
+- MODBUS_END_DECLS
+- 
+- #endif /* _MODBUS_RTU_H_ */
+-diff -Naur a/src/modbus-rtu-private.h b/src/modbus-rtu-private.h
+---- a/src/modbus-rtu-private.h	2017-10-11 23:07:11.623017506 +0200
+-+++ b/src/modbus-rtu-private.h	2017-10-11 23:07:20.495035402 +0200
+-@@ -81,6 +81,7 @@
+- #if HAVE_DECL_TIOCSRS485
+-     int serial_mode;
+- #endif
+-+    uint8_t echohw;
+- } modbus_rtu_t;
+- 
+- #endif /* _MODBUS_RTU_PRIVATE_H_ */
+diff --git a/package/libmodbus/002-GfA-fflush-for-debug.patch b/package/libmodbus/002-GfA-fflush-for-debug.patch
+deleted file mode 100644
+index 93eaa9a..0000000
+--- a/package/libmodbus/002-GfA-fflush-for-debug.patch
++++ /dev/null
+@@ -1,47 +0,0 @@
+-diff '--exclude=.libs*' -Naurp libmodbus-3.0.6/src/modbus.c b/src/modbus.c
+---- libmodbus-3.0.6/src/modbus.c	2014-04-02 23:34:00.000000000 +0200
+-+++ b/src/modbus.c	2018-06-15 08:36:32.657047324 +0200
+-@@ -170,6 +170,7 @@ static int send_msg(modbus_t *ctx, uint8
+-         for (i = 0; i < msg_length; i++)
+-             printf("[%.2X]", msg[i]);
+-         printf("\n");
+-+        fflush(stdout);
+-     }
+- 
+-     /* In recovery mode, the write command will be issued until to be
+-@@ -407,6 +408,7 @@ static int receive_msg(modbus_t *ctx, ui
+-             int i;
+-             for (i=0; i < rc; i++)
+-                 printf("<%.2X>", msg[msg_length + i]);
+-+            fflush(stdout);
+-         }
+- 
+-         /* Sums bytes received */
+-diff '--exclude=.libs*' -Naurp libmodbus-3.0.6/src/modbus-rtu.c b/src/modbus-rtu.c
+---- libmodbus-3.0.6/src/modbus-rtu.c	2018-06-16 17:44:19.011371930 +0200
+-+++ b/src/modbus-rtu.c	2018-06-15 08:34:34.544888427 +0200
+-@@ -260,7 +260,7 @@ static int win32_ser_read(struct win32_s
+- 
+- ssize_t _modbus_rtu_write_n_read(modbus_t *ctx, const uint8_t *req, int req_length) {
+-  ssize_t w, r, i;
+-- uint8_t rb[req_length];
+-+ uint8_t rb[512];
+- 
+-  // Transmit
+-  w = write(ctx->s, req, req_length);
+-@@ -273,6 +273,7 @@ ssize_t _modbus_rtu_write_n_read(modbus_
+-   for (i = 0; i < r; ++i)
+-   fprintf(stderr, "|%02X|", rb[i]);
+-   fprintf(stderr, "\n");
+-+  fflush(stderr);
+-  }
+- 
+-  return w;
+-@@ -325,6 +326,7 @@ int _modbus_rtu_check_integrity(modbus_t
+-         if (ctx->debug) {
+-             fprintf(stderr, "ERROR CRC received %0X != CRC calculated %0X\n",
+-                     crc_received, crc_calculated);
+-+            fflush(stderr);                    
+-         }
+-         if (ctx->error_recovery & MODBUS_ERROR_RECOVERY_PROTOCOL) {
+-             _modbus_rtu_flush(ctx);
+diff --git a/package/libmodbus/003-GfA-empty-input-queue-on-CRC-error.patch b/package/libmodbus/003-GfA-empty-input-queue-on-CRC-error.patch
+deleted file mode 100644
+index 79a7ae3..0000000
+--- a/package/libmodbus/003-GfA-empty-input-queue-on-CRC-error.patch
++++ /dev/null
+@@ -1,39 +0,0 @@
+-diff '--exclude=.libs*' '--exclude=*.la' '--exclude=*.lo' '--exclude=Makefile*' -Naurp libmodbus-3.0.6/src/modbus-rtu.c b/src/modbus-rtu.c
+---- libmodbus-3.0.6/src/modbus-rtu.c	2018-06-22 10:34:55.987233891 +0200
+-+++ b/src/modbus-rtu.c	2018-06-18 19:47:12.682614777 +0200
+-@@ -323,6 +323,35 @@ int _modbus_rtu_check_integrity(modbus_t
+-     if (crc_calculated == crc_received) {
+-         return msg_length;
+-     } else {
+-+        modbus_rtu_t *ctx_rtu = ctx->backend_data;    
+-+        
+-+        if(ctx_rtu->echohw) {/* on active echomode empty receiver on crc error */
+-+            int rc;
+-+            fd_set rfds;
+-+            struct timeval tv;    
+-+        
+-+            /* Add a file descriptor to the set */
+-+            FD_ZERO(&rfds);
+-+            FD_SET(ctx->s, &rfds);
+-+            
+-+            if (ctx->debug) {
+-+                fprintf(stderr, "ERROR CRC received on ECHOHW empty input tv.tv_sec=%d tv.tv_usec=%d\n",
+-+                        (int)ctx->response_timeout.tv_sec,
+-+                        (int)ctx->response_timeout.tv_usec);
+-+                fflush(stderr);                    
+-+            }
+-+        
+-+            do {
+-+               unsigned char cc[256]; /* dummy buffer für cleaning input */
+-+           
+-+               tv.tv_sec = ctx->response_timeout.tv_sec;
+-+               tv.tv_usec = ctx->response_timeout.tv_usec;
+-+
+-+               rc = ctx->backend->select(ctx, &rfds, &tv, sizeof(cc));
+-+               if(rc > 0) ctx->backend->recv(ctx, msg + msg_length, rc);           
+-+               } while(rc > 0); /* read until transfer empty */
+-+            }
+-+               
+-         if (ctx->debug) {
+-             fprintf(stderr, "ERROR CRC received %0X != CRC calculated %0X\n",
+-                     crc_received, crc_calculated);
+diff --git a/package/libmodbus/libmodbus.mk b/package/libmodbus/libmodbus.mk
+index 1f8c730..62909e4 100644
+--- a/package/libmodbus/libmodbus.mk
++++ b/package/libmodbus/libmodbus.mk
+@@ -4,10 +4,12 @@
+ #
+ ################################################################################
+ 
+-LIBMODBUS_VERSION = 3.0.6
+-LIBMODBUS_SITE = http://libmodbus.org/releases
++LIBMODBUS_VERSION = GfA
++LIBMODBUS_SITE = https://gogs.reru.org/GfA/libmodbus.git
++LIBMODBUS_SITE_METHOD = git
+ LIBMODBUS_LICENSE = LGPLv2.1+
+ LIBMODBUS_LICENSE_FILES = COPYING.LESSER
++LIBMODBUS_AUTORECONF = YES
+ LIBMODBUS_INSTALL_STAGING = YES
+ 
+ $(eval $(autotools-package))