Newer
Older
smart-home-server / devices / button / button_esp8266 / ButtonLogic.h
@root root 9 days ago 976 bytes Button
#pragma once
#include <Arduino.h>
#include <Adafruit_NeoPixel.h>

// compile-time число каналов для device-layer (.cpp файлы)
#ifndef BUTTON_CHANNEL_NUM
  #define BUTTON_CHANNEL_NUM 3
#endif

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

extern const uint8_t BUTTON_PINS[BUTTON_CHANNEL_NUM];
extern const uint8_t SIGNAL_LED; // GPIO пин ленты

extern IndicatorState channel_indicator[BUTTON_CHANNEL_NUM];

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);