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