HUB75 PSRAM Buffers
This commit is contained in:
@@ -588,6 +588,29 @@ BusHub75Matrix::BusHub75Matrix(BusConfig &bc) : Bus(bc.type, bc.start, bc.autoWh
|
||||
mxconfig.gpio.d = 35;
|
||||
mxconfig.gpio.e = 21;
|
||||
|
||||
#elif defined(CONFIG_IDF_TARGET_ESP32S3) && defined(HUB75_TROYHACKS) // ESP32-S3
|
||||
|
||||
// TroyHacks HUB75
|
||||
|
||||
USER_PRINTLN("MatrixPanel_I2S_DMA - TroyHacks with PSRAM");
|
||||
|
||||
mxconfig.gpio.r1 = 1;
|
||||
mxconfig.gpio.g1 = 2;
|
||||
mxconfig.gpio.b1 = 42;
|
||||
// 4th pin is GND
|
||||
mxconfig.gpio.r2 = 41;
|
||||
mxconfig.gpio.g2 = 40;
|
||||
mxconfig.gpio.b2 = 39;
|
||||
mxconfig.gpio.e = 38;
|
||||
mxconfig.gpio.a = 45;
|
||||
mxconfig.gpio.b = 48;
|
||||
mxconfig.gpio.c = 47;
|
||||
mxconfig.gpio.d = 21; // this says GND but should be the "D" pin
|
||||
mxconfig.gpio.clk = 20;
|
||||
mxconfig.gpio.lat = 19;
|
||||
mxconfig.gpio.oe = 0;
|
||||
// 16th pin is GND
|
||||
|
||||
#elif defined(CONFIG_IDF_TARGET_ESP32S3) // ESP32-S3
|
||||
|
||||
// Huidu HD-WF2 ESP32-S3
|
||||
@@ -704,6 +727,7 @@ BusHub75Matrix::BusHub75Matrix(BusConfig &bc) : Bus(bc.type, bc.start, bc.autoWh
|
||||
|
||||
#endif
|
||||
|
||||
mxconfig.clkphase = false;
|
||||
mxconfig.chain_length = max((u_int8_t) 1, min(bc.pins[0], (u_int8_t) 4)); // prevent bad data preventing boot due to low memory
|
||||
|
||||
USER_PRINTF("MatrixPanel_I2S_DMA config - %ux%u length: %u\n", mxconfig.mx_width, mxconfig.mx_height, mxconfig.chain_length);
|
||||
@@ -750,7 +774,16 @@ BusHub75Matrix::BusHub75Matrix(BusConfig &bc) : Bus(bc.type, bc.start, bc.autoWh
|
||||
|
||||
if (_ledBuffer) free(_ledBuffer); // should not happen
|
||||
if (_ledsDirty) free(_ledsDirty); // should not happen
|
||||
|
||||
#if defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM) && defined(WLED_USE_PSRAM)
|
||||
if (psramFound()){
|
||||
_ledsDirty = (byte*) ps_malloc(getBitArrayBytes(_len)); // create LEDs dirty bits
|
||||
} else {
|
||||
_ledsDirty = (byte*) malloc(getBitArrayBytes(_len)); // create LEDs dirty bits
|
||||
}
|
||||
#else
|
||||
_ledsDirty = (byte*) malloc(getBitArrayBytes(_len)); // create LEDs dirty bits
|
||||
#endif
|
||||
|
||||
if (_ledsDirty == nullptr) {
|
||||
display->stopDMAoutput();
|
||||
@@ -762,7 +795,15 @@ BusHub75Matrix::BusHub75Matrix(BusConfig &bc) : Bus(bc.type, bc.start, bc.autoWh
|
||||
setBitArray(_ledsDirty, _len, false); // reset dirty bits
|
||||
|
||||
if (mxconfig.double_buff == false) {
|
||||
#if defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM) && defined(WLED_USE_PSRAM)
|
||||
if (psramFound()){
|
||||
_ledBuffer = (CRGB*) ps_calloc(_len, sizeof(CRGB)); // create LEDs buffer (initialized to BLACK)
|
||||
} else {
|
||||
_ledBuffer = (CRGB*) calloc(_len, sizeof(CRGB)); // create LEDs buffer (initialized to BLACK)
|
||||
}
|
||||
#else
|
||||
_ledBuffer = (CRGB*) calloc(_len, sizeof(CRGB)); // create LEDs buffer (initialized to BLACK)
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -360,7 +360,7 @@ class BusHub75Matrix : public Bus {
|
||||
public:
|
||||
BusHub75Matrix(BusConfig &bc);
|
||||
|
||||
uint16_t getMaxPixels() const override { return 4096; };
|
||||
uint16_t getMaxPixels() const override { return MAX_LEDS; };
|
||||
|
||||
bool hasRGB() const override { return true; }
|
||||
bool hasWhite() const override { return false; }
|
||||
|
||||
Reference in New Issue
Block a user