Show if parameter change has been confirmed by ABX
This commit is contained in:
		@ -48,7 +48,10 @@ extern FDCAN_HandleTypeDef hfdcan1;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define GUI_UPDATE_VEHICLE_STATE (1 << 0)
 | 
					#define GUI_UPDATE_VEHICLE_STATE (1 << 0)
 | 
				
			||||||
#define GUI_UPDATE_NEXT_SCREEN (1 << 1)
 | 
					#define GUI_UPDATE_NEXT_SCREEN (1 << 1)
 | 
				
			||||||
#define GUI_UPDATE_ALL (GUI_UPDATE_VEHICLE_STATE | GUI_UPDATE_NEXT_SCREEN)
 | 
					#define GUI_UPDATE_PARAM_CONFIRMED (1 << 2)
 | 
				
			||||||
 | 
					#define GUI_UPDATE_ALL                                                         \
 | 
				
			||||||
 | 
					  (GUI_UPDATE_VEHICLE_STATE | GUI_UPDATE_NEXT_SCREEN |                         \
 | 
				
			||||||
 | 
					   GUI_UPDATE_PARAM_CONFIRMED)
 | 
				
			||||||
/* USER CODE END EC */
 | 
					/* USER CODE END EC */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Exported macro ------------------------------------------------------------*/
 | 
					/* Exported macro ------------------------------------------------------------*/
 | 
				
			||||||
 | 
				
			|||||||
@ -5,6 +5,7 @@
 | 
				
			|||||||
extern "C" {
 | 
					extern "C" {
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "params.h"
 | 
				
			||||||
#include "stw_defines.h"
 | 
					#include "stw_defines.h"
 | 
				
			||||||
#include <stdint.h>
 | 
					#include <stdint.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -168,6 +169,8 @@ typedef struct {
 | 
				
			|||||||
  float desired_speed;
 | 
					  float desired_speed;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ConePosition cone_pos[NUM_CONES];
 | 
					  ConePosition cone_pos[NUM_CONES];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ParamType last_param_confirmed;
 | 
				
			||||||
} VehicleState;
 | 
					} VehicleState;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern VehicleState vehicle_state;
 | 
					extern VehicleState vehicle_state;
 | 
				
			||||||
 | 
				
			|||||||
@ -28,6 +28,7 @@
 | 
				
			|||||||
#define CAN_ID_STW_PARAM_SET 0x402
 | 
					#define CAN_ID_STW_PARAM_SET 0x402
 | 
				
			||||||
#define CAN_ID_AS_MISSION_FB 0x410
 | 
					#define CAN_ID_AS_MISSION_FB 0x410
 | 
				
			||||||
#define CAN_ID_STW_STATUS 0x412
 | 
					#define CAN_ID_STW_STATUS 0x412
 | 
				
			||||||
 | 
					#define CAN_ID_ABX_PARAM_CONFIRMED 0x413
 | 
				
			||||||
#define CAN_ID_STW_CONES_BASE 0x414
 | 
					#define CAN_ID_STW_CONES_BASE 0x414
 | 
				
			||||||
#define CAN_ID_STW_CONES_MASK 0x7FC
 | 
					#define CAN_ID_STW_CONES_MASK 0x7FC
 | 
				
			||||||
#define CAN_ID_SHUNT_CURRENT 0x521
 | 
					#define CAN_ID_SHUNT_CURRENT 0x521
 | 
				
			||||||
