mb_slave.c
changeset 9 d6effe86bc2f
parent 8 f14859c24751
child 11 7c955a1d39e8
--- 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,34 +107,22 @@
 }
 
 
-/* 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... */
+/*
+ * Functions to convert u16 variables
+ * between network and host byte order
+ *
+ * NOTE: Modbus uses MSByte first, just like
+ *       tcp/ip, so we could be tempted to use the htons() and
+ *       ntohs() functions to guarantee code portability.
+ *
+ *       However, on some embedded systems running Linux
+ *       these functions only work if the 16 bit words are 
+ *       stored on even addresses. This is not always the 
+ *       case in our code, so we have to define our own
+ *       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__ */ 
@@ -147,32 +135,26 @@
 #endif /* __BYTE_ORDER */
 
 
+/* If we still don't know byte order, try to get it from <sys/param.h> */
 #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)."
+#include <sys/param.h>
 #endif
 
 
-
-/*
- * Functions to convert u16 variables
- * between network and host byte order
- *
- * NOTE: Modbus uses MSByte first, just like
- *       tcp/ip, so we could be tempted to use the htons() and
- *       ntohs() functions to guarantee code portability.
- *
- *       However, on some embedded systems running Linux
- *       these functions only work if the 16 bit words are 
- *       stored on even addresses. This is not always the 
- *       case in our code, so we have to define our own
- *       conversion functions...
- */
+#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