Forráskód Böngészése

BUILD 386, added libmodbus with GfA patches

Reinhard Russinger 7 éve
szülő
commit
b404b5ef9b

+ 111 - 0
GfA-buildroot-libmodbus-GfA.patch

@@ -0,0 +1,111 @@
+diff --git a/package/libmodbus/001-GfA-echo-rtu.patch b/package/libmodbus/001-GfA-echo-rtu.patch
+new file mode 100644
+index 0000000000..386172f970
+--- /dev/null
++++ b/package/libmodbus/001-GfA-echo-rtu.patch
+@@ -0,0 +1,105 @@
++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_ */

+ 1 - 0
MakeBuildrootEnv.sh

@@ -22,6 +22,7 @@ patch -p1 < ../GfA/GfA-buildroot_SetRightDisplayResolution_OnUpdate_add5_7inch_d
 patch -p1 < ../GfA/GfA-buildroot-add-plugins-libraries-change-crosscompile-command.patch
 patch -p1 < ../GfA/GfA-buildroot-CrossCompile_export_CC_and_CXX.patch
 patch -p1 < ../GfA/GfA-buildroot_remove_CJK_Fonts_in_Update.patch
+patch -p1 < ../GfA/GfA-buildroot-libmodbus-GfA.patch
 #
 chmod a+x *.sh
 cp ../GfA/configs/* ./configs

+ 1 - 1
board/GfA/Display001/BUILD

@@ -1 +1 @@
-382
+386

BIN
board/GfA/Display001/rootfs/usr/share/fonts/HelveticaNeueLTStd-Lt.otf


+ 1 - 0
configs/Display001_3.12.30_defconfig

@@ -297,6 +297,7 @@ BR2_PACKAGE_LIBGSASL=y
 BR2_PACKAGE_LIBIDN=y
 BR2_PACKAGE_LIBIDN_BINARY=y
 BR2_PACKAGE_LIBMBUS=y
+BR2_PACKAGE_LIBMODBUS=y
 BR2_PACKAGE_LIBPJSIP=y
 BR2_PACKAGE_LIBRSYNC=y
 BR2_PACKAGE_LIBSOUP=y