mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-20 14:55:21 +03:00
Merge pull request #7536 from etracer65/optimize_max7456_driver
Optimize MAX7456 driver invert and brightness functions
This commit is contained in:
commit
36e13b8f34
1 changed files with 28 additions and 8 deletions
|
@ -226,6 +226,11 @@ static bool fontIsLoading = false;
|
||||||
|
|
||||||
static uint8_t max7456DeviceType;
|
static uint8_t max7456DeviceType;
|
||||||
|
|
||||||
|
// previous states initialized outside the valid range to force update on first call
|
||||||
|
#define INVALID_PREVIOUS_REGISTER_STATE 255
|
||||||
|
static uint8_t previousBlackWhiteRegister = INVALID_PREVIOUS_REGISTER_STATE;
|
||||||
|
static uint8_t previousInvertRegister = INVALID_PREVIOUS_REGISTER_STATE;
|
||||||
|
|
||||||
static void max7456DrawScreenSlow(void);
|
static void max7456DrawScreenSlow(void);
|
||||||
|
|
||||||
static uint8_t max7456Send(uint8_t add, uint8_t data)
|
static uint8_t max7456Send(uint8_t add, uint8_t data)
|
||||||
|
@ -355,6 +360,11 @@ uint8_t max7456GetRowsCount(void)
|
||||||
return (videoSignalReg & VIDEO_MODE_PAL) ? VIDEO_LINES_PAL : VIDEO_LINES_NTSC;
|
return (videoSignalReg & VIDEO_MODE_PAL) ? VIDEO_LINES_PAL : VIDEO_LINES_NTSC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void max7456ClearShadowBuffer(void)
|
||||||
|
{
|
||||||
|
memset(shadowBuffer, 0, maxScreenSize);
|
||||||
|
}
|
||||||
|
|
||||||
void max7456ReInit(void)
|
void max7456ReInit(void)
|
||||||
{
|
{
|
||||||
uint8_t srdata = 0;
|
uint8_t srdata = 0;
|
||||||
|
@ -392,6 +402,7 @@ void max7456ReInit(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set all rows to same charactor black/white level
|
// Set all rows to same charactor black/white level
|
||||||
|
previousBlackWhiteRegister = INVALID_PREVIOUS_REGISTER_STATE;
|
||||||
max7456Brightness(0, 2);
|
max7456Brightness(0, 2);
|
||||||
// Re-enable MAX7456 (last function call disables it)
|
// Re-enable MAX7456 (last function call disables it)
|
||||||
__spiBusTransactionBegin(busdev);
|
__spiBusTransactionBegin(busdev);
|
||||||
|
@ -405,7 +416,7 @@ void max7456ReInit(void)
|
||||||
__spiBusTransactionEnd(busdev);
|
__spiBusTransactionEnd(busdev);
|
||||||
|
|
||||||
// Clear shadow to force redraw all screen in non-dma mode.
|
// Clear shadow to force redraw all screen in non-dma mode.
|
||||||
memset(shadowBuffer, 0, maxScreenSize);
|
max7456ClearShadowBuffer();
|
||||||
if (firstInit) {
|
if (firstInit) {
|
||||||
max7456DrawScreenSlow();
|
max7456DrawScreenSlow();
|
||||||
firstInit = false;
|
firstInit = false;
|
||||||
|
@ -516,9 +527,15 @@ void max7456Invert(bool invert)
|
||||||
displayMemoryModeReg &= ~INVERT_PIXEL_COLOR;
|
displayMemoryModeReg &= ~INVERT_PIXEL_COLOR;
|
||||||
}
|
}
|
||||||
|
|
||||||
__spiBusTransactionBegin(busdev);
|
if (displayMemoryModeReg != previousInvertRegister) {
|
||||||
max7456Send(MAX7456ADD_DMM, displayMemoryModeReg);
|
// clear the shadow buffer so all characters will be
|
||||||
__spiBusTransactionEnd(busdev);
|
// redrawn with the proper invert state
|
||||||
|
max7456ClearShadowBuffer();
|
||||||
|
previousInvertRegister = displayMemoryModeReg;
|
||||||
|
__spiBusTransactionBegin(busdev);
|
||||||
|
max7456Send(MAX7456ADD_DMM, displayMemoryModeReg);
|
||||||
|
__spiBusTransactionEnd(busdev);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -531,11 +548,14 @@ void max7456Brightness(uint8_t black, uint8_t white)
|
||||||
{
|
{
|
||||||
const uint8_t reg = (black << 2) | (3 - white);
|
const uint8_t reg = (black << 2) | (3 - white);
|
||||||
|
|
||||||
__spiBusTransactionBegin(busdev);
|
if (reg != previousBlackWhiteRegister) {
|
||||||
for (int i = MAX7456ADD_RB0; i <= MAX7456ADD_RB15; i++) {
|
previousBlackWhiteRegister = reg;
|
||||||
max7456Send(i, reg);
|
__spiBusTransactionBegin(busdev);
|
||||||
|
for (int i = MAX7456ADD_RB0; i <= MAX7456ADD_RB15; i++) {
|
||||||
|
max7456Send(i, reg);
|
||||||
|
}
|
||||||
|
__spiBusTransactionEnd(busdev);
|
||||||
}
|
}
|
||||||
__spiBusTransactionEnd(busdev);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//just fill with spaces with some tricks
|
//just fill with spaces with some tricks
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue