mirror of
https://github.com/DarkFlippers/unleashed-firmware
synced 2024-12-23 19:23:09 +00:00
fef90f1ec5
by divinebird
60 lines
1.5 KiB
C
60 lines
1.5 KiB
C
//
|
|
// Created by Avilov Vasily on 10.06.2023.
|
|
//
|
|
|
|
#ifndef FLIPPERZERO_FIRMWARE_ENDIANNESS_H
|
|
#define FLIPPERZERO_FIRMWARE_ENDIANNESS_H
|
|
|
|
inline static void store16(uint8_t* b, uint16_t i) {
|
|
memcpy(b, &i, 2);
|
|
}
|
|
|
|
inline static void store32(uint8_t* b, uint32_t i) {
|
|
memcpy(b, &i, 4);
|
|
}
|
|
|
|
inline static uint16_t load16(uint8_t* b) {
|
|
uint16_t x;
|
|
memcpy(&x, b, 2);
|
|
return x;
|
|
}
|
|
|
|
inline static uint32_t load32(uint8_t* b) {
|
|
uint32_t x;
|
|
memcpy(&x, b, 4);
|
|
return x;
|
|
}
|
|
|
|
#if BYTE_ORDER == BIG_ENDIAN
|
|
#define htobe16(x) (x)
|
|
#define htobe32(x) (x)
|
|
#define htole16(x) __builtin_bswap16(x)
|
|
#define htole32(x) __builtin_bswap32(x)
|
|
#define be16toh(x) (x)
|
|
#define be32toh(x) (x)
|
|
#define le16toh(x) __builtin_bswap16(x)
|
|
#define le32toh(x) __builtin_bswap32(x)
|
|
#elif BYTE_ORDER == LITTLE_ENDIAN
|
|
#define htobe16(x) __builtin_bswap16(x)
|
|
#define htobe32(x) __builtin_bswap32(x)
|
|
#define htole16(x) (x)
|
|
#define htole32(x) (x)
|
|
#define be16toh(x) __builtin_bswap16(x)
|
|
#define be32toh(x) __builtin_bswap32(x)
|
|
#define le16toh(x) (x)
|
|
#define le32toh(x) (x)
|
|
#else
|
|
#error "What kind of system is this?"
|
|
#endif
|
|
|
|
#define load16_le(b) (le16toh(load16(b)))
|
|
#define load32_le(b) (le32toh(load32(b)))
|
|
#define store16_le(b, i) (store16(b, htole16(i)))
|
|
#define store32_le(b, i) (store32(b, htole32(i)))
|
|
|
|
#define load16_be(b) (be16toh(load16(b)))
|
|
#define load32_be(b) (be32toh(load32(b)))
|
|
#define store16_be(b, i) (store16(b, htobe16(i)))
|
|
#define store32_be(b, i) (store32(b, htobe32(i)))
|
|
|
|
#endif //FLIPPERZERO_FIRMWARE_ENDIANNESS_H
|