Move R2D/precharge bar to custom container

This commit is contained in:
2024-06-11 22:17:21 +02:00
parent 5a66f9bc54
commit cb2f55be1b
19 changed files with 382 additions and 170 deletions

View File

@ -0,0 +1,23 @@
#ifndef PROGRESSBAR_HPP
#define PROGRESSBAR_HPP
#include <gui_generated/containers/ProgressBarBase.hpp>
enum class ProgressType { PRECHARGE, R2D };
class ProgressBar : public ProgressBarBase {
public:
ProgressBar();
virtual ~ProgressBar() {}
virtual void initialize();
void setProgress(bool active, ProgressType type, float progress);
protected:
private:
touchgfx::Unicode::UnicodeChar r2dProgBuffer[16];
touchgfx::Unicode::UnicodeChar socBuffer[4];
};
#endif // PROGRESSBAR_HPP

View File

@ -3,15 +3,12 @@
#include "gui/common/NamedField.hpp"
#include "gui/containers/DriverViewFieldSelection.hpp"
#include "touchgfx/Unicode.hpp"
#include "touchgfx/containers/scrollers/DrawableList.hpp"
#include "gui/containers/ProgressBar.hpp"
#include <gui/driverview_screen/DriverViewPresenter.hpp>
#include <gui_generated/driverview_screen/DriverViewViewBase.hpp>
#include "vehicle_state.h"
enum class DriverViewProgressType { PRECHARGE, R2D };
class DriverViewView : public DriverViewViewBase {
public:
DriverViewView();
@ -28,7 +25,7 @@ public:
void setTemps(const Temperatures &temps);
void setTSSoC(uint8_t soc);
void setProgress(bool active, DriverViewProgressType type, float progress);
void setProgress(bool active, ProgressType type, float progress);
void showAMSError();
void clearErrorPopup();
@ -53,7 +50,6 @@ private:
size_t selectedFieldIndex;
DataFieldType fieldTypes[NUM_FIELDS];
touchgfx::Unicode::UnicodeChar r2dProgBuffer[16];
touchgfx::Unicode::UnicodeChar socBuffer[4];
};

View File

@ -0,0 +1,45 @@
#include "gui/common/NamedField.hpp"
#include <gui/containers/ProgressBar.hpp>
ProgressBar::ProgressBar() {}
void ProgressBar::initialize() { ProgressBarBase::initialize(); }
void ProgressBar::setProgress(bool active, ProgressType type, float progress) {
if (active) {
switch (type) {
case ProgressType::PRECHARGE:
prechargeLabel.setVisible(true);
r2dLabel.setVisible(false);
r2dProgressLabel.setVisible(false);
progressBar.setValue(progress);
break;
case ProgressType::R2D:
const char *progText = static_cast<const char *>(get_r2dprog_text());
touchgfx::Unicode::strncpy(r2dProgBuffer, progText,
sizeof(r2dProgBuffer) /
sizeof(*r2dProgBuffer));
r2dProgressLabel.setWildcard(r2dProgBuffer);
r2dProgressLabel.setVisible(true);
r2dLabel.setVisible(true);
prechargeLabel.setVisible(false);
progress = progress - R2D_TSACTIVE;
progressBar.setValue(progress * 100 / 5);
break;
}
prechargeLabel.invalidate();
r2dProgressLabel.invalidate();
r2dLabel.invalidate();
progressBar.setVisible(true);
progressBar.invalidate();
} else if (progressBar.isVisible()) {
prechargeLabel.setVisible(false);
prechargeLabel.invalidate();
r2dLabel.setVisible(false);
r2dLabel.invalidate();
r2dProgressLabel.setVisible(false);
r2dProgressLabel.invalidate();
progressBar.setVisible(false);
progressBar.invalidate();
}
}

View File

@ -2,6 +2,7 @@
#include <gui/driverview_screen/DriverViewView.hpp>
#include "gui/common/NamedField.hpp"
#include "gui/containers/ProgressBar.hpp"
constexpr int32_t SHOW_ERRORS_FOR = 10000; // ms
@ -48,13 +49,12 @@ void DriverViewPresenter::updateProgress() {
progress =
vehicle_state.ts_voltage_veh / vehicle_state.ts_voltage_bat * 100;
}
view.setProgress(true, DriverViewProgressType::PRECHARGE, progress);
view.setProgress(true, ProgressType::PRECHARGE, progress);
} else if (vehicle_state.r2d_progress > R2D_TSACTIVE &&
vehicle_state.r2d_progress < R2D_INIT_SUCCESS) {
view.setProgress(true, DriverViewProgressType::R2D,
vehicle_state.r2d_progress);
view.setProgress(true, ProgressType::R2D, vehicle_state.r2d_progress);
} else {
view.setProgress(false, DriverViewProgressType::PRECHARGE, 0);
view.setProgress(false, ProgressType::PRECHARGE, 0);
}
}

View File

@ -1,6 +1,7 @@
#include "gui/common/NamedField.hpp"
#include "gui/containers/DriverViewField.hpp"
#include "gui/containers/DriverViewStatusItem.hpp"
#include "gui/containers/ProgressBar.hpp"
#include "gui/driverview_screen/DriverViewPresenter.hpp"
#include "texts/TextKeysAndLanguages.hpp"
#include "touchgfx/Callback.hpp"
@ -96,44 +97,9 @@ void DriverViewView::setTSSoC(uint8_t value) {
socLabel.invalidate();
}
void DriverViewView::setProgress(bool active, DriverViewProgressType type,
void DriverViewView::setProgress(bool active, ProgressType type,
float progress) {
if (active) {
switch (type) {
case DriverViewProgressType::PRECHARGE:
prechargeLabel.setVisible(true);
r2dLabel.setVisible(false);
r2dProgressLabel.setVisible(false);
progressBar.setValue(progress);
break;
case DriverViewProgressType::R2D:
const char *progText = static_cast<const char *>(get_r2dprog_text());
touchgfx::Unicode::strncpy(r2dProgBuffer, progText,
sizeof(r2dProgBuffer) /
sizeof(*r2dProgBuffer));
r2dProgressLabel.setWildcard(r2dProgBuffer);
r2dProgressLabel.setVisible(true);
r2dLabel.setVisible(true);
prechargeLabel.setVisible(false);
progress = progress - R2D_TSACTIVE;
progressBar.setValue(progress * 100 / 5);
break;
}
prechargeLabel.invalidate();
r2dProgressLabel.invalidate();
r2dLabel.invalidate();
progressBar.setVisible(true);
progressBar.invalidate();
} else if (progressBar.isVisible()) {
prechargeLabel.setVisible(false);
prechargeLabel.invalidate();
r2dLabel.setVisible(false);
r2dLabel.invalidate();
r2dProgressLabel.setVisible(false);
r2dProgressLabel.invalidate();
progressBar.setVisible(false);
progressBar.invalidate();
}
progressBar.setProgress(active, type, progress);
}
void DriverViewView::showAMSError() {