kopia lustrzana https://github.com/Aircoookie/WLED
				
				
				
			Add setMode() and setPalette() methods
- automatically start transition Implement load FX defaults for HTTP API (FXD)pull/2814/head
							rodzic
							
								
									7cd9e8860d
								
							
						
					
					
						commit
						f385af595a
					
				| 
						 | 
				
			
			@ -114,8 +114,8 @@ class Animated_Staircase : public Usermod {
 | 
			
		|||
 | 
			
		||||
          // We may need to copy mode and colors from segment 0 to make sure
 | 
			
		||||
          // changes are propagated even when the config is changed during a wipe
 | 
			
		||||
          // segments->mode = mainsegment.mode;
 | 
			
		||||
          // segments->colors[0] = mainsegment.colors[0];
 | 
			
		||||
          // seg.setMode(mainsegment.mode);
 | 
			
		||||
          // seg.setColor(0, mainsegment.colors[0]);
 | 
			
		||||
        } else {
 | 
			
		||||
          seg.setOption(SEG_OPTION_ON, false);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -531,11 +531,11 @@ public:
 | 
			
		|||
      for (byte i=0; i<strip.getSegmentsNum(); i++) {
 | 
			
		||||
        Segment& seg = strip.getSegment(i);
 | 
			
		||||
        if (!seg.isActive()) continue;
 | 
			
		||||
        strip.setMode(i, effectCurrent);
 | 
			
		||||
        seg.setMode(effectCurrent);
 | 
			
		||||
      }
 | 
			
		||||
    } else {
 | 
			
		||||
      //Segment& seg = strip.getSegment(strip.getMainSegmentId());
 | 
			
		||||
      strip.setMode(strip.getMainSegmentId(), effectCurrent);
 | 
			
		||||
      Segment& seg = strip.getSegment(strip.getMainSegmentId());
 | 
			
		||||
      seg.setMode(effectCurrent);
 | 
			
		||||
    }
 | 
			
		||||
    lampUdated();
 | 
			
		||||
  #ifdef USERMOD_FOUR_LINE_DISPLAY
 | 
			
		||||
