Show initial checkup state & hydraulic pressures
This commit is contained in:
		@ -30,6 +30,8 @@ public:
 | 
			
		||||
  virtual void tearDownScreen();
 | 
			
		||||
 | 
			
		||||
  void setMission(Mission mission);
 | 
			
		||||
  void setASState(ASState state);
 | 
			
		||||
  void setIniChkState(IniChkState state);
 | 
			
		||||
 | 
			
		||||
  void updateDataFields();
 | 
			
		||||
  void setJetsonTimeout(bool timeout);
 | 
			
		||||
@ -38,11 +40,17 @@ public:
 | 
			
		||||
  void setConePositions(ConePosition *positions, size_t count);
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
  AMIDataField paField;
 | 
			
		||||
  AMIDataField pbField;
 | 
			
		||||
  AMIDataField pfField;
 | 
			
		||||
  AMIDataField prField;
 | 
			
		||||
 | 
			
		||||
  AMIDataField desiredAngleField;
 | 
			
		||||
  AMIDataField measuredAngleField;
 | 
			
		||||
  AMIDataField desiredSpeedField;
 | 
			
		||||
  AMIDataField measuredSpeedField;
 | 
			
		||||
 | 
			
		||||
  touchgfx::Unicode::UnicodeChar progressBuffer[16];
 | 
			
		||||
  touchgfx::Shape<3> cones[NUM_CONES] = {cone0, cone1, cone2, cone3, cone4,
 | 
			
		||||
                                         cone5, cone6, cone7, cone8, cone9};
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -1,9 +1,12 @@
 | 
			
		||||
#include <gui/ami_screen/AMIPresenter.hpp>
 | 
			
		||||
#include <gui/ami_screen/AMIView.hpp>
 | 
			
		||||
 | 
			
		||||
#include "stm32h7xx_hal.h"
 | 
			
		||||
#include "vehicle_state.h"
 | 
			
		||||
 | 
			
		||||
#ifndef SIMULATOR
 | 
			
		||||
#include "stm32h7xx_hal.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
AMIPresenter::AMIPresenter(AMIView &v) : view(v) {}
 | 
			
		||||
 | 
			
		||||
void AMIPresenter::activate() { vehicleStateUpdated(); }
 | 
			
		||||
@ -12,6 +15,7 @@ void AMIPresenter::deactivate() {}
 | 
			
		||||
 | 
			
		||||
