diff --git a/src/sys/gpio/hasp_gpio.h b/src/sys/gpio/hasp_gpio.h
index fc823c8b..2174fb61 100644
--- a/src/sys/gpio/hasp_gpio.h
+++ b/src/sys/gpio/hasp_gpio.h
@@ -18,6 +18,7 @@ struct hasp_gpio_config_t
uint8_t gpio_function; // INPUT, OUTPUT, PULLUP, etc
uint16_t val;
uint16_t max;
+ bool inverted;
};
void gpioSetup(void);
@@ -25,7 +26,7 @@ void gpioLoop(void);
void gpioEvery5Seconds(void);
// void gpio_set_group_onoff(uint8_t groupid, bool ison);
-void gpio_set_normalized_group_value(uint8_t groupid, int16_t val, int16_t min, int16_t max);
+void gpio_set_normalized_group_values(uint8_t group, int32_t val, int32_t min, int32_t max);
// void gpio_set_gpio_state(uint8_t pin, uint16_t state);
bool gpio_get_value(uint8_t pin, uint16_t& val);
bool gpio_set_pin_value(uint8_t pin, int32_t val);
@@ -48,44 +49,45 @@ bool gpioSetConfig(const JsonObject& settings);
#define HASP_GPIO_FREE 0x00
#define HASP_GPIO_USED 0x01
#define HASP_GPIO_SWITCH 0x02 // User Inputs
-#define HASP_GPIO_SWITCH_INVERTED 0x03
+// #define HASP_GPIO_SWITCH_INVERTED 0x03
#define HASP_GPIO_BUTTON 0x04
-#define HASP_GPIO_BUTTON_INVERTED 0x05
+// #define HASP_GPIO_BUTTON_INVERTED 0x05
#define HASP_GPIO_TOUCH 0x06
-#define HASP_GPIO_TOUCH_INVERTED 0x07
+// #define HASP_GPIO_TOUCH_INVERTED 0x07
#define HASP_GPIO_COUNTER_RISE 0x10 // User Counters
-#define HASP_GPIO_COUNTER_RISE_INVERTED 0x11
+// #define HASP_GPIO_COUNTER_RISE_INVERTED 0x11
#define HASP_GPIO_COUNTER_FALL 0x12
-#define HASP_GPIO_COUNTER_FALL_INVERTED 0x13
+// #define HASP_GPIO_COUNTER_FALL_INVERTED 0x13
#define HASP_GPIO_COUNTER_BOTH 0x14
-#define HASP_GPIO_COUNTER_BOTH_INVERTED 0x15
+// #define HASP_GPIO_COUNTER_BOTH_INVERTED 0x15
#define HASP_GPIO_RELAY 0x20 // User Outputs
-#define HASP_GPIO_RELAY_INVERTED 0x21
+// #define HASP_GPIO_RELAY_INVERTED 0x21
+#define HASP_GPIO_ALL_LEDS 0x22 ... 0x2F
#define HASP_GPIO_LED 0x22
-#define HASP_GPIO_LED_INVERTED 0x23
+// #define HASP_GPIO_LED_INVERTED 0x23
#define HASP_GPIO_LED_R 0x24
-#define HASP_GPIO_LED_R_INVERTED 0x25
+// #define HASP_GPIO_LED_R_INVERTED 0x25
#define HASP_GPIO_LED_G 0x26
-#define HASP_GPIO_LED_G_INVERTED 0x27
+// #define HASP_GPIO_LED_G_INVERTED 0x27
#define HASP_GPIO_LED_B 0x28
-#define HASP_GPIO_LED_B_INVERTED 0x29
+// #define HASP_GPIO_LED_B_INVERTED 0x29
#define HASP_GPIO_LED_W 0x2A
-#define HASP_GPIO_LED_W_INVERTED 0x2B
+// #define HASP_GPIO_LED_W_INVERTED 0x2B
#define HASP_GPIO_LED_WW 0x2C
-#define HASP_GPIO_LED_WW_INVERTED 0x2D
+// #define HASP_GPIO_LED_WW_INVERTED 0x2D
#define HASP_GPIO_LED_CW 0x2E
-#define HASP_GPIO_LED_CW_INVERTED 0x2F
-#define HASP_GPIO_BUZZER 0x30
-#define HASP_GPIO_BUZZER_INVERTED 0x31
-#define HASP_GPIO_HAPTIC 0x32
-#define HASP_GPIO_HAPTIC_INVERTED 0x33
+// #define HASP_GPIO_LED_CW_INVERTED 0x2F
#define HASP_GPIO_PWM 0x40
-#define HASP_GPIO_PWM_INVERTED 0x41
+// #define HASP_GPIO_PWM_INVERTED 0x41
#define HASP_GPIO_DAC 0x50
-#define HASP_GPIO_DAC_INVERTED 0x51
+// #define HASP_GPIO_DAC_INVERTED 0x51
#define HASP_GPIO_ADC 0x52
-#define HASP_GPIO_ADC_INVERTED 0x53
+// #define HASP_GPIO_ADC_INVERTED 0x53
#define HASP_GPIO_SERIAL_DIMMER 0x60
+#define HASP_GPIO_BUZZER 0x70
+// #define HASP_GPIO_BUZZER_INVERTED 0x71
+#define HASP_GPIO_HAPTIC 0x72
+// #define HASP_GPIO_HAPTIC_INVERTED 0x73
#define HASP_GPIO_USER 0xFF
#ifdef __cplusplus
diff --git a/src/sys/svc/hasp_http.cpp b/src/sys/svc/hasp_http.cpp
index 18ef3e23..f6da2ad6 100644
--- a/src/sys/svc/hasp_http.cpp
+++ b/src/sys/svc/hasp_http.cpp
@@ -1547,31 +1547,25 @@ void webHandleGpioConfig()
httpMessage += haspDevice.gpio_name(gpio).c_str();
httpMessage += F("
");
- switch(conf.type & 0xfe) {
+ switch(conf.type) {
case HASP_GPIO_SWITCH:
- // case HASP_GPIO_SWITCH_INVERTED:
httpMessage += F("Switch");
break;
case HASP_GPIO_BUTTON:
- // case HASP_GPIO_BUTTON_INVERTED:
httpMessage += F("Button");
break;
case HASP_GPIO_LED:
- // case HASP_GPIO_LED_INVERTED:
httpMessage += F("Led");
break;
case HASP_GPIO_LED_R:
case HASP_GPIO_LED_G:
case HASP_GPIO_LED_B:
- // case HASP_GPIO_LED_INVERTED:
httpMessage += F("Mood ");
break;
case HASP_GPIO_RELAY:
- // case HASP_GPIO_RELAY_INVERTED:
httpMessage += F("Relay");
break;
case HASP_GPIO_PWM:
- // case HASP_GPIO_PWM_INVERTED:
httpMessage += F("PWM");
break;
case HASP_GPIO_SERIAL_DIMMER:
@@ -1581,7 +1575,7 @@ void webHandleGpioConfig()
httpMessage += F("Unknown");
}
- switch(conf.type & 0xfe) {
+ switch(conf.type) {
case HASP_GPIO_LED_R:
httpMessage += F("Red");
break;
@@ -1596,7 +1590,7 @@ void webHandleGpioConfig()
httpMessage += F(" | ");
httpMessage += conf.group;
httpMessage += F(" | ");
- httpMessage += (conf.type & 0x1) ? F("High") : F("Low");
+ httpMessage += (conf.inverted) ? F("Inverted") : F("Normal");
httpMessage += F(" | ");
- // httpMessage += getOption(HASP_GPIO_FREE, F("Unused"), false);
- selected = (conf.type == HASP_GPIO_SWITCH) || (conf.type == HASP_GPIO_SWITCH_INVERTED);
+ selected = (conf.type == HASP_GPIO_SWITCH);
httpMessage += getOption(HASP_GPIO_SWITCH, F("Switch"), selected);
- selected = (conf.type == HASP_GPIO_BUTTON) || (conf.type == HASP_GPIO_BUTTON_INVERTED);
+ selected = (conf.type == HASP_GPIO_BUTTON);
httpMessage += getOption(HASP_GPIO_BUTTON, F("Button"), selected);
- selected = (conf.type == HASP_GPIO_LED) || (conf.type == HASP_GPIO_LED_INVERTED);
+ selected = (conf.type == HASP_GPIO_LED);
httpMessage += getOption(HASP_GPIO_LED, F("Led"), selected);
- selected = (conf.type == HASP_GPIO_LED_R) || (conf.type == HASP_GPIO_LED_R_INVERTED);
+ selected = (conf.type == HASP_GPIO_LED_R);
httpMessage += getOption(HASP_GPIO_LED_R, F("Mood Red"), selected);
- selected = (conf.type == HASP_GPIO_LED_G) || (conf.type == HASP_GPIO_LED_G_INVERTED);
+ selected = (conf.type == HASP_GPIO_LED_G);
httpMessage += getOption(HASP_GPIO_LED_G, F("Mood Green"), selected);
- selected = (conf.type == HASP_GPIO_LED_B) || (conf.type == HASP_GPIO_LED_B_INVERTED);
+ selected = (conf.type == HASP_GPIO_LED_B);
httpMessage += getOption(HASP_GPIO_LED_B, F("Mood Blue"), selected);
- selected = (conf.type == HASP_GPIO_RELAY) || (conf.type == HASP_GPIO_RELAY_INVERTED);
+ selected = (conf.type == HASP_GPIO_RELAY);
httpMessage += getOption(HASP_GPIO_RELAY, F("Relay"), selected);
+ selected = (conf.type == HASP_GPIO_RELAY);
+ httpMessage += getOption(HASP_GPIO_RELAY, F("DAC"), selected);
+
selected = (conf.type == HASP_GPIO_SERIAL_DIMMER);
httpMessage += getOption(HASP_GPIO_SERIAL_DIMMER, F("Serial Dimmer"), selected);
if(digitalPinHasPWM(webServer.arg(0).toInt())) {
- selected = (conf.type == HASP_GPIO_PWM) || (conf.type == HASP_GPIO_PWM_INVERTED);
+ selected = (conf.type == HASP_GPIO_PWM);
httpMessage += getOption(HASP_GPIO_PWM, F("PWM"), selected);
}
httpMessage += F("");
@@ -1713,11 +1709,8 @@ void webHandleGpioOptions()
httpMessage += F("");
httpMessage += F(" Default State ");
httpMessage +=
|