| 
						 | 
				
			
			@ -661,11 +661,11 @@ public:
 | 
			
		|||
      for (byte i=0; i<strip.getSegmentsNum(); i++) {
 | 
			
		||||
        Segment& seg = strip.getSegment(i);
 | 
			
		||||
        if (!seg.isActive()) continue;
 | 
			
		||||
        seg.palette = effectPalette;
 | 
			
		||||
        seg.setPalette(effectPalette);
 | 
			
		||||
      }
 | 
			
		||||
    } else {
 | 
			
		||||
      Segment& seg = strip.getSegment(strip.getMainSegmentId());
 | 
			
		||||
      seg.palette = effectPalette;
 | 
			
		||||
      seg.setPalette(effectPalette);
 | 
			
		||||
    }
 | 
			
		||||
    lampUdated();
 | 
			
		||||
  #ifdef USERMOD_FOUR_LINE_DISPLAY
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -502,6 +502,8 @@ typedef struct Segment {
 | 
			
		|||
    void    setCCT(uint16_t k);
 | 
			
		||||
    void    setOpacity(uint8_t o);
 | 
			
		||||
    void    setOption(uint8_t n, bool val);
 | 
			
		||||
    void    setMode(uint8_t fx, bool loadDefaults = false);
 | 
			
		||||
    void    setPalette(uint8_t pal);
 | 
			
		||||
    uint8_t differs(Segment& b) const;
 | 
			
		||||
    void    refreshLightCapabilities(void);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -396,6 +396,48 @@ void Segment::setOption(uint8_t n, bool val) {
 | 
			
		|||
  else     options &= ~(0x01 << n);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Segment::setMode(uint8_t fx, bool loadDefaults) {
 | 
			
		||||
  // if we have a valid mode & is not reserved
 | 
			
		||||
  if (fx < strip.getModeCount() && strncmp_P("RSVD", strip.getModeData(fx), 4)) {
 | 
			
		||||
    if (fx != mode) {
 | 
			
		||||
      startTransition(strip.getTransition()); // set effect transitions
 | 
			
		||||
      //markForReset(); // transition will handle this
 | 
			
		||||
      mode = fx;
 | 
			
		||||
 | 
			
		||||
      // load default values from effect string
 | 
			
		||||
      if (loadDefaults) {
 | 
			
		||||
        int16_t sOpt;
 | 
			
		||||
        sOpt = extractModeDefaults(fx, "sx");   if (sOpt >= 0) speed     = sOpt;
 | 
			
		||||
        sOpt = extractModeDefaults(fx, "ix");   if (sOpt >= 0) intensity = sOpt;
 | 
			
		||||
        sOpt = extractModeDefaults(fx, "c1");   if (sOpt >= 0) custom1   = sOpt;
 | 
			
		||||
        sOpt = extractModeDefaults(fx, "c2");   if (sOpt >= 0) custom2   = sOpt;
 | 
			
		||||
        sOpt = extractModeDefaults(fx, "c3");   if (sOpt >= 0) custom3   = sOpt;
 | 
			
		||||
        sOpt = extractModeDefaults(fx, "mp12"); if (sOpt >= 0) map1D2D   = constrain(sOpt, 0, 7);
 | 
			
		||||
        sOpt = extractModeDefaults(fx, "ssim"); if (sOpt >= 0) soundSim  = constrain(sOpt, 0, 7);
 | 
			
		||||
        sOpt = extractModeDefaults(fx, "rev");  if (sOpt >= 0) reverse   = (bool)sOpt;
 | 
			
		||||
        sOpt = extractModeDefaults(fx, "mi");   if (sOpt >= 0) mirror    = (bool)sOpt; // NOTE: setting this option is a risky business
 | 
			
		||||
        sOpt = extractModeDefaults(fx, "rY");   if (sOpt >= 0) reverse_y = (bool)sOpt;
 | 
			
		||||
        sOpt = extractModeDefaults(fx, "mY");   if (sOpt >= 0) mirror_y  = (bool)sOpt; // NOTE: setting this option is a risky business
 | 
			
		||||
        sOpt = extractModeDefaults(fx, "pal");
 | 
			
		||||
        if (sOpt >= 0 && (size_t)sOpt < strip.getPaletteCount() + strip.customPalettes.size()) {
 | 
			
		||||
          if (sOpt != palette) {
 | 
			
		||||
            palette = sOpt;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Segment::setPalette(uint8_t pal) {
 | 
			
		||||
  if (pal < strip.getPaletteCount()) {
 | 
			
		||||
    if (pal != palette) {
 | 
			
		||||
      if (strip.paletteFade) startTransition(strip.getTransition());
 | 
			
		||||
      palette = pal;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 2D matrix
 | 
			
		||||
uint16_t Segment::virtualWidth() const {
 | 
			
		||||
  uint16_t groupLen = groupLength();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -174,47 +174,16 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId)
 | 
			
		|||
  byte fx = seg.mode;
 | 
			
		||||
  if (getVal(elem["fx"], &fx, 0, strip.getModeCount())) { //load effect ('r' random, '~' inc/dec, 0-255 exact value)
 | 
			
		||||
    if (!presetId && currentPlaylist>=0) unloadPlaylist();
 | 
			
		||||
    if (fx != seg.mode) {
 | 
			
		||||
      seg.startTransition(strip.getTransition()); // set effect transitions
 | 
			
		||||
      //seg.markForReset();
 | 
			
		||||
      seg.mode = fx;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // load default values from effect string
 | 
			
		||||
  if (elem[F("fxdef")])
 | 
			
		||||
  {
 | 
			
		||||
    int16_t sOpt;
 | 
			
		||||
    sOpt = extractModeDefaults(fx, "sx");   if (sOpt >= 0) seg.speed     = sOpt;
 | 
			
		||||
    sOpt = extractModeDefaults(fx, "ix");   if (sOpt >= 0) seg.intensity = sOpt;
 | 
			
		||||
    sOpt = extractModeDefaults(fx, "c1");   if (sOpt >= 0) seg.custom1   = sOpt;
 | 
			
		||||
    sOpt = extractModeDefaults(fx, "c2");   if (sOpt >= 0) seg.custom2   = sOpt;
 | 
			
		||||
    sOpt = extractModeDefaults(fx, "c3");   if (sOpt >= 0) seg.custom3   = sOpt;
 | 
			
		||||
    sOpt = extractModeDefaults(fx, "mp12"); if (sOpt >= 0) seg.map1D2D   = constrain(sOpt, 0, 7);
 | 
			
		||||
    sOpt = extractModeDefaults(fx, "ssim"); if (sOpt >= 0) seg.soundSim  = constrain(sOpt, 0, 7);
 | 
			
		||||
    sOpt = extractModeDefaults(fx, "rev");  if (sOpt >= 0) seg.reverse   = (bool)sOpt;
 | 
			
		||||
    sOpt = extractModeDefaults(fx, "mi");   if (sOpt >= 0) seg.mirror    = (bool)sOpt; // NOTE: setting this option is a risky business
 | 
			
		||||
    sOpt = extractModeDefaults(fx, "rY");   if (sOpt >= 0) seg.reverse_y = (bool)sOpt;
 | 
			
		||||
    sOpt = extractModeDefaults(fx, "mY");   if (sOpt >= 0) seg.mirror_y  = (bool)sOpt; // NOTE: setting this option is a risky business
 | 
			
		||||
    sOpt = extractModeDefaults(fx, "pal");
 | 
			
		||||
    if (sOpt >= 0 && sOpt < strip.getPaletteCount() + strip.customPalettes.size()) {
 | 
			
		||||
      if (sOpt != seg.palette) {
 | 
			
		||||
        if (strip.paletteFade && !seg.transitional) seg.startTransition(strip.getTransition());
 | 
			
		||||
        seg.palette = sOpt;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    if (fx != seg.mode) seg.setMode(fx, elem[F("fxdef")]);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  //getVal also supports inc/decrementing and random
 | 
			
		||||
  getVal(elem["sx"], &seg.speed);
 | 
			
		||||
  getVal(elem["ix"], &seg.intensity);
 | 
			
		||||
 | 
			
		||||
  uint8_t pal = seg.palette;
 | 
			
		||||
  if (getVal(elem["pal"], &pal, 1, strip.getPaletteCount())) {
 | 
			
		||||
    if (pal != seg.palette) {
 | 
			
		||||
      if (strip.paletteFade && !seg.transitional) seg.startTransition(strip.getTransition());
 | 
			
		||||
      seg.palette = pal;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  if (getVal(elem["pal"], &pal, 1, strip.getPaletteCount())) seg.setPalette(pal);
 | 
			
		||||
 | 
			
		||||
  getVal(elem["c1"], &seg.custom1);
 | 
			
		||||
  getVal(elem["c2"], &seg.custom2);
 | 
			
		||||
  uint8_t cust3 = seg.custom3;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -888,17 +888,10 @@ bool handleSet(AsyncWebServerRequest *request, const String& req, bool apply)
 | 
			
		|||
  for (uint8_t i = 0; i < strip.getSegmentsNum(); i++) {
 | 
			
		||||
    Segment& seg = strip.getSegment(i);
 | 
			
		||||
    if (i != selectedSeg && (singleSegment || !seg.isActive() || !seg.isSelected())) continue; // skip non main segments if not applying to all
 | 
			
		||||
    if (fxModeChanged)  {
 | 
			
		||||
      seg.startTransition(strip.getTransition());
 | 
			
		||||
      seg.mode = effectIn;
 | 
			
		||||
      // TODO: we should load defaults here as well
 | 
			
		||||
    }
 | 
			
		||||
    if (fxModeChanged)    seg.setMode(effectIn, req.indexOf(F("FXD="))>0);  // apply defaults if FXD= is specified
 | 
			
		||||
    if (speedChanged)     seg.speed     = speedIn;
 | 
			
		||||
    if (intensityChanged) seg.intensity = intensityIn;
 | 
			
		||||
    if (paletteChanged) {
 | 
			
		||||
      if (strip.paletteBlend) seg.startTransition(strip.getTransition());
 | 
			
		||||
      seg.palette = paletteIn;
 | 
			
		||||
    }
 | 
			
		||||
    if (paletteChanged)   seg.setPalette(paletteIn);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  //set advanced overlay
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue