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