From 228e742702ea5ca3b74c01bdbd79f94c4b421594 Mon Sep 17 00:00:00 2001 From: board707 <50185434+board707@users.noreply.github.com> Date: Tue, 4 Jun 2024 10:41:26 +0300 Subject: [PATCH 1/2] Fix incorrect getCoords() for 16px_high panels --- src/ESP32-VirtualMatrixPanel-I2S-DMA.h | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/ESP32-VirtualMatrixPanel-I2S-DMA.h b/src/ESP32-VirtualMatrixPanel-I2S-DMA.h index d73fa7c..83f39da 100644 --- a/src/ESP32-VirtualMatrixPanel-I2S-DMA.h +++ b/src/ESP32-VirtualMatrixPanel-I2S-DMA.h @@ -405,22 +405,15 @@ inline VirtualCoords VirtualMatrixPanel::getCoords(int16_t virt_x, int16_t virt_ } else if (panel_scan_rate == FOUR_SCAN_16PX_HIGH) { - if ((virt_y & 8) == 0) + if ((virt_y & 4) == 0) { - coords.x += (panelResX >> 2) * (((coords.x & 0xFFF0) >> 4) + 1); // 1st, 3rd 'block' of 8 rows of pixels, offset by panel width in DMA buffer + coords.x += ((coords.x / panelResX) + 1) * panelResX; // 1st, 3rd 'block' of 8 rows of pixels, offset by panel width in DMA buffer } else { - coords.x += (panelResX >> 2) * (((coords.x & 0xFFF0) >> 4)); // 2nd, 4th 'block' of 8 rows of pixels, offset by panel width in DMA buffer - } - - if (virt_y < 32) - coords.y = (virt_y >> 4) * 8 + (virt_y & 0b00000111); - else - { - coords.y = ((virt_y - 32) >> 4) * 8 + (virt_y & 0b00000111); - coords.x += 256; + coords.x += (coords.x / panelResX) * panelResX; // 2nd, 4th 'block' of 8 rows of pixels, offset by panel width in DMA buffer } + coords.y = (coords.y >> 3) * 4 + (coords.y & 0b00000011); } return coords; From 459516b6db9c803360e32c0bd02ecd03b1a4a9a5 Mon Sep 17 00:00:00 2001 From: board707 <50185434+board707@users.noreply.github.com> Date: Tue, 18 Jun 2024 00:59:44 +0300 Subject: [PATCH 2/2] Fix incorrect virtual Y coordinate for second and next rows of panels --- src/ESP32-VirtualMatrixPanel-I2S-DMA.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ESP32-VirtualMatrixPanel-I2S-DMA.h b/src/ESP32-VirtualMatrixPanel-I2S-DMA.h index 83f39da..cf92a87 100644 --- a/src/ESP32-VirtualMatrixPanel-I2S-DMA.h +++ b/src/ESP32-VirtualMatrixPanel-I2S-DMA.h @@ -389,7 +389,7 @@ inline VirtualCoords VirtualMatrixPanel::getCoords(int16_t virt_x, int16_t virt_ as if the panel is 2 * W and 0.5 * H ! */ - if ((virt_y & 8) == 0) + if ((coords.y & 8) == 0) { coords.x += ((coords.x / panelResX) + 1) * panelResX; // 1st, 3rd 'block' of 8 rows of pixels, offset by panel width in DMA buffer } @@ -405,7 +405,7 @@ inline VirtualCoords VirtualMatrixPanel::getCoords(int16_t virt_x, int16_t virt_ } else if (panel_scan_rate == FOUR_SCAN_16PX_HIGH) { - if ((virt_y & 4) == 0) + if ((coords.y & 4) == 0) { coords.x += ((coords.x / panelResX) + 1) * panelResX; // 1st, 3rd 'block' of 8 rows of pixels, offset by panel width in DMA buffer }