31#ifndef UTILS_OVERRIDE_H
32#define UTILS_OVERRIDE_H
42constexpr uint8_t
LOAD(uint8_t loadNum)
52constexpr uint8_t
RELAY(uint8_t relayNum)
54 return relays.get_relay(relayNum).get_pin();
84 for (uint8_t
i = 0;
i <
relays.size(); ++
i)
111template< uint8_t... Pins >
121#define VALIDATE_PINS(...) static_assert(are_pins_valid< __VA_ARGS__ >(), "Invalid pin(s) specified")
128template< uint8_t... Pins >
131 return ((1U << Pins) | ...);
138template< u
int8_t MaxPins >
157 for (uint8_t pin = 0; pin < 16 &&
count < MaxPins; ++pin)
159 if (bitmask & (1U << pin))
170 template<
typename... Args >
172 :
pins{ static_cast< uint8_t >(args)... },
count(sizeof...(args)) {}
183 result |= (1U <<
pins[
i]);
193template< u
int8_t MaxPins >
258 for (uint8_t
i = 0;
i < N; ++
i)
260 temp[
i] = { pairs[
i].pin, pairs[
i].getBitmask() };
262 for (uint8_t
i = 0;
i < N; ++
i)
282 constexpr uint8_t
getPin(uint8_t index)
const
284 return index < N ?
entries_[index].pin : 0;
294 return index < N ?
entries_[index].bitmask : 0;
304 for (uint8_t
i = 0;
i < N; ++
i)
321 Serial.println(F(
"*** Override Pins Configuration ***"));
322 for (uint8_t
i = 0;
i < N; ++
i)
324 Serial.print(F(
"\tPin: "));
326 Serial.print(F(
"\tBitmask: 0b"));
327 Serial.println(
entries_[
i].bitmask, BIN);
336template< u
int8_t MaxPins, u
int8_t N >
Manages override pins and their associated bitmasks for forced operation.
void printOverrideConfig() const
Print the configured override pins and their bitmasks to Serial during startup.
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.
Standard three-phase PVRouter setup with 2 dump loads.
constexpr RelayEngine relays
constexpr uint8_t physicalLoadPin[NO_OF_DUMPLOADS]
constexpr uint8_t NO_OF_DUMPLOADS
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 ALL_RELAYS()
Returns a bitmask representing all relay pins.
constexpr uint16_t indicesToBitmask()
Helper to convert pins to a bitmask at compile-time.
constexpr uint16_t ALL_LOADS()
Returns a bitmask representing all load pins.
constexpr uint8_t LOAD(uint8_t loadNum)
Returns the pin number for a given load index at compile time.
OverridePins(const KeyIndexPair< MaxPins >(&)[N]) -> OverridePins< N, MaxPins >
Deduction guide for OverridePins template. Allows template argument deduction from constructor argume...
constexpr uint16_t ALL_LOADS_AND_RELAYS()
Returns a bitmask representing all loads and all relays.
constexpr void bit_set(T &_dest, const uint8_t bit)
Set the specified bit to 1.