Removed double buffer.
Moved bri scaling into UDP function. Prevent double DDP port allocation.
This commit is contained in:
parent
330da137db
commit
caa9cc32d7
@ -393,7 +393,6 @@ class BusNetwork : public Bus {
|
|||||||
_client = IPAddress(bc.pins[0],bc.pins[1],bc.pins[2],bc.pins[3]);
|
_client = IPAddress(bc.pins[0],bc.pins[1],bc.pins[2],bc.pins[3]);
|
||||||
_broadcastLock = false;
|
_broadcastLock = false;
|
||||||
_valid = true;
|
_valid = true;
|
||||||
_data2 = (byte *)malloc(_len * _UDPchannels);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void setPixelColor(uint16_t pix, uint32_t c) {
|
void setPixelColor(uint16_t pix, uint32_t c) {
|
||||||
@ -419,20 +418,7 @@ class BusNetwork : public Bus {
|
|||||||
void show() {
|
void show() {
|
||||||
if (!_valid || !canShow()) return;
|
if (!_valid || !canShow()) return;
|
||||||
_broadcastLock = true;
|
_broadcastLock = true;
|
||||||
// apply brightness to second buffer
|
realtimeBroadcast(_UDPtype, _client, _len, _data, _bri, _rgbw);
|
||||||
if (_data2 == nullptr) {
|
|
||||||
// but display original buffer if memory allocation failed
|
|
||||||
realtimeBroadcast(_UDPtype, _client, _len, _data, _rgbw);
|
|
||||||
} else {
|
|
||||||
for (uint16_t pix=0; pix<_len; pix++) {
|
|
||||||
uint16_t offset = pix * _UDPchannels;
|
|
||||||
_data2[offset ] = scale8(_data[offset ], _bri);
|
|
||||||
_data2[offset+1] = scale8(_data[offset+1], _bri);
|
|
||||||
_data2[offset+2] = scale8(_data[offset+2], _bri);
|
|
||||||
if (_rgbw) _data2[offset+3] = scale8(_data[offset+3], _bri);
|
|
||||||
}
|
|
||||||
realtimeBroadcast(_UDPtype, _client, _len, _data2, _rgbw);
|
|
||||||
}
|
|
||||||
_broadcastLock = false;
|
_broadcastLock = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -465,8 +451,6 @@ class BusNetwork : public Bus {
|
|||||||
_valid = false;
|
_valid = false;
|
||||||
if (_data != nullptr) free(_data);
|
if (_data != nullptr) free(_data);
|
||||||
_data = nullptr;
|
_data = nullptr;
|
||||||
if (_data2 != nullptr) free(_data2);
|
|
||||||
_data2 = nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
~BusNetwork() {
|
~BusNetwork() {
|
||||||
@ -482,7 +466,7 @@ class BusNetwork : public Bus {
|
|||||||
uint8_t _UDPchannels;
|
uint8_t _UDPchannels;
|
||||||
bool _rgbw;
|
bool _rgbw;
|
||||||
bool _broadcastLock;
|
bool _broadcastLock;
|
||||||
byte *_data, *_data2;
|
byte *_data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -263,6 +263,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
|
|||||||
JsonObject if_live = interfaces["live"];
|
JsonObject if_live = interfaces["live"];
|
||||||
CJSON(receiveDirect, if_live["en"]);
|
CJSON(receiveDirect, if_live["en"]);
|
||||||
CJSON(e131Port, if_live["port"]); // 5568
|
CJSON(e131Port, if_live["port"]); // 5568
|
||||||
|
if (e131Port == DDP_DEFAULT_PORT) e131Port = E131_DEFAULT_PORT; // prevent double DDP port allocation
|
||||||
CJSON(e131Multicast, if_live[F("mc")]);
|
CJSON(e131Multicast, if_live[F("mc")]);
|
||||||
|
|
||||||
JsonObject if_live_dmx = if_live[F("dmx")];
|
JsonObject if_live_dmx = if_live[F("dmx")];
|
||||||
|
@ -195,7 +195,7 @@ bool updateVal(const String* req, const char* key, byte* val, byte minv=0, byte
|
|||||||
|
|
||||||
//udp.cpp
|
//udp.cpp
|
||||||
void notify(byte callMode, bool followUp=false);
|
void notify(byte callMode, bool followUp=false);
|
||||||
uint8_t realtimeBroadcast(uint8_t type, IPAddress client, uint16_t length, byte *buffer, bool isRGBW=false);
|
uint8_t realtimeBroadcast(uint8_t type, IPAddress client, uint16_t length, byte *buffer, uint8_t bri=255, bool isRGBW=false);
|
||||||
void realtimeLock(uint32_t timeoutMs, byte md = REALTIME_MODE_GENERIC);
|
void realtimeLock(uint32_t timeoutMs, byte md = REALTIME_MODE_GENERIC);
|
||||||
void handleNotifications();
|
void handleNotifications();
|
||||||
void setRealtimePixel(uint16_t i, byte r, byte g, byte b, byte w);
|
void setRealtimePixel(uint16_t i, byte r, byte g, byte b, byte w);
|
||||||
|
@ -552,7 +552,7 @@ void sendSysInfoUDP()
|
|||||||
|
|
||||||
uint8_t sequenceNumber = 0; // this needs to be shared across all outputs
|
uint8_t sequenceNumber = 0; // this needs to be shared across all outputs
|
||||||
|
|
||||||
uint8_t realtimeBroadcast(uint8_t type, IPAddress client, uint16_t length, uint8_t *buffer, bool isRGBW) {
|
uint8_t realtimeBroadcast(uint8_t type, IPAddress client, uint16_t length, uint8_t *buffer, uint8_t bri, bool isRGBW) {
|
||||||
if (!interfacesInited) return 1; // network not initialised
|
if (!interfacesInited) return 1; // network not initialised
|
||||||
|
|
||||||
WiFiUDP ddpUdp;
|
WiFiUDP ddpUdp;
|
||||||
@ -610,9 +610,9 @@ uint8_t realtimeBroadcast(uint8_t type, IPAddress client, uint16_t length, uint8
|
|||||||
// write the colors, the write write(const uint8_t *buffer, size_t size)
|
// write the colors, the write write(const uint8_t *buffer, size_t size)
|
||||||
// function is just a loop internally too
|
// function is just a loop internally too
|
||||||
for (uint16_t i = 0; i < packetSize; i += 3) {
|
for (uint16_t i = 0; i < packetSize; i += 3) {
|
||||||
ddpUdp.write(buffer[bufferOffset++]); // R
|
ddpUdp.write(scale8(buffer[bufferOffset++], bri)); // R
|
||||||
ddpUdp.write(buffer[bufferOffset++]); // G
|
ddpUdp.write(scale8(buffer[bufferOffset++], bri)); // G
|
||||||
ddpUdp.write(buffer[bufferOffset++]); // B
|
ddpUdp.write(scale8(buffer[bufferOffset++], bri)); // B
|
||||||
if (isRGBW) bufferOffset++;
|
if (isRGBW) bufferOffset++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user