libsigrok-internal.h: add u64be endianess writer
authorGerhard Sittig <gerhard.sittig@gmx.net>
Mon, 26 Oct 2020 18:48:22 +0000 (19:48 +0100)
committerGerhard Sittig <gerhard.sittig@gmx.net>
Mon, 26 Oct 2020 18:50:33 +0000 (19:50 +0100)
Add endianess aware writer for uint64_t data in BE format. This is
motivated by the Codethink Interrogizer.

src/libsigrok-internal.h

index 9a672c7dbf97a5402a774d73dd06e5e0eca4071d..98d1631e2f4a4a5d3b209f3e85446e464799ccc6 100644 (file)
@@ -475,6 +475,23 @@ static inline void write_u32le(uint8_t *p, uint32_t x)
 }
 #define WL32(p, x) write_u32le((uint8_t *)(p), (uint32_t)(x))
 
+/**
+ * Write a 64 bits unsigned integer to memory stored as big endian.
+ * @param p a pointer to the output memory
+ * @param x the input unsigned integer
+ */
+static inline void write_u64be(uint8_t *p, uint64_t x)
+{
+       p[7] = x & 0xff; x >>= 8;
+       p[6] = x & 0xff; x >>= 8;
+       p[5] = x & 0xff; x >>= 8;
+       p[4] = x & 0xff; x >>= 8;
+       p[3] = x & 0xff; x >>= 8;
+       p[2] = x & 0xff; x >>= 8;
+       p[1] = x & 0xff; x >>= 8;
+       p[0] = x & 0xff; x >>= 8;
+}
+
 /**
  * Write a 64 bits unsigned integer to memory stored as little endian.
  * @param p a pointer to the output memory