Various small fixes
Fixed color of main segment returned in JSON API during transition not being target color - Fixed arlsLock() being called after pixels set in E1.31, (closes #772) - Fixed HTTP API calls not having an effect if no segment selected (now applies to main segment)
This commit is contained in:
parent
f12237d298
commit
d36796429e
@ -3,6 +3,12 @@
|
|||||||
### Development versions after 0.9.1 release
|
### Development versions after 0.9.1 release
|
||||||
|
|
||||||
|
|
||||||
|
#### Build 2003141
|
||||||
|
|
||||||
|
- Fixed color of main segment returned in JSON API during transition not being target color (closes #765)
|
||||||
|
- Fixed arlsLock() being called after pixels set in E1.31 (closes #772)
|
||||||
|
- Fixed HTTP API calls not having an effect if no segment selected (now applies to main segment)
|
||||||
|
|
||||||
#### Build 2003121
|
#### Build 2003121
|
||||||
|
|
||||||
- Created changelog.md - make tracking changes to code easier
|
- Created changelog.md - make tracking changes to code easier
|
||||||
|
@ -335,6 +335,8 @@ bool WS2812FX::setEffectConfig(uint8_t m, uint8_t s, uint8_t in, uint8_t p) {
|
|||||||
Segment& seg = _segments[getMainSegmentId()];
|
Segment& seg = _segments[getMainSegmentId()];
|
||||||
uint8_t modePrev = seg.mode, speedPrev = seg.speed, intensityPrev = seg.intensity, palettePrev = seg.palette;
|
uint8_t modePrev = seg.mode, speedPrev = seg.speed, intensityPrev = seg.intensity, palettePrev = seg.palette;
|
||||||
|
|
||||||
|
bool applied = false;
|
||||||
|
|
||||||
if (applyToAllSelected) {
|
if (applyToAllSelected) {
|
||||||
for (uint8_t i = 0; i < MAX_NUM_SEGMENTS; i++)
|
for (uint8_t i = 0; i < MAX_NUM_SEGMENTS; i++)
|
||||||
{
|
{
|
||||||
@ -344,9 +346,12 @@ bool WS2812FX::setEffectConfig(uint8_t m, uint8_t s, uint8_t in, uint8_t p) {
|
|||||||
_segments[i].intensity = in;
|
_segments[i].intensity = in;
|
||||||
_segments[i].palette = p;
|
_segments[i].palette = p;
|
||||||
setMode(i, m);
|
setMode(i, m);
|
||||||
|
applied = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
|
||||||
|
if (!applyToAllSelected || !applied) {
|
||||||
seg.speed = s;
|
seg.speed = s;
|
||||||
seg.intensity = in;
|
seg.intensity = in;
|
||||||
seg.palette = p;
|
seg.palette = p;
|
||||||
@ -363,12 +368,17 @@ void WS2812FX::setColor(uint8_t slot, uint8_t r, uint8_t g, uint8_t b, uint8_t w
|
|||||||
|
|
||||||
void WS2812FX::setColor(uint8_t slot, uint32_t c) {
|
void WS2812FX::setColor(uint8_t slot, uint32_t c) {
|
||||||
if (slot >= NUM_COLORS) return;
|
if (slot >= NUM_COLORS) return;
|
||||||
|
|
||||||
|
bool applied = false;
|
||||||
|
|
||||||
if (applyToAllSelected) {
|
if (applyToAllSelected) {
|
||||||
for (uint8_t i = 0; i < MAX_NUM_SEGMENTS; i++)
|
for (uint8_t i = 0; i < MAX_NUM_SEGMENTS; i++)
|
||||||
{
|
{
|
||||||
if (_segments[i].isSelected()) _segments[i].colors[slot] = c;
|
if (_segments[i].isSelected()) _segments[i].colors[slot] = c;
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
|
||||||
|
if (!applyToAllSelected || !applied) {
|
||||||
_segments[getMainSegmentId()].colors[slot] = c;
|
_segments[getMainSegmentId()].colors[slot] = c;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -119,7 +119,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
//version code in format yymmddb (b = daily build)
|
//version code in format yymmddb (b = daily build)
|
||||||
#define VERSION 2003121
|
#define VERSION 2003141
|
||||||
|
|
||||||
char versionString[] = "0.9.1";
|
char versionString[] = "0.9.1";
|
||||||
|
|
||||||
|
@ -121,6 +121,7 @@ void handleE131Packet(e131_packet_t* p, IPAddress clientIP){
|
|||||||
case DMX_MODE_SINGLE_RGB:
|
case DMX_MODE_SINGLE_RGB:
|
||||||
if (uni != e131Universe) return;
|
if (uni != e131Universe) return;
|
||||||
if (dmxChannels-DMXAddress+1 < 3) return;
|
if (dmxChannels-DMXAddress+1 < 3) return;
|
||||||
|
arlsLock(realtimeTimeoutMs, REALTIME_MODE_E131);
|
||||||
for (uint16_t i = 0; i < ledCount; i++)
|
for (uint16_t i = 0; i < ledCount; i++)
|
||||||
setRealtimePixel(i, p->property_values[DMXAddress+0], p->property_values[DMXAddress+1], p->property_values[DMXAddress+2], 0);
|
setRealtimePixel(i, p->property_values[DMXAddress+0], p->property_values[DMXAddress+1], p->property_values[DMXAddress+2], 0);
|
||||||
break;
|
break;
|
||||||
@ -128,6 +129,7 @@ void handleE131Packet(e131_packet_t* p, IPAddress clientIP){
|
|||||||
case DMX_MODE_SINGLE_DRGB:
|
case DMX_MODE_SINGLE_DRGB:
|
||||||
if (uni != e131Universe) return;
|
if (uni != e131Universe) return;
|
||||||
if (dmxChannels-DMXAddress+1 < 4) return;
|
if (dmxChannels-DMXAddress+1 < 4) return;
|
||||||
|
arlsLock(realtimeTimeoutMs, REALTIME_MODE_E131);
|
||||||
if (DMXOldDimmer != p->property_values[DMXAddress+0]) {
|
if (DMXOldDimmer != p->property_values[DMXAddress+0]) {
|
||||||
DMXOldDimmer = p->property_values[DMXAddress+0];
|
DMXOldDimmer = p->property_values[DMXAddress+0];
|
||||||
bri = p->property_values[DMXAddress+0];
|
bri = p->property_values[DMXAddress+0];
|
||||||
@ -166,6 +168,7 @@ void handleE131Packet(e131_packet_t* p, IPAddress clientIP){
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case DMX_MODE_MULTIPLE_RGB:
|
case DMX_MODE_MULTIPLE_RGB:
|
||||||
|
arlsLock(realtimeTimeoutMs, REALTIME_MODE_E131);
|
||||||
if (previousUniverses == 0) {
|
if (previousUniverses == 0) {
|
||||||
// first universe of this fixture
|
// first universe of this fixture
|
||||||
possibleLEDsInCurrentUniverse = (dmxChannels - DMXAddress + 1) / 3;
|
possibleLEDsInCurrentUniverse = (dmxChannels - DMXAddress + 1) / 3;
|
||||||
@ -187,6 +190,7 @@ void handleE131Packet(e131_packet_t* p, IPAddress clientIP){
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case DMX_MODE_MULTIPLE_DRGB:
|
case DMX_MODE_MULTIPLE_DRGB:
|
||||||
|
arlsLock(realtimeTimeoutMs, REALTIME_MODE_E131);
|
||||||
if (previousUniverses == 0) {
|
if (previousUniverses == 0) {
|
||||||
// first universe of this fixture
|
// first universe of this fixture
|
||||||
if (DMXOldDimmer != p->property_values[DMXAddress+0]) {
|
if (DMXOldDimmer != p->property_values[DMXAddress+0]) {
|
||||||
@ -218,7 +222,6 @@ void handleE131Packet(e131_packet_t* p, IPAddress clientIP){
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
arlsLock(realtimeTimeoutMs, REALTIME_MODE_E131);
|
|
||||||
e131NewData = true;
|
e131NewData = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,12 +31,14 @@ void deserializeSegment(JsonObject elem, byte it)
|
|||||||
{
|
{
|
||||||
int rgbw[] = {0,0,0,0};
|
int rgbw[] = {0,0,0,0};
|
||||||
byte cp = copyArray(colX, rgbw);
|
byte cp = copyArray(colX, rgbw);
|
||||||
seg.colors[i] = ((rgbw[3] << 24) | ((rgbw[0]&0xFF) << 16) | ((rgbw[1]&0xFF) << 8) | ((rgbw[2]&0xFF)));
|
|
||||||
if (cp == 1 && rgbw[0] == 0) seg.colors[i] = 0;
|
if (cp == 1 && rgbw[0] == 0) seg.colors[i] = 0;
|
||||||
if (id == strip.getMainSegmentId()) //temporary
|
if (id == strip.getMainSegmentId() && i < 2) //temporary, to make transition work on main segment
|
||||||
{
|
{
|
||||||
if (i == 0) {col[0] = rgbw[0]; col[1] = rgbw[1]; col[2] = rgbw[2]; col[3] = rgbw[3];}
|
if (i == 0) {col[0] = rgbw[0]; col[1] = rgbw[1]; col[2] = rgbw[2]; col[3] = rgbw[3];}
|
||||||
if (i == 1) {colSec[0] = rgbw[0]; colSec[1] = rgbw[1]; colSec[2] = rgbw[2]; colSec[3] = rgbw[3];}
|
if (i == 1) {colSec[0] = rgbw[0]; colSec[1] = rgbw[1]; colSec[2] = rgbw[2]; colSec[3] = rgbw[3];}
|
||||||
|
} else {
|
||||||
|
seg.colors[i] = ((rgbw[3] << 24) | ((rgbw[0]&0xFF) << 16) | ((rgbw[1]&0xFF) << 8) | ((rgbw[2]&0xFF)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -175,15 +177,24 @@ void serializeSegment(JsonObject& root, WS2812FX::Segment& seg, byte id)
|
|||||||
root["spc"] = seg.spacing;
|
root["spc"] = seg.spacing;
|
||||||
|
|
||||||
JsonArray colarr = root.createNestedArray("col");
|
JsonArray colarr = root.createNestedArray("col");
|
||||||
|
|
||||||
for (uint8_t i = 0; i < 3; i++)
|
for (uint8_t i = 0; i < 3; i++)
|
||||||
{
|
{
|
||||||
JsonArray colX = colarr.createNestedArray();
|
JsonArray colX = colarr.createNestedArray();
|
||||||
colX.add((seg.colors[i] >> 16) & 0xFF);
|
if (id == strip.getMainSegmentId() && i < 2) //temporary, to make transition work on main segment
|
||||||
colX.add((seg.colors[i] >> 8) & 0xFF);
|
{
|
||||||
colX.add((seg.colors[i]) & 0xFF);
|
if (i == 0) {
|
||||||
if (useRGBW)
|
colX.add(col[0]); colX.add(col[1]); colX.add(col[2]); if (useRGBW) colX.add(col[3]);
|
||||||
colX.add((seg.colors[i] >> 24) & 0xFF);
|
} else {
|
||||||
|
colX.add(colSec[0]); colX.add(colSec[1]); colX.add(colSec[2]); if (useRGBW) colX.add(colSec[3]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
colX.add((seg.colors[i] >> 16) & 0xFF);
|
||||||
|
colX.add((seg.colors[i] >> 8) & 0xFF);
|
||||||
|
colX.add((seg.colors[i]) & 0xFF);
|
||||||
|
if (useRGBW)
|
||||||
|
colX.add((seg.colors[i] >> 24) & 0xFF);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
root["fx"] = seg.mode;
|
root["fx"] = seg.mode;
|
||||||
|
Loading…
Reference in New Issue
Block a user