Fixed co-ordinate check bug in updateMatrixDMABuffer
Thanks to @FrenchLab47 for finding this one. Co-Authored-By: Patrick BESSE <pbe33@free.fr>
This commit is contained in:
parent
528c8ed561
commit
7f9fd475ac
3 changed files with 22 additions and 12 deletions
|
@ -175,8 +175,8 @@ void RGB64x32MatrixPanel_I2S_DMA::updateMatrixDMABuffer(int16_t x_coord, int16_t
|
||||||
if ( !dma_configuration_success)
|
if ( !dma_configuration_success)
|
||||||
assert("DMA configuration in begin() not performed or completed successfully.");
|
assert("DMA configuration in begin() not performed or completed successfully.");
|
||||||
|
|
||||||
// Need to check that the co-ordinate is within range, or it'll break everything big time.
|
// Need to check that the co-ordinates are within range, or it'll break everything big time.
|
||||||
if ( x_coord < 0 || y_coord < 0 || x_coord > MATRIX_WIDTH || y_coord > MATRIX_HEIGHT)
|
if ( x_coord < 0 || y_coord < 0 || x_coord >= MATRIX_WIDTH || y_coord >= MATRIX_HEIGHT)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -220,13 +220,13 @@ void RGB64x32MatrixPanel_I2S_DMA::updateMatrixDMABuffer(int16_t x_coord, int16_t
|
||||||
// turn off OE after brightness value is reached when displaying MSBs
|
// turn off OE after brightness value is reached when displaying MSBs
|
||||||
// MSBs always output normal brightness
|
// MSBs always output normal brightness
|
||||||
// LSB (!color_depth_idx) outputs normal brightness as MSB from previous row is being displayed
|
// LSB (!color_depth_idx) outputs normal brightness as MSB from previous row is being displayed
|
||||||
//if((color_depth_idx > lsbMsbTransitionBit || !color_depth_idx) && ((x_coord) >= brightness)) v|=BIT_OE;
|
//if((color_depth_idx > lsbMsbTransitionBit || !color_depth_idx) && ((x_coord) >= brightness)) v|=BIT_OE; // ???
|
||||||
|
|
||||||
// special case for the bits *after* LSB through (lsbMsbTransitionBit) - OE is output after data is shifted, so need to set OE to fractional brightness
|
// special case for the bits *after* LSB through (lsbMsbTransitionBit) - OE is output after data is shifted, so need to set OE to fractional brightness
|
||||||
if(color_depth_idx && color_depth_idx <= lsbMsbTransitionBit) {
|
if(color_depth_idx && color_depth_idx <= lsbMsbTransitionBit) {
|
||||||
// divide brightness in half for each bit below lsbMsbTransitionBit
|
// divide brightness in half for each bit below lsbMsbTransitionBit
|
||||||
int lsbBrightness = brightness >> (lsbMsbTransitionBit - color_depth_idx + 1);
|
int lsbBrightness = brightness >> (lsbMsbTransitionBit - color_depth_idx + 1);
|
||||||
// if((x_coord) >= lsbBrightness) v|=BIT_OE;
|
// if((x_coord) >= lsbBrightness) v|=BIT_OE; // ???
|
||||||
}
|
}
|
||||||
|
|
||||||
// need to turn off OE one clock before latch, otherwise can get ghosting
|
// need to turn off OE one clock before latch, otherwise can get ghosting
|
||||||
|
@ -315,7 +315,8 @@ void RGB64x32MatrixPanel_I2S_DMA::updateMatrixDMABuffer(int16_t x_coord, int16_t
|
||||||
|
|
||||||
} // updateDMABuffer
|
} // updateDMABuffer
|
||||||
|
|
||||||
|
/*
|
||||||
|
// WORK IN PROGRESS
|
||||||
void RGB64x32MatrixPanel_I2S_DMA::writeRGB24Frame2DMABuffer(rgb_24 *framedata, int16_t frame_width = MATRIX_WIDTH, int16_t frame_height = MATRIX_HEIGHT)
|
void RGB64x32MatrixPanel_I2S_DMA::writeRGB24Frame2DMABuffer(rgb_24 *framedata, int16_t frame_width = MATRIX_WIDTH, int16_t frame_height = MATRIX_HEIGHT)
|
||||||
{
|
{
|
||||||
if ( !dma_configuration_success)
|
if ( !dma_configuration_success)
|
||||||
|
@ -436,7 +437,7 @@ void RGB64x32MatrixPanel_I2S_DMA::writeRGB24Frame2DMABuffer(rgb_24 *framedata, i
|
||||||
|
|
||||||
|
|
||||||
} // updateDMABuffer
|
} // updateDMABuffer
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -171,7 +171,7 @@ class RGB64x32MatrixPanel_I2S_DMA : public Adafruit_GFX {
|
||||||
allocateDMAbuffers();
|
allocateDMAbuffers();
|
||||||
|
|
||||||
backbuf_id = 0;
|
backbuf_id = 0;
|
||||||
brightness = 16;
|
brightness = 32;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -193,7 +193,7 @@ class RGB64x32MatrixPanel_I2S_DMA : public Adafruit_GFX {
|
||||||
inline void drawPixelRGB24(int16_t x, int16_t y, rgb_24 color);
|
inline void drawPixelRGB24(int16_t x, int16_t y, rgb_24 color);
|
||||||
|
|
||||||
// TODO: Draw a frame! Oooh.
|
// TODO: Draw a frame! Oooh.
|
||||||
void writeRGB24Frame2DMABuffer(rgb_24 *framedata, int16_t frame_width, int16_t frame_height);
|
//void writeRGB24Frame2DMABuffer(rgb_24 *framedata, int16_t frame_width, int16_t frame_height);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -209,6 +209,8 @@ class RGB64x32MatrixPanel_I2S_DMA : public Adafruit_GFX {
|
||||||
|
|
||||||
void setBrightness(int _brightness)
|
void setBrightness(int _brightness)
|
||||||
{
|
{
|
||||||
|
// Change to set the brightness of the display, range of 1 to matrixWidth (i.e. 1 - 64)
|
||||||
|
// Warning: When set to 64, make sure to wear sunglasses when looking directly at panel :-)
|
||||||
brightness = _brightness;
|
brightness = _brightness;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,11 +32,18 @@ RGB64x32MatrixPanel_I2S_DMA matrix;
|
||||||
#include "GifDecoder.h"
|
#include "GifDecoder.h"
|
||||||
#include "FilenameFunctions.h"
|
#include "FilenameFunctions.h"
|
||||||
|
|
||||||
|
/* GIF files for this particular example need to be put into the 'data' directoy of the
|
||||||
|
* sketch and saved to the ESP32 using the "ESP32 Sketch Data Upload" tool in Arduino.
|
||||||
|
*
|
||||||
|
* URL: https://github.com/me-no-dev/arduino-esp32fs-plugin
|
||||||
|
*
|
||||||
|
*/
|
||||||
#define GIF_DIRECTORY "/"
|
#define GIF_DIRECTORY "/"
|
||||||
#define DISPLAY_TIME_SECONDS 5
|
#define DISPLAY_TIME_SECONDS 5
|
||||||
|
|
||||||
const uint8_t kMatrixWidth = 64; // known working: 32, 64, 96, 128
|
// Gif sizes should match exactly that of the RGB Matrix display.
|
||||||
const uint8_t kMatrixHeight = 32; // known working: 16, 32, 48, 64
|
const uint8_t GIFWidth = 64;
|
||||||
|
const uint8_t GIFHeight = 32;
|
||||||
|
|
||||||
/* template parameters are maxGifWidth, maxGifHeight, lzwMaxBits
|
/* template parameters are maxGifWidth, maxGifHeight, lzwMaxBits
|
||||||
*
|
*
|
||||||
|
@ -44,7 +51,7 @@ const uint8_t kMatrixHeight = 32; // known working: 16, 32, 48, 64
|
||||||
* lzwMaxBits can be set to 10 or 11 for small displays, 12 for large displays
|
* lzwMaxBits can be set to 10 or 11 for small displays, 12 for large displays
|
||||||
* All 32x32-pixel GIFs tested work with 11, most work with 10
|
* All 32x32-pixel GIFs tested work with 11, most work with 10
|
||||||
*/
|
*/
|
||||||
GifDecoder<kMatrixWidth, kMatrixHeight, 12> decoder;
|
GifDecoder<GIFWidth, GIFHeight, 12> decoder;
|
||||||
|
|
||||||
int num_files;
|
int num_files;
|
||||||
|
|
||||||
|
@ -57,7 +64,7 @@ void updateScreenCallback(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawPixelCallback(int16_t x, int16_t y, uint8_t red, uint8_t green, uint8_t blue) {
|
void drawPixelCallback(int16_t x, int16_t y, uint8_t red, uint8_t green, uint8_t blue) {
|
||||||
matrix.drawPixel(x, y, matrix.color565(red, green, blue));
|
matrix.drawPixelRGB888(x, y, red, green, blue);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Setup method runs once, when the sketch starts
|
// Setup method runs once, when the sketch starts
|
||||||
|
|
Loading…
Reference in a new issue