123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- 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))
|