Modbus

Parents f14859c24751
Children 1aed7a582ca7
Undo changes inserted in previous commit (included 2 unrelated changes)
  • +34 -52
    mb_slave.c
  • +2 -2
    mb_tcp.c
  • --- a/mb_slave.c Mon Jun 01 14:15:03 2020 +0100
    +++ b/mb_slave.c Mon Jun 01 14:24:57 2020 +0100
    @@ -107,58 +107,6 @@
    }
    -/* Determine endianess of platform... */
    -
    -/* WARNING: The following files are being included:
    - * <stdib.h> --> <endian.h> --> <bits/endian.h>
    - *
    - * endian.h defines the following constants as:
    - * #define __LITTLE_ENDIAN and LITTLE_ENDIAN as 1234
    - * #define __BIG_ENDIAN and BIG_ENDIAN as 4321
    - * #define __PDP_ENDIAN and PDP_ENDIAN as 3412
    - *
    - * bits/endian.h defines the constant BYTE_ORDER as:
    - * #define __BYTE_ORDER as __LITTLE_ENDIAN
    - *
    - * endian.h then sets the following constants
    - * (if __USE_BSD is set, which seems to be true):
    - * # define LITTLE_ENDIAN __LITTLE_ENDIAN
    - * # define BIG_ENDIAN __BIG_ENDIAN
    - * # define PDP_ENDIAN __PDP_ENDIAN
    - * # define BYTE_ORDER __BYTE_ORDER
    - */
    -
    -/* If we still don't know byte order, try to get it from <endian.h> */
    -#ifndef __BYTE_ORDER
    -#include <endian.h>
    -#endif
    -
    -
    -/* If we still don't know byte order => if using gcc, use it to determine byte order... */
    -#ifndef __BYTE_ORDER
    -#if defined(__GNUC__)
    - /* We have GCC, which should define __LITTLE_ENDIAN__ */
    -# if defined(__LITTLE_ENDIAN__)
    -# define __BYTE_ORDER __LITTLE_ENDIAN
    -# else
    -# define __BYTE_ORDER __BIG_ENDIAN
    -# endif
    -#endif /* __GNUC__ */
    -#endif /* __BYTE_ORDER */
    -
    -
    -#ifndef __BYTE_ORDER
    -# error "Unable to determine platform's byte order. Aborting compilation."
    -#elif __BYTE_ORDER == __BIG_ENDIAN
    -# warning "Compiling for BIG endian platform."
    -#elif __BYTE_ORDER == __LITTLE_ENDIAN
    -# warning "Compiling for LITTLE endian platform."
    -#else
    -# error "Aborting compilation due to unsuported byte order (neither BIG not LITTLE endian)."
    -#endif
    -
    -
    -
    /*
    * Functions to convert u16 variables
    * between network and host byte order
    @@ -174,6 +122,40 @@
    * conversion functions...
    */
    +/* if using gcc, use it to determine byte order... */
    +#ifndef __BYTE_ORDER
    +#if defined(__GNUC__)
    + /* We have GCC, which should define __LITTLE_ENDIAN__ */
    +# if defined(__LITTLE_ENDIAN__)
    +# define __BYTE_ORDER __LITTLE_ENDIAN
    +# else
    +# define __BYTE_ORDER __BIG_ENDIAN
    +# endif
    +#endif /* __GNUC__ */
    +#endif /* __BYTE_ORDER */
    +
    +
    +/* If we still don't know byte order, try to get it from <sys/param.h> */
    +#ifndef __BYTE_ORDER
    +#include <sys/param.h>
    +#endif
    +
    +
    +#ifndef __BYTE_ORDER
    +# ifdef BYTE_ORDER
    +# if BYTE_ORDER == LITTLE_ENDIAN
    +# define __BYTE_ORDER __LITTLE_ENDIAN
    +# else
    +# if BYTE_ORDER == BIG_ENDIAN
    +# define __BYTE_ORDER __BIG_ENDIAN
    +# endif
    +# endif
    +# endif /* BYTE_ORDER */
    +#endif /* __BYTE_ORDER */
    +
    +
    +
    +
    #ifdef __BYTE_ORDER
    # if __BYTE_ORDER == __LITTLE_ENDIAN
    --- a/mb_tcp.c Mon Jun 01 14:15:03 2020 +0100
    +++ b/mb_tcp.c Mon Jun 01 14:24:57 2020 +0100
    @@ -1517,8 +1517,8 @@
    /* Check the parameters we were passed... */
    if(sin_initaddr(&tmp_addr,
    - node_addr.addr.tcp.host, 1, // 1 => allow host NULL, "" or "*" -> INADDR_ANY
    - node_addr.addr.tcp.service, 1, // 1 => allow serivce NULL or "" -> port = 0
    + node_addr.addr.tcp.host, 0,
    + node_addr.addr.tcp.service, 0,
    DEF_PROTOCOL)
    < 0) {
    #ifdef ERRMSG