31#ifndef UTILS_OVERRIDE_H
32#define UTILS_OVERRIDE_H
44template< uint8_t... Pins >
54#define VALIDATE_PINS(...) static_assert(are_pins_valid< __VA_ARGS__ >(), "Invalid pin(s) specified")
61template< uint8_t... Pins >
64 return ((1U << Pins) | ...);
71template< u
int8_t MaxPins >
90 for (uint8_t pin = 0; pin < 16 &&
count < MaxPins; ++pin)
92 if (bitmask & (1U << pin))
103 template<
typename... Args >
105 :
pins{ static_cast< uint8_t >(args)... },
count(sizeof...(args)) {}
116 result |= (1U <<
pins[
i]);
126template< u
int8_t MaxPins >
160template< u
int8_t N, u
int8_t MaxPins = 16 >
191 for (uint8_t
i = 0;
i < N; ++
i)
193 temp[
i] = { pairs[
i].pin, pairs[
i].getBitmask() };
195 for (uint8_t
i = 0;
i < N; ++
i)
215 constexpr uint8_t
getPin(uint8_t index)
const
217 return index < N ?
entries_[index].pin : 0;
227 return index < N ?
entries_[index].bitmask : 0;
237 for (uint8_t
i = 0;
i < N; ++
i)
253 void printOverrideConfig()
const
255 Serial.println(F(
"*** Override Pins Configuration ***"));
256 for (uint8_t
i = 0;
i < N; ++
i)
258 Serial.print(F(
"\tPin: "));
260 Serial.print(F(
"\tBitmask: 0b"));
261 Serial.println(
entries_[
i].bitmask, BIN);
271template< u
int8_t MaxPins, u
int8_t N >
Manages override pins and their associated bitmasks for forced operation.
constexpr OverridePins(const KeyIndexPair< MaxPins >(&pairs)[N])
Constructor. Initializes the override pin mapping from pin-index pairs.
constexpr uint16_t getBitmask(uint8_t index) const
Returns the bitmask for the specified entry index.
constexpr uint8_t size() const
Returns the number of override pin entries.
constexpr uint16_t findBitmask(uint8_t pin) const
Finds the bitmask associated with a given pin number.
constexpr uint8_t getPin(uint8_t index) const
Returns the pin number at the specified entry index.
Structure holding a pin and its associated index list.
constexpr uint16_t getBitmask() const
Returns the bitmask for the index list.
PinList< MaxPins > indexList
constexpr KeyIndexPair(uint8_t k, const PinList< MaxPins > &list)
Constructor.
Internal structure representing a pin and its associated bitmask.
Wrapper for a list of pins, constructible from variadic arguments.
constexpr PinList()
Default constructor. Initializes with zero pins.
constexpr PinList(uint16_t bitmask)
Constructor from bitmask. Sets pin numbers from bits set in bitmask.
constexpr uint16_t toBitmask() const
Converts the pin list to a bitmask.
constexpr PinList(Args... args)
Variadic constructor. Initializes with provided pins.
Some useful but missing stl functions templates.
constexpr uint16_t validPinMask
constexpr bool are_pins_valid()
Compile-time validation function for pin values.
constexpr uint16_t indicesToBitmask()
Helper to convert pins to a bitmask at compile-time.
OverridePins(const KeyIndexPair< MaxPins >(&)[N]) -> OverridePins< N, MaxPins >
Deduction guide for OverridePins template. Allows template argument deduction from constructor argume...