From 33aaa68f74283af4058d25b04a39910b33c852e2 Mon Sep 17 00:00:00 2001 From: fvanroie <15969459+fvanroie@users.noreply.github.com> Date: Wed, 17 Mar 2021 19:53:17 +0100 Subject: [PATCH] Change normalized functions to use val, min & max --- src/hasp/hasp_dispatch.cpp | 8 ++++---- src/hasp/hasp_dispatch.h | 2 +- src/sys/gpio/hasp_gpio.cpp | 40 ++++++++++++++++++++++++-------------- src/sys/gpio/hasp_gpio.h | 2 +- 4 files changed, 31 insertions(+), 21 deletions(-) diff --git a/src/hasp/hasp_dispatch.cpp b/src/hasp/hasp_dispatch.cpp index aa409c3e..41430165 100644 --- a/src/hasp/hasp_dispatch.cpp +++ b/src/hasp/hasp_dispatch.cpp @@ -251,7 +251,7 @@ void dispatch_command(const char* topic, const char* payload) if(strlen(topic) == 7 && topic == strstr_P(topic, PSTR("output"))) { int16_t state = atoi(payload); - dispatch_normalized_group_value(atoi(topic + 6), state, NULL); // + 6 => trim 'output' from the topic + dispatch_normalized_group_value(atoi(topic + 6), NULL, state, 0, 1); // + 6 => trim 'output' from the topic // } else if(strcasecmp_P(topic, PSTR("screenshot")) == 0) { // guiTakeScreenshot("/screenshot.bmp"); // Literal String @@ -684,12 +684,12 @@ static inline void dispatch_state_msg(const __FlashStringHelper* subtopic, const // // dispatch_output_group_state(groupid, payload); // } -void dispatch_normalized_group_value(uint8_t groupid, uint16_t value, lv_obj_t* obj) +void dispatch_normalized_group_value(uint8_t groupid, lv_obj_t* obj, int16_t val, int16_t min, int16_t max) { if(groupid > 0) { - LOG_VERBOSE(TAG_MSGR, F("GROUP %d value %d"), groupid, value); + LOG_VERBOSE(TAG_MSGR, F("GROUP %d value %d (%d-%d)"), groupid, val, min, max); #if HASP_USE_GPIO > 0 - gpio_set_normalized_group_value(groupid, value); + gpio_set_normalized_group_value(groupid, val, min, max); #endif // object_set_group_state(groupid, value, obj); } diff --git a/src/hasp/hasp_dispatch.h b/src/hasp/hasp_dispatch.h index 2a9e44ee..83288ca9 100644 --- a/src/hasp/hasp_dispatch.h +++ b/src/hasp/hasp_dispatch.h @@ -66,7 +66,7 @@ bool dispatch_get_event_state(uint8_t eventid); void dispatch_get_event_name(uint8_t eventid, char* buffer, size_t size); void dispatch_object_value_changed(lv_obj_t* obj, int16_t state); -void dispatch_normalized_group_value(uint8_t groupid, uint16_t value, lv_obj_t* obj); +void dispatch_normalized_group_value(uint8_t groupid, lv_obj_t* obj, int16_t val, int16_t min, int16_t max); void dispatch_send_obj_attribute_str(uint8_t pageid, uint8_t btnid, const char* attribute, const char* data); void dispatch_send_obj_attribute_int(uint8_t pageid, uint8_t btnid, const char* attribute, int32_t val); diff --git a/src/sys/gpio/hasp_gpio.cpp b/src/sys/gpio/hasp_gpio.cpp index b4be2746..d2575f43 100644 --- a/src/sys/gpio/hasp_gpio.cpp +++ b/src/sys/gpio/hasp_gpio.cpp @@ -90,7 +90,7 @@ static void gpio_event_handler(AceButton* button, uint8_t eventType, uint8_t but dispatch_gpio_input_event(gpioConfig[btnid].pin, gpioConfig[btnid].group, eventid); if(eventid != HASP_EVENT_LONG) // do not repeat DOWN + LONG - dispatch_normalized_group_value(gpioConfig[btnid].group, NORMALIZE(state, 0, 1), NULL); + dispatch_normalized_group_value(gpioConfig[btnid].group, NULL, state, HASP_EVENT_OFF, HASP_EVENT_ON); } void aceButtonSetup(void) @@ -279,15 +279,20 @@ void gpioSetup() } /* ********************************* State Setters *************************************** */ -void gpio_set_normalized_value(hasp_gpio_config_t gpio, uint16_t state) +void gpio_set_normalized_value(hasp_gpio_config_t gpio, int16_t val, int16_t min, int16_t max) { + if(min == max) { + LOG_ERROR(TAG_GPIO, F("Invalid value range")); + return; + } + switch(gpio.type) { case HASP_GPIO_RELAY: - gpio.val = state >= 0x8000U ? HIGH : LOW; + gpio.val = map(val, min, max, 0, 1) ? HIGH : LOW; digitalWrite(gpio.pin, gpio.val); break; case HASP_GPIO_RELAY_INVERTED: - gpio.val = state >= 0x8000U ? LOW : HIGH; + gpio.val = map(val, min, max, 0, 1) ? LOW : HIGH; digitalWrite(gpio.pin, gpio.val); break; case HASP_GPIO_LED: @@ -295,19 +300,19 @@ void gpio_set_normalized_value(hasp_gpio_config_t gpio, uint16_t state) case HASP_GPIO_LED_G: case HASP_GPIO_LED_B: #if defined(ARDUINO_ARCH_ESP32) - gpio.val = map(state, 0, 0xFFFFU, 0, 4095); + gpio.val = map(val, min, max, 0, 4095); ledcWrite(gpio.group, gpio.val); // ledChannel and value #else - gpio.val = map(state, 0, 0xFFFFU, 0, 1023); + gpio.val = map(val, min, max, 0, 1023); analogWrite(gpio.pin, gpio.val); #endif break; case HASP_GPIO_PWM: #if defined(ARDUINO_ARCH_ESP32) - gpio.val = map(state, 0, 0xFFFFU, 0, 4095); + gpio.val = map(val, min, max, 0, 4095); ledcWrite(gpio.group, gpio.val); // ledChannel and value #else - gpio.val = map(state, 0, 0xFFFFU, 0, 1023); + gpio.val = map(val, min, max, 0, 1023); analogWrite(gpio.pin, gpio.val); #endif break; @@ -317,10 +322,10 @@ void gpio_set_normalized_value(hasp_gpio_config_t gpio, uint16_t state) case HASP_GPIO_LED_B_INVERTED: case HASP_GPIO_PWM_INVERTED: #if defined(ARDUINO_ARCH_ESP32) - gpio.val = map(0xFFFFU - state, 0, 0xFFFFU, 0, 4095); + gpio.val = map(val, min, max, 0, 4095); ledcWrite(gpio.group, gpio.val); // ledChannel and value #else - gpio.val = map(0xFFFFU - state, 0, 0xFFFFU, 0, 1023); + gpio.val = map(val, min, max, 0, 1023); analogWrite(gpio.pin, gpio.val); #endif break; @@ -340,12 +345,17 @@ void gpio_set_normalized_value(hasp_gpio_config_t gpio, uint16_t state) // } // } -void gpio_set_normalized_group_value(uint8_t groupid, uint16_t state) +void gpio_set_normalized_group_value(uint8_t groupid, int16_t val, int16_t min, int16_t max) { + if(min == max) { + LOG_ERROR(TAG_GPIO, F("Invalid value range")); + return; + } + // bool state = dispatch_get_event_state(eventid); for(uint8_t i = 0; i < HASP_NUM_GPIO_CONFIG; i++) { if(gpioConfig[i].group == groupid) { - gpio_set_normalized_value(gpioConfig[i], state); + gpio_set_normalized_value(gpioConfig[i], val, min, max); } } } @@ -359,15 +369,15 @@ void gpio_set_moodlight(uint8_t r, uint8_t g, uint8_t b) switch(gpioConfig[i].type) { case HASP_GPIO_LED_R: case HASP_GPIO_LED_R_INVERTED: - gpio_set_normalized_value(gpioConfig[i], map(r, 0, 0xFF, 0, max_level)); + gpio_set_normalized_value(gpioConfig[i], r, 0, 0xFF); break; case HASP_GPIO_LED_G: case HASP_GPIO_LED_G_INVERTED: - gpio_set_normalized_value(gpioConfig[i], map(g, 0, 0xFF, 0, max_level)); + gpio_set_normalized_value(gpioConfig[i], g, 0, 0xFF); break; case HASP_GPIO_LED_B: case HASP_GPIO_LED_B_INVERTED: - gpio_set_normalized_value(gpioConfig[i], map(b, 0, 0xFF, 0, max_level)); + gpio_set_normalized_value(gpioConfig[i], b, 0, 0xFF); break; } } diff --git a/src/sys/gpio/hasp_gpio.h b/src/sys/gpio/hasp_gpio.h index 1419e1b5..a19674e0 100644 --- a/src/sys/gpio/hasp_gpio.h +++ b/src/sys/gpio/hasp_gpio.h @@ -24,7 +24,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, uint16_t state); +void gpio_set_normalized_group_value(uint8_t groupid, int16_t val, int16_t min, int16_t max); // void gpio_set_gpio_state(uint8_t pin, uint16_t state); void gpio_set_moodlight(uint8_t r, uint8_t g, uint8_t b);