additional constants to improve upstream compatibility
* a few new error constants * WLED_O2_ATTR - ask the compiler for stronger optimization of a single function * WLED_O3_ATTR (WLEDMM) optimize even more
This commit is contained in:
@@ -938,7 +938,7 @@ static void xyFromBlock(uint16_t &x,uint16_t &y, uint16_t i, uint16_t vW, uint16
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void IRAM_ATTR_YN __attribute__((hot)) Segment::setPixelColor(int i, uint32_t col) //WLEDMM: IRAM_ATTR conditionally
|
void WLED_O2_ATTR __attribute__((hot)) Segment::setPixelColor(int i, uint32_t col) //WLEDMM: IRAM_ATTR conditionally
|
||||||
{
|
{
|
||||||
if (!isActive()) return; // not active
|
if (!isActive()) return; // not active
|
||||||
#ifndef WLED_DISABLE_2D
|
#ifndef WLED_DISABLE_2D
|
||||||
@@ -1212,7 +1212,7 @@ void Segment::setPixelColor(float i, uint32_t col, bool aa)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t __attribute__((hot)) Segment::getPixelColor(int i) const
|
uint32_t WLED_O2_ATTR __attribute__((hot)) Segment::getPixelColor(int i) const
|
||||||
{
|
{
|
||||||
if (!isActive()) return 0; // not active
|
if (!isActive()) return 0; // not active
|
||||||
#ifndef WLED_DISABLE_2D
|
#ifndef WLED_DISABLE_2D
|
||||||
|
|||||||
@@ -628,7 +628,7 @@ void ParticleSystem2D::render() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// calculate pixel positions and brightness distribution and render the particle to local buffer or global buffer
|
// calculate pixel positions and brightness distribution and render the particle to local buffer or global buffer
|
||||||
__attribute__((optimize("O2"))) void ParticleSystem2D::renderParticle(const uint32_t particleindex, const uint8_t brightness, const CRGB& color, const bool wrapX, const bool wrapY) {
|
void WLED_O3_ATTR ParticleSystem2D::renderParticle(const uint32_t particleindex, const uint8_t brightness, const CRGB& color, const bool wrapX, const bool wrapY) {
|
||||||
uint32_t size = particlesize;
|
uint32_t size = particlesize;
|
||||||
if (advPartProps && advPartProps[particleindex].size > 0) // use advanced size properties (0 means use global size including single pixel rendering)
|
if (advPartProps && advPartProps[particleindex].size > 0) // use advanced size properties (0 means use global size including single pixel rendering)
|
||||||
size = advPartProps[particleindex].size;
|
size = advPartProps[particleindex].size;
|
||||||
@@ -846,7 +846,7 @@ void ParticleSystem2D::handleCollisions() {
|
|||||||
|
|
||||||
// handle a collision if close proximity is detected, i.e. dx and/or dy smaller than 2*PS_P_RADIUS
|
// handle a collision if close proximity is detected, i.e. dx and/or dy smaller than 2*PS_P_RADIUS
|
||||||
// takes two pointers to the particles to collide and the particle hardness (softer means more energy lost in collision, 255 means full hard)
|
// takes two pointers to the particles to collide and the particle hardness (softer means more energy lost in collision, 255 means full hard)
|
||||||
__attribute__((optimize("O2"))) void ParticleSystem2D::collideParticles(PSparticle &particle1, PSparticle &particle2, int32_t dx, int32_t dy, const uint32_t collDistSq) {
|
void WLED_O3_ATTR ParticleSystem2D::collideParticles(PSparticle &particle1, PSparticle &particle2, int32_t dx, int32_t dy, const uint32_t collDistSq) {
|
||||||
int32_t distanceSquared = dx * dx + dy * dy;
|
int32_t distanceSquared = dx * dx + dy * dy;
|
||||||
// Calculate relative velocity note: could zero check but that does not improve overall speed but deminish it as that is rarely the case and pushing is still required
|
// Calculate relative velocity note: could zero check but that does not improve overall speed but deminish it as that is rarely the case and pushing is still required
|
||||||
int32_t relativeVx = (int32_t)particle2.vx - (int32_t)particle1.vx;
|
int32_t relativeVx = (int32_t)particle2.vx - (int32_t)particle1.vx;
|
||||||
@@ -1494,7 +1494,7 @@ void ParticleSystem1D::render() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// calculate pixel positions and brightness distribution and render the particle to local buffer or global buffer
|
// calculate pixel positions and brightness distribution and render the particle to local buffer or global buffer
|
||||||
__attribute__((optimize("O2"))) void ParticleSystem1D::renderParticle(const uint32_t particleindex, const uint8_t brightness, const CRGB &color, const bool wrap) {
|
void WLED_O2_ATTR ParticleSystem1D::renderParticle(const uint32_t particleindex, const uint8_t brightness, const CRGB &color, const bool wrap) {
|
||||||
uint32_t size = particlesize;
|
uint32_t size = particlesize;
|
||||||
if (advPartProps) // use advanced size properties (1D system has no large size global rendering TODO: add large global rendering?)
|
if (advPartProps) // use advanced size properties (1D system has no large size global rendering TODO: add large global rendering?)
|
||||||
size = advPartProps[particleindex].size;
|
size = advPartProps[particleindex].size;
|
||||||
@@ -1658,7 +1658,7 @@ void ParticleSystem1D::handleCollisions() {
|
|||||||
}
|
}
|
||||||
// handle a collision if close proximity is detected, i.e. dx and/or dy smaller than 2*PS_P_RADIUS
|
// handle a collision if close proximity is detected, i.e. dx and/or dy smaller than 2*PS_P_RADIUS
|
||||||
// takes two pointers to the particles to collide and the particle hardness (softer means more energy lost in collision, 255 means full hard)
|
// takes two pointers to the particles to collide and the particle hardness (softer means more energy lost in collision, 255 means full hard)
|
||||||
__attribute__((optimize("O2"))) void ParticleSystem1D::collideParticles(PSparticle1D &particle1, const PSparticleFlags1D &particle1flags, PSparticle1D &particle2, const PSparticleFlags1D &particle2flags, const int32_t dx, const uint32_t dx_abs, const uint32_t collisiondistance) {
|
void WLED_O2_ATTR ParticleSystem1D::collideParticles(PSparticle1D &particle1, const PSparticleFlags1D &particle1flags, PSparticle1D &particle2, const PSparticleFlags1D &particle2flags, const int32_t dx, const uint32_t dx_abs, const uint32_t collisiondistance) {
|
||||||
int32_t dv = particle2.vx - particle1.vx;
|
int32_t dv = particle2.vx - particle1.vx;
|
||||||
int32_t dotProduct = (dx * dv); // is always negative if moving towards each other
|
int32_t dotProduct = (dx * dv); // is always negative if moving towards each other
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
/*
|
/*
|
||||||
* color blend function
|
* color blend function
|
||||||
*/
|
*/
|
||||||
IRAM_ATTR_YN __attribute__((hot)) uint32_t color_blend(uint32_t color1, uint32_t color2, uint_fast16_t blend, bool b16) {
|
uint32_t WLED_O2_ATTR IRAM_ATTR __attribute__((hot)) color_blend(uint32_t color1, uint32_t color2, uint_fast16_t blend, bool b16) {
|
||||||
if ((color1 == color2) || (blend == 0)) return color1; // WLEDMM
|
if ((color1 == color2) || (blend == 0)) return color1; // WLEDMM
|
||||||
const uint_fast16_t blendmax = b16 ? 0xFFFF : 0xFF;
|
const uint_fast16_t blendmax = b16 ? 0xFFFF : 0xFF;
|
||||||
if(blend >= blendmax) return color2;
|
if(blend >= blendmax) return color2;
|
||||||
@@ -46,7 +46,7 @@ IRAM_ATTR_YN __attribute__((hot)) uint32_t color_blend(uint32_t color1, uint32_t
|
|||||||
* color add function that preserves ratio
|
* color add function that preserves ratio
|
||||||
* idea: https://github.com/Aircoookie/WLED/pull/2465 by https://github.com/Proto-molecule
|
* idea: https://github.com/Aircoookie/WLED/pull/2465 by https://github.com/Proto-molecule
|
||||||
*/
|
*/
|
||||||
IRAM_ATTR_YN uint32_t color_add(uint32_t c1, uint32_t c2, bool fast) // WLEDMM added IRAM_ATTR_YN
|
uint32_t WLED_O2_ATTR color_add(uint32_t c1, uint32_t c2, bool fast) // WLEDMM added IRAM_ATTR_YN
|
||||||
{
|
{
|
||||||
if (c2 == 0) return c1; // WLEDMM shortcut
|
if (c2 == 0) return c1; // WLEDMM shortcut
|
||||||
if (c1 == 0) return c2; // WLEDMM shortcut
|
if (c1 == 0) return c2; // WLEDMM shortcut
|
||||||
@@ -80,7 +80,7 @@ IRAM_ATTR_YN uint32_t color_add(uint32_t c1, uint32_t c2, bool fast) // WLEDMM
|
|||||||
* if using "video" method the resulting color will never become black unless it is already black
|
* if using "video" method the resulting color will never become black unless it is already black
|
||||||
*/
|
*/
|
||||||
|
|
||||||
IRAM_ATTR_YN __attribute__((hot)) uint32_t color_fade(uint32_t c1, uint8_t amount, bool video)
|
uint32_t IRAM_ATTR_YN __attribute__((hot)) color_fade(uint32_t c1, uint8_t amount, bool video)
|
||||||
{
|
{
|
||||||
if (c1 == 0 || amount == 0) return 0; // black or no change
|
if (c1 == 0 || amount == 0) return 0; // black or no change
|
||||||
if (amount == 255) return c1;
|
if (amount == 255) return c1;
|
||||||
|
|||||||
@@ -149,14 +149,17 @@
|
|||||||
#define AP_BEHAVIOR_NO_CONN 1 //Open when no connection (either after boot or if connection is lost)
|
#define AP_BEHAVIOR_NO_CONN 1 //Open when no connection (either after boot or if connection is lost)
|
||||||
#define AP_BEHAVIOR_ALWAYS 2 //Always open
|
#define AP_BEHAVIOR_ALWAYS 2 //Always open
|
||||||
#define AP_BEHAVIOR_BUTTON_ONLY 3 //Only when button pressed for 6 sec
|
#define AP_BEHAVIOR_BUTTON_ONLY 3 //Only when button pressed for 6 sec
|
||||||
|
#define AP_BEHAVIOR_TEMPORARY 4 //Open AP when no connection after boot but only temporary //WLEDMM not yet supported
|
||||||
|
#ifndef WLED_AP_TIMEOUT
|
||||||
|
#define WLED_AP_TIMEOUT 300000 //Temporary AP timeout
|
||||||
|
#endif
|
||||||
//Notifier callMode
|
//Notifier callMode
|
||||||
#define CALL_MODE_INIT 0 //no updates on init, can be used to disable updates
|
#define CALL_MODE_INIT 0 //no updates on init, can be used to disable updates
|
||||||
#define CALL_MODE_DIRECT_CHANGE 1
|
#define CALL_MODE_DIRECT_CHANGE 1
|
||||||
#define CALL_MODE_BUTTON 2 //default button actions applied to selected segments
|
#define CALL_MODE_BUTTON 2 //default button actions applied to selected segments
|
||||||
#define CALL_MODE_NOTIFICATION 3
|
#define CALL_MODE_NOTIFICATION 3 //caused by incoming notification (UDP or DMX preset)
|
||||||
#define CALL_MODE_NIGHTLIGHT 4
|
#define CALL_MODE_NIGHTLIGHT 4 //nightlight progress
|
||||||
#define CALL_MODE_NO_NOTIFY 5
|
#define CALL_MODE_NO_NOTIFY 5 //change state but do not send notifications (UDP)
|
||||||
#define CALL_MODE_FX_CHANGED 6 //no longer used
|
#define CALL_MODE_FX_CHANGED 6 //no longer used
|
||||||
#define CALL_MODE_HUE 7
|
#define CALL_MODE_HUE 7
|
||||||
#define CALL_MODE_PRESET_CYCLE 8 //no longer used
|
#define CALL_MODE_PRESET_CYCLE 8 //no longer used
|
||||||
@@ -272,6 +275,10 @@
|
|||||||
#define COL_ORDER_GBR 5
|
#define COL_ORDER_GBR 5
|
||||||
#define COL_ORDER_MAX 5
|
#define COL_ORDER_MAX 5
|
||||||
|
|
||||||
|
//ESP-NOW //WLEDMM not yet supported
|
||||||
|
#define ESP_NOW_STATE_UNINIT 0
|
||||||
|
#define ESP_NOW_STATE_ON 1
|
||||||
|
#define ESP_NOW_STATE_ERROR 2
|
||||||
|
|
||||||
//Button type
|
//Button type
|
||||||
#define BTN_TYPE_NONE 0
|
#define BTN_TYPE_NONE 0
|
||||||
@@ -283,6 +290,7 @@
|
|||||||
#define BTN_TYPE_TOUCH 6
|
#define BTN_TYPE_TOUCH 6
|
||||||
#define BTN_TYPE_ANALOG 7
|
#define BTN_TYPE_ANALOG 7
|
||||||
#define BTN_TYPE_ANALOG_INVERTED 8
|
#define BTN_TYPE_ANALOG_INVERTED 8
|
||||||
|
#define BTN_TYPE_TOUCH_SWITCH 9 //WLEDMM not yet supported
|
||||||
|
|
||||||
//Ethernet board types
|
//Ethernet board types
|
||||||
#define WLED_NUM_ETH_TYPES 12 //WLEDMM +1 for Olimex ESP32-Gateway
|
#define WLED_NUM_ETH_TYPES 12 //WLEDMM +1 for Olimex ESP32-Gateway
|
||||||
@@ -332,6 +340,7 @@
|
|||||||
|
|
||||||
//Playlist option byte
|
//Playlist option byte
|
||||||
#define PL_OPTION_SHUFFLE 0x01
|
#define PL_OPTION_SHUFFLE 0x01
|
||||||
|
#define PL_OPTION_RESTORE 0x02 //WLEDMM not yet supported
|
||||||
|
|
||||||
// Segment capability byte
|
// Segment capability byte
|
||||||
#define SEG_CAPABILITY_RGB 0x01
|
#define SEG_CAPABILITY_RGB 0x01
|
||||||
@@ -341,8 +350,11 @@
|
|||||||
// WLED Error modes
|
// WLED Error modes
|
||||||
#define ERR_NONE 0 // All good :)
|
#define ERR_NONE 0 // All good :)
|
||||||
#define ERR_DENIED 1 // Permission denied
|
#define ERR_DENIED 1 // Permission denied
|
||||||
#define ERR_EEP_COMMIT 2 // Could not commit to EEPROM (wrong flash layout?) OBSOLETE
|
#define ERR_CONCURRENCY 2 // Conurrency (client active) //WLEDMM was ERR_EEP_COMMIT (obsolete)
|
||||||
#define ERR_NOBUF 3 // JSON buffer was not released in time, request cannot be handled at this time
|
#define ERR_NOBUF 3 // JSON buffer was not released in time, request cannot be handled at this time
|
||||||
|
#define ERR_NOT_IMPL 4 // Not implemented
|
||||||
|
#define ERR_NORAM_PX 7 // not enough RAM for pixels
|
||||||
|
#define ERR_NORAM 8 // effect RAM depleted
|
||||||
#define ERR_JSON 9 // JSON parsing failed (input too large?)
|
#define ERR_JSON 9 // JSON parsing failed (input too large?)
|
||||||
#define ERR_FS_BEGIN 10 // Could not init filesystem (no partition?)
|
#define ERR_FS_BEGIN 10 // Could not init filesystem (no partition?)
|
||||||
#define ERR_FS_QUOTA 11 // The FS is full or the maximum file size is reached
|
#define ERR_FS_QUOTA 11 // The FS is full or the maximum file size is reached
|
||||||
@@ -497,6 +509,23 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Web server limits
|
||||||
|
#ifdef ESP8266
|
||||||
|
// Minimum heap to consider handling a request
|
||||||
|
#define WLED_REQUEST_MIN_HEAP (8*1024)
|
||||||
|
// Estimated maximum heap required by any one request
|
||||||
|
#define WLED_REQUEST_HEAP_USAGE (6*1024)
|
||||||
|
#else
|
||||||
|
// ESP32 TCP stack needs much more RAM than ESP8266
|
||||||
|
// Minimum heap remaining before queuing a request
|
||||||
|
#define WLED_REQUEST_MIN_HEAP (12*1024)
|
||||||
|
// Estimated maximum heap required by any one request
|
||||||
|
#define WLED_REQUEST_HEAP_USAGE (12*1024)
|
||||||
|
#endif
|
||||||
|
// Maximum number of requests in queue; absolute cap on web server resource usage.
|
||||||
|
// Websockets do not count against this limit.
|
||||||
|
#define WLED_REQUEST_MAX_QUEUE 6
|
||||||
|
|
||||||
//#define MIN_HEAP_SIZE (8k for AsyncWebServer)
|
//#define MIN_HEAP_SIZE (8k for AsyncWebServer)
|
||||||
#if !defined(MIN_HEAP_SIZE)
|
#if !defined(MIN_HEAP_SIZE)
|
||||||
#define MIN_HEAP_SIZE 8192
|
#define MIN_HEAP_SIZE 8192
|
||||||
@@ -569,4 +598,12 @@
|
|||||||
#define IRAM_ATTR_YN
|
#define IRAM_ATTR_YN
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define WLED_O2_ATTR __attribute__((optimize("O2")))
|
||||||
|
|
||||||
|
#if !defined(WLEDMM_SAVE_FLASH) // WLEDMM
|
||||||
|
#define WLED_O3_ATTR __attribute__((optimize("O3,fast_math")))
|
||||||
|
#else
|
||||||
|
#define WLED_O3_ATTR WLED_O2_ATTR // -O3 increases flash size due to loop unrolling
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1976,6 +1976,9 @@ function readState(s,command=false)
|
|||||||
case 3:
|
case 3:
|
||||||
errstr = "Buffer locked!";
|
errstr = "Buffer locked!";
|
||||||
break;
|
break;
|
||||||
|
case 7:
|
||||||
|
errstr = "No RAM for buffer!";
|
||||||
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
errstr = "Effect RAM depleted!";
|
errstr = "Effect RAM depleted!";
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user