void AMIPresenter::vehicleStateUpdated() {
 | 
			
		||||
  view.setMission(vehicle_state.active_mission);
 | 
			
		||||
  view.setASState(vehicle_state.as_state);
 | 
			
		||||
  view.updateDataFields();
 | 
			
		||||
#ifndef SIMULATOR
 | 
			
		||||
  view.setJetsonTimeout(HAL_GetTick() - vehicle_state.last_jetson_msg > 500);
 | 
			
		||||
 | 
			
		||||
@ -1,3 +1,6 @@
 | 
			
		||||
#include <gui/ami_screen/AMIView.hpp>
 | 
			
		||||
 | 
			
		||||
#include "gui/containers/DriverViewStatusItem.hpp"
 | 
			
		||||
#include "gui_generated/ami_screen/AMIViewBase.hpp"
 | 
			
		||||
#include "stw_defines.h"
 | 
			
		||||
#include "texts/TextKeysAndLanguages.hpp"
 | 
			
		||||
@ -6,7 +9,6 @@
 | 
			
		||||
#include "touchgfx/Unicode.hpp"
 | 
			
		||||
#include "touchgfx/widgets/TextAreaWithWildcard.hpp"
 | 
			
		||||
#include "vehicle_state.h"
 | 
			
		||||
#include <gui/ami_screen/AMIView.hpp>
 | 
			
		||||
 | 
			
		||||
AMIDataField::AMIDataField(touchgfx::TextAreaWithOneWildcard &textArea,
 | 
			
		||||
                           const char *fmt)
 | 
			
		||||
@ -19,7 +21,9 @@ void AMIDataField::setValue(float value) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
AMIView::AMIView()
 | 
			
		||||
    : AMIViewBase(), desiredAngleField(desiredAngle, "%5.2f"),
 | 
			
		||||
    : AMIViewBase(), paField(pressA, "%5.1f"), pbField(pressB, "%5.1f"),
 | 
			
		||||
      pfField(pressFront, "%5.1f"), prField(pressRear, "%5.1f"),
 | 
			
		||||
      desiredAngleField(desiredAngle, "%5.2f"),
 | 
			
		||||
      measuredAngleField(measuredAngle, "%5.2f"),
 | 
			
		||||
      desiredSpeedField(desiredSpeed, "%5.1f"),
 | 
			
		||||
      measuredSpeedField(measuredSpeed, "%5.1f") {}
 | 
			
		||||
@ -57,7 +61,79 @@ void AMIView::setMission(Mission mission) {
 | 
			
		||||
  currentMission.invalidate();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AMIView::setASState(ASState state) {
 | 
			
		||||
  if (state == AS_READY || state == AS_DRIVING) {
 | 
			
		||||
    init.setVisible(false);
 | 
			
		||||
    driving.setVisible(true);
 | 
			
		||||
  } else {
 | 
			
		||||
    init.setVisible(true);
 | 
			
		||||
    driving.setVisible(false);
 | 
			
		||||
  }
 | 
			
		||||
  init.invalidate();
 | 
			
		||||
  driving.invalidate();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AMIView::setIniChkState(IniChkState state) {
 | 
			
		||||
  if (state == INICHK_ERROR) {
 | 
			
		||||
    progressBar.setColor(DriverViewStatusItem::COLOR_ERROR);
 | 
			
		||||
    progressBar.setValue(100);
 | 
			
		||||
  } else {
 | 
			
		||||
    if (state == INICHK_WAIT_TS) {
 | 
			
		||||
      progressBar.setColor(DriverViewStatusItem::COLOR_TS);
 | 
			
		||||
    } else {
 | 
			
		||||
      progressBar.setColor(DriverViewStatusItem::COLOR_OK);
 | 
			
		||||
    }
 | 
			
		||||
    float prog = ((float)vehicle_state.ini_chk_state) / INICHK_DONE;
 | 
			
		||||
    progressBar.setValue(prog * 100);
 | 
			
		||||
  }
 | 
			
		||||
  progressBar.invalidate();
 | 
			
		||||
 | 
			
		||||
  const char *label;
 | 
			
		||||
  switch (vehicle_state.ini_chk_state) {
 | 
			
		||||
  case INICHK_START:
 | 
			
		||||
    label = "START";
 | 
			
		||||
    break;
 | 
			
		||||
  case INICHK_WD_CHECK:
 | 
			
		||||
    label = "WD CHK";
 | 
			
		||||
    break;
 | 
			
		||||
  case INICHK_WD_OK:
 | 
			
		||||
    label = "WD OK";
 | 
			
		||||
    break;
 | 
			
		||||
  case INICHK_ASB_CHECK_1:
 | 
			
		||||
    label = "ASB CHK 1";
 | 
			
		||||
    break;
 | 
			
		||||
  case INICHK_ASB_CHECK_2:
 | 
			
		||||
    label = "ASB CHK 2";
 | 
			
		||||
    break;
 | 
			
		||||
  case INICHK_WAIT_TS:
 | 
			
		||||
    label = "WAIT TS";
 | 
			
		||||
    break;
 | 
			
		||||
  case INICHK_EBS_CHECK_A:
 | 
			
		||||
    label = "EBS CHK A";
 | 
			
		||||
    break;
 | 
			
		||||
  case INICHK_EBS_CHECK_B:
 | 
			
		||||
    label = "EBS CHK B";
 | 
			
		||||
    break;
 | 
			
		||||
  case INICHK_DONE:
 | 
			
		||||
    label = "DONE";
 | 
			
		||||
    break;
 | 
			
		||||
  case INICHK_ERROR:
 | 
			
		||||
    label = "ERROR";
 | 
			
		||||
    break;
 | 
			
		||||
  }
 | 
			
		||||
  touchgfx::Unicode::strncpy(progressBuffer, label,
 | 
			
		||||
                             sizeof(progressBuffer) / sizeof(*progressBuffer));
 | 
			
		||||
  progressLabel.setWildcard(progressBuffer);
 | 
			
		||||
  progressLabel.invalidate();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AMIView::updateDataFields() {
 | 
			
		||||
  // TODO: Accumulator pressures aren't transmitted yet
 | 
			
		||||
  paField.setValue(0);
 | 
			
		||||
  pbField.setValue(0);
 | 
			
		||||
  pfField.setValue(vehicle_state.brake_press_f);
 | 
			
		||||
  prField.setValue(vehicle_state.brake_press_r);
 | 
			
		||||
 | 
			
		||||
  desiredAngleField.setValue(vehicle_state.desired_angle);
 | 
			
		||||
  measuredAngleField.setValue(vehicle_state.measured_angle);
 | 
			
		||||
  desiredSpeedField.setValue(vehicle_state.desired_speed);
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user