diff mbox series

[meta-oe] libmodbus: upgrade 3.1.7 -> 3.1.10

Message ID 20231130142450.633052-1-alperyasinak1@gmail.com
State Accepted, archived
Headers show
Series [meta-oe] libmodbus: upgrade 3.1.7 -> 3.1.10 | expand

Commit Message

alperak Nov. 30, 2023, 2:24 p.m. UTC
* Fix-float-endianness-issue-on-big-endian-arch.patch removed because fixed in the new version.

Changelog:

* Fix baud rate handling with RTU under Linux
* Fix modbus_disable_quirks signature
* Remove Travis CI
* Move content about migration to libmodbus.org
* Avoid negative value in FD_SET call
* Test socket against positive value instead of -1
* Improvements to autotools by @ndim
* Fix doc links by @jordanjohnson56 (#653)
* Test the protocol id for 0 by @metapsychologe (#509)
* Fix double negative in tests
* New quirks handler (closes #38 #533)
* Fix bitwise OR in documentation
* Improve doc about slave ID in RTU
* Add .clang-format and format code (closes #394)
* Remove constraints on baud rate values
* Accept IP or device in arg of unit test progs
* Avoid compilation issue with VS2022 with strdup
* Display created files in configure.js
* Use strcpy_s under Windows
* Replace inet_addr by inet_pton calls
* Replace inet_ntoa by inet_ptop
* Update configure.ac/config.h.win32 for new inet functions
* Instructions to build libmodbus in a VS project
* Fix connection check for Windows RTU (closes #660, #662)
* Add CIFuzz Github action by @DavidKorczynski (#669)
* Convert a few int to unsigned int (#402)
* Major rewrite of documentation with Material for mkdocs
* Reduce memory use of TCP PI backend (closes #621)
* Fixed MODBUS_ERROR_RECOVERY_LINK not working on Windows (@embeddedmz)
* Replace Travis CI by GitHub CI
* Fix linker error for Windows (VCLinkerTool)
* Address check in single register / coil responses added (#463)
* Swap CRC bytes in request data but not at CRC computing (#397)
* Fix float endianness issue on big endian architecture
* Fix comment about EMBUNKEXC (closes #566)
* Fix network library detection on Haiku
* Fix typos (closes #620)

Signed-off-by: alperak <alperyasinak1@gmail.com>
---
 .../recipes-extended/libmodbus/libmodbus.inc  |  16 -
 ...-endianness-issue-on-big-endian-arch.patch | 316 ------------------
 .../libmodbus/libmodbus_3.0.6.bb              |   4 -
 .../libmodbus/libmodbus_3.1.10.bb             |  17 +
 .../libmodbus/libmodbus_3.1.7.bb              |   9 -
 5 files changed, 17 insertions(+), 345 deletions(-)
 delete mode 100644 meta-oe/recipes-extended/libmodbus/libmodbus.inc
 delete mode 100644 meta-oe/recipes-extended/libmodbus/libmodbus/Fix-float-endianness-issue-on-big-endian-arch.patch
 delete mode 100644 meta-oe/recipes-extended/libmodbus/libmodbus_3.0.6.bb
 create mode 100644 meta-oe/recipes-extended/libmodbus/libmodbus_3.1.10.bb
 delete mode 100644 meta-oe/recipes-extended/libmodbus/libmodbus_3.1.7.bb
diff mbox series

Patch

diff --git a/meta-oe/recipes-extended/libmodbus/libmodbus.inc b/meta-oe/recipes-extended/libmodbus/libmodbus.inc
deleted file mode 100644
index 0857cc455..000000000
--- a/meta-oe/recipes-extended/libmodbus/libmodbus.inc
+++ /dev/null
@@ -1,16 +0,0 @@ 
-SUMMARY = "A Modbus library"
-DESCRIPTION = "libmodbus is a C library designed to provide a fast and robust \
-implementation of the Modbus protocol. It runs on Linux, Mac OS X, FreeBSD, \
-QNX and Windows."
-HOMEPAGE = "http://www.libmodbus.org/"
-SECTION = "libs"
-
-LICENSE = "LGPL-2.1-or-later"
-LIC_FILES_CHKSUM = "file://COPYING.LESSER;md5=4fbd65380cdd255951079008b364516c"
-
-SRC_URI = "http://libmodbus.org/releases/${BP}.tar.gz"
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[documentation] = "--with-documentation,--without-documentation,asciidoc-native xmlto-native"
-
-inherit autotools pkgconfig
diff --git a/meta-oe/recipes-extended/libmodbus/libmodbus/Fix-float-endianness-issue-on-big-endian-arch.patch b/meta-oe/recipes-extended/libmodbus/libmodbus/Fix-float-endianness-issue-on-big-endian-arch.patch
deleted file mode 100644
index e7fbb0389..000000000
--- a/meta-oe/recipes-extended/libmodbus/libmodbus/Fix-float-endianness-issue-on-big-endian-arch.patch
+++ /dev/null
@@ -1,316 +0,0 @@ 
-From: =?utf-8?b?IlNaIExpbiAo5p6X5LiK5pm6KSI=?= <szlin@debian.org>
-Date: Wed, 19 Dec 2018 10:24:47 +0800
-Subject: Fix float endianness issue on big endian arch
-
-It converts float values depending on what order they come in.
-
-This patch was modified from rm5248 [1]
-
-[1] https://github.com/synexxus/libmodbus/commit/a511768e7fe7ec52d7bae1d9ae04e33f87a59627
-
----
-Upstream-Status: Pending
-
- src/modbus-data.c        | 110 ++++++++++++++++++++++++++++++++++++++---------
- tests/unit-test-client.c |  22 ++++++----
- tests/unit-test.h.in     |  41 ++++++++++++++++--
- 3 files changed, 141 insertions(+), 32 deletions(-)
-
-diff --git a/src/modbus-data.c b/src/modbus-data.c
-index 902b8c6..7a744fa 100644
---- a/src/modbus-data.c
-+++ b/src/modbus-data.c
-@@ -119,9 +119,18 @@ float modbus_get_float_abcd(const uint16_t *src)
- {
-     float f;
-     uint32_t i;
-+    uint8_t a, b, c, d;
- 
--    i = ntohl(((uint32_t)src[0] << 16) + src[1]);
--    memcpy(&f, &i, sizeof(float));
-+    a = (src[0] >> 8) & 0xFF;
-+    b = (src[0] >> 0) & 0xFF;
-+    c = (src[1] >> 8) & 0xFF;
-+    d = (src[1] >> 0) & 0xFF;
-+
-+    i = (a << 24) |
-+        (b << 16) |
-+        (c << 8) |
-+        (d << 0);
-+    memcpy(&f, &i, 4);
- 
-     return f;
- }
-@@ -131,9 +140,18 @@ float modbus_get_float_dcba(const uint16_t *src)
- {
-     float f;
-     uint32_t i;
-+    uint8_t a, b, c, d;
- 
--    i = ntohl(bswap_32((((uint32_t)src[0]) << 16) + src[1]));
--    memcpy(&f, &i, sizeof(float));
-+    a = (src[0] >> 8) & 0xFF;
-+    b = (src[0] >> 0) & 0xFF;
-+    c = (src[1] >> 8) & 0xFF;
-+    d = (src[1] >> 0) & 0xFF;
-+
-+    i = (d << 24) |
-+        (c << 16) |
-+        (b << 8) |
-+        (a << 0);
-+    memcpy(&f, &i, 4);
- 
-     return f;
- }
-@@ -143,9 +161,18 @@ float modbus_get_float_badc(const uint16_t *src)
- {
-     float f;
-     uint32_t i;
-+    uint8_t a, b, c, d;
- 
--    i = ntohl((uint32_t)(bswap_16(src[0]) << 16) + bswap_16(src[1]));
--    memcpy(&f, &i, sizeof(float));
-+    a = (src[0] >> 8) & 0xFF;
-+    b = (src[0] >> 0) & 0xFF;
-+    c = (src[1] >> 8) & 0xFF;
-+    d = (src[1] >> 0) & 0xFF;
-+
-+    i = (b << 24) |
-+        (a << 16) |
-+        (d << 8) |
-+        (c << 0);
-+    memcpy(&f, &i, 4);
- 
-     return f;
- }
-@@ -155,9 +182,18 @@ float modbus_get_float_cdab(const uint16_t *src)
- {
-     float f;
-     uint32_t i;
-+    uint8_t a, b, c, d;
- 
--    i = ntohl((((uint32_t)src[1]) << 16) + src[0]);
--    memcpy(&f, &i, sizeof(float));
-+    a = (src[0] >> 8) & 0xFF;
-+    b = (src[0] >> 0) & 0xFF;
-+    c = (src[1] >> 8) & 0xFF;
-+    d = (src[1] >> 0) & 0xFF;
-+
-+    i = (c << 24) |
-+        (d << 16) |
-+        (a << 8) |
-+        (b << 0);
-+    memcpy(&f, &i, 4);
- 
-     return f;
- }
-@@ -172,50 +208,84 @@ float modbus_get_float(const uint16_t *src)
-     memcpy(&f, &i, sizeof(float));
- 
-     return f;
-+
- }
- 
- /* Set a float to 4 bytes for Modbus w/o any conversion (ABCD) */
- void modbus_set_float_abcd(float f, uint16_t *dest)
- {
-     uint32_t i;
-+    uint8_t *out = (uint8_t*) dest;
-+    uint8_t a, b, c, d;
- 
-     memcpy(&i, &f, sizeof(uint32_t));
--    i = htonl(i);
--    dest[0] = (uint16_t)(i >> 16);
--    dest[1] = (uint16_t)i;
-+    a = (i >> 24) & 0xFF;
-+    b = (i >> 16) & 0xFF;
-+    c = (i >> 8) & 0xFF;
-+    d = (i >> 0) & 0xFF;
-+
-+    out[0] = a;
-+    out[1] = b;
-+    out[2] = c;
-+    out[3] = d;
- }
- 
- /* Set a float to 4 bytes for Modbus with byte and word swap conversion (DCBA) */
- void modbus_set_float_dcba(float f, uint16_t *dest)
- {
-     uint32_t i;
-+    uint8_t *out = (uint8_t*) dest;
-+    uint8_t a, b, c, d;
- 
-     memcpy(&i, &f, sizeof(uint32_t));
--    i = bswap_32(htonl(i));
--    dest[0] = (uint16_t)(i >> 16);
--    dest[1] = (uint16_t)i;
-+    a = (i >> 24) & 0xFF;
-+    b = (i >> 16) & 0xFF;
-+    c = (i >> 8) & 0xFF;
-+    d = (i >> 0) & 0xFF;
-+
-+    out[0] = d;
-+    out[1] = c;
-+    out[2] = b;
-+    out[3] = a;
-+
- }
- 
- /* Set a float to 4 bytes for Modbus with byte swap conversion (BADC) */
- void modbus_set_float_badc(float f, uint16_t *dest)
- {
-     uint32_t i;
-+    uint8_t *out = (uint8_t*) dest;
-+    uint8_t a, b, c, d;
- 
-     memcpy(&i, &f, sizeof(uint32_t));
--    i = htonl(i);
--    dest[0] = (uint16_t)bswap_16(i >> 16);
--    dest[1] = (uint16_t)bswap_16(i & 0xFFFF);
-+    a = (i >> 24) & 0xFF;
-+    b = (i >> 16) & 0xFF;
-+    c = (i >> 8) & 0xFF;
-+    d = (i >> 0) & 0xFF;
-+
-+    out[0] = b;
-+    out[1] = a;
-+    out[2] = d;
-+    out[3] = c;
- }
- 
- /* Set a float to 4 bytes for Modbus with word swap conversion (CDAB) */
- void modbus_set_float_cdab(float f, uint16_t *dest)
- {
-     uint32_t i;
-+    uint8_t *out = (uint8_t*) dest;
-+    uint8_t a, b, c, d;
- 
-     memcpy(&i, &f, sizeof(uint32_t));
--    i = htonl(i);
--    dest[0] = (uint16_t)i;
--    dest[1] = (uint16_t)(i >> 16);
-+    a = (i >> 24) & 0xFF;
-+    b = (i >> 16) & 0xFF;
-+    c = (i >> 8) & 0xFF;
-+    d = (i >> 0) & 0xFF;
-+
-+    out[0] = c;
-+    out[1] = d;
-+    out[2] = a;
-+    out[3] = b;
- }
- 
- /* DEPRECATED - Set a float to 4 bytes in a sort of Modbus format! */
-diff --git a/tests/unit-test-client.c b/tests/unit-test-client.c
-index 3e315f4..3fccf3e 100644
---- a/tests/unit-test-client.c
-+++ b/tests/unit-test-client.c
-@@ -27,6 +27,7 @@ int send_crafted_request(modbus_t *ctx, int function,
-                          uint16_t max_value, uint16_t bytes,
-                          int backend_length, int backend_offset);
- int equal_dword(uint16_t *tab_reg, const uint32_t value);
-+int is_memory_equal(const void *s1, const void *s2, size_t size);
- 
- #define BUG_REPORT(_cond, _format, _args ...) \
-     printf("\nLine %d: assertion error for '%s': " _format "\n", __LINE__, # _cond, ## _args)
-@@ -40,6 +41,11 @@ int equal_dword(uint16_t *tab_reg, const uint32_t value);
-     }                                             \
- };
- 
-+int is_memory_equal(const void *s1, const void *s2, size_t size)
-+{
-+    return (memcmp(s1, s2, size) == 0);
-+}
-+
- int equal_dword(uint16_t *tab_reg, const uint32_t value) {
-     return ((tab_reg[0] == (value >> 16)) && (tab_reg[1] == (value & 0xFFFF)));
- }
-@@ -286,26 +292,26 @@ int main(int argc, char *argv[])
-     /** FLOAT **/
-     printf("1/4 Set/get float ABCD: ");
-     modbus_set_float_abcd(UT_REAL, tab_rp_registers);
--    ASSERT_TRUE(equal_dword(tab_rp_registers, UT_IREAL_ABCD), "FAILED Set float ABCD");
--    real = modbus_get_float_abcd(tab_rp_registers);
-+    ASSERT_TRUE(is_memory_equal(tab_rp_registers, UT_IREAL_ABCD_SET, 4), "FAILED Set float ABCD");
-+    real = modbus_get_float_abcd(UT_IREAL_ABCD_GET);
-     ASSERT_TRUE(real == UT_REAL, "FAILED (%f != %f)\n", real, UT_REAL);
- 
-     printf("2/4 Set/get float DCBA: ");
-     modbus_set_float_dcba(UT_REAL, tab_rp_registers);
--    ASSERT_TRUE(equal_dword(tab_rp_registers, UT_IREAL_DCBA), "FAILED Set float DCBA");
--    real = modbus_get_float_dcba(tab_rp_registers);
-+    ASSERT_TRUE(is_memory_equal(tab_rp_registers, UT_IREAL_DCBA_SET, 4), "FAILED Set float DCBA");
-+    real = modbus_get_float_dcba(UT_IREAL_DCBA_GET);
-     ASSERT_TRUE(real == UT_REAL, "FAILED (%f != %f)\n", real, UT_REAL);
- 
-     printf("3/4 Set/get float BADC: ");
-     modbus_set_float_badc(UT_REAL, tab_rp_registers);
--    ASSERT_TRUE(equal_dword(tab_rp_registers, UT_IREAL_BADC), "FAILED Set float BADC");
--    real = modbus_get_float_badc(tab_rp_registers);
-+    ASSERT_TRUE(is_memory_equal(tab_rp_registers, UT_IREAL_BADC_SET, 4), "FAILED Set float BADC");
-+    real = modbus_get_float_badc(UT_IREAL_BADC_GET);
-     ASSERT_TRUE(real == UT_REAL, "FAILED (%f != %f)\n", real, UT_REAL);
- 
-     printf("4/4 Set/get float CDAB: ");
-     modbus_set_float_cdab(UT_REAL, tab_rp_registers);
--    ASSERT_TRUE(equal_dword(tab_rp_registers, UT_IREAL_CDAB), "FAILED Set float CDAB");
--    real = modbus_get_float_cdab(tab_rp_registers);
-+    ASSERT_TRUE(is_memory_equal(tab_rp_registers, UT_IREAL_CDAB_SET, 4), "FAILED Set float CDAB");
-+    real = modbus_get_float_cdab(UT_IREAL_CDAB_GET);
-     ASSERT_TRUE(real == UT_REAL, "FAILED (%f != %f)\n", real, UT_REAL);
- 
-     printf("\nAt this point, error messages doesn't mean the test has failed\n");
-diff --git a/tests/unit-test.h.in b/tests/unit-test.h.in
-index dca826f..4ffa254 100644
---- a/tests/unit-test.h.in
-+++ b/tests/unit-test.h.in
-@@ -56,12 +56,45 @@ const uint16_t UT_INPUT_REGISTERS_ADDRESS = 0x108;
- const uint16_t UT_INPUT_REGISTERS_NB = 0x1;
- const uint16_t UT_INPUT_REGISTERS_TAB[] = { 0x000A };
- 
-+/*
-+ * This float value is 0x47F12000 (in big-endian format).
-+ * In Little-endian(intel) format, it will be stored in memory as follows:
-+ * 0x00 0x20 0xF1 0x47
-+ *
-+ * You can check this with the following code:
-+
-+   float fl = UT_REAL;
-+   uint8_t *inmem = (uint8_t*)&fl;
-+   int x;
-+   for(x = 0; x < 4; x++){
-+       printf("0x%02X ", inmem[ x ]);
-+   }
-+   printf("\n");
-+ */
- const float UT_REAL = 123456.00;
- 
--const uint32_t UT_IREAL_ABCD = 0x0020F147;
--const uint32_t UT_IREAL_DCBA = 0x47F12000;
--const uint32_t UT_IREAL_BADC = 0x200047F1;
--const uint32_t UT_IREAL_CDAB = 0xF1470020;
-+/*
-+ * The following arrays assume that 'A' is the MSB,
-+ * and 'D' is the LSB.
-+ * Thus, the following is the case:
-+ * A = 0x47
-+ * B = 0xF1
-+ * C = 0x20
-+ * D = 0x00
-+ *
-+ * There are two sets of arrays: one to test that the setting is correct,
-+ * the other to test that the getting is correct.
-+ * Note that the 'get' values must be constants in processor-endianness,
-+ * as libmodbus will convert all words to processor-endianness as they come in.
-+ */
-+const uint8_t UT_IREAL_ABCD_SET[] = {0x47, 0xF1, 0x20, 0x00};
-+const uint16_t UT_IREAL_ABCD_GET[] = {0x47F1, 0x2000};
-+const uint8_t UT_IREAL_DCBA_SET[] = {0x00, 0x20, 0xF1, 0x47};
-+const uint16_t UT_IREAL_DCBA_GET[] = {0x0020, 0xF147};
-+const uint8_t UT_IREAL_BADC_SET[] = {0xF1, 0x47, 0x00, 0x20};
-+const uint16_t UT_IREAL_BADC_GET[] = {0xF147, 0x0020};
-+const uint8_t UT_IREAL_CDAB_SET[] = {0x20, 0x00, 0x47, 0xF1};
-+const uint16_t UT_IREAL_CDAB_GET[] = {0x2000, 0x47F1};
- 
- /* const uint32_t UT_IREAL_ABCD = 0x47F12000);
- const uint32_t UT_IREAL_DCBA = 0x0020F147;
diff --git a/meta-oe/recipes-extended/libmodbus/libmodbus_3.0.6.bb b/meta-oe/recipes-extended/libmodbus/libmodbus_3.0.6.bb
deleted file mode 100644
index b4d32fb2c..000000000
--- a/meta-oe/recipes-extended/libmodbus/libmodbus_3.0.6.bb
+++ /dev/null
@@ -1,4 +0,0 @@ 
-require libmodbus.inc
-
-SRC_URI[md5sum] = "c80f88b6ca19cabc4ceffc195ca07771"
-SRC_URI[sha256sum] = "046d63f10f755e2160dc56ef681e5f5ad3862a57c1955fd82e0ce036b69471b6"
diff --git a/meta-oe/recipes-extended/libmodbus/libmodbus_3.1.10.bb b/meta-oe/recipes-extended/libmodbus/libmodbus_3.1.10.bb
new file mode 100644
index 000000000..9e17f9166
--- /dev/null
+++ b/meta-oe/recipes-extended/libmodbus/libmodbus_3.1.10.bb
@@ -0,0 +1,17 @@ 
+SUMMARY = "A Modbus library for Linux, Mac OS, FreeBSD and Windows"
+DESCRIPTION = "libmodbus is a free software library to send/receive data with a device which respects the Modbus protocol. This library can use a serial port or an Ethernet connection."
+HOMEPAGE = "http://www.libmodbus.org/"
+SECTION = "libs"
+
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING.LESSER;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI = "git://github.com/stephane/libmodbus;branch=master;protocol=https"
+SRCREV = "2cbafa3113e276c3697d297f68e88d112b53174d"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[test] = "--enable-tests,--disable-tests,,"
diff --git a/meta-oe/recipes-extended/libmodbus/libmodbus_3.1.7.bb b/meta-oe/recipes-extended/libmodbus/libmodbus_3.1.7.bb
deleted file mode 100644
index 6c0e315d7..000000000
--- a/meta-oe/recipes-extended/libmodbus/libmodbus_3.1.7.bb
+++ /dev/null
@@ -1,9 +0,0 @@ 
-require libmodbus.inc
-
-SRC_URI += "file://Fix-float-endianness-issue-on-big-endian-arch.patch"
-SRC_URI[sha256sum] = "7dfe958431d0570b271e1a5b329b76a658e89c614cf119eb5aadb725c87f8fbd"
-
-# this file has been created one minute after the configure file, so it doesn't get recreated during configure step
-do_configure:prepend() {
-	rm -rf ${S}/tests/unit-test.h
-}