@ -62,6 +63,7 @@ void vehicle_thread_entry(ULONG hfdcan_addr) {
 | 
				
			|||||||
  ftcan_add_filter(CAN_ID_EPSC_OUT, 0x7FF);
 | 
					  ftcan_add_filter(CAN_ID_EPSC_OUT, 0x7FF);
 | 
				
			||||||
  ftcan_add_filter(CAN_ID_AS_MISSION_FB, 0x7FF);
 | 
					  ftcan_add_filter(CAN_ID_AS_MISSION_FB, 0x7FF);
 | 
				
			||||||
  ftcan_add_filter(CAN_ID_STW_STATUS, 0x7FF);
 | 
					  ftcan_add_filter(CAN_ID_STW_STATUS, 0x7FF);
 | 
				
			||||||
 | 
					  ftcan_add_filter(CAN_ID_ABX_PARAM_CONFIRMED, 0x7FF);
 | 
				
			||||||
  ftcan_add_filter(CAN_ID_STW_CONES_BASE, CAN_ID_STW_CONES_MASK);
 | 
					  ftcan_add_filter(CAN_ID_STW_CONES_BASE, CAN_ID_STW_CONES_MASK);
 | 
				
			||||||
  ftcan_add_filter(CAN_ID_SHUNT_CURRENT, 0x7FF);
 | 
					  ftcan_add_filter(CAN_ID_SHUNT_CURRENT, 0x7FF);
 | 
				
			||||||
  ftcan_add_filter(CAN_ID_SHUNT_VOLTAGE1, 0x7FF);
 | 
					  ftcan_add_filter(CAN_ID_SHUNT_VOLTAGE1, 0x7FF);
 | 
				
			||||||
@ -205,6 +207,10 @@ void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t *data) {
 | 
				
			|||||||
      vehicle_state.errors.err_invl = (data[5] >> 3) & 1;
 | 
					      vehicle_state.errors.err_invl = (data[5] >> 3) & 1;
 | 
				
			||||||
      vehicle_state.errors.err_invr = (data[5] >> 4) & 1;
 | 
					      vehicle_state.errors.err_invr = (data[5] >> 4) & 1;
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
 | 
					    case CAN_ID_ABX_PARAM_CONFIRMED:
 | 
				
			||||||
 | 
					      vehicle_state.last_param_confirmed = data[0];
 | 
				
			||||||
 | 
					      tx_event_flags_set(&gui_update_events, GUI_UPDATE_PARAM_CONFIRMED, TX_OR);
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
    case CAN_ID_SHUNT_CURRENT: {
 | 
					    case CAN_ID_SHUNT_CURRENT: {
 | 
				
			||||||
      // The first two bytes of shunt result messages are metadata
 | 
					      // The first two bytes of shunt result messages are metadata
 | 
				
			||||||
      const uint8_t *result_ptr = &data[2];
 | 
					      const uint8_t *result_ptr = &data[2];
 | 
				
			||||||
 | 
				
			|||||||
@ -14,6 +14,7 @@ public:
 | 
				
			|||||||
  virtual void initialize() override;
 | 
					  virtual void initialize() override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void setSelected(int selected);
 | 
					  void setSelected(int selected);
 | 
				
			||||||
 | 
					  void setDirty(bool dirty);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
 | 
				
			|||||||
@ -15,6 +15,7 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  virtual void vehicleStateUpdated(){};
 | 
					  virtual void vehicleStateUpdated(){};
 | 
				
			||||||
  virtual void nextScreen(){};
 | 
					  virtual void nextScreen(){};
 | 
				
			||||||
 | 
					  virtual void paramConfirmed(){};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
  Model *model;
 | 
					  Model *model;
 | 
				
			||||||
 | 
				
			|||||||
@ -17,18 +17,19 @@ public:
 | 
				
			|||||||
   * The activate function is called automatically when this screen is "switched
 | 
					   * The activate function is called automatically when this screen is "switched
 | 
				
			||||||
   * in" (ie. made active). Initialization logic can be placed here.
 | 
					   * in" (ie. made active). Initialization logic can be placed here.
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
  virtual void activate();
 | 
					  virtual void activate() override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /**
 | 
					  /**
 | 
				
			||||||
   * The deactivate function is called automatically when this screen is
 | 
					   * The deactivate function is called automatically when this screen is
 | 
				
			||||||
   * "switched out" (ie. made inactive). Teardown functionality can be placed
 | 
					   * "switched out" (ie. made inactive). Teardown functionality can be placed
 | 
				
			||||||
   * here.
 | 
					   * here.
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
  virtual void deactivate();
 | 
					  virtual void deactivate() override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  virtual ~VehicleConfigPresenter(){};
 | 
					  virtual ~VehicleConfigPresenter(){};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void nextScreen() override;
 | 
					  void nextScreen() override;
 | 
				
			||||||
 | 
					  void paramConfirmed() override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
  VehicleConfigPresenter();
 | 
					  VehicleConfigPresenter();
 | 
				
			||||||
 | 
				
			|||||||
@ -19,10 +19,14 @@ public:
 | 
				
			|||||||
  void incParam() override;
 | 
					  void incParam() override;
 | 
				
			||||||
  void confirmParam() override;
 | 
					  void confirmParam() override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void abxParamConfirmed(ParamType param);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
  int selectedParam;
 | 
					  int selectedParam;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  bool paramsDirty[ParamType_COUNT] = {false};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void updateSelectedParam(int select);
 | 
					  void updateSelectedParam(int select);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -13,6 +13,14 @@ void ConfigItem::setSelected(int selected) {
 | 
				
			|||||||
  bg.invalidate();
 | 
					  bg.invalidate();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ConfigItem::setDirty(bool dirty) {
 | 
				
			||||||
 | 
					  if (dirty) {
 | 
				
			||||||
 | 
					    value.setColor(touchgfx::Color::getColorFromRGB(0xFF, 0x00, 0x00));
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    value.setColor(touchgfx::Color::getColorFromRGB(0xFF, 0xFF, 0xFF));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ConfigItem::typeUpdated() {
 | 
					void ConfigItem::typeUpdated() {
 | 
				
			||||||
  switch (desc->kind) {
 | 
					  switch (desc->kind) {
 | 
				
			||||||
  case NamedFieldKind::Float:
 | 
					  case NamedFieldKind::Float:
 | 
				
			||||||
 | 
				
			|||||||
@ -17,9 +17,8 @@ void Model::tick() { modelListener->vehicleStateUpdated(); }
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void Model::tick() {
 | 
					void Model::tick() {
 | 
				
			||||||
  ULONG events;
 | 
					  ULONG events;
 | 
				
			||||||
  if (tx_event_flags_get(&gui_update_events,
 | 
					  if (tx_event_flags_get(&gui_update_events, GUI_UPDATE_ALL, TX_OR_CLEAR,
 | 
				
			||||||
                         GUI_UPDATE_VEHICLE_STATE | GUI_UPDATE_NEXT_SCREEN,
 | 
					                         &events, TX_NO_WAIT) != TX_SUCCESS) {
 | 
				
			||||||
                         TX_OR_CLEAR, &events, TX_NO_WAIT) != TX_SUCCESS) {
 | 
					 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  if (events & GUI_UPDATE_NEXT_SCREEN) {
 | 
					  if (events & GUI_UPDATE_NEXT_SCREEN) {
 | 
				
			||||||
@ -28,6 +27,9 @@ void Model::tick() {
 | 
				
			|||||||
  if (events & GUI_UPDATE_VEHICLE_STATE) {
 | 
					  if (events & GUI_UPDATE_VEHICLE_STATE) {
 | 
				
			||||||
    modelListener->vehicleStateUpdated();
 | 
					    modelListener->vehicleStateUpdated();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					  if (events & GUI_UPDATE_PARAM_CONFIRMED) {
 | 
				
			||||||
 | 
					    modelListener->paramConfirmed();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // SIMULATOR
 | 
					#endif // SIMULATOR
 | 
				
			||||||
 | 
				
			|||||||
@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					#include "vehicle_state.h"
 | 
				
			||||||
#include <gui/vehicleconfig_screen/VehicleConfigPresenter.hpp>
 | 
					#include <gui/vehicleconfig_screen/VehicleConfigPresenter.hpp>
 | 
				
			||||||
#include <gui/vehicleconfig_screen/VehicleConfigView.hpp>
 | 
					#include <gui/vehicleconfig_screen/VehicleConfigView.hpp>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -12,3 +13,7 @@ void VehicleConfigPresenter::nextScreen() {
 | 
				
			|||||||
  static_cast<FrontendApplication *>(Application::getInstance())
 | 
					  static_cast<FrontendApplication *>(Application::getInstance())
 | 
				
			||||||
      ->gotoDebugViewScreenNoTransition();
 | 
					      ->gotoDebugViewScreenNoTransition();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void VehicleConfigPresenter::paramConfirmed() {
 | 
				
			||||||
 | 
					  view.abxParamConfirmed(vehicle_state.last_param_confirmed);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -18,6 +18,7 @@ void VehicleConfigView::tearDownScreen() {
 | 
				
			|||||||
void VehicleConfigView::paramsUpdateItem(ConfigItem &item, int16_t itemIndex) {
 | 
					void VehicleConfigView::paramsUpdateItem(ConfigItem &item, int16_t itemIndex) {
 | 
				
			||||||
  item.setType(static_cast<ParamType>(itemIndex));
 | 
					  item.setType(static_cast<ParamType>(itemIndex));
 | 
				
			||||||
  item.setSelected(itemIndex == selectedParam);
 | 
					  item.setSelected(itemIndex == selectedParam);
 | 
				
			||||||
 | 
					  item.setDirty(paramsDirty[itemIndex]);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void VehicleConfigView::selectPrevParam() {
 | 
					void VehicleConfigView::selectPrevParam() {
 | 
				
			||||||
@ -34,10 +35,12 @@ void VehicleConfigView::selectNextParam() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void VehicleConfigView::decParam() {
 | 
					void VehicleConfigView::decParam() {
 | 
				
			||||||
  params_dec(static_cast<ParamType>(selectedParam));
 | 
					  params_dec(static_cast<ParamType>(selectedParam));
 | 
				
			||||||
 | 
					  paramsDirty[selectedParam] = true;
 | 
				
			||||||
  params.itemChanged(selectedParam);
 | 
					  params.itemChanged(selectedParam);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
void VehicleConfigView::incParam() {
 | 
					void VehicleConfigView::incParam() {
 | 
				
			||||||
  params_inc(static_cast<ParamType>(selectedParam));
 | 
					  params_inc(static_cast<ParamType>(selectedParam));
 | 
				
			||||||
 | 
					  paramsDirty[selectedParam] = true;
 | 
				
			||||||
  params.itemChanged(selectedParam);
 | 
					  params.itemChanged(selectedParam);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -45,6 +48,11 @@ void VehicleConfigView::confirmParam() {
 | 
				
			|||||||
  params_broadcast(static_cast<ParamType>(selectedParam));
 | 
					  params_broadcast(static_cast<ParamType>(selectedParam));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void VehicleConfigView::abxParamConfirmed(ParamType param) {
 | 
				
			||||||
 | 
					  paramsDirty[param] = false;
 | 
				
			||||||
 | 
					  params.itemChanged(param);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void VehicleConfigView::updateSelectedParam(int select) {
 | 
					void VehicleConfigView::updateSelectedParam(int select) {
 | 
				
			||||||
  int previousSelected = selectedParam;
 | 
					  int previousSelected = selectedParam;
 | 
				
			||||||
  selectedParam = select;
 | 
					  selectedParam = select;
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user