From: Aurelien Jacobs Date: Sun, 2 Feb 2014 20:33:09 +0000 (+0100) Subject: libsigrok-internal.h: endian neutral helper macro to write 8/16/32 bits integer to... X-Git-Tag: libsigrok-0.3.0~157 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=ea2d6d994f28c11b7b3d0232bd1a3dbbbf67a401;p=libsigrok.git libsigrok-internal.h: endian neutral helper macro to write 8/16/32 bits integer to unaligned memory --- diff --git a/libsigrok-internal.h b/libsigrok-internal.h index 05d3f2ae..6e665c58 100644 --- a/libsigrok-internal.h +++ b/libsigrok-internal.h @@ -93,6 +93,49 @@ ((unsigned)((const uint8_t*)(x))[1] << 8) | \ (unsigned)((const uint8_t*)(x))[0]) +/** + * Write a 8 bits integer to memory. + * @param p a pointer to the output memory + * @param x the input integer + */ +#define W8(p, x) do { ((uint8_t*)(p))[0] = (uint8_t) (x); } while(0) + +/** + * Write a 16 bits integer to memory stored as big endian. + * @param p a pointer to the output memory + * @param x the input integer + */ +#define WB16(p, x) do { ((uint8_t*)(p))[1] = (uint8_t) (x); \ + ((uint8_t*)(p))[0] = (uint8_t)((x)>>8); } while(0) + +/** + * Write a 16 bits integer to memory stored as little endian. + * @param p a pointer to the output memory + * @param x the input integer + */ +#define WL16(p, x) do { ((uint8_t*)(p))[0] = (uint8_t) (x); \ + ((uint8_t*)(p))[1] = (uint8_t)((x)>>8); } while(0) + +/** + * Write a 32 bits integer to memory stored as big endian. + * @param p a pointer to the output memory + * @param x the input integer + */ +#define WB32(p, x) do { ((uint8_t*)(p))[3] = (uint8_t) (x); \ + ((uint8_t*)(p))[2] = (uint8_t)((x)>>8); \ + ((uint8_t*)(p))[1] = (uint8_t)((x)>>16); \ + ((uint8_t*)(p))[0] = (uint8_t)((x)>>24); } while(0) + +/** + * Write a 32 bits integer to memory stored as little endian. + * @param p a pointer to the output memory + * @param x the input integer + */ +#define WL32(p, x) do { ((uint8_t*)(p))[0] = (uint8_t) (x); \ + ((uint8_t*)(p))[1] = (uint8_t)((x)>>8); \ + ((uint8_t*)(p))[2] = (uint8_t)((x)>>16); \ + ((uint8_t*)(p))[3] = (uint8_t)((x)>>24); } while(0) + /* Portability fixes for FreeBSD. */ #ifdef __FreeBSD__ #define LIBUSB_CLASS_APPLICATION 0xfe