Compare commits

...

4 Commits

16 changed files with 69 additions and 577 deletions

1
.gitignore vendored
View File

@ -8,3 +8,4 @@ TouchGFX/build
/TouchGFX/screenshots /TouchGFX/screenshots
/TouchGFX/*_backup.touchgfx /TouchGFX/*_backup.touchgfx
/steering-wheel.ioc_bkp /steering-wheel.ioc_bkp
/STM32Make.make

View File

@ -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 ------------------------------------------------------------*/

View File

@ -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>
@ -156,6 +157,8 @@ typedef struct {
float brake_press_f; float brake_press_f;
float brake_press_r; float brake_press_r;
float hyd_press_a;
float hyd_press_b;
float distance_total; float distance_total;
@ -166,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;

View File

@ -98,6 +98,7 @@ void params_broadcast(ParamType param) {
break; break;
case PF_PLIM: case PF_PLIM:
value = params.plim; value = params.plim;
break;
default: default:
return; return;
} }

View File

@ -21,12 +21,14 @@
#define CAN_ID_ABX_BRAKE_T 0x105 #define CAN_ID_ABX_BRAKE_T 0x105
#define CAN_ID_CS_INTERNAL 0x108 #define CAN_ID_CS_INTERNAL 0x108
#define CAN_ID_ABX_MISC 0x109 #define CAN_ID_ABX_MISC 0x109
#define CAN_ID_ABX_HYDRAULICS 0x110
#define CAN_ID_EPSC_OUT 0x321 #define CAN_ID_EPSC_OUT 0x321
#define CAN_ID_MISSION_SELECTED 0x400 #define CAN_ID_MISSION_SELECTED 0x400
#define CAN_ID_STW_BUTTONS 0x401 #define CAN_ID_STW_BUTTONS 0x401
#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
@ -37,6 +39,7 @@
#define CAN_JETSON_TX_ANGLE_FACTOR 0.00784314f #define CAN_JETSON_TX_ANGLE_FACTOR 0.00784314f
#define CAN_JETSON_TX_SPEED_FACTOR (0.2 * 3.6) #define CAN_JETSON_TX_SPEED_FACTOR (0.2 * 3.6)
#define CAN_ABX_DRIVER_SPEED_FACTOR (0.2 * 3.6) #define CAN_ABX_DRIVER_SPEED_FACTOR (0.2 * 3.6)
#define CAN_ABX_DRIVER_PRESS_FACTOR 0.1f
#define CAN_CS_INTERNAL_TEMP_FACTOR 0.01 #define CAN_CS_INTERNAL_TEMP_FACTOR 0.01
#define CAN_ABX_MISC_DISTANCE_TOTAL_FACTOR 0.01 #define CAN_ABX_MISC_DISTANCE_TOTAL_FACTOR 0.01
#define CAN_ABX_MISC_LV_BAT_VOLTAGE_FACTOR (15.0f / 255) #define CAN_ABX_MISC_LV_BAT_VOLTAGE_FACTOR (15.0f / 255)
@ -56,9 +59,11 @@ void vehicle_thread_entry(ULONG hfdcan_addr) {
ftcan_add_filter(CAN_ID_ABX_BRAKE_T, 0x7FF); ftcan_add_filter(CAN_ID_ABX_BRAKE_T, 0x7FF);
ftcan_add_filter(CAN_ID_CS_INTERNAL, 0x7FF); ftcan_add_filter(CAN_ID_CS_INTERNAL, 0x7FF);
ftcan_add_filter(CAN_ID_ABX_MISC, 0x7FF); ftcan_add_filter(CAN_ID_ABX_MISC, 0x7FF);
ftcan_add_filter(CAN_ID_ABX_HYDRAULICS, 0x7FF);
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);
@ -130,10 +135,18 @@ void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t *data) {
((int8_t)data[2]) * CAN_JETSON_TX_ANGLE_FACTOR; ((int8_t)data[2]) * CAN_JETSON_TX_ANGLE_FACTOR;
break; break;
case CAN_ID_ABX_DRIVER: case CAN_ID_ABX_DRIVER:
vehicle_state.brake_press_f = (data[1] | ((data[2] & 0x0F) << 8)) * 0.1; vehicle_state.brake_press_f =
vehicle_state.brake_press_r = ((data[2] >> 4) | (data[3] << 4)) * 0.1; (data[1] | ((data[2] & 0x0F) << 8)) * CAN_ABX_DRIVER_PRESS_FACTOR;
vehicle_state.brake_press_r =
((data[2] >> 4) | (data[3] << 4)) * CAN_ABX_DRIVER_PRESS_FACTOR;
vehicle_state.speed = data[5] * CAN_ABX_DRIVER_SPEED_FACTOR; vehicle_state.speed = data[5] * CAN_ABX_DRIVER_SPEED_FACTOR;
break; break;
case CAN_ID_ABX_HYDRAULICS:
vehicle_state.hyd_press_a =
(data[0] | ((data[1] & 0x0F) << 8)) * CAN_ABX_DRIVER_PRESS_FACTOR;
vehicle_state.hyd_press_b =
((data[1] >> 4) | (data[2] << 4)) * CAN_ABX_DRIVER_PRESS_FACTOR;
break;
case CAN_ID_ABX_TIMINGS: case CAN_ID_ABX_TIMINGS:
vehicle_state.lap_best = (data[0] | (data[1] << 8)) * 0.01f; vehicle_state.lap_best = (data[0] | (data[1] << 8)) * 0.01f;
vehicle_state.lap_last = (data[2] | (data[3] << 8)) * 0.01f; vehicle_state.lap_last = (data[2] | (data[3] << 8)) * 0.01f;
@ -194,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];

