From 1f1c956b26a79511929dfa535b820c844010f2a5 Mon Sep 17 00:00:00 2001 From: Paul C Diem Date: Wed, 26 Feb 2020 21:27:09 -0600 Subject: [PATCH] Use newly allocated settings and flags --- tasmota/my_user_config.h | 4 +- tasmota/settings.h | 17 +-------- tasmota/xdrv_35_pwm_dimmer.ino | 68 +++++++++++++++++----------------- 3 files changed, 37 insertions(+), 52 deletions(-) diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index 0aedea795..0ae6d4663 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -415,9 +415,9 @@ //#define USE_EXS_DIMMER // Add support for ES-Store WiFi Dimmer (+1k5 code) // #define EXS_MCU_CMNDS // Add command to send MCU commands (+0k8 code) //#define USE_HOTPLUG // Add support for sensor HotPlug -//#define USE_DEVICE_GROUPS // Add support for device groups (+3k5 code) +#define USE_DEVICE_GROUPS // Add support for device groups (+3k5 code) #define USE_PWM_DIMMER // Add support for MJ-SD01/acenx/NTONPOWER PWM dimmers (+4k5 code) -//#define USE_PWM_DIMMER_REMOTE // Add support for remote switches to PWM Dimmer, also adds device groups support (+0k7 code, also includes device groups) +#define USE_PWM_DIMMER_REMOTE // Add support for remote switches to PWM Dimmer, also adds device groups support (+0k7 code, also includes device groups) // -- Optional light modules ---------------------- #define USE_WS2812 // WS2812 Led string using library NeoPixelBus (+5k code, +1k mem, 232 iram) - Disable by // diff --git a/tasmota/settings.h b/tasmota/settings.h index 13b4d03a1..da8da2f29 100644 --- a/tasmota/settings.h +++ b/tasmota/settings.h @@ -469,9 +469,8 @@ struct SYSCFG { uint8_t bri_min; // F05 uint8_t bri_preset_low; // F06 uint8_t bri_preset_high; // F07 - uint8_t button_devices; // F08 - uint8_t free_f05[195]; // F09 + uint8_t free_f05[196]; // F08 uint32_t device_group_share_in; // FCC - Bitmask of device group items imported uint32_t device_group_share_out; // FD0 - Bitmask of device group items exported @@ -579,18 +578,4 @@ typedef union { ADC_MODE(ADC_VCC); // Set ADC input for Power Supply Voltage usage #endif -// Settings re-purposed for the PWM_DIMMER module -#ifdef USE_PWM_DIMMER -#define led_timeout light_signal // SetOption18 - Turn brightness LED's off 5 seconds after last change -#define powered_off_led buzzer_enable // SetOption67 - Turn red LED on when powered off -#define bri_power_on pcf8574_config[0] // Brightness when next powered-on -#define bri_min pcf8574_config[1] // Minimum brightness -#define bri_preset_low pcf8574_config[2] // Bri preset low -#define bri_preset_high pcf8574_config[3] // Bri preset high -#define button_devices pcf8574_config[4] // Button-device map -#ifdef USE_PWM_DIMMER_REMOTE -#define remote_device_mode dds2382_model // SetOption71 - Buttons control remote devices -#endif // USE_PWM_DIMMER_REMOTE -#endif // USE_PWM_DIMMER - #endif // _SETTINGS_H_ diff --git a/tasmota/xdrv_35_pwm_dimmer.ino b/tasmota/xdrv_35_pwm_dimmer.ino index fca67efe6..94bc4ea38 100644 --- a/tasmota/xdrv_35_pwm_dimmer.ino +++ b/tasmota/xdrv_35_pwm_dimmer.ino @@ -48,10 +48,10 @@ void (* const PWMDimmerCommand[])(void) PROGMEM = { struct remote_pwm_dimmer { power_t power; uint8_t light_speed; - uint8_t x_bri_power_on; - uint8_t x_bri_min; - uint8_t x_bri_preset_low; - uint8_t x_bri_preset_high; + uint8_t bri_power_on; + uint8_t bri_min; + uint8_t bri_preset_low; + uint8_t bri_preset_high; uint8_t fixed_color_index; uint8_t bri; bool power_button_increases_bri; @@ -98,14 +98,14 @@ void PWMModuleInit() Settings.flag.pwm_control = 0; // Use basic PWM control instead of Light if (Settings.last_module != Settings.module) { - Settings.bri_min = 8; + Settings.bri_min = 25; Settings.bri_power_on = 50; - Settings.bri_preset_low = 8; + Settings.bri_preset_low = 25; Settings.bri_preset_high = 255; Settings.last_module = Settings.module; } else { - if (Settings.bri_min < 1) Settings.bri_min = 8; + if (Settings.bri_min < 1) Settings.bri_min = 25; PWMDimmerCheckBri(&Settings.bri_power_on); PWMDimmerCheckBri(&Settings.bri_preset_low); PWMDimmerCheckBri(&Settings.bri_preset_high); @@ -132,11 +132,11 @@ void PWMModuleInit() void PWMDimmerInit(void) { #ifdef USE_PWM_DIMMER_REMOTE - if (Settings.flag3.remote_device_mode) { + if (Settings.flag4.remote_device_mode) { if (device_group_count > 1) { if ((remote_pwm_dimmers = (struct remote_pwm_dimmer *) calloc(device_group_count - 1, sizeof(struct remote_pwm_dimmer))) == nullptr) { AddLog_P2(LOG_LEVEL_ERROR, PSTR("PWMDimmer: error allocating PWM dimmer array")); - Settings.flag3.remote_device_mode = false; + Settings.flag4.remote_device_mode = false; } } } @@ -166,7 +166,7 @@ void PWMDimmerSetBrightnessLeds(int32_t operation) } // If enabled, set the LED timeout. - if (!operation) led_timeout_time = (current_bri && Settings.flag.led_timeout ? millis() + 5000 : 0); + if (!operation) led_timeout_time = (current_bri && Settings.flag4.led_timeout ? millis() + 5000 : 0); } } @@ -174,7 +174,7 @@ void PWMDimmerSetPoweredOffLed(void) { // Set the powered-off LED state. if (pin[GPIO_LEDLNK] < 99) { - bool power_off_led_on = !power && Settings.flag3.powered_off_led; + bool power_off_led_on = !power && Settings.flag4.powered_off_led; if (ledlnk_inverted) power_off_led_on ^= 1; digitalWrite(pin[GPIO_LEDLNK], power_off_led_on); } @@ -370,7 +370,7 @@ void PWMDimmerHandleButton() // If there are no other buttons pressed right now and remote mode is enabled, make the device // associated with this button the device we're going to control. - if (buttons_pressed == 1 && Settings.flag3.remote_device_mode) { + if (buttons_pressed == 1 && Settings.flag4.remote_device_mode) { power_button_index = button_index; up_button_index = (button_index == 2 ? 1 : 2); down_button_index = (button_index ? 0 : 1); @@ -439,7 +439,7 @@ void PWMDimmerHandleButton() else { #ifdef USE_PWM_DIMMER_REMOTE if (!active_device_is_local) { - active_remote_pwm_dimmer->bri = active_remote_pwm_dimmer->x_bri_preset_low; + active_remote_pwm_dimmer->bri = active_remote_pwm_dimmer->bri_preset_low; active_remote_pwm_dimmer->power_button_increases_bri = true; } else { @@ -496,7 +496,7 @@ void PWMDimmerHandleButton() else { #ifdef USE_PWM_DIMMER_REMOTE if (!active_device_is_local) - active_remote_pwm_dimmer->bri = (down_button_is_held ? active_remote_pwm_dimmer->x_bri_preset_low : active_remote_pwm_dimmer->x_bri_preset_high); + active_remote_pwm_dimmer->bri = (down_button_is_held ? active_remote_pwm_dimmer->bri_preset_low : active_remote_pwm_dimmer->bri_preset_high); else #endif // USE_PWM_DIMMER_REMOTE target_bri = (down_button_is_held ? Settings.bri_preset_low : Settings.bri_preset_high); @@ -563,7 +563,7 @@ void PWMDimmerHandleButton() // Decrease/increase the minimum brightness. #ifdef USE_PWM_DIMMER_REMOTE if (!active_device_is_local) - uint8_value = active_remote_pwm_dimmer->x_bri_min; + uint8_value = active_remote_pwm_dimmer->bri_min; else #endif // USE_PWM_DIMMER_REMOTE uint8_value = Settings.bri_min; @@ -575,8 +575,8 @@ void PWMDimmerHandleButton() } #ifdef USE_PWM_DIMMER_REMOTE if (!active_device_is_local) { - active_remote_pwm_dimmer->x_bri_min = uint8_value; - if (active_remote_pwm_dimmer->x_bri_power_on < uint8_value) active_remote_pwm_dimmer->x_bri_power_on = uint8_value; + active_remote_pwm_dimmer->bri_min = uint8_value; + if (active_remote_pwm_dimmer->bri_power_on < uint8_value) active_remote_pwm_dimmer->bri_power_on = uint8_value; } else { #endif // USE_PWM_DIMMER_REMOTE @@ -618,8 +618,8 @@ void PWMDimmerHandleButton() // Decrease/increase the low brightness preset. #ifdef USE_PWM_DIMMER_REMOTE if (!active_device_is_local) { - uint8_value = active_remote_pwm_dimmer->x_bri_preset_low; - min_uint8_value =active_remote_pwm_dimmer->x_bri_min; + uint8_value = active_remote_pwm_dimmer->bri_preset_low; + min_uint8_value =active_remote_pwm_dimmer->bri_min; } else { #endif // USE_PWM_DIMMER_REMOTE @@ -636,7 +636,7 @@ void PWMDimmerHandleButton() } #ifdef USE_PWM_DIMMER_REMOTE if (!active_device_is_local) - active_remote_pwm_dimmer->x_bri_preset_low = uint8_value; + active_remote_pwm_dimmer->bri_preset_low = uint8_value; else #endif // USE_PWM_DIMMER_REMOTE Settings.bri_preset_low = uint8_value; @@ -647,7 +647,7 @@ void PWMDimmerHandleButton() // Decrease/increase the high brightness preset. #ifdef USE_PWM_DIMMER_REMOTE if (!active_device_is_local) - uint8_value = active_remote_pwm_dimmer->x_bri_preset_high; + uint8_value = active_remote_pwm_dimmer->bri_preset_high; else #endif // USE_PWM_DIMMER_REMOTE uint8_value = Settings.bri_preset_high; @@ -659,7 +659,7 @@ void PWMDimmerHandleButton() } #ifdef USE_PWM_DIMMER_REMOTE if (!active_device_is_local) - active_remote_pwm_dimmer->x_bri_preset_high = uint8_value; + active_remote_pwm_dimmer->bri_preset_high = uint8_value; else #endif // USE_PWM_DIMMER_REMOTE Settings.bri_preset_high = uint8_value; @@ -714,7 +714,7 @@ void PWMDimmerHandleButton() #endif // USE_DEVICE_GROUPS #ifdef USE_PWM_DIMMER_REMOTE if (!active_device_is_local) - active_remote_pwm_dimmer->x_bri_power_on = active_remote_pwm_dimmer->bri = new_bri; + active_remote_pwm_dimmer->bri_power_on = active_remote_pwm_dimmer->bri = new_bri; else { #endif // USE_PWM_DIMMER_REMOTE Settings.bri_power_on = target_bri = new_bri; @@ -772,7 +772,7 @@ void PWMDimmerHandleButton() #ifdef USE_PWM_DIMMER_REMOTE if (active_device_is_local) { #endif // USE_PWM_DIMMER_REMOTE - Settings.flag3.powered_off_led ^= 1; + Settings.flag4.powered_off_led ^= 1; PWMDimmerSetPoweredOffLed(); #ifdef USE_PWM_DIMMER_REMOTE } @@ -803,8 +803,8 @@ void PWMDimmerHandleButton() #ifdef USE_PWM_DIMMER_REMOTE if (active_device_is_local) { #endif // USE_PWM_DIMMER_REMOTE - Settings.flag.led_timeout ^= 1; - if (relay_is_on) PWMDimmerSetBrightnessLeds(Settings.flag.led_timeout ? -1 : 0); + Settings.flag4.led_timeout ^= 1; + if (relay_is_on) PWMDimmerSetBrightnessLeds(Settings.flag4.led_timeout ? -1 : 0); #ifdef USE_PWM_DIMMER_REMOTE } #endif // USE_PWM_DIMMER_REMOTE @@ -818,7 +818,7 @@ void PWMDimmerHandleButton() else { #ifdef USE_PWM_DIMMER_REMOTE if (!active_device_is_local) - active_remote_pwm_dimmer->bri = active_remote_pwm_dimmer->x_bri_power_on; + active_remote_pwm_dimmer->bri = active_remote_pwm_dimmer->bri_power_on; else #endif // USE_PWM_DIMMER_REMOTE target_bri = Settings.bri_power_on; @@ -1021,14 +1021,14 @@ void CmndLedTimeout(void) switch (XdrvMailbox.payload) { case 0: // Off case 1: // On - Settings.flag.led_timeout = XdrvMailbox.payload; + Settings.flag4.led_timeout = XdrvMailbox.payload; break; case 2: // Toggle - Settings.flag.led_timeout ^= 1; + Settings.flag4.led_timeout ^= 1; break; } if (relay_is_on) PWMDimmerSetBrightnessLeds(0); - ResponseCmndStateText(Settings.flag.led_timeout); + ResponseCmndStateText(Settings.flag4.led_timeout); } void CmndPoweredOffLed(void) @@ -1037,14 +1037,14 @@ void CmndPoweredOffLed(void) switch (XdrvMailbox.payload) { case 0: // Off case 1: // On - Settings.flag3.powered_off_led = XdrvMailbox.payload; + Settings.flag4.powered_off_led = XdrvMailbox.payload; break; case 2: // Toggle - Settings.flag3.powered_off_led ^= 1; + Settings.flag4.powered_off_led ^= 1; break; } PWMDimmerSetPoweredOffLed(); - ResponseCmndStateText(Settings.flag3.powered_off_led); + ResponseCmndStateText(Settings.flag4.powered_off_led); } /*********************************************************************************************\ @@ -1118,7 +1118,7 @@ bool Xdrv35(uint8_t function) #ifdef USE_PWM_DIMMER_REMOTE // If remote device mode is enabled, set the device group count to the number of buttons // present. - if (Settings.flag3.remote_device_mode) { + if (Settings.flag4.remote_device_mode) { for (uint32_t button_index = 0; button_index < MAX_KEYS; button_index++) { if (pin[GPIO_KEY1 + button_index] < 99) device_group_count++; }