mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-25 17:25:20 +03:00
Change max7456 driver to only perform stall check once a second… (#9111)
Change max7456 driver to only perform stall check once a second instead of every drawScreen call
This commit is contained in:
commit
9b2fd4c465
1 changed files with 16 additions and 10 deletions
|
@ -119,6 +119,7 @@
|
||||||
#define VIN_IS_NTSC_alt(val) (!STAT_IS_LOS(val) && !STAT_IS_PAL(val))
|
#define VIN_IS_NTSC_alt(val) (!STAT_IS_LOS(val) && !STAT_IS_PAL(val))
|
||||||
|
|
||||||
#define MAX7456_SIGNAL_CHECK_INTERVAL_MS 1000 // msec
|
#define MAX7456_SIGNAL_CHECK_INTERVAL_MS 1000 // msec
|
||||||
|
#define MAX7456_STALL_CHECK_INTERVAL_MS 1000 // msec
|
||||||
|
|
||||||
// DMM special bits
|
// DMM special bits
|
||||||
#define CLEAR_DISPLAY 0x04
|
#define CLEAR_DISPLAY 0x04
|
||||||
|
@ -613,19 +614,24 @@ bool max7456BuffersSynced(void)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void max7456ReInitIfRequired(void)
|
void max7456ReInitIfRequired(bool forceStallCheck)
|
||||||
{
|
{
|
||||||
static uint32_t lastSigCheckMs = 0;
|
static timeMs_t lastSigCheckMs = 0;
|
||||||
static uint32_t videoDetectTimeMs = 0;
|
static timeMs_t videoDetectTimeMs = 0;
|
||||||
static uint16_t reInitCount = 0;
|
static uint16_t reInitCount = 0;
|
||||||
|
static timeMs_t lastStallCheckMs = MAX7456_STALL_CHECK_INTERVAL_MS / 2; // offset so that it doesn't coincide with the signal check
|
||||||
__spiBusTransactionBegin(busdev);
|
|
||||||
const uint8_t stallCheck = max7456Send(MAX7456ADD_VM0|MAX7456ADD_READ, 0x00);
|
|
||||||
__spiBusTransactionEnd(busdev);
|
|
||||||
|
|
||||||
const timeMs_t nowMs = millis();
|
const timeMs_t nowMs = millis();
|
||||||
|
|
||||||
if (stallCheck != videoSignalReg) {
|
bool stalled = false;
|
||||||
|
if (forceStallCheck || (lastStallCheckMs + MAX7456_STALL_CHECK_INTERVAL_MS < nowMs)) {
|
||||||
|
lastStallCheckMs = nowMs;
|
||||||
|
__spiBusTransactionBegin(busdev);
|
||||||
|
stalled = (max7456Send(MAX7456ADD_VM0|MAX7456ADD_READ, 0x00) != videoSignalReg);
|
||||||
|
__spiBusTransactionEnd(busdev);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stalled) {
|
||||||
max7456ReInit();
|
max7456ReInit();
|
||||||
} else if ((videoSignalCfg == VIDEO_SYSTEM_AUTO)
|
} else if ((videoSignalCfg == VIDEO_SYSTEM_AUTO)
|
||||||
&& ((nowMs - lastSigCheckMs) > MAX7456_SIGNAL_CHECK_INTERVAL_MS)) {
|
&& ((nowMs - lastSigCheckMs) > MAX7456_SIGNAL_CHECK_INTERVAL_MS)) {
|
||||||
|
@ -671,7 +677,7 @@ void max7456DrawScreen(void)
|
||||||
|
|
||||||
// (Re)Initialize MAX7456 at startup or stall is detected.
|
// (Re)Initialize MAX7456 at startup or stall is detected.
|
||||||
|
|
||||||
max7456ReInitIfRequired();
|
max7456ReInitIfRequired(false);
|
||||||
|
|
||||||
int buff_len = 0;
|
int buff_len = 0;
|
||||||
for (int k = 0; k < MAX_CHARS2UPDATE; k++) {
|
for (int k = 0; k < MAX_CHARS2UPDATE; k++) {
|
||||||
|
@ -751,7 +757,7 @@ void max7456RefreshAll(void)
|
||||||
while (dmaTransactionInProgress);
|
while (dmaTransactionInProgress);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
max7456ReInitIfRequired();
|
max7456ReInitIfRequired(true);
|
||||||
max7456DrawScreenSlow();
|
max7456DrawScreenSlow();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue