#ifndef RELAY_LOGIC_H
#define RELAY_LOGIC_H
#include <Arduino.h>
// Массив пинов — определяем в .ino, а здесь только объявляем
extern const uint8_t RELAY_PINS[CHANNEL_NUM];
// Состояния каналов — тоже логика реле, а не ядра
extern bool channelState[CHANNEL_NUM];
extern const bool RELAY_INVERT[CHANNEL_NUM];
inline void applyChannelState(uint8_t ch, bool on) {
if (ch >= CHANNEL_NUM) return;
uint8_t pin = sh_channel_pin(ch);
if (pin == SH_PIN_UNUSED) return;
bool physicalOn = on ^ sh_channel_is_inverted(ch);
digitalWrite(pin, physicalOn ? HIGH : LOW);
}
inline bool getChannelState(uint8_t ch) {
if (ch >= CHANNEL_NUM) return false;
return channelState[ch];
}
// Установить состояние канала + callback + сохранение
void setChannelState(uint8_t ch, bool on) {
if (ch >= CHANNEL_NUM) return;
channelState[ch] = on;
applyChannelState(ch, on);
}
// Для старой совместимости
bool getPrimaryState() {
return getChannelState(0);
}
inline void setOn(bool on) {
setChannelState(0, on);
}
#endif