Merge pull request #9452 from pcdiem/pwm2

Add PWMDimmerPWMs command, Set brightness LEDs in setBriRGB & setBriCT
This commit is contained in:
Theo Arends 2020-10-03 15:08:48 +02:00 committed by GitHub
commit 006859093f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 48 additions and 6 deletions

View File

@ -616,6 +616,7 @@
// Commands xdrv_34_pwm_dimmer.ino
#ifdef USE_PWM_DIMMER
#define D_CMND_BRI_PRESET "BriPreset"
#define D_CMND_PWM_DIMMER_PWMS "PWMDimmerPWMs"
#endif
// Commands xdrv_38_ping.ino

View File

@ -277,6 +277,18 @@ typedef union {
};
} SensorCfg1;
typedef union {
uint8_t data;
struct {
uint8_t pwm_count : 3; // Number of PWMs to use for light
uint8_t spare3 : 1;
uint8_t spare4 : 1;
uint8_t spare5 : 1;
uint8_t spare6 : 1;
uint8_t spare7 : 1;
};
} PWMDimmerCfg;
typedef union {
uint8_t data;
struct {
@ -589,7 +601,7 @@ struct {
uint8_t sps30_inuse_hours; // F02
uint8_t hotplug_scan; // F03
uint8_t bri_power_on; // F04
uint8_t bri_min; // F05
PWMDimmerCfg pwm_dimmer_cfg; // F05
uint8_t bri_preset_low; // F06
uint8_t bri_preset_high; // F07
int8_t hum_comp; // F08

View File

@ -564,9 +564,6 @@ class LightStateClass {
#ifdef DEBUG_LIGHT
AddLog_P2(LOG_LEVEL_DEBUG_MORE, "LightStateClass::setBri RGB raw (%d %d %d) HS (%d %d) bri (%d)", _r, _g, _b, _hue, _sat, _briRGB);
#endif
#ifdef USE_PWM_DIMMER
if (PWM_DIMMER == my_module_type) PWMDimmerSetBrightnessLeds(0);
#endif // USE_PWM_DIMMER
}
// changes the RGB brightness alone
@ -574,6 +571,9 @@ class LightStateClass {
uint8_t prev_bri = _briRGB;
_briRGB = bri_rgb;
if (bri_rgb > 0) { addRGBMode(); }
#ifdef USE_PWM_DIMMER
if (PWM_DIMMER == my_module_type) PWMDimmerSetBrightnessLeds(0);
#endif // USE_PWM_DIMMER
return prev_bri;
}
@ -582,6 +582,9 @@ class LightStateClass {
uint8_t prev_bri = _briCT;
_briCT = bri_ct;
if (bri_ct > 0) { addCTMode(); }
#ifdef USE_PWM_DIMMER
if (PWM_DIMMER == my_module_type) PWMDimmerSetBrightnessLeds(0);
#endif // USE_PWM_DIMMER
return prev_bri;
}
@ -1275,6 +1278,13 @@ bool LightModuleInit(void)
light_type = LT_PWM2;
}
#endif // ESP8266
#ifdef USE_PWM_DIMMER
#ifdef USE_DEVICE_GROUPS
else if (PWM_DIMMER == my_module_type) {
light_type = Settings.pwm_dimmer_cfg.pwm_count + 1;
}
#endif // USE_DEVICE_GROUPS
#endif // USE_PWM_DIMMER
if (light_type > LT_BASIC) {
devices_present++;

View File

@ -33,10 +33,18 @@
#define XDRV_35 35
const char kPWMDimmerCommands[] PROGMEM = "|" // No prefix
D_CMND_BRI_PRESET;
D_CMND_BRI_PRESET
#ifdef USE_DEVICE_GROUPS
"|" D_CMND_PWM_DIMMER_PWMS
#endif // USE_DEVICE_GROUPS
;
void (* const PWMDimmerCommand[])(void) PROGMEM = {
&CmndBriPreset };
&CmndBriPreset,
#ifdef USE_DEVICE_GROUPS
&CmndPWMDimmerPWMs,
#endif // USE_DEVICE_GROUPS
};
#ifdef USE_PWM_DIMMER_REMOTE
struct remote_pwm_dimmer {
@ -731,6 +739,17 @@ void CmndBriPreset(void)
Response_P(PSTR("{\"" D_CMND_BRI_PRESET "\":{\"Low\":%d,\"High\":%d}}"), Settings.bri_preset_low, Settings.bri_preset_high);
}
#ifdef USE_DEVICE_GROUPS
void CmndPWMDimmerPWMs(void)
{
if (XdrvMailbox.data_len > 0 && XdrvMailbox.payload <= 5) {
Settings.pwm_dimmer_cfg.pwm_count = XdrvMailbox.payload - 1;
restart_flag = 2;
}
Response_P(PSTR("{\"" D_CMND_PWM_DIMMER_PWMS "\":%u}"), Settings.pwm_dimmer_cfg.pwm_count + 1);
}
#endif // USE_DEVICE_GROUPS
/*********************************************************************************************\
* Interface
\*********************************************************************************************/