Dont use Cladd constants to optimize memory

This commit is contained in:
fvanroie 2020-03-29 03:12:38 +02:00
parent 95a7ed74e1
commit 0d34efbd89

View File

@ -5,13 +5,40 @@
#include "hasp_conf.h"
#include "lv_conf.h"
#include "hasp_mqtt.h" // testing memory consumption
#include "hasp_button.h"
#include "hasp_dispatch.h"
using namespace ace_button;
AceButton * button[HASP_NUM_INPUTS]; // Connect your button between pin 2 and GND
static AceButton * button[HASP_NUM_INPUTS]; // Connect your button between pin 2 and GND
void handleEvent(AceButton *, uint8_t, uint8_t);
static void IRAM_ATTR button_event_cb(AceButton * button, uint8_t eventType, uint8_t buttonState)
{
char buffer[8];
switch(eventType) {
case 0: // AceButton::kEventPressed:
memcpy_P(buffer, PSTR("DOWN"), sizeof(buffer));
break;
case 2: // AceButton::kEventClicked:
memcpy_P(buffer, PSTR("SHORT"), sizeof(buffer));
break;
// case AceButton::kEventDoubleClicked:
// memcpy_P(buffer, PSTR("DOUBLE"), sizeof(buffer));
// break;
case 4: // AceButton::kEventLongPressed:
memcpy_P(buffer, PSTR("LONG"), sizeof(buffer));
break;
case 5: // AceButton::kEventRepeatPressed:
return; // Fix needed for switches
memcpy_P(buffer, PSTR("HOLD"), sizeof(buffer));
break;
case 1: // AceButton::kEventReleased:
memcpy_P(buffer, PSTR("UP"), sizeof(buffer));
break;
}
// dispatch_button(button->getId(), buffer);
mqtt_send_input(button->getId(), buffer);
}
void buttonSetup(void)
{
@ -19,8 +46,10 @@ void buttonSetup(void)
button[1] = new AceButton(3, HIGH, 1);
button[2] = new AceButton(4, HIGH, 2);
Log.verbose(F("BTNS: setup(): ready"));
ButtonConfig * buttonConfig = ButtonConfig::getSystemButtonConfig();
buttonConfig->setEventHandler(handleEvent);
buttonConfig->setEventHandler(button_event_cb);
// Features
buttonConfig->setFeature(ButtonConfig::kFeatureClick);
@ -35,50 +64,13 @@ void buttonSetup(void)
buttonConfig->setLongPressDelay(LV_INDEV_DEF_LONG_PRESS_TIME);
buttonConfig->setRepeatPressDelay(LV_INDEV_DEF_LONG_PRESS_TIME);
buttonConfig->setRepeatPressInterval(LV_INDEV_DEF_LONG_PRESS_REP_TIME);
Log.verbose(F("BTNS: setup(): ready"));
}
void buttonLoop(void)
void IRAM_ATTR buttonLoop(void)
{
// Should be called every 4-5ms or faster, for the default debouncing time
// of ~20ms.
for(uint8_t i = 0; i < (sizeof button / sizeof *button); i++) {
for(uint8_t i = 0; i < HASP_NUM_INPUTS; i++) {
if(button[i]) button[i]->check();
}
}
// The event handler for the button.
void handleEvent(AceButton * button, uint8_t eventType, uint8_t buttonState)
{
char buffer[128];
// Print out a message for all events.
/* Serial.print(F("handleEvent(): eventType: "));
Serial.print(eventType);
Serial.print(F("; buttonState: "));
Serial.println(buttonState); */
switch(eventType) {
case AceButton::kEventPressed:
memcpy_P(buffer, PSTR("DOWN"), sizeof(buffer));
break;
case AceButton::kEventClicked:
memcpy_P(buffer, PSTR("SHORT"), sizeof(buffer));
break;
case AceButton::kEventDoubleClicked:
memcpy_P(buffer, PSTR("DOUBLE"), sizeof(buffer));
break;
case AceButton::kEventLongPressed:
memcpy_P(buffer, PSTR("LONG"), sizeof(buffer));
break;
case AceButton::kEventRepeatPressed:
memcpy_P(buffer, PSTR("HOLD"), sizeof(buffer));
break;
case AceButton::kEventReleased:
memcpy_P(buffer, PSTR("UP"), sizeof(buffer));
break;
}
dispatchButton(button->getId(), buffer);
}