diff options
| author | Emil Muratov <gpm@hotplug.ru> | 2021-08-19 19:33:41 +0300 |
|---|---|---|
| committer | Emil Muratov <gpm@hotplug.ru> | 2021-08-19 19:43:39 +0300 |
| commit | 03d6594a1c7d14afa8266cd56def3fe17127fa02 (patch) | |
| tree | 88e0ef6bdf7aee6e55bc8f10f7ad645ac2e9f2db | |
| parent | e12eaf15b5598703ff76ded68d5b575e64a7476a (diff) | |
Double buff w/o delay
- removed delay() from buffer swap
- add new method to check if back buffer is safe to write to
- obsolete showDMABuffer()
| -rw-r--r-- | ESP32-HUB75-MatrixPanel-I2S-DMA.h | 34 | ||||
| -rw-r--r-- | ESP32-VirtualMatrixPanel-I2S-DMA.h | 4 |
2 files changed, 17 insertions, 21 deletions
diff --git a/ESP32-HUB75-MatrixPanel-I2S-DMA.h b/ESP32-HUB75-MatrixPanel-I2S-DMA.h index f8648a1..927d428 100644 --- a/ESP32-HUB75-MatrixPanel-I2S-DMA.h +++ b/ESP32-HUB75-MatrixPanel-I2S-DMA.h @@ -388,7 +388,7 @@ class MatrixPanel_I2S_DMA { // Setup the ESP32 DMA Engine. Sprite_TM built this stuff. configureDMA(m_cfg); //DMA and I2S configuration and setup - showDMABuffer(); // show backbuf_id of 0 + flipDMABuffer(); // show backbuf_id of 0 #if SERIAL_DEBUG if (!initialized) @@ -495,33 +495,27 @@ class MatrixPanel_I2S_DMA { inline void flipDMABuffer() { if ( !m_cfg.double_buff) return; - + + #if SERIAL_DEBUG + Serial.printf_P(PSTR("Showtime for buffer: %d\n"), back_buffer_id); + #endif + + i2s_parallel_flip_to_buffer(I2S_NUM_0, back_buffer_id); + // Flip to other buffer as the backbuffer. i.e. Graphic changes happen to this buffer (but aren't displayed until showDMABuffer()) back_buffer_id ^= 1; - #if SERIAL_DEBUG + #if SERIAL_DEBUG Serial.printf_P(PSTR("Set back buffer to: %d\n"), back_buffer_id); - #endif - - // Wait before we allow any writing to the buffer. Stop flicker. - while(!i2s_parallel_is_previous_buffer_free()) { delay(1); } + #endif } - inline void showDMABuffer() - { - - if (!m_cfg.double_buff) return; + // stub function for compatibility + void showDMABuffer(){} - #if SERIAL_DEBUG - Serial.printf_P(PSTR("Showtime for buffer: %d\n"), back_buffer_id); - #endif - - i2s_parallel_flip_to_buffer(I2S_NUM_0, back_buffer_id); + // check if backbuffer still has DMA transfer in progress or is it safe to write there + bool backbuffready(){ return i2s_parallel_is_previous_buffer_free(); } - // Wait before we allow any writing to the buffer. Stop flicker. - while(!i2s_parallel_is_previous_buffer_free()) { delay(1); } - } - inline void setPanelBrightness(int b) { // Change to set the brightness of the display, range of 1 to matrixWidth (i.e. 1 - 64) diff --git a/ESP32-VirtualMatrixPanel-I2S-DMA.h b/ESP32-VirtualMatrixPanel-I2S-DMA.h index c7b6a13..5ae1dac 100644 --- a/ESP32-VirtualMatrixPanel-I2S-DMA.h +++ b/ESP32-VirtualMatrixPanel-I2S-DMA.h @@ -98,7 +98,9 @@ class VirtualMatrixPanel } void flipDMABuffer() { display->flipDMABuffer(); } - void showDMABuffer() { display->showDMABuffer(); } + void showDMABuffer() {} + bool backbuffready(){ return display->backbuffready(); } + void drawDisplayTest(); |
