]> sigrok.org Git - libsigrok.git/commitdiff
endian neutral helper macro to read 16/32 bits integer from unaligned memory
authorAurelien Jacobs <redacted>
Wed, 11 Dec 2013 23:20:47 +0000 (00:20 +0100)
committerBert Vermeulen <redacted>
Mon, 23 Dec 2013 00:21:51 +0000 (01:21 +0100)
libsigrok-internal.h

index c76f5983b7bddccf1d9388d0334ad0822c7fea5d..82d6d791c39ff8362ce4a794c5a4abd1c0c5ef76 100644 (file)
 #define ARRAY_AND_SIZE(a) (a), ARRAY_SIZE(a)
 #endif
 
+/**
+ * Read a 16 bits big endian integer out of memory.
+ * @param x a pointer to the input memory
+ * @return the corresponding integer
+ */
+#define RB16(x)  ((((const uint8_t*)(x))[0] <<  8) |  \
+                   ((const uint8_t*)(x))[1])
+
+/**
+ * Read a 16 bits little endian integer out of memory.
+ * @param x a pointer to the input memory
+ * @return the corresponding integer
+ */
+#define RL16(x)  ((((const uint8_t*)(x))[1] <<  8) |  \
+                   ((const uint8_t*)(x))[0])
+
+/**
+ * Read a 32 bits big endian integer out of memory.
+ * @param x a pointer to the input memory
+ * @return the corresponding integer
+ */
+#define RB32(x)  ((((const uint8_t*)(x))[0] << 24) |  \
+                  (((const uint8_t*)(x))[1] << 16) |  \
+                  (((const uint8_t*)(x))[2] <<  8) |  \
+                   ((const uint8_t*)(x))[3])
+
+/**
+ * Read a 32 bits little endian integer out of memory.
+ * @param x a pointer to the input memory
+ * @return the corresponding integer
+ */
+#define RL32(x)  ((((const uint8_t*)(x))[3] << 24) |  \
+                  (((const uint8_t*)(x))[2] << 16) |  \
+                  (((const uint8_t*)(x))[1] <<  8) |  \
+                   ((const uint8_t*)(x))[0])
+
 /* Portability fixes for FreeBSD. */
 #ifdef __FreeBSD__
 #define LIBUSB_CLASS_APPLICATION 0xfe