View File

@ -1,565 +0,0 @@
##########################################################################################################################
# File automatically-generated by STM32forVSCode
##########################################################################################################################
# ------------------------------------------------
# Generic Makefile (based on gcc)
#
# ChangeLog :
# 2017-02-10 - Several enhancements + project update mode
# 2015-07-22 - first version
# ------------------------------------------------
######################################
# target
######################################
TARGET = steering-wheel
######################################
# building variables
######################################
# debug build?
DEBUG = 1
# optimization
OPT = -Og
#######################################
# paths
#######################################
# Build path
BUILD_DIR = build
######################################
# source
######################################
# C sources
C_SOURCES = \
AZURE_RTOS/App/app_azure_rtos.c \
Core/Src/app.c \
Core/Src/app_threadx.c \
Core/Src/hx8357d.c \
Core/Src/leds.c \
Core/Src/params.c \
Core/Src/shorttimer.c \
Core/Src/stm32h7xx_hal_msp.c \
Core/Src/stm32h7xx_hal_timebase_tim.c \
Core/Src/stm32h7xx_it.c \
Core/Src/system_stm32h7xx.c \
Core/Src/ui.c \
Core/Src/vehicle.c \
Core/Src/vehicle_state.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_cortex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_crc.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_crc_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma2d.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_exti.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_fdcan.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_gpio.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_hsem.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_jpeg.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_ltdc.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_ltdc_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mdma.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_ospi.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_spi.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_spi_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_tim.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_tim_ex.c \
Middlewares/ST/threadx/common/src/tx_block_allocate.c \
Middlewares/ST/threadx/common/src/tx_block_pool_cleanup.c \
Middlewares/ST/threadx/common/src/tx_block_pool_create.c \
Middlewares/ST/threadx/common/src/tx_block_pool_delete.c \
Middlewares/ST/threadx/common/src/tx_block_pool_info_get.c \
Middlewares/ST/threadx/common/src/tx_block_pool_initialize.c \
Middlewares/ST/threadx/common/src/tx_block_pool_prioritize.c \
Middlewares/ST/threadx/common/src/tx_block_release.c \
Middlewares/ST/threadx/common/src/tx_byte_allocate.c \
Middlewares/ST/threadx/common/src/tx_byte_pool_cleanup.c \
Middlewares/ST/threadx/common/src/tx_byte_pool_create.c \
Middlewares/ST/threadx/common/src/tx_byte_pool_delete.c \
Middlewares/ST/threadx/common/src/tx_byte_pool_info_get.c \
Middlewares/ST/threadx/common/src/tx_byte_pool_initialize.c \
Middlewares/ST/threadx/common/src/tx_byte_pool_prioritize.c \
Middlewares/ST/threadx/common/src/tx_byte_pool_search.c \
Middlewares/ST/threadx/common/src/tx_byte_release.c \
Middlewares/ST/threadx/common/src/tx_event_flags_cleanup.c \
Middlewares/ST/threadx/common/src/tx_event_flags_create.c \
Middlewares/ST/threadx/common/src/tx_event_flags_delete.c \
Middlewares/ST/threadx/common/src/tx_event_flags_get.c \
Middlewares/ST/threadx/common/src/tx_event_flags_info_get.c \
Middlewares/ST/threadx/common/src/tx_event_flags_initialize.c \
Middlewares/ST/threadx/common/src/tx_event_flags_set.c \
Middlewares/ST/threadx/common/src/tx_event_flags_set_notify.c \
Middlewares/ST/threadx/common/src/tx_initialize_high_level.c \
Middlewares/ST/threadx/common/src/tx_initialize_kernel_enter.c \
Middlewares/ST/threadx/common/src/tx_initialize_kernel_setup.c \
Middlewares/ST/threadx/common/src/tx_mutex_cleanup.c \
Middlewares/ST/threadx/common/src/tx_mutex_create.c \
Middlewares/ST/threadx/common/src/tx_mutex_delete.c \
Middlewares/ST/threadx/common/src/tx_mutex_get.c \
Middlewares/ST/threadx/common/src/tx_mutex_info_get.c \
Middlewares/ST/threadx/common/src/tx_mutex_initialize.c \
Middlewares/ST/threadx/common/src/tx_mutex_prioritize.c \
Middlewares/ST/threadx/common/src/tx_mutex_priority_change.c \
Middlewares/ST/threadx/common/src/tx_mutex_put.c \
Middlewares/ST/threadx/common/src/tx_queue_cleanup.c \
Middlewares/ST/threadx/common/src/tx_queue_create.c \
Middlewares/ST/threadx/common/src/tx_queue_delete.c \
Middlewares/ST/threadx/common/src/tx_queue_flush.c \
Middlewares/ST/threadx/common/src/tx_queue_front_send.c \
Middlewares/ST/threadx/common/src/tx_queue_info_get.c \
Middlewares/ST/threadx/common/src/tx_queue_initialize.c \
Middlewares/ST/threadx/common/src/tx_queue_prioritize.c \
Middlewares/ST/threadx/common/src/tx_queue_receive.c \
Middlewares/ST/threadx/common/src/tx_queue_send.c \
Middlewares/ST/threadx/common/src/tx_queue_send_notify.c \
Middlewares/ST/threadx/common/src/tx_semaphore_ceiling_put.c \
Middlewares/ST/threadx/common/src/tx_semaphore_cleanup.c \
Middlewares/ST/threadx/common/src/tx_semaphore_create.c \
Middlewares/ST/threadx/common/src/tx_semaphore_delete.c \
Middlewares/ST/threadx/common/src/tx_semaphore_get.c \
Middlewares/ST/threadx/common/src/tx_semaphore_info_get.c \
Middlewares/ST/threadx/common/src/tx_semaphore_initialize.c \
Middlewares/ST/threadx/common/src/tx_semaphore_prioritize.c \
Middlewares/ST/threadx/common/src/tx_semaphore_put.c \
Middlewares/ST/threadx/common/src/tx_semaphore_put_notify.c \
Middlewares/ST/threadx/common/src/tx_thread_create.c \
Middlewares/ST/threadx/common/src/tx_thread_delete.c \
Middlewares/ST/threadx/common/src/tx_thread_entry_exit_notify.c \
Middlewares/ST/threadx/common/src/tx_thread_identify.c \
Middlewares/ST/threadx/common/src/tx_thread_info_get.c \
Middlewares/ST/threadx/common/src/tx_thread_initialize.c \
Middlewares/ST/threadx/common/src/tx_thread_preemption_change.c \
Middlewares/ST/threadx/common/src/tx_thread_priority_change.c \
Middlewares/ST/threadx/common/src/tx_thread_relinquish.c \
Middlewares/ST/threadx/common/src/tx_thread_reset.c \
Middlewares/ST/threadx/common/src/tx_thread_resume.c \
Middlewares/ST/threadx/common/src/tx_thread_shell_entry.c \
Middlewares/ST/threadx/common/src/tx_thread_sleep.c \
Middlewares/ST/threadx/common/src/tx_thread_stack_analyze.c \
Middlewares/ST/threadx/common/src/tx_thread_stack_error_handler.c \
Middlewares/ST/threadx/common/src/tx_thread_stack_error_notify.c \
Middlewares/ST/threadx/common/src/tx_thread_suspend.c \
Middlewares/ST/threadx/common/src/tx_thread_system_preempt_check.c \
Middlewares/ST/threadx/common/src/tx_thread_system_resume.c \
Middlewares/ST/threadx/common/src/tx_thread_system_suspend.c \
Middlewares/ST/threadx/common/src/tx_thread_terminate.c \
Middlewares/ST/threadx/common/src/tx_thread_time_slice.c \
Middlewares/ST/threadx/common/src/tx_thread_time_slice_change.c \
Middlewares/ST/threadx/common/src/tx_thread_timeout.c \
Middlewares/ST/threadx/common/src/tx_thread_wait_abort.c \
Middlewares/ST/threadx/common/src/tx_time_get.c \
Middlewares/ST/threadx/common/src/tx_time_set.c \
Middlewares/ST/threadx/common/src/tx_timer_activate.c \
Middlewares/ST/threadx/common/src/tx_timer_change.c \
Middlewares/ST/threadx/common/src/tx_timer_create.c \
Middlewares/ST/threadx/common/src/tx_timer_deactivate.c \
Middlewares/ST/threadx/common/src/tx_timer_delete.c \
Middlewares/ST/threadx/common/src/tx_timer_expiration_process.c \
Middlewares/ST/threadx/common/src/tx_timer_info_get.c \
Middlewares/ST/threadx/common/src/tx_timer_initialize.c \
Middlewares/ST/threadx/common/src/tx_timer_system_activate.c \
Middlewares/ST/threadx/common/src/tx_timer_system_deactivate.c \
Middlewares/ST/threadx/common/src/tx_timer_thread_entry.c \
Middlewares/ST/threadx/common/src/txe_block_allocate.c \
Middlewares/ST/threadx/common/src/txe_block_pool_create.c \
Middlewares/ST/threadx/common/src/txe_block_pool_delete.c \
Middlewares/ST/threadx/common/src/txe_block_pool_info_get.c \
Middlewares/ST/threadx/common/src/txe_block_pool_prioritize.c \
Middlewares/ST/threadx/common/src/txe_block_release.c \
Middlewares/ST/threadx/common/src/txe_byte_allocate.c \
Middlewares/ST/threadx/common/src/txe_byte_pool_create.c \
Middlewares/ST/threadx/common/src/txe_byte_pool_delete.c \
Middlewares/ST/threadx/common/src/txe_byte_pool_info_get.c \
Middlewares/ST/threadx/common/src/txe_byte_pool_prioritize.c \
Middlewares/ST/threadx/common/src/txe_byte_release.c \
Middlewares/ST/threadx/common/src/txe_event_flags_create.c \
Middlewares/ST/threadx/common/src/txe_event_flags_delete.c \
Middlewares/ST/threadx/common/src/txe_event_flags_get.c \
Middlewares/ST/threadx/common/src/txe_event_flags_info_get.c \
Middlewares/ST/threadx/common/src/txe_event_flags_set.c \
Middlewares/ST/threadx/common/src/txe_event_flags_set_notify.c \
Middlewares/ST/threadx/common/src/txe_mutex_create.c \
Middlewares/ST/threadx/common/src/txe_mutex_delete.c \
Middlewares/ST/threadx/common/src/txe_mutex_get.c \
Middlewares/ST/threadx/common/src/txe_mutex_info_get.c \
Middlewares/ST/threadx/common/src/txe_mutex_prioritize.c \
Middlewares/ST/threadx/common/src/txe_mutex_put.c \
Middlewares/ST/threadx/common/src/txe_queue_create.c \
Middlewares/ST/threadx/common/src/txe_queue_delete.c \
Middlewares/ST/threadx/common/src/txe_queue_flush.c \
Middlewares/ST/threadx/common/src/txe_queue_front_send.c \
Middlewares/ST/threadx/common/src/txe_queue_info_get.c \
Middlewares/ST/threadx/common/src/txe_queue_prioritize.c \
Middlewares/ST/threadx/common/src/txe_queue_receive.c \
Middlewares/ST/threadx/common/src/txe_queue_send.c \
Middlewares/ST/threadx/common/src/txe_queue_send_notify.c \
Middlewares/ST/threadx/common/src/txe_semaphore_ceiling_put.c \
Middlewares/ST/threadx/common/src/txe_semaphore_create.c \
Middlewares/ST/threadx/common/src/txe_semaphore_delete.c \
Middlewares/ST/threadx/common/src/txe_semaphore_get.c \
Middlewares/ST/threadx/common/src/txe_semaphore_info_get.c \
Middlewares/ST/threadx/common/src/txe_semaphore_prioritize.c \
Middlewares/ST/threadx/common/src/txe_semaphore_put.c \
Middlewares/ST/threadx/common/src/txe_semaphore_put_notify.c \
Middlewares/ST/threadx/common/src/txe_thread_create.c \
Middlewares/ST/threadx/common/src/txe_thread_delete.c \
Middlewares/ST/threadx/common/src/txe_thread_entry_exit_notify.c \
Middlewares/ST/threadx/common/src/txe_thread_info_get.c \
Middlewares/ST/threadx/common/src/txe_thread_preemption_change.c \
Middlewares/ST/threadx/common/src/txe_thread_priority_change.c \
Middlewares/ST/threadx/common/src/txe_thread_relinquish.c \
Middlewares/ST/threadx/common/src/txe_thread_reset.c \
Middlewares/ST/threadx/common/src/txe_thread_resume.c \
Middlewares/ST/threadx/common/src/txe_thread_suspend.c \
Middlewares/ST/threadx/common/src/txe_thread_terminate.c \
Middlewares/ST/threadx/common/src/txe_thread_time_slice_change.c \
Middlewares/ST/threadx/common/src/txe_thread_wait_abort.c \
Middlewares/ST/threadx/common/src/txe_timer_activate.c \
Middlewares/ST/threadx/common/src/txe_timer_change.c \
Middlewares/ST/threadx/common/src/txe_timer_create.c \
Middlewares/ST/threadx/common/src/txe_timer_deactivate.c \
Middlewares/ST/threadx/common/src/txe_timer_delete.c \
Middlewares/ST/threadx/common/src/txe_timer_info_get.c \
TouchGFX/App/app_touchgfx.c \
Utilities/JPEG/jpeg_utils.c
CPP_SOURCES = \
Core/Src/STWButtonController.cpp \
TouchGFX/generated/fonts/src/ApplicationFontProvider.cpp \
TouchGFX/generated/fonts/src/CachedFont.cpp \
TouchGFX/generated/fonts/src/FontCache.cpp \
TouchGFX/generated/fonts/src/Font_CHINN____20_4bpp_0.cpp \
TouchGFX/generated/fonts/src/Font_CHINN____30_4bpp_0.cpp \
TouchGFX/generated/fonts/src/Font_CHINN____40_4bpp_0.cpp \
TouchGFX/generated/fonts/src/Font_lucon_TTF_20_4bpp_0.cpp \
TouchGFX/generated/fonts/src/Font_lucon_TTF_33_4bpp_0.cpp \
TouchGFX/generated/fonts/src/Font_lucon_TTF_50_4bpp_0.cpp \
TouchGFX/generated/fonts/src/Font_verdana_20_4bpp_0.cpp \
TouchGFX/generated/fonts/src/Font_verdanab_20_4bpp_0.cpp \
TouchGFX/generated/fonts/src/GeneratedFont.cpp \
TouchGFX/generated/fonts/src/Kerning_CHINN____20_4bpp.cpp \
TouchGFX/generated/fonts/src/Kerning_CHINN____30_4bpp.cpp \
TouchGFX/generated/fonts/src/Kerning_CHINN____40_4bpp.cpp \
TouchGFX/generated/fonts/src/Kerning_lucon_TTF_20_4bpp.cpp \
TouchGFX/generated/fonts/src/Kerning_lucon_TTF_33_4bpp.cpp \
TouchGFX/generated/fonts/src/Kerning_lucon_TTF_50_4bpp.cpp \
TouchGFX/generated/fonts/src/Kerning_verdana_20_4bpp.cpp \
TouchGFX/generated/fonts/src/Kerning_verdanab_20_4bpp.cpp \
TouchGFX/generated/fonts/src/Table_CHINN____20_4bpp.cpp \
TouchGFX/generated/fonts/src/Table_CHINN____30_4bpp.cpp \
TouchGFX/generated/fonts/src/Table_CHINN____40_4bpp.cpp \
TouchGFX/generated/fonts/src/Table_lucon_TTF_20_4bpp.cpp \
TouchGFX/generated/fonts/src/Table_lucon_TTF_33_4bpp.cpp \
TouchGFX/generated/fonts/src/Table_lucon_TTF_50_4bpp.cpp \
TouchGFX/generated/fonts/src/Table_verdana_20_4bpp.cpp \
TouchGFX/generated/fonts/src/Table_verdanab_20_4bpp.cpp \
TouchGFX/generated/fonts/src/UnmappedDataFont.cpp \
TouchGFX/generated/gui_generated/src/ami_screen/AMIViewBase.cpp \
TouchGFX/generated/gui_generated/src/common/FrontendApplicationBase.cpp \
TouchGFX/generated/gui_generated/src/containers/ConfigItemBase.cpp \
TouchGFX/generated/gui_generated/src/containers/DebugViewItemBase.cpp \
TouchGFX/generated/gui_generated/src/containers/DebugViewLineBase.cpp \
TouchGFX/generated/gui_generated/src/containers/DriverViewFieldBase.cpp \
TouchGFX/generated/gui_generated/src/containers/DriverViewFieldSelectionBase.cpp \
TouchGFX/generated/gui_generated/src/containers/DriverViewStatusItemBase.cpp \
TouchGFX/generated/gui_generated/src/containers/ErrorPopupBase.cpp \
TouchGFX/generated/gui_generated/src/containers/MissionSelectElementBase.cpp \
TouchGFX/generated/gui_generated/src/containers/TemperatureBase.cpp \
TouchGFX/generated/gui_generated/src/debugview_screen/DebugViewViewBase.cpp \
TouchGFX/generated/gui_generated/src/driverview_screen/DriverViewViewBase.cpp \
TouchGFX/generated/gui_generated/src/missionselect_screen/MissionSelectViewBase.cpp \
TouchGFX/generated/gui_generated/src/vehicleconfig_screen/VehicleConfigViewBase.cpp \
TouchGFX/generated/images/src/BitmapDatabase.cpp \
TouchGFX/generated/images/src/SVGDatabase.cpp \
TouchGFX/generated/images/src/image_Fasttube_Logo.cpp \
TouchGFX/generated/images/src/image_Fasttube_Logo_small.cpp \
TouchGFX/generated/images/src/image_Fasttube_Logo_small_white.cpp \
TouchGFX/generated/images/src/image_Fasttube_Logo_white.cpp \
TouchGFX/generated/images/src/image_bat_bar_bg.cpp \
TouchGFX/generated/images/src/image_logo_dv_small.cpp \
TouchGFX/generated/images/src/image_logo_dv_small_white.cpp \
TouchGFX/generated/images/src/image_precharge_bg.cpp \
TouchGFX/generated/images/src/image_prog_horiz_bg.cpp \
TouchGFX/generated/texts/src/LanguageGb.cpp \
TouchGFX/generated/texts/src/Texts.cpp \
TouchGFX/generated/texts/src/TypedTextDatabase.cpp \
TouchGFX/gui/src/ami_screen/AMIPresenter.cpp \
TouchGFX/gui/src/ami_screen/AMIView.cpp \
TouchGFX/gui/src/common/FrontendApplication.cpp \
TouchGFX/gui/src/common/NamedField.cpp \
TouchGFX/gui/src/containers/ConfigItem.cpp \
TouchGFX/gui/src/containers/DebugViewItem.cpp \
TouchGFX/gui/src/containers/DebugViewLine.cpp \
TouchGFX/gui/src/containers/DriverViewField.cpp \
TouchGFX/gui/src/containers/DriverViewFieldSelection.cpp \
TouchGFX/gui/src/containers/DriverViewStatusItem.cpp \
TouchGFX/gui/src/containers/ErrorPopup.cpp \
TouchGFX/gui/src/containers/MissionSelectElement.cpp \
TouchGFX/gui/src/containers/Temperature.cpp \
TouchGFX/gui/src/debugview_screen/DebugViewPresenter.cpp \
TouchGFX/gui/src/debugview_screen/DebugViewView.cpp \
TouchGFX/gui/src/driverview_screen/DriverViewPresenter.cpp \
TouchGFX/gui/src/driverview_screen/DriverViewView.cpp \
TouchGFX/gui/src/missionselect_screen/MissionSelectPresenter.cpp \
TouchGFX/gui/src/missionselect_screen/MissionSelectView.cpp \
TouchGFX/gui/src/model/Model.cpp \
TouchGFX/gui/src/vehicleconfig_screen/VehicleConfigPresenter.cpp \
TouchGFX/gui/src/vehicleconfig_screen/VehicleConfigView.cpp \
TouchGFX/target/STM32TouchController.cpp \
TouchGFX/target/TouchGFXGPIO.cpp \
TouchGFX/target/TouchGFXHAL.cpp \
TouchGFX/target/generated/OSWrappers.cpp \
TouchGFX/target/generated/STM32DMA.cpp \
TouchGFX/target/generated/TouchGFXConfiguration.cpp \
TouchGFX/target/generated/TouchGFXGeneratedHAL.cpp \
build/main.cpp
# ASM sources
ASM_SOURCES = \
Core/Src/tx_initialize_low_level.s \
Middlewares/ST/threadx/ports/cortex_m7/gnu/src/tx_misra.S \
Middlewares/ST/threadx/ports/cortex_m7/gnu/src/tx_misra.s \
Middlewares/ST/threadx/ports/cortex_m7/gnu/src/tx_thread_context_restore.S \
Middlewares/ST/threadx/ports/cortex_m7/gnu/src/tx_thread_context_restore.s \
Middlewares/ST/threadx/ports/cortex_m7/gnu/src/tx_thread_context_save.S \
Middlewares/ST/threadx/ports/cortex_m7/gnu/src/tx_thread_context_save.s \
Middlewares/ST/threadx/ports/cortex_m7/gnu/src/tx_thread_interrupt_control.S \
Middlewares/ST/threadx/ports/cortex_m7/gnu/src/tx_thread_interrupt_control.s \
Middlewares/ST/threadx/ports/cortex_m7/gnu/src/tx_thread_interrupt_disable.S \
Middlewares/ST/threadx/ports/cortex_m7/gnu/src/tx_thread_interrupt_disable.s \
Middlewares/ST/threadx/ports/cortex_m7/gnu/src/tx_thread_interrupt_restore.S \
Middlewares/ST/threadx/ports/cortex_m7/gnu/src/tx_thread_interrupt_restore.s \
Middlewares/ST/threadx/ports/cortex_m7/gnu/src/tx_thread_schedule.S \
Middlewares/ST/threadx/ports/cortex_m7/gnu/src/tx_thread_schedule.s \
Middlewares/ST/threadx/ports/cortex_m7/gnu/src/tx_thread_stack_build.S \
Middlewares/ST/threadx/ports/cortex_m7/gnu/src/tx_thread_stack_build.s \
Middlewares/ST/threadx/ports/cortex_m7/gnu/src/tx_thread_system_return.S \
Middlewares/ST/threadx/ports/cortex_m7/gnu/src/tx_thread_system_return.s \
Middlewares/ST/threadx/ports/cortex_m7/gnu/src/tx_timer_interrupt.S \
Middlewares/ST/threadx/ports/cortex_m7/gnu/src/tx_timer_interrupt.s \
startup_stm32h7a3xx.s
#######################################
# binaries
#######################################
PREFIX = arm-none-eabi-
POSTFIX = "
# The gcc compiler bin path can be either defined in make command via GCC_PATH variable (> make GCC_PATH=xxx)
# either it can be added to the PATH environment variable.
GCC_PATH="c:/Users/Jasper/AppData/Roaming/Code/User/globalStorage/bmd.stm32-for-vscode/@xpack-dev-tools/arm-none-eabi-gcc/12.2.1-1.2.1/.content/bin
ifdef GCC_PATH
CXX = $(GCC_PATH)/$(PREFIX)g++$(POSTFIX)
CC = $(GCC_PATH)/$(PREFIX)gcc$(POSTFIX)
AS = $(GCC_PATH)/$(PREFIX)gcc$(POSTFIX) -x assembler-with-cpp
CP = $(GCC_PATH)/$(PREFIX)objcopy$(POSTFIX)
SZ = $(GCC_PATH)/$(PREFIX)size$(POSTFIX)
else
CXX = $(PREFIX)g++
CC = $(PREFIX)gcc
AS = $(PREFIX)gcc -x assembler-with-cpp
CP = $(PREFIX)objcopy
SZ = $(PREFIX)size
endif
HEX = $(CP) -O ihex
BIN = $(CP) -O binary -S
#######################################
# CFLAGS
#######################################
# cpu
CPU = -mcpu=cortex-m7
# fpu
FPU = -mfpu=fpv5-d16
# float-abi
FLOAT-ABI = -mfloat-abi=hard
# mcu
MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI)
# macros for gcc
# AS defines
AS_DEFS =
# C defines
C_DEFS = \
-DFTCAN_NUM_FILTERS=32 \
-DSTM32H7 \
-DSTM32H7A3xx \
-DTX_INCLUDE_USER_DEFINE_FILE \
-DUSE_HAL_DRIVER
# CXX defines
CXX_DEFS = \
-DSTM32H7A3xx \
-DTX_INCLUDE_USER_DEFINE_FILE \
-DUSE_HAL_DRIVER
# AS includes
AS_INCLUDES = \
# C includes
C_INCLUDES = \
-IAZURE_RTOS/App \
-ICore/Inc \
-IDrivers/CMSIS/Device/ST/STM32H7xx/Include \
-IDrivers/CMSIS/Include \
-IDrivers/STM32H7xx_HAL_Driver/Inc \
-IDrivers/STM32H7xx_HAL_Driver/Inc/Legacy \
-IMiddlewares/ST/threadx/common/inc/ \
-IMiddlewares/ST/threadx/ports/cortex_m7/gnu/inc/ \
-IMiddlewares/ST/touchgfx/framework/include \
-ITouchGFX/App \
-ITouchGFX/generated/fonts/include \
-ITouchGFX/generated/gui_generated/include \
-ITouchGFX/generated/images/include \
-ITouchGFX/generated/texts/include \
-ITouchGFX/generated/videos/include \
-ITouchGFX/gui/include \
-ITouchGFX/target \
-ITouchGFX/target/generated \
-IUtilities/JPEG
# compile gcc flags
ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
CXXFLAGS = $(MCU) $(CXX_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections -feliminate-unused-debug-types
ifeq ($(DEBUG), 1)
CFLAGS += -g -gdwarf -ggdb
CXXFLAGS += -g -gdwarf -ggdb
endif
# Add additional flags
CFLAGS += -Wall -Werror -Wextra -Wno-missing-field-initializers -Wno-unused-parameter
ASFLAGS +=
CXXFLAGS += -Wall -Werror -Wextra -Wno-missing-field-initializers -Wno-unused-parameter -fno-rtti
# Generate dependency information
CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)"
CXXFLAGS += -MMD -MP -MF"$(@:%.o=%.d)"
#######################################
# LDFLAGS
#######################################
# link script
LDSCRIPT = STM32H7A3ZITx_FLASH_nocube.ld
# libraries
LIBS = -lc -lm -lnosys -ltouchgfx-float-abi-hard
LIBDIR = \
-LMiddlewares/ST/touchgfx/lib/core/cortex_m7/gcc
# Additional LD Flags from config file
ADDITIONALLDFLAGS = -specs=nano.specs -specs=nosys.specs
LDFLAGS = $(MCU) $(ADDITIONALLDFLAGS) -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections
# default action: build all
all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin
#######################################
# build the application
#######################################
# list of cpp program objects
OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(CPP_SOURCES:.cpp=.o)))
vpath %.cpp $(sort $(dir $(CPP_SOURCES)))
# list of C objects
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o)))
vpath %.c $(sort $(dir $(C_SOURCES)))
# list of ASM program objects
# list of ASM program objects
UPPER_CASE_ASM_SOURCES = $(filter %.S,$(ASM_SOURCES))
LOWER_CASE_ASM_SOURCES = $(filter %.s,$(ASM_SOURCES))
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(UPPER_CASE_ASM_SOURCES:.S=.o)))
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(LOWER_CASE_ASM_SOURCES:.s=.o)))
vpath %.s $(sort $(dir $(ASM_SOURCES)))
$(BUILD_DIR)/%.o: %.cpp STM32Make.make | $(BUILD_DIR)
$(CXX) -c $(CXXFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.cpp=.lst)) $< -o $@
$(BUILD_DIR)/%.o: %.cxx STM32Make.make | $(BUILD_DIR)
$(CXX) -c $(CXXFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.cxx=.lst)) $< -o $@
$(BUILD_DIR)/%.o: %.c STM32Make.make | $(BUILD_DIR)
$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@
$(BUILD_DIR)/%.o: %.s STM32Make.make | $(BUILD_DIR)
$(AS) -c $(CFLAGS) $< -o $@
$(BUILD_DIR)/%.o: %.S STM32Make.make | $(BUILD_DIR)
$(AS) -c $(CFLAGS) $< -o $@
$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) STM32Make.make
$(CXX) $(OBJECTS) $(LDFLAGS) -o $@
$(SZ) $@
$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
$(HEX) $< $@
$(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
$(BIN) $< $@
$(BUILD_DIR):
mkdir $@
#######################################
# flash
#######################################
flash: $(BUILD_DIR)/$(TARGET).elf
"C:/USERS/JASPER/APPDATA/ROAMING/CODE/USER/GLOBALSTORAGE/BMD.STM32-FOR-VSCODE/@XPACK-DEV-TOOLS/OPENOCD/0.12.0-1.1/.CONTENT/BIN/OPENOCD.EXE" -f ./openocd.cfg -c "program $(BUILD_DIR)/$(TARGET).elf verify reset exit"
#######################################
# erase
#######################################
erase: $(BUILD_DIR)/$(TARGET).elf
"C:/USERS/JASPER/APPDATA/ROAMING/CODE/USER/GLOBALSTORAGE/BMD.STM32-FOR-VSCODE/@XPACK-DEV-TOOLS/OPENOCD/0.12.0-1.1/.CONTENT/BIN/OPENOCD.EXE" -f ./openocd.cfg -c "init; reset halt; stm32h7x mass_erase 0; exit"
#######################################
# clean up
#######################################
clean:
cmd /c rd /s /q $(BUILD_DIR)
#######################################
# custom makefile rules
#######################################
#######################################
# dependencies
#######################################
-include $(wildcard $(BUILD_DIR)/*.d)
# *** EOF ***

View File

@ -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:

View File

@ -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;

View File

@ -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();

View File

@ -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);
}; };

View File

@ -16,6 +16,7 @@ void AMIPresenter::deactivate() {}
void AMIPresenter::vehicleStateUpdated() { void AMIPresenter::vehicleStateUpdated() {
view.setMission(vehicle_state.active_mission); view.setMission(vehicle_state.active_mission);
view.setASState(vehicle_state.as_state); view.setASState(vehicle_state.as_state);
view.setIniChkState(vehicle_state.ini_chk_state);
view.updateDataFields(); view.updateDataFields();
#ifndef SIMULATOR #ifndef SIMULATOR
view.setJetsonTimeout(HAL_GetTick() - vehicle_state.last_jetson_msg > 500); view.setJetsonTimeout(HAL_GetTick() - vehicle_state.last_jetson_msg > 500);

View File

@ -88,7 +88,7 @@ void AMIView::setIniChkState(IniChkState state) {
} }
progressBar.invalidate(); progressBar.invalidate();
const char *label; const char *label = "UNKNOWN";
switch (vehicle_state.ini_chk_state) { switch (vehicle_state.ini_chk_state) {
case INICHK_START: case INICHK_START:
label = "START"; label = "START";
@ -128,9 +128,8 @@ void AMIView::setIniChkState(IniChkState state) {
} }
void AMIView::updateDataFields() { void AMIView::updateDataFields() {
// TODO: Accumulator pressures aren't transmitted yet paField.setValue(vehicle_state.hyd_press_a);
paField.setValue(0); pbField.setValue(vehicle_state.hyd_press_b);
pbField.setValue(0);
pfField.setValue(vehicle_state.brake_press_f); pfField.setValue(vehicle_state.brake_press_f);
prField.setValue(vehicle_state.brake_press_r); prField.setValue(vehicle_state.brake_press_r);

View File

@ -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:

View File

@ -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

View File

@ -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);
}

View File

@ -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;