Newer
Older
smart-home-server / devices / button / ButtonLogic.h
@root root 19 days ago 1 KB Devices. Button
#pragma once
#include <Arduino.h>
#include <Adafruit_NeoPixel.h>

// общий максимум каналов для этой прошивки
static constexpr uint8_t BUTTON_MAX_CHANNELS = 8;
static constexpr uint8_t SH_PIN_UNUSED = 0xFF;

enum IndicatorState : uint8_t {
  IND_ENABLED = 0,
  IND_DISABLED,
  IND_MUTE,
  IND_WAITING,
  IND_WARNING,
  IND_ERROR
};

extern const uint8_t BUTTON_PINS[BUTTON_MAX_CHANNELS];
extern const uint8_t SIGNAL_LED;

// индикаторы, которые задаёт сервер
extern IndicatorState channel_indicator[BUTTON_MAX_CHANNELS];

void button_logic_setup();
void button_logic_loop();

void set_channel_indicator(uint8_t ch, IndicatorState st);
IndicatorState get_channel_indicator(uint8_t ch);

// локальная индикация ожидания/ошибки после нажатия
void set_channel_waiting(uint8_t ch);
void set_channel_warning_temp(uint8_t ch, uint32_t ms);
void clear_channel_temp(uint8_t ch);

// отправка события
void send_press_event(uint8_t ch);