From d9e2f85f98cd794c8288d0cd76697fb49ec7c666 Mon Sep 17 00:00:00 2001 From: mrfaptastic <12006953+mrfaptastic@users.noreply.github.com> Date: Thu, 19 Aug 2021 19:22:29 +0100 Subject: [PATCH] Revert "Merge branch 'master' of https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA" This reverts commit b6cbfce5dd3c99969eee8d506a6f9ecabbd81910, reversing changes made to c5227fd15eb6138ed6dce9a3504110eed04cb938. --- ESP32-HUB75-MatrixPanel-I2S-DMA.h | 34 ++++++++++++++++++------------ ESP32-VirtualMatrixPanel-I2S-DMA.h | 4 +--- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/ESP32-HUB75-MatrixPanel-I2S-DMA.h b/ESP32-HUB75-MatrixPanel-I2S-DMA.h index 927d428..f8648a1 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 - flipDMABuffer(); // show backbuf_id of 0 + showDMABuffer(); // show backbuf_id of 0 #if SERIAL_DEBUG if (!initialized) @@ -495,27 +495,33 @@ 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 + #endif + + // Wait before we allow any writing to the buffer. Stop flicker. + while(!i2s_parallel_is_previous_buffer_free()) { delay(1); } } - // stub function for compatibility - void showDMABuffer(){} + inline void showDMABuffer() + { + + if (!m_cfg.double_buff) return; - // 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(); } + #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); + // 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 5ae1dac..c7b6a13 100644 --- a/ESP32-VirtualMatrixPanel-I2S-DMA.h +++ b/ESP32-VirtualMatrixPanel-I2S-DMA.h @@ -98,9 +98,7 @@ class VirtualMatrixPanel } void flipDMABuffer() { display->flipDMABuffer(); } - void showDMABuffer() {} - bool backbuffready(){ return display->backbuffready(); } - + void showDMABuffer() { display->showDMABuffer(); } void drawDisplayTest();