Change normalized functions to use val, min & max

This commit is contained in:
fvanroie 2021-03-17 19:53:17 +01:00
parent b8bbf0c642
commit 33aaa68f74
4 changed files with 31 additions and 21 deletions

View File

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

View File

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

View File

@ -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;
}
}

View File

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