[colorlcd] Warn on model change if telemetry-enabled model connected (#1467)
* Warn on connected model (#1466) * Make it so not confirming aborts model change * add delay before accepting disconnected telemtry * Add power off delay * Remove whitespace + time unit in name Co-authored-by: Peter Feerick <peter.feerick@gmail.com>
This commit is contained in:
@@ -42,6 +42,7 @@ constexpr coord_t MODEL_SELECT_CELL_HEIGHT = 92;
|
||||
constexpr coord_t MODEL_IMAGE_WIDTH = MODEL_SELECT_CELL_WIDTH;
|
||||
constexpr coord_t MODEL_IMAGE_HEIGHT = 72;
|
||||
|
||||
inline tmr10ms_t getTicks() { return g_tmr10ms; }
|
||||
|
||||
class ModelButton : public Button
|
||||
{
|
||||
@@ -208,11 +209,30 @@ class ModelCategoryPageBody : public FormWindow
|
||||
Menu *menu = new Menu(parent);
|
||||
if (model != modelslist.getCurrentModel()) {
|
||||
menu->addLine(STR_SELECT_MODEL, [=]() {
|
||||
// we store the latest changes if any
|
||||
bool modelConnected = TELEMETRY_STREAMING() &&
|
||||
!g_eeGeneral.disableRssiPoweroffAlarm;
|
||||
if (modelConnected) {
|
||||
AUDIO_ERROR_MESSAGE(AU_MODEL_STILL_POWERED);
|
||||
if (!confirmationDialog(
|
||||
STR_MODEL_STILL_POWERED, nullptr, false, []() {
|
||||
tmr10ms_t startTime = getTicks();
|
||||
while (!TELEMETRY_STREAMING()) {
|
||||
if (getTicks() - startTime > TELEMETRY_CHECK_DELAY10ms)
|
||||
break;
|
||||
}
|
||||
return !TELEMETRY_STREAMING() ||
|
||||
g_eeGeneral.disableRssiPoweroffAlarm;
|
||||
})) {
|
||||
return; // stop if connected but not confirmed
|
||||
}
|
||||
}
|
||||
|
||||
// store changes (if any) and load selected model
|
||||
storageFlushCurrentModel();
|
||||
storageCheck(true);
|
||||
memcpy(g_eeGeneral.currModelFilename, model->modelFilename,
|
||||
LEN_MODEL_FILENAME);
|
||||
|
||||
loadModel(g_eeGeneral.currModelFilename, false);
|
||||
storageDirty(EE_GENERAL);
|
||||
storageCheck(true);
|
||||
|
||||
@@ -2048,6 +2048,10 @@ uint32_t pwrPressedDuration()
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(COLORLCD)
|
||||
inline tmr10ms_t getTicks() { return g_tmr10ms; }
|
||||
#endif
|
||||
|
||||
uint32_t pwrCheck()
|
||||
{
|
||||
const char * message = nullptr;
|
||||
@@ -2138,7 +2142,11 @@ uint32_t pwrCheck()
|
||||
}
|
||||
else if (!modelConnectedConfirmed) {
|
||||
message = STR_MODEL_STILL_POWERED;
|
||||
closeCondition = [](){
|
||||
closeCondition = []() {
|
||||
tmr10ms_t startTime = getTicks();
|
||||
while (!TELEMETRY_STREAMING()) {
|
||||
if (getTicks() - startTime > TELEMETRY_CHECK_DELAY10ms) break;
|
||||
}
|
||||
return !TELEMETRY_STREAMING() || g_eeGeneral.disableRssiPoweroffAlarm;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -471,6 +471,8 @@ void alert(const char * title, const char * msg, uint8_t sound);
|
||||
|
||||
#elif defined(COLORLCD)
|
||||
|
||||
#define TELEMETRY_CHECK_DELAY10ms 150
|
||||
|
||||
bool confirmationDialog(const char *title, const char *msg, bool checkPwr = true, const std::function<bool(void)>& closeCondition = nullptr);
|
||||
|
||||
void raiseAlert(const char *title, const char *msg, const char *info,
|
||||
|
||||
Reference in New Issue
Block a user