10#ifndef M5_UTILITY_MISC_HPP
11#define M5_UTILITY_MISC_HPP
23 return (addr >= 0x08 && addr <= 0x77);
35inline uint8_t reverseBitOrderPortable(
const uint8_t u8)
38 v = ((v & 0xF0) >> 4) | ((v & 0x0F) << 4);
39 v = ((v & 0xCC) >> 2) | ((v & 0x33) << 2);
40 v = ((v & 0xAA) >> 1) | ((v & 0x55) << 1);
45inline uint16_t reverseBitOrderPortable(
const uint16_t u16)
48 v = ((v & 0xFF00) >> 8) | ((v & 0x00FF) << 8);
49 v = ((v & 0xF0F0) >> 4) | ((v & 0x0F0F) << 4);
50 v = ((v & 0xCCCC) >> 2) | ((v & 0x3333) << 2);
51 v = ((v & 0xAAAA) >> 1) | ((v & 0x5555) << 1);
59inline bool parityPortable(
const uint8_t u8)
62 v ^=
static_cast<uint8_t
>(v >> 4);
63 v ^=
static_cast<uint8_t
>(v >> 2);
64 v ^=
static_cast<uint8_t
>(v >> 1);
65 return (v & 0x01) != 0;
74 return __builtin_bitreverse8(u8);
76 return detail::reverseBitOrderPortable(u8);
84 return __builtin_bitreverse16(u16);
86 return detail::reverseBitOrderPortable(u16);
97#if defined(__GNUC__) || defined(__clang__)
98 return __builtin_parity(u8) != 0;
100 return detail::parityPortable(u8);
112 return parity(u8) ? 0 : 1;
123 static_assert(N >= 1,
"N must be >= 1");
124#if defined(__SIZEOF_INT128__)
125 static_assert(N <= 128,
"N must be <= 128");
127 typename std::conditional<
129 typename std::conditional<
131 typename std::conditional<
133 typename std::conditional<
141 static_assert(N <= 64,
"N must be <= 64");
143 typename std::conditional<
145 typename std::conditional<
147 typename std::conditional<
bool parity(const uint8_t u8)
Is the number of set bits odd?
Definition misc.hpp:95
uint8_t oddParityBit(const uint8_t u8)
Gets the bit that makes the byte odd parity.
Definition misc.hpp:110
bool isValidI2CAddress(const uint16_t addr)
Valid I2C address?
Definition misc.hpp:20
uint8_t reverseBitOrder(const uint8_t u8)
Reversing the bit order.
Definition misc.hpp:71
Top level namespace of M5.
Definition base64.cpp:39
Gets the smallest unsigned integer type that can store N bit.
Definition misc.hpp:122