[simulation] Fix some potential crashes & 26 memory leaks, improve LCD redraws. (#4634)
* [simulation] Hardening: Fix some potential crashes & 26 memory leaks, improve LCD performance. * [simpgmspace] Init trims; Make sure `REa` is really defined (to match board files). * [simpgmspace][opentxsimulator] Verify current running state before start/stop; Move rotary enc. init. * [simpgmspace][LcdWidget] Improve performance by moving LCD content change check to lcdRefresh() & limiting LcdWidget refresh time to 60 fps max. * [simueeprom] Ensure thread could be started, set default running state to false. * [simufatfs] Fix paths report trace. * [eepromimportexport] Fix memory leaks resulting from import debugging scheme being used. * [customdebug] Introduce new scheme for custom debug output in compliance with Qt recommendations (see docs for QLoggingCategory). * [opentxeeprom] Fix extra conversion table cache elements being created and also not properly deleted (and hence leaking). * [opentxinterface] Unregister EEpromInterfaces in unregisterOpenTxFirmwares(); * [storage] Unregister storage factories on exit (fixes leak); create virtual StorageFormat/StorageFactory destructors (prevents warnings). * [helpers] GVarGroup now emits own signal, no need to pass ModelPanel pointer (removes dependency on modeledit.h) * [DebugOutput] Clear simulator trace hook before exiting (prevent possible issues); Fix leak and possible bad QString allocations when reading from buffer; Fix leak with combo box event filter. * [TelemetrySimulator] Fix leak by deleting LogPlaybackController object on exit; Only set up data fields once; convert timers to static. * [build] Consolidate all Companion/Simulator shared items in `common` library to reduce build time/etc (node & edge still remain awkward). * [simulatorwidget] Delete removed spacer object (previously-forgotten "26th" leak). * [DebugOutput] Fix stray trailing characters issue with new text buffer allocation (from previous commit); Increase maximum buffer sizes to better accommodate slower systems. * Cosmetics.
This commit is contained in:
committed by
Bertrand Songis
parent
52e65179a8
commit
4aa0c1bbe4
@@ -23,7 +23,7 @@
|
||||
#include <stdarg.h>
|
||||
#include <string>
|
||||
|
||||
#if !defined _MSC_VER || defined __GNUC__
|
||||
#if !defined (_MSC_VER) || defined (__GNUC__)
|
||||
#include <chrono>
|
||||
#include <sys/time.h>
|
||||
#endif
|
||||
@@ -135,6 +135,13 @@ void simuInit()
|
||||
simuSetSwitch(i, 0);
|
||||
simuSetKey(i, false); // a little dirty, but setting keys that don't exist is perfectly OK here
|
||||
}
|
||||
for (int i=0; i<(NUM_STICKS+NUM_AUX_TRIMS)*2; i++)
|
||||
simuSetTrim(i, false);
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
for (uint8_t i=0; i<DIM(rotencValue); i++)
|
||||
rotencValue[i] = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
#define NEG_CASE(sw_or_key, pin, mask) \
|
||||
@@ -216,9 +223,9 @@ void simuSetKey(uint8_t key, bool state)
|
||||
KEY_CASE(KEY_UP, KEYS_GPIO_REG_UP, KEYS_GPIO_PIN_UP)
|
||||
KEY_CASE(KEY_DOWN, KEYS_GPIO_REG_DOWN, KEYS_GPIO_PIN_DOWN)
|
||||
#endif
|
||||
#if defined(PCBSKY9X) && !defined(REVX) && !defined(AR9X)
|
||||
#if defined(PCBSKY9X) && !defined(REVX) && !defined(AR9X) && defined(ROTARY_ENCODERS)
|
||||
KEY_CASE(BTN_REa, PIOB->PIO_PDSR, 0x40)
|
||||
#elif defined(PCBGRUVIN9X) || defined(PCBMEGA2560)
|
||||
#elif (defined(PCBGRUVIN9X) || defined(PCBMEGA2560)) && (defined(ROTARY_ENCODERS) || defined(ROTARY_ENCODER_NAVIGATION))
|
||||
KEY_CASE(BTN_REa, pind, 0x20)
|
||||
#elif defined(PCB9X) && defined(ROTARY_ENCODER_NAVIGATION)
|
||||
KEY_CASE(BTN_REa, RotEncoder, 0x20)
|
||||
@@ -337,6 +344,9 @@ void simuSetSwitch(uint8_t swtch, int8_t state)
|
||||
|
||||
void StartSimu(bool tests, const char * sdPath, const char * settingsPath)
|
||||
{
|
||||
if (main_thread_running)
|
||||
return;
|
||||
|
||||
s_current_protocol[0] = 255;
|
||||
menuLevel = 0;
|
||||
|
||||
@@ -380,6 +390,9 @@ void StartSimu(bool tests, const char * sdPath, const char * settingsPath)
|
||||
|
||||
void StopSimu()
|
||||
{
|
||||
if (!main_thread_running)
|
||||
return;
|
||||
|
||||
main_thread_running = 0;
|
||||
|
||||
#if defined(CPUARM)
|
||||
@@ -525,6 +538,7 @@ void StartAudioThread(int volumeGain)
|
||||
simuAudio.leftoverLen = 0;
|
||||
simuAudio.threadRunning = true;
|
||||
simuAudio.volumeGain = volumeGain;
|
||||
TRACE_SIMPGMSPACE("StartAudioThread(%d)", volumeGain);
|
||||
setScaledVolume(VOLUME_LEVEL_DEF);
|
||||
|
||||
pthread_attr_t attr;
|
||||
@@ -569,12 +583,17 @@ void lcdOff()
|
||||
|
||||
void lcdRefresh()
|
||||
{
|
||||
static bool lightEnabled = (bool)isBacklightEnabled();
|
||||
|
||||
#if defined(PCBFLAMENCO)
|
||||
TW8823_SendScreen();
|
||||
#endif
|
||||
|
||||
memcpy(simuLcdBuf, displayBuf, sizeof(simuLcdBuf));
|
||||
simuLcdRefresh = true;
|
||||
if ((bool(isBacklightEnabled()) != lightEnabled) || memcmp(simuLcdBuf, displayBuf, DISPLAY_BUFFER_SIZE)) {
|
||||
memcpy(simuLcdBuf, displayBuf, DISPLAY_BUFFER_SIZE);
|
||||
lightEnabled = (bool)isBacklightEnabled();
|
||||
simuLcdRefresh = true;
|
||||
}
|
||||
}
|
||||
|
||||
void telemetryPortInit(uint8_t baudrate)
|
||||
|
||||
Reference in New Issue
Block a user