mirror of
https://github.com/HASwitchPlate/openHASP.git
synced 2025-07-29 06:06:40 +00:00
Add AceButton pointer to gpio struct
This commit is contained in:
parent
2bd650ec4f
commit
718d0bfecc
@ -13,16 +13,22 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ARDUINO
|
#ifdef ARDUINO
|
||||||
|
|
||||||
#include "AceButton.h"
|
#include "AceButton.h"
|
||||||
using namespace ace_button;
|
using namespace ace_button;
|
||||||
static AceButton* button[HASP_NUM_INPUTS];
|
static AceButton* button[HASP_NUM_INPUTS];
|
||||||
|
ButtonConfig buttonConfig; // Clicks, double-clicks and long presses
|
||||||
|
ButtonConfig switchConfig; // Clicks only
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define HIGH 1
|
#define HIGH 1
|
||||||
#define LOW 0
|
#define LOW 0
|
||||||
#define NUM_DIGITAL_PINS 40
|
#define NUM_DIGITAL_PINS 40
|
||||||
#define digitalWrite(x, y)
|
#define digitalWrite(x, y)
|
||||||
#define analogWrite(x, y)
|
#define analogWrite(x, y)
|
||||||
#endif
|
|
||||||
|
#endif // ARDUINO
|
||||||
|
|
||||||
#define SCALE_8BIT_TO_12BIT(x) x << 4 | x >> 4
|
#define SCALE_8BIT_TO_12BIT(x) x << 4 | x >> 4
|
||||||
#define SCALE_8BIT_TO_10BIT(x) x << 2 | x >> 6
|
#define SCALE_8BIT_TO_10BIT(x) x << 2 | x >> 6
|
||||||
@ -118,25 +124,31 @@ static void gpio_event_handler(AceButton* button, uint8_t eventType, uint8_t but
|
|||||||
|
|
||||||
void aceButtonSetup(void)
|
void aceButtonSetup(void)
|
||||||
{
|
{
|
||||||
ButtonConfig* buttonConfig = ButtonConfig::getSystemButtonConfig();
|
// Button Features
|
||||||
buttonConfig->setEventHandler(gpio_event_handler);
|
buttonConfig.setEventHandler(gpio_event_handler);
|
||||||
|
buttonConfig.setFeature(ButtonConfig::kFeatureClick);
|
||||||
// Features
|
buttonConfig.clearFeature(ButtonConfig::kFeatureDoubleClick);
|
||||||
// buttonConfig->setFeature(ButtonConfig::kFeatureClick);
|
buttonConfig.setFeature(ButtonConfig::kFeatureLongPress);
|
||||||
// buttonConfig->setFeature(ButtonConfig::kFeatureLongPress);
|
// buttonConfig->clearFeature(ButtonConfig::kFeatureRepeatPress);
|
||||||
// buttonConfig->setFeature(ButtonConfig::kFeatureRepeatPress);
|
buttonConfig.clearFeature(ButtonConfig::kFeatureSuppressClickBeforeDoubleClick); // Causes annoying pauses
|
||||||
// buttonConfig->setFeature(ButtonConfig::kFeatureDoubleClick);
|
buttonConfig.setFeature(ButtonConfig::kFeatureSuppressAfterClick);
|
||||||
// buttonConfig->setFeature(ButtonConfig::kFeatureSuppressClickBeforeDoubleClick);
|
buttonConfig.setClickDelay(LV_INDEV_DEF_LONG_PRESS_TIME);
|
||||||
|
|
||||||
// Delays
|
// Delays
|
||||||
buttonConfig->setClickDelay(LV_INDEV_DEF_LONG_PRESS_TIME);
|
buttonConfig.setDoubleClickDelay(LV_INDEV_DEF_LONG_PRESS_TIME);
|
||||||
buttonConfig->setDoubleClickDelay(LV_INDEV_DEF_LONG_PRESS_TIME);
|
buttonConfig.setLongPressDelay(LV_INDEV_DEF_LONG_PRESS_TIME);
|
||||||
buttonConfig->setLongPressDelay(LV_INDEV_DEF_LONG_PRESS_TIME);
|
buttonConfig.setRepeatPressDelay(LV_INDEV_DEF_LONG_PRESS_TIME);
|
||||||
buttonConfig->setRepeatPressDelay(LV_INDEV_DEF_LONG_PRESS_TIME);
|
buttonConfig.setRepeatPressInterval(LV_INDEV_DEF_LONG_PRESS_REP_TIME);
|
||||||
buttonConfig->setRepeatPressInterval(LV_INDEV_DEF_LONG_PRESS_REP_TIME);
|
|
||||||
|
// Switch Features
|
||||||
|
switchConfig.setEventHandler(gpio_event_handler);
|
||||||
|
switchConfig.setFeature(ButtonConfig::kFeatureClick);
|
||||||
|
switchConfig.clearFeature(ButtonConfig::kFeatureLongPress);
|
||||||
|
switchConfig.clearFeature(ButtonConfig::kFeatureRepeatPress);
|
||||||
|
switchConfig.clearFeature(ButtonConfig::kFeatureDoubleClick);
|
||||||
|
switchConfig.setClickDelay(100); // decrease click delay from default 200 ms
|
||||||
}
|
}
|
||||||
|
|
||||||
void gpioAddButton(uint8_t pin, uint8_t input_mode, uint8_t default_state, uint8_t index)
|
/* void gpioAddButton(uint8_t pin, uint8_t input_mode, uint8_t default_state, uint8_t index)
|
||||||
{
|
{
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
for(i = 0; i < HASP_NUM_INPUTS; i++) {
|
for(i = 0; i < HASP_NUM_INPUTS; i++) {
|
||||||
@ -145,20 +157,20 @@ void gpioAddButton(uint8_t pin, uint8_t input_mode, uint8_t default_state, uint8
|
|||||||
LOG_TRACE(TAG_GPIO, F("Creating Button%d on pin %d (index %d) mode %d default %d"), i, pin, index,
|
LOG_TRACE(TAG_GPIO, F("Creating Button%d on pin %d (index %d) mode %d default %d"), i, pin, index,
|
||||||
input_mode, default_state);
|
input_mode, default_state);
|
||||||
|
|
||||||
button[i] = new AceButton(pin, default_state, index);
|
button[i] = new AceButton(&buttonConfig, pin, default_state, index);
|
||||||
|
|
||||||
if(button[i]) {
|
if(button[i]) {
|
||||||
// pinMode(pin, input_mode);
|
// pinMode(pin, input_mode);
|
||||||
|
|
||||||
ButtonConfig* buttonConfig = button[i]->getButtonConfig();
|
// ButtonConfig* buttonConfig = button[i]->getButtonConfig();
|
||||||
buttonConfig->setEventHandler(gpio_event_handler);
|
// buttonConfig->setEventHandler(gpio_event_handler);
|
||||||
buttonConfig->setFeature(ButtonConfig::kFeatureClick);
|
// buttonConfig->setFeature(ButtonConfig::kFeatureClick);
|
||||||
buttonConfig->clearFeature(ButtonConfig::kFeatureDoubleClick);
|
// buttonConfig->clearFeature(ButtonConfig::kFeatureDoubleClick);
|
||||||
buttonConfig->setFeature(ButtonConfig::kFeatureLongPress);
|
// buttonConfig->setFeature(ButtonConfig::kFeatureLongPress);
|
||||||
// buttonConfig->clearFeature(ButtonConfig::kFeatureRepeatPress);
|
// // buttonConfig->clearFeature(ButtonConfig::kFeatureRepeatPress);
|
||||||
buttonConfig->clearFeature(
|
// buttonConfig->clearFeature(
|
||||||
ButtonConfig::kFeatureSuppressClickBeforeDoubleClick); // Causes annoying pauses
|
// ButtonConfig::kFeatureSuppressClickBeforeDoubleClick); // Causes annoying pauses
|
||||||
buttonConfig->setFeature(ButtonConfig::kFeatureSuppressAfterClick);
|
// buttonConfig->setFeature(ButtonConfig::kFeatureSuppressAfterClick);
|
||||||
|
|
||||||
LOG_INFO(TAG_GPIO, F("Button%d created on pin %d (index %d) mode %d default %d"), i, pin, index,
|
LOG_INFO(TAG_GPIO, F("Button%d created on pin %d (index %d) mode %d default %d"), i, pin, index,
|
||||||
input_mode, default_state);
|
input_mode, default_state);
|
||||||
@ -180,28 +192,32 @@ void gpioAddSwitch(uint8_t pin, uint8_t input_mode, uint8_t default_state, uint8
|
|||||||
LOG_TRACE(TAG_GPIO, F("Creating Switch%d on pin %d (index %d) mode %d default %d"), i, pin, index,
|
LOG_TRACE(TAG_GPIO, F("Creating Switch%d on pin %d (index %d) mode %d default %d"), i, pin, index,
|
||||||
input_mode, default_state);
|
input_mode, default_state);
|
||||||
|
|
||||||
button[i] = new AceButton(pin, default_state, index);
|
button[i] = new AceButton(&switchConfig, pin, default_state, index);
|
||||||
|
|
||||||
if(button[i]) {
|
if(button[i]) {
|
||||||
// pinMode(pin, input_mode);
|
// pinMode(pin, input_mode);
|
||||||
|
|
||||||
ButtonConfig* buttonConfig = button[i]->getButtonConfig();
|
LOG_INFO(TAG_GPIO, F("Switch%d on pin %d (index %d) mode %d default %d"), i, pin, index, input_mode,
|
||||||
buttonConfig->setEventHandler(gpio_event_handler);
|
default_state);
|
||||||
buttonConfig->setFeature(ButtonConfig::kFeatureSuppressAll);
|
|
||||||
|
|
||||||
LOG_INFO(TAG_GPIO, F("Button%d switch on pin %d (index %d) mode %d default %d"), i, pin, index,
|
|
||||||
input_mode, default_state);
|
|
||||||
gpioUsedInputCount = i + 1;
|
gpioUsedInputCount = i + 1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LOG_ERROR(TAG_GPIO, F("Failed to create Button%d pin %d (index %d). All %d slots available are in use!"), i, pin,
|
LOG_ERROR(TAG_GPIO, F("Failed to create Switch%d pin %d (index %d). All %d slots available are in use!"), i, pin,
|
||||||
index, HASP_NUM_INPUTS);
|
index, HASP_NUM_INPUTS);
|
||||||
}
|
}*/
|
||||||
|
|
||||||
void gpio_setup_pin(hasp_gpio_config_t* gpio)
|
// Can be called ad-hoc to change a setup
|
||||||
|
static void gpio_setup_pin(uint8_t index)
|
||||||
{
|
{
|
||||||
|
hasp_gpio_config_t* gpio = &gpioConfig[index];
|
||||||
|
|
||||||
|
if(gpioIsSystemPin(gpio->pin)) {
|
||||||
|
LOG_WARNING(TAG_GPIO, F("Invalid pin %d"), gpio->pin);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t input_mode;
|
uint8_t input_mode;
|
||||||
switch(gpio->gpio_function) {
|
switch(gpio->gpio_function) {
|
||||||
case OUTPUT:
|
case OUTPUT:
|
||||||
@ -219,22 +235,15 @@ void gpio_setup_pin(hasp_gpio_config_t* gpio)
|
|||||||
input_mode = INPUT_PULLUP;
|
input_mode = INPUT_PULLUP;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(gpioIsSystemPin(gpio->pin)) {
|
|
||||||
LOG_WARNING(TAG_GPIO, F("Invalid pin %d"), gpio->pin);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
gpio->max = 255;
|
gpio->max = 255;
|
||||||
|
ButtonConfig* config = &buttonConfig; // Ddefault pushbutton
|
||||||
|
|
||||||
switch(gpio->type) {
|
switch(gpio->type) {
|
||||||
case HASP_GPIO_SWITCH:
|
case HASP_GPIO_SWITCH:
|
||||||
gpioAddSwitch(gpio->pin, input_mode, HIGH, gpioUsedInputCount);
|
config = &switchConfig;
|
||||||
pinMode(gpio->pin, INPUT_PULLUP);
|
|
||||||
gpio->max = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case HASP_GPIO_BUTTON:
|
case HASP_GPIO_BUTTON:
|
||||||
gpioAddButton(gpio->pin, input_mode, HIGH, gpioUsedInputCount);
|
if(gpio->btn) delete gpio->btn;
|
||||||
|
gpio->btn = new AceButton(config, gpio->pin, HIGH, index);
|
||||||
pinMode(gpio->pin, INPUT_PULLUP);
|
pinMode(gpio->pin, INPUT_PULLUP);
|
||||||
gpio->max = 0;
|
gpio->max = 0;
|
||||||
break;
|
break;
|
||||||
@ -270,7 +279,8 @@ void gpio_setup_pin(hasp_gpio_config_t* gpio)
|
|||||||
case HASP_GPIO_SERIAL_DIMMER: {
|
case HASP_GPIO_SERIAL_DIMMER: {
|
||||||
const char command[9] = "\xEF\x01\x4D\xA3"; // Start Lanbon Dimmer
|
const char command[9] = "\xEF\x01\x4D\xA3"; // Start Lanbon Dimmer
|
||||||
#if defined(ARDUINO_ARCH_ESP32)
|
#if defined(ARDUINO_ARCH_ESP32)
|
||||||
Serial1.begin(115200UL, SERIAL_8N1, UART_PIN_NO_CHANGE, gpio->pin, true, 2000);
|
Serial1.begin(115200UL, SERIAL_8N1, UART_PIN_NO_CHANGE, gpio->pin, true,
|
||||||
|
2000); // true = EU, false = AU
|
||||||
Serial1.flush();
|
Serial1.flush();
|
||||||
delay(20);
|
delay(20);
|
||||||
Serial1.print(" ");
|
Serial1.print(" ");
|
||||||
@ -328,7 +338,7 @@ void gpioSetup()
|
|||||||
aceButtonSetup();
|
aceButtonSetup();
|
||||||
|
|
||||||
for(uint8_t i = 0; i < HASP_NUM_GPIO_CONFIG; i++) {
|
for(uint8_t i = 0; i < HASP_NUM_GPIO_CONFIG; i++) {
|
||||||
gpio_setup_pin(&gpioConfig[i]);
|
gpio_setup_pin(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_INFO(TAG_GPIO, F(D_SERVICE_STARTED));
|
LOG_INFO(TAG_GPIO, F(D_SERVICE_STARTED));
|
||||||
@ -337,12 +347,13 @@ void gpioSetup()
|
|||||||
IRAM_ATTR void gpioLoop(void)
|
IRAM_ATTR void gpioLoop(void)
|
||||||
{
|
{
|
||||||
// Should be called every 4-5ms or faster, for the default debouncing time of ~20ms.
|
// Should be called every 4-5ms or faster, for the default debouncing time of ~20ms.
|
||||||
for(uint8_t i = 0; i < gpioUsedInputCount; i++) {
|
for(uint8_t i = 0; i < HASP_NUM_GPIO_CONFIG; i++) {
|
||||||
if(button[i]) button[i]->check();
|
if(gpioConfig[i].btn) gpioConfig[i].btn->check();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
void gpioSetup(void)
|
void gpioSetup(void)
|
||||||
{
|
{
|
||||||
gpioSavePinConfig(0, 3, HASP_GPIO_RELAY, 0, -1);
|
gpioSavePinConfig(0, 3, HASP_GPIO_RELAY, 0, -1);
|
||||||
@ -352,6 +363,7 @@ void gpioSetup(void)
|
|||||||
}
|
}
|
||||||
IRAM_ATTR void gpioLoop(void)
|
IRAM_ATTR void gpioLoop(void)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
#endif // ARDUINO
|
#endif // ARDUINO
|
||||||
|
|
||||||
/* ********************************* State Setters *************************************** */
|
/* ********************************* State Setters *************************************** */
|
||||||
|
@ -6,6 +6,11 @@
|
|||||||
|
|
||||||
#include "hasplib.h"
|
#include "hasplib.h"
|
||||||
|
|
||||||
|
#ifdef ARDUINO
|
||||||
|
#include "AceButton.h"
|
||||||
|
using namespace ace_button;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
@ -20,6 +25,9 @@ struct hasp_gpio_config_t
|
|||||||
uint8_t type; // switch, button, ...
|
uint8_t type; // switch, button, ...
|
||||||
uint16_t val;
|
uint16_t val;
|
||||||
uint16_t max;
|
uint16_t max;
|
||||||
|
#ifdef ARDUINO
|
||||||
|
AceButton* btn;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
void gpioSetup(void);
|
void gpioSetup(void);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user