Select missions with right encoder
This commit is contained in:
		@ -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