Get started on driver view

This commit is contained in:
2023-03-15 18:43:38 +01:00
parent 641fa3b236
commit 5b6405cf29
47 changed files with 2137 additions and 30 deletions

View File

@ -0,0 +1,24 @@
#ifndef TIRETEMP_HPP
#define TIRETEMP_HPP
#include <gui_generated/containers/TireTempBase.hpp>
#include <sys/_stdint.h>
class TireTemp : public TireTempBase {
public:
TireTemp();
virtual ~TireTemp() {}
virtual void initialize();
virtual void setTemp(int temp_in_celsius);
protected:
private:
unsigned temp;
Unicode::UnicodeChar valueBuffer[3];
void updateValueBuffer();
};
#endif // TIRETEMP_HPP

View File

@ -0,0 +1,38 @@
#ifndef DRIVERVIEWPRESENTER_HPP
#define DRIVERVIEWPRESENTER_HPP
#include <gui/model/ModelListener.hpp>
#include <mvp/Presenter.hpp>
using namespace touchgfx;
class DriverViewView;
class DriverViewPresenter : public touchgfx::Presenter, public ModelListener {
public:
DriverViewPresenter(DriverViewView &v);
/**
* The activate function is called automatically when this screen is "switched
* in" (ie. made active). Initialization logic can be placed here.
*/
virtual void activate();
/**
* The deactivate function is called automatically when this screen is
* "switched out" (ie. made inactive). Teardown functionality can be placed
* here.
*/
virtual void deactivate();
virtual ~DriverViewPresenter(){};
void tireTempsUpdated() override;
private:
DriverViewPresenter();
DriverViewView &view;
};
#endif // DRIVERVIEWPRESENTER_HPP

View File

@ -0,0 +1,20 @@
#ifndef DRIVERVIEWVIEW_HPP
#define DRIVERVIEWVIEW_HPP
#include "vehicle.h"
#include <gui/driverview_screen/DriverViewPresenter.hpp>
#include <gui_generated/driverview_screen/DriverViewViewBase.hpp>
class DriverViewView : public DriverViewViewBase {
public:
DriverViewView();
virtual ~DriverViewView() {}
virtual void setupScreen();
virtual void tearDownScreen();
void setTireTemps(const TireTemps &temps);
protected:
};
#endif // DRIVERVIEWVIEW_HPP

View File

@ -2,6 +2,7 @@
#define MODEL_HPP
#include "stw_defines.h"
#include "vehicle.h"
class ModelListener;
class Model {
@ -14,12 +15,14 @@ public:
void setMission(Mission mission) { this->mission = mission; }
Mission getMission() { return mission; }
TireTemps getTireTemps() { return tireTemps; }
protected:
ModelListener *modelListener;
private:
Mission mission;
TireTemps tireTemps;
};
#endif // MODEL_HPP

View File

@ -13,6 +13,8 @@ public:
void bind(Model *m) { model = m; }
virtual void tireTempsUpdated(){};
protected:
Model *model;
};

View File

@ -0,0 +1,42 @@
#include "touchgfx/Color.hpp"
#include "touchgfx/Unicode.hpp"
#include <gui/containers/TireTemp.hpp>
TireTemp::TireTemp() : temp{0} { updateValueBuffer(); }
void TireTemp::initialize() { TireTempBase::initialize(); }
void TireTemp::setTemp(int temp_in_celsius) {
if (temp_in_celsius < 0) {
// No space for displaying negative values
temp_in_celsius = 0;
}
if (temp_in_celsius == temp) {
// No change
return;
}
temp = temp_in_celsius;
updateValueBuffer();
if (temp < 35) {
bg.setColor(touchgfx::Color::getColorFromRGB(0x05, 0x76, 0xb7));
} else if (temp < 40) {
bg.setColor(touchgfx::Color::getColorFromRGB(0x05, 0x76, 0x64));
} else if (temp < 50) {
bg.setColor(touchgfx::Color::getColorFromRGB(0x05, 0x95, 0x38));
} else if (temp < 60) {
bg.setColor(touchgfx::Color::getColorFromRGB(0xdd, 0x6e, 0x22));
} else {
bg.setColor(touchgfx::Color::getColorFromRGB(0xdd, 0x2f, 0x22));
}
value.invalidate();
bg.invalidate(); // TODO: Only invalidate if color changed
}
void TireTemp::updateValueBuffer() {
// Unicode::utoa(temp, valueBuffer, 3, 10);
Unicode::snprintf(valueBuffer,
sizeof(valueBuffer) / sizeof(Unicode::UnicodeChar), "%02u",
temp);
value.setWildcard(valueBuffer);
}

View File

@ -0,0 +1,13 @@
#include <gui/driverview_screen/DriverViewPresenter.hpp>
#include <gui/driverview_screen/DriverViewView.hpp>
DriverViewPresenter::DriverViewPresenter(DriverViewView &v) : view(v) {}
void DriverViewPresenter::activate() {}
void DriverViewPresenter::deactivate() {}
void DriverViewPresenter::tireTempsUpdated() {
view.setTireTemps(model->getTireTemps());
}

View File

@ -0,0 +1,14 @@
#include <gui/driverview_screen/DriverViewView.hpp>
DriverViewView::DriverViewView() {}
void DriverViewView::setupScreen() { DriverViewViewBase::setupScreen(); }
void DriverViewView::tearDownScreen() { DriverViewViewBase::tearDownScreen(); }
void DriverViewView::setTireTemps(const TireTemps &temps) {
tireTempFL.setTemp(temps.fl);
tireTempFR.setTemp(temps.fr);
tireTempRL.setTemp(temps.rl);
tireTempRR.setTemp(temps.rr);
}

View File

@ -51,7 +51,11 @@ void MissionSelectView::confirmMission() {
return;
}
presenter->confirmMission(selectedMission);
application().gotoAMIScreenNoTransition();
if (selectedMission == MISSION_MANUAL) {
application().gotoDriverViewScreenNoTransition();
} else {
application().gotoAMIScreenNoTransition();
}
}
void MissionSelectView::setSelectedMission(Mission mission) {

View File

@ -1,11 +1,42 @@
#include "main.h"
#include "stm32h7xx_hal.h"
#include "stm32h7xx_hal_gpio.h"
#include "stw_defines.h"
#include "tx_api.h"
#include "ui.h"
#include "vehicle.h"
#include <gui/model/Model.hpp>
#include <gui/model/ModelListener.hpp>
Model::Model() : modelListener(0) {}
void Model::tick() {}
void Model::tick() {
static int incs = 0;
if ((HAL_GetTick() / 10) % 5 == 0) {
tireTemps.fl++;
if (tireTemps.fl > 90) {
tireTemps.fl = 0;
}
if (incs % 2 == 0) {
tireTemps.fr++;
if (tireTemps.fr > 90) {
tireTemps.fr = 0;
}
}
if (incs % 3 == 0) {
tireTemps.rl++;
if (tireTemps.rl > 90) {
tireTemps.rl = 0;
}
}
if (incs % 4 == 0) {
tireTemps.rr++;
if (tireTemps.rr > 90) {
tireTemps.rr = 0;
}
}
incs++;
modelListener->tireTempsUpdated();
}
}