Select missions with right encoder
This commit is contained in:
@ -7,17 +7,16 @@ class FrontendHeap;
|
||||
|
||||
using namespace touchgfx;
|
||||
|
||||
class FrontendApplication : public FrontendApplicationBase
|
||||
{
|
||||
class FrontendApplication : public FrontendApplicationBase {
|
||||
public:
|
||||
FrontendApplication(Model& m, FrontendHeap& heap);
|
||||
virtual ~FrontendApplication() { }
|
||||
FrontendApplication(Model &m, FrontendHeap &heap);
|
||||
virtual ~FrontendApplication() {}
|
||||
|
||||
virtual void handleTickEvent() {
|
||||
FrontendApplicationBase::handleTickEvent();
|
||||
model.tick();
|
||||
}
|
||||
|
||||
virtual void handleTickEvent()
|
||||
{
|
||||
model.tick();
|
||||
FrontendApplicationBase::handleTickEvent();
|
||||
}
|
||||
private:
|
||||
};
|
||||
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
#ifndef MISSIONSELECTELEMENT_HPP
|
||||
#define MISSIONSELECTELEMENT_HPP
|
||||
|
||||
#include "touchgfx/hal/Types.hpp"
|
||||
#include <gui_generated/containers/MissionSelectElementBase.hpp>
|
||||
#include <texts/TextKeysAndLanguages.hpp>
|
||||
|
||||
@ -12,8 +13,11 @@ public:
|
||||
virtual void initialize();
|
||||
|
||||
void setUp(uint32_t i, TEXTS label);
|
||||
void setSelected(bool selected);
|
||||
|
||||
protected:
|
||||
private:
|
||||
touchgfx::colortype bgColor;
|
||||
};
|
||||
|
||||
#endif // MISSIONSELECTELEMENT_HPP
|
||||
|
||||
@ -8,29 +8,32 @@ using namespace touchgfx;
|
||||
|
||||
class MissionSelectView;
|
||||
|
||||
class MissionSelectPresenter : public touchgfx::Presenter, public ModelListener
|
||||
{
|
||||
class MissionSelectPresenter : public touchgfx::Presenter,
|
||||
public ModelListener {
|
||||
public:
|
||||
MissionSelectPresenter(MissionSelectView& v);
|
||||
MissionSelectPresenter(MissionSelectView &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 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();
|
||||
/**
|
||||
* 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 ~MissionSelectPresenter() {};
|
||||
virtual ~MissionSelectPresenter(){};
|
||||
|
||||
virtual void notifyMissionChanged(Mission mission) override;
|
||||
|
||||
private:
|
||||
MissionSelectPresenter();
|
||||
MissionSelectPresenter();
|
||||
|
||||
MissionSelectView& view;
|
||||
MissionSelectView &view;
|
||||
};
|
||||
|
||||
#endif // MISSIONSELECTPRESENTER_HPP
|
||||
|
||||
@ -1,17 +1,22 @@
|
||||
#ifndef MISSIONSELECTVIEW_HPP
|
||||
#define MISSIONSELECTVIEW_HPP
|
||||
|
||||
#include <gui_generated/missionselect_screen/MissionSelectViewBase.hpp>
|
||||
#include "gui/containers/MissionSelectElement.hpp"
|
||||
#include <gui/missionselect_screen/MissionSelectPresenter.hpp>
|
||||
#include <gui_generated/missionselect_screen/MissionSelectViewBase.hpp>
|
||||
|
||||
class MissionSelectView : public MissionSelectViewBase
|
||||
{
|
||||
class MissionSelectView : public MissionSelectViewBase {
|
||||
public:
|
||||
MissionSelectView();
|
||||
virtual ~MissionSelectView() {}
|
||||
virtual void setupScreen();
|
||||
virtual void tearDownScreen();
|
||||
MissionSelectView();
|
||||
virtual ~MissionSelectView() {}
|
||||
virtual void setupScreen();
|
||||
virtual void tearDownScreen();
|
||||
|
||||
void setSelectedMission(Mission mission);
|
||||
|
||||
protected:
|
||||
private:
|
||||
MissionSelectElement *selected;
|
||||
};
|
||||
|
||||
#endif // MISSIONSELECTVIEW_HPP
|
||||
|
||||
@ -1,21 +1,24 @@
|
||||
#ifndef MODEL_HPP
|
||||
#define MODEL_HPP
|
||||
|
||||
#include "stw_defines.h"
|
||||
class ModelListener;
|
||||
|
||||
class Model
|
||||
{
|
||||
class Model {
|
||||
public:
|
||||
Model();
|
||||
Model();
|
||||
|
||||
void bind(ModelListener* listener)
|
||||
{
|
||||
modelListener = listener;
|
||||
}
|
||||
void bind(ModelListener *listener) { modelListener = listener; }
|
||||
|
||||
void tick();
|
||||
|
||||
Mission getCurrentMission() const { return mission; }
|
||||
|
||||
void tick();
|
||||
protected:
|
||||
ModelListener* modelListener;
|
||||
ModelListener *modelListener;
|
||||
|
||||
private:
|
||||
Mission mission;
|
||||
};
|
||||
|
||||
#endif // MODEL_HPP
|
||||
|
||||
@ -3,19 +3,20 @@
|
||||
|
||||
#include <gui/model/Model.hpp>
|
||||
|
||||
class ModelListener
|
||||
{
|
||||
public:
|
||||
ModelListener() : model(0) {}
|
||||
|
||||
virtual ~ModelListener() {}
|
||||
#include "stw_defines.h"
|
||||
|
||||
class ModelListener {
|
||||
public:
|
||||
ModelListener() : model(0) {}
|
||||
|
||||
virtual ~ModelListener() {}
|
||||
|
||||
void bind(Model *m) { model = m; }
|
||||
|
||||
virtual void notifyMissionChanged(Mission newMission){};
|
||||
|
||||
void bind(Model* m)
|
||||
{
|
||||
model = m;
|
||||
}
|
||||
protected:
|
||||
Model* model;
|
||||
Model *model;
|
||||
};
|
||||
|
||||
#endif // MODELLISTENER_HPP
|
||||
|
||||
@ -11,11 +11,21 @@ void MissionSelectElement::initialize() {
|
||||
void MissionSelectElement::setUp(uint32_t i, TEXTS label) {
|
||||
uint8_t val;
|
||||
if (i % 2 == 0) {
|
||||
val = 0b1000;
|
||||
} else {
|
||||
val = 0b10000;
|
||||
} else {
|
||||
val = 0b11000;
|
||||
}
|
||||
bg.setColor(touchgfx::Color::getColorFromRGB(val, val, val));
|
||||
bgColor = touchgfx::Color::getColorFromRGB(val, val, val);
|
||||
bg.setColor(bgColor);
|
||||
|
||||
text.setTypedText(TypedText(label));
|
||||
}
|
||||
|
||||
void MissionSelectElement::setSelected(bool selected) {
|
||||
if (selected) {
|
||||
bg.setColor(touchgfx::Color::getColorFromRGB(0xc5, 0x0e, 0x1f));
|
||||
} else {
|
||||
bg.setColor(bgColor);
|
||||
}
|
||||
bg.invalidate();
|
||||
}
|
||||
|
||||
@ -1,18 +1,13 @@
|
||||
#include <gui/missionselect_screen/MissionSelectView.hpp>
|
||||
#include <gui/missionselect_screen/MissionSelectPresenter.hpp>
|
||||
#include <gui/missionselect_screen/MissionSelectView.hpp>
|
||||
|
||||
MissionSelectPresenter::MissionSelectPresenter(MissionSelectView& v)
|
||||
: view(v)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void MissionSelectPresenter::activate()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void MissionSelectPresenter::deactivate()
|
||||
{
|
||||
MissionSelectPresenter::MissionSelectPresenter(MissionSelectView &v)
|
||||
: view(v) {}
|
||||
|
||||
void MissionSelectPresenter::activate() {}
|
||||
|
||||
void MissionSelectPresenter::deactivate() {}
|
||||
|
||||
void MissionSelectPresenter::notifyMissionChanged(Mission mission) {
|
||||
view.setSelectedMission(mission);
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#include "texts/TextKeysAndLanguages.hpp"
|
||||
#include <gui/missionselect_screen/MissionSelectView.hpp>
|
||||
|
||||
MissionSelectView::MissionSelectView() {}
|
||||
MissionSelectView::MissionSelectView() : selected{nullptr} {}
|
||||
|
||||
void MissionSelectView::setupScreen() {
|
||||
MissionSelectViewBase::setupScreen();
|
||||
@ -17,3 +17,36 @@ void MissionSelectView::setupScreen() {
|
||||
void MissionSelectView::tearDownScreen() {
|
||||
MissionSelectViewBase::tearDownScreen();
|
||||
}
|
||||
|
||||
void MissionSelectView::setSelectedMission(Mission mission) {
|
||||
if (selected != nullptr) {
|
||||
selected->setSelected(false);
|
||||
}
|
||||
|
||||
switch (mission) {
|
||||
case MISSION_NONE:
|
||||
break;
|
||||
case MISSION_ACCEL:
|
||||
selected = &accel;
|
||||
break;
|
||||
case MISSION_SKIDPAD:
|
||||
selected = &skidpad;
|
||||
break;
|
||||
case MISSION_AUTOX:
|
||||
selected = &autox;
|
||||
break;
|
||||
case MISSION_TRACKDRIVE:
|
||||
selected = &trackdrive;
|
||||
break;
|
||||
case MISSION_EBS:
|
||||
selected = &ebs;
|
||||
break;
|
||||
case MISSION_INSPECTION:
|
||||
selected = &inspection;
|
||||
break;
|
||||
case MISSION_MANUAL:
|
||||
selected = &manual;
|
||||
break;
|
||||
}
|
||||
selected->setSelected(true);
|
||||
}
|
||||
|
||||
@ -1,12 +1,43 @@
|
||||
#include "main.h"
|
||||
#include "stm32h7xx_hal_gpio.h"
|
||||
#include "stw_defines.h"
|
||||
#include "tx_api.h"
|
||||
#include "ui.h"
|
||||
#include <gui/model/Model.hpp>
|
||||
#include <gui/model/ModelListener.hpp>
|
||||
|
||||
Model::Model() : modelListener(0)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void Model::tick()
|
||||
{
|
||||
Model::Model() : modelListener(0), mission{MISSION_NONE} {}
|
||||
|
||||
void Model::tick() {
|
||||
UIMessage msg;
|
||||
while (tx_queue_receive(&ui_queue, &msg, TX_NO_WAIT) == TX_SUCCESS) {
|
||||
switch (msg.kind) {
|
||||
case UMK_BTN_RELEASED:
|
||||
// TODO: What do we do with this?
|
||||
break;
|
||||
case UMK_ENC_CW: {
|
||||
int mission_int = static_cast<int>(mission);
|
||||
mission_int++;
|
||||
// mission_int = 0 is MISSION_NONE, which we don't want to select.
|
||||
// NUM_MISSIONS is equal to the last mission, so check for strictly
|
||||
// greater.
|
||||
if (mission_int > NUM_MISSIONS) {
|
||||
mission_int = 1;
|
||||
}
|
||||
mission = static_cast<Mission>(mission_int);
|
||||
modelListener->notifyMissionChanged(mission);
|
||||
break;
|
||||
}
|
||||
case UMK_ENC_CCW:
|
||||
int mission_int = static_cast<int>(mission);
|
||||
mission_int--;
|
||||
if (mission_int <= 0) {
|
||||
mission_int = NUM_MISSIONS;
|
||||
}
|
||||
mission = static_cast<Mission>(mission_int);
|
||||
modelListener->notifyMissionChanged(mission);
|
||||
break;
|
||||
}
|
||||
HAL_GPIO_TogglePin(STATUS2_GPIO_Port, STATUS2_Pin);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user