Display steering angle, speed & cones in AMI
This commit is contained in:
		@ -8,6 +8,8 @@ extern "C" {
 | 
			
		||||
#include "stw_defines.h"
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
#define NUM_CONES 12
 | 
			
		||||
 | 
			
		||||
typedef enum {
 | 
			
		||||
  TS_INACTIVE = 0,
 | 
			
		||||
  TS_ACTIVE = 1,
 | 
			
		||||
@ -88,6 +90,11 @@ typedef struct {
 | 
			
		||||
  float bat_r;
 | 
			
		||||
} Temperatures;
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
  uint16_t x;
 | 
			
		||||
  uint16_t y;
 | 
			
		||||
} ConePosition;
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
  TSState ts_state;
 | 
			
		||||
  ASState as_state;
 | 
			
		||||
@ -151,6 +158,14 @@ typedef struct {
 | 
			
		||||
  float brake_press_r;
 | 
			
		||||
 | 
			
		||||
  float distance_total;
 | 
			
		||||
 | 
			
		||||
  uint32_t last_jetson_msg;
 | 
			
		||||
  uint32_t last_epsc_msg;
 | 
			
		||||
  float desired_angle;
 | 
			
		||||
  float measured_angle;
 | 
			
		||||
  float desired_speed;
 | 
			
		||||
 | 
			
		||||
  ConePosition cone_pos[NUM_CONES];
 | 
			
		||||
} VehicleState;
 | 
			
		||||
 | 
			
		||||
extern VehicleState vehicle_state;
 | 
			
		||||
 | 
			
		||||
@ -15,39 +15,51 @@
 | 
			
		||||
#define CAN_ID_AMS_SLAVE_PANIC 0x9
 | 
			
		||||
#define CAN_ID_AMS_STATUS 0xA
 | 
			
		||||
#define CAN_ID_AMS_ERROR 0xC
 | 
			
		||||
#define CAN_ID_JETSON_TX 0xE1
 | 
			
		||||
#define CAN_ID_ABX_DRIVER 0x101
 | 
			
		||||
#define CAN_ID_ABX_TIMINGS 0x102
 | 
			
		||||
#define CAN_ID_ABX_BRAKE_T 0x105
 | 
			
		||||
#define CAN_ID_CS_INTERNAL 0x108
 | 
			
		||||
#define CAN_ID_ABX_MISC 0x109
 | 
			
		||||
#define CAN_ID_EPSC_OUT 0x321
 | 
			
		||||
#define CAN_ID_MISSION_SELECTED 0x400
 | 
			
		||||
#define CAN_ID_STW_BUTTONS 0x401
 | 
			
		||||
#define CAN_ID_STW_PARAM_SET 0x402
 | 
			
		||||
#define CAN_ID_AS_MISSION_FB 0x410
 | 
			
		||||
#define CAN_ID_STW_STATUS 0x412
 | 
			
		||||
#define CAN_ID_STW_CONES_BASE 0x414
 | 
			
		||||
#define CAN_ID_STW_CONES_MASK 0x7FC
 | 
			
		||||
#define CAN_ID_SHUNT_CURRENT 0x521
 | 
			
		||||
#define CAN_ID_SHUNT_VOLTAGE1 0x522
 | 
			
		||||
#define CAN_ID_SHUNT_VOLTAGE2 0x523
 | 
			
		||||
#define CAN_AMS_STATUS_VOLTAGE_FACTOR 1e-4
 | 
			
		||||
#define CAN_AMS_STATUS_TEMP_FACTOR 0.0625
 | 
			
		||||
#define CAN_JETSON_TX_ANGLE_FACTOR 0.00784314f
 | 
			
		||||
#define CAN_JETSON_TX_SPEED_FACTOR (0.2 * 3.6)
 | 
			
		||||
#define CAN_ABX_DRIVER_SPEED_FACTOR (0.2 * 3.6)
 | 
			
		||||
#define CAN_CS_INTERNAL_TEMP_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_EPSC_OUT_ANGLE_FACTOR 7.20721e-05f
 | 
			
		||||
 | 
			
		||||
void vehicle_thread_entry(ULONG hfdcan_addr) {
 | 
			
		||||
  memset(&vehicle_state, 0, sizeof(vehicle_state));
 | 
			
		||||
  memset(&vehicle_state.cone_pos, 0xFF, sizeof(vehicle_state.cone_pos));
 | 
			
		||||
 | 
			
		||||
  ftcan_init((void *)hfdcan_addr);
 | 
			
		||||
  ftcan_add_filter(CAN_ID_AMS_SLAVE_PANIC, 0x7FF);
 | 
			
		||||
  ftcan_add_filter(CAN_ID_AMS_STATUS, 0x7FF);
 | 
			
		||||
  ftcan_add_filter(CAN_ID_AMS_ERROR, 0x7FF);
 | 
			
		||||
  ftcan_add_filter(CAN_ID_JETSON_TX, 0x7FF);
 | 
			
		||||
  ftcan_add_filter(CAN_ID_ABX_DRIVER, 0x7FF);
 | 
			
		||||
  ftcan_add_filter(CAN_ID_ABX_TIMINGS, 0x7FF);
 | 
			
		||||
  ftcan_add_filter(CAN_ID_ABX_BRAKE_T, 0x7FF);
 | 
			
		||||
  ftcan_add_filter(CAN_ID_CS_INTERNAL, 0x7FF);
 | 
			
		||||
  ftcan_add_filter(CAN_ID_ABX_MISC, 0x7FF);
 | 
			
		||||
  ftcan_add_filter(CAN_ID_EPSC_OUT, 0x7FF);
 | 
			
		||||
  ftcan_add_filter(CAN_ID_AS_MISSION_FB, 0x7FF);
 | 
			
		||||
  ftcan_add_filter(CAN_ID_STW_STATUS, 0x7FF);
 | 
			
		||||
  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_VOLTAGE1, 0x7FF);
 | 
			
		||||
  ftcan_add_filter(CAN_ID_SHUNT_VOLTAGE2, 0x7FF);
 | 
			
		||||
@ -78,107 +90,129 @@ void vehicle_broadcast_buttons(GPIO_PinState *button_states) {
 | 
			
		||||
 | 
			
		||||
void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t *data) {
 | 
			
		||||
  const uint8_t *ptr;
 | 
			
		||||
  switch (id) {
 | 
			
		||||
  case CAN_ID_AMS_SLAVE_PANIC:
 | 
			
		||||
    vehicle_state.last_ams_slave_panic.id = data[0];
 | 
			
		||||
    vehicle_state.last_ams_slave_panic.kind = data[1];
 | 
			
		||||
    ptr = &data[2];
 | 
			
		||||
    vehicle_state.last_ams_slave_panic.arg = ftcan_unmarshal_unsigned(&ptr, 4);
 | 
			
		||||
    break;
 | 
			
		||||
  case CAN_ID_AMS_STATUS:
 | 
			
		||||
    vehicle_state.ts_state = data[0] & 0x7F;
 | 
			
		||||
    vehicle_state.sdc_closed = (data[0] & 0x80) >> 7;
 | 
			
		||||
    vehicle_state.soc_ts = data[1];
 | 
			
		||||
    ptr = &data[2];
 | 
			
		||||
    vehicle_state.min_cell_volt =
 | 
			
		||||
        ftcan_unmarshal_unsigned(&ptr, 2) * CAN_AMS_STATUS_VOLTAGE_FACTOR;
 | 
			
		||||
    vehicle_state.max_cell_temp =
 | 
			
		||||
        ftcan_unmarshal_signed(&ptr, 2) * CAN_AMS_STATUS_TEMP_FACTOR;
 | 
			
		||||
    // TODO: Separate temperatures for left and right side of battery
 | 
			
		||||
    vehicle_state.temps.bat_l = vehicle_state.max_cell_temp;
 | 
			
		||||
    vehicle_state.temps.bat_r = vehicle_state.max_cell_temp;
 | 
			
		||||
    break;
 | 
			
		||||
  case CAN_ID_AMS_ERROR:
 | 
			
		||||
    vehicle_state.last_ams_error.kind = data[0];
 | 
			
		||||
    vehicle_state.last_ams_error.arg = data[1];
 | 
			
		||||
    break;
 | 
			
		||||
  case CAN_ID_ABX_DRIVER:
 | 
			
		||||
    vehicle_state.brake_press_f = (data[1] | ((data[2] & 0x0F) << 8)) * 0.1;
 | 
			
		||||
    vehicle_state.brake_press_r = ((data[2] >> 4) | (data[3] << 4)) * 0.1;
 | 
			
		||||
    vehicle_state.speed = data[5] * CAN_ABX_DRIVER_SPEED_FACTOR;
 | 
			
		||||
    break;
 | 
			
		||||
  case CAN_ID_ABX_TIMINGS:
 | 
			
		||||
    vehicle_state.lap_best = (data[0] | (data[1] << 8)) * 0.01f;
 | 
			
		||||
    vehicle_state.lap_last = (data[2] | (data[3] << 8)) * 0.01f;
 | 
			
		||||
    break;
 | 
			
		||||
  case CAN_ID_ABX_BRAKE_T:
 | 
			
		||||
    vehicle_state.temps.brake_fl = (data[0] | (data[1] << 8)) * 0.01f;
 | 
			
		||||
    vehicle_state.temps.brake_fr = (data[2] | (data[3] << 8)) * 0.01f;
 | 
			
		||||
    vehicle_state.temps.brake_rl = (data[4] | (data[5] << 8)) * 0.01f;
 | 
			
		||||
    vehicle_state.temps.brake_rr = (data[6] | (data[7] << 8)) * 0.01f;
 | 
			
		||||
    break;
 | 
			
		||||
  case CAN_ID_CS_INTERNAL:
 | 
			
		||||
    vehicle_state.temps.inv_l =
 | 
			
		||||
        (data[0] | (data[1] << 8)) * CAN_CS_INTERNAL_TEMP_FACTOR;
 | 
			
		||||
    vehicle_state.temps.inv_r =
 | 
			
		||||
        (data[2] | (data[3] << 8)) * CAN_CS_INTERNAL_TEMP_FACTOR;
 | 
			
		||||
    vehicle_state.temps.mot_l =
 | 
			
		||||
        (data[4] | (data[5] << 8)) * CAN_CS_INTERNAL_TEMP_FACTOR;
 | 
			
		||||
    vehicle_state.temps.mot_r =
 | 
			
		||||
        (data[6] | (data[7] << 8)) * CAN_CS_INTERNAL_TEMP_FACTOR;
 | 
			
		||||
    break;
 | 
			
		||||
  case CAN_ID_ABX_MISC:
 | 
			
		||||
    vehicle_state.distance_total =
 | 
			
		||||
        (data[3] | (data[4] << 8)) * CAN_ABX_MISC_DISTANCE_TOTAL_FACTOR;
 | 
			
		||||
    vehicle_state.soc_lv = data[5];
 | 
			
		||||
    vehicle_state.lv_bat_voltage = data[6] * CAN_ABX_MISC_LV_BAT_VOLTAGE_FACTOR;
 | 
			
		||||
    break;
 | 
			
		||||
  case CAN_ID_AS_MISSION_FB:
 | 
			
		||||
    vehicle_state.active_mission = data[0] & 0b111;
 | 
			
		||||
    break;
 | 
			
		||||
  case CAN_ID_STW_STATUS:
 | 
			
		||||
    vehicle_state.as_state = data[0] & 0b111;
 | 
			
		||||
    vehicle_state.r2d_progress = data[0] >> 4;
 | 
			
		||||
    vehicle_state.errors.invl_ready = (data[1] >> 0) & 1;
 | 
			
		||||
    vehicle_state.errors.invr_ready = (data[1] >> 1) & 1;
 | 
			
		||||
    vehicle_state.errors.sdc_bfl = (data[1] >> 2) & 1;
 | 
			
		||||
    vehicle_state.errors.sdc_brl = (data[1] >> 3) & 1;
 | 
			
		||||
    vehicle_state.errors.sdc_acc = (data[1] >> 4) & 1;
 | 
			
		||||
    vehicle_state.errors.sdc_hvb = (data[1] >> 5) & 1;
 | 
			
		||||
    vehicle_state.lap_count = data[2] & 0b111111;
 | 
			
		||||
    vehicle_state.ini_chk_state = data[3];
 | 
			
		||||
    vehicle_state.errors.err_sdc = (data[4] >> 0) & 1;
 | 
			
		||||
    vehicle_state.errors.err_ams = (data[4] >> 1) & 1;
 | 
			
		||||
    vehicle_state.errors.err_pdu = (data[4] >> 2) & 1;
 | 
			
		||||
    vehicle_state.errors.err_ini_chk = (data[4] >> 3) & 1;
 | 
			
		||||
    vehicle_state.errors.err_con_mon = (data[4] >> 4) & 1;
 | 
			
		||||
    vehicle_state.errors.err_scs = (data[4] >> 5) & 1;
 | 
			
		||||
    vehicle_state.errors.err_sbspd = (data[4] >> 6) & 1;
 | 
			
		||||
    vehicle_state.errors.err_appsp = (data[4] >> 7) & 1;
 | 
			
		||||
    vehicle_state.errors.err_as = (data[5] >> 0) & 1;
 | 
			
		||||
    vehicle_state.errors.err_ros = (data[5] >> 1) & 1;
 | 
			
		||||
    vehicle_state.errors.err_res = (data[5] >> 2) & 1;
 | 
			
		||||
    vehicle_state.errors.err_invl = (data[5] >> 3) & 1;
 | 
			
		||||
    vehicle_state.errors.err_invr = (data[5] >> 4) & 1;
 | 
			
		||||
    break;
 | 
			
		||||
  case CAN_ID_SHUNT_CURRENT: {
 | 
			
		||||
    // The first two bytes of shunt result messages are metadata
 | 
			
		||||
    const uint8_t *result_ptr = &data[2];
 | 
			
		||||
    vehicle_state.ts_current = ftcan_unmarshal_signed(&result_ptr, 4) * 1e-3;
 | 
			
		||||
    break;
 | 
			
		||||
  }
 | 
			
		||||
  case CAN_ID_SHUNT_VOLTAGE1: {
 | 
			
		||||
    const uint8_t *result_ptr = &data[2];
 | 
			
		||||
    vehicle_state.ts_voltage_bat =
 | 
			
		||||
        ftcan_unmarshal_signed(&result_ptr, 4) * 1e-3;
 | 
			
		||||
    break;
 | 
			
		||||
  }
 | 
			
		||||
  case CAN_ID_SHUNT_VOLTAGE2: {
 | 
			
		||||
    const uint8_t *result_ptr = &data[2];
 | 
			
		||||
    vehicle_state.ts_voltage_veh =
 | 
			
		||||
        ftcan_unmarshal_signed(&result_ptr, 4) * 1e-3;
 | 
			
		||||
    break;
 | 
			
		||||
  }
 | 
			
		||||
  if ((id & CAN_ID_STW_CONES_MASK) == CAN_ID_STW_CONES_BASE) {
 | 
			
		||||
    size_t msg_num = id - CAN_ID_STW_CONES_BASE;
 | 
			
		||||
    for (size_t i = 0; i < 4; i++) {
 | 
			
		||||
      vehicle_state.cone_pos[msg_num * 4 + i].x = data[i * 2];
 | 
			
		||||
      vehicle_state.cone_pos[msg_num * 4 + i].y = data[i * 2 + 1];
 | 
			
		||||
    }
 | 
			
		||||
  } else {
 | 
			
		||||
    switch (id) {
 | 
			
		||||
    case CAN_ID_AMS_SLAVE_PANIC:
 | 
			
		||||
      vehicle_state.last_ams_slave_panic.id = data[0];
 | 
			
		||||
      vehicle_state.last_ams_slave_panic.kind = data[1];
 | 
			
		||||
      ptr = &data[2];
 | 
			
		||||
      vehicle_state.last_ams_slave_panic.arg =
 | 
			
		||||
          ftcan_unmarshal_unsigned(&ptr, 4);
 | 
			
		||||
      break;
 | 
			
		||||
    case CAN_ID_AMS_STATUS:
 | 
			
		||||
      vehicle_state.ts_state = data[0] & 0x7F;
 | 
			
		||||
      vehicle_state.sdc_closed = (data[0] & 0x80) >> 7;
 | 
			
		||||
      vehicle_state.soc_ts = data[1];
 | 
			
		||||
      ptr = &data[2];
 | 
			
		||||
      vehicle_state.min_cell_volt =
 | 
			
		||||
          ftcan_unmarshal_unsigned(&ptr, 2) * CAN_AMS_STATUS_VOLTAGE_FACTOR;
 | 
			
		||||
      vehicle_state.max_cell_temp =
 | 
			
		||||
          ftcan_unmarshal_signed(&ptr, 2) * CAN_AMS_STATUS_TEMP_FACTOR;
 | 
			
		||||
      // TODO: Separate temperatures for left and right side of battery
 | 
			
		||||
      vehicle_state.temps.bat_l = vehicle_state.max_cell_temp;
 | 
			
		||||
      vehicle_state.temps.bat_r = vehicle_state.max_cell_temp;
 | 
			
		||||
      break;
 | 
			
		||||
    case CAN_ID_AMS_ERROR:
 | 
			
		||||
      vehicle_state.last_ams_error.kind = data[0];
 | 
			
		||||
      vehicle_state.last_ams_error.arg = data[1];
 | 
			
		||||
      break;
 | 
			
		||||
    case CAN_ID_JETSON_TX:
 | 
			
		||||
      vehicle_state.last_jetson_msg = HAL_GetTick();
 | 
			
		||||
      vehicle_state.desired_speed =
 | 
			
		||||
          ((int8_t)data[1]) * CAN_JETSON_TX_SPEED_FACTOR;
 | 
			
		||||
      vehicle_state.desired_angle =
 | 
			
		||||
          ((int8_t)data[2]) * CAN_JETSON_TX_ANGLE_FACTOR;
 | 
			
		||||
      break;
 | 
			
		||||
    case CAN_ID_ABX_DRIVER:
 | 
			
		||||
      vehicle_state.brake_press_f = (data[1] | ((data[2] & 0x0F) << 8)) * 0.1;
 | 
			
		||||
      vehicle_state.brake_press_r = ((data[2] >> 4) | (data[3] << 4)) * 0.1;
 | 
			
		||||
      vehicle_state.speed = data[5] * CAN_ABX_DRIVER_SPEED_FACTOR;
 | 
			
		||||
      break;
 | 
			
		||||
    case CAN_ID_ABX_TIMINGS:
 | 
			
		||||
      vehicle_state.lap_best = (data[0] | (data[1] << 8)) * 0.01f;
 | 
			
		||||
      vehicle_state.lap_last = (data[2] | (data[3] << 8)) * 0.01f;
 | 
			
		||||
      break;
 | 
			
		||||
    case CAN_ID_ABX_BRAKE_T:
 | 
			
		||||
      vehicle_state.temps.brake_fl = (data[0] | (data[1] << 8)) * 0.01f;
 | 
			
		||||
      vehicle_state.temps.brake_fr = (data[2] | (data[3] << 8)) * 0.01f;
 | 
			
		||||
      vehicle_state.temps.brake_rl = (data[4] | (data[5] << 8)) * 0.01f;
 | 
			
		||||
      vehicle_state.temps.brake_rr = (data[6] | (data[7] << 8)) * 0.01f;
 | 
			
		||||
      break;
 | 
			
		||||
    case CAN_ID_CS_INTERNAL:
 | 
			
		||||
      vehicle_state.temps.inv_l =
 | 
			
		||||
          (data[0] | (data[1] << 8)) * CAN_CS_INTERNAL_TEMP_FACTOR;
 | 
			
		||||
      vehicle_state.temps.inv_r =
 | 
			
		||||
          (data[2] | (data[3] << 8)) * CAN_CS_INTERNAL_TEMP_FACTOR;
 | 
			
		||||
      vehicle_state.temps.mot_l =
 | 
			
		||||
          (data[4] | (data[5] << 8)) * CAN_CS_INTERNAL_TEMP_FACTOR;
 | 
			
		||||
      vehicle_state.temps.mot_r =
 | 
			
		||||
          (data[6] | (data[7] << 8)) * CAN_CS_INTERNAL_TEMP_FACTOR;
 | 
			
		||||
      break;
 | 
			
		||||
    case CAN_ID_ABX_MISC:
 | 
			
		||||
      vehicle_state.distance_total =
 | 
			
		||||
          (data[3] | (data[4] << 8)) * CAN_ABX_MISC_DISTANCE_TOTAL_FACTOR;
 | 
			
		||||
      vehicle_state.soc_lv = data[5];
 | 
			
		||||
      vehicle_state.lv_bat_voltage =
 | 
			
		||||
          data[6] * CAN_ABX_MISC_LV_BAT_VOLTAGE_FACTOR;
 | 
			
		||||
      break;
 | 
			
		||||
    case CAN_ID_EPSC_OUT:
 | 
			
		||||
      vehicle_state.last_epsc_msg = HAL_GetTick();
 | 
			
		||||
      vehicle_state.measured_angle =
 | 
			
		||||
          ((int16_t)((data[0] << 8) | (data[1]))) * CAN_EPSC_OUT_ANGLE_FACTOR;
 | 
			
		||||
      break;
 | 
			
		||||
    case CAN_ID_AS_MISSION_FB:
 | 
			
		||||
      vehicle_state.active_mission = data[0] & 0b111;
 | 
			
		||||
      break;
 | 
			
		||||
    case CAN_ID_STW_STATUS:
 | 
			
		||||
      vehicle_state.as_state = data[0] & 0b111;
 | 
			
		||||
      vehicle_state.r2d_progress = data[0] >> 4;
 | 
			
		||||
      vehicle_state.errors.invl_ready = (data[1] >> 0) & 1;
 | 
			
		||||
      vehicle_state.errors.invr_ready = (data[1] >> 1) & 1;
 | 
			
		||||
      vehicle_state.errors.sdc_bfl = (data[1] >> 2) & 1;
 | 
			
		||||
      vehicle_state.errors.sdc_brl = (data[1] >> 3) & 1;
 | 
			
		||||
      vehicle_state.errors.sdc_acc = (data[1] >> 4) & 1;
 | 
			
		||||
      vehicle_state.errors.sdc_hvb = (data[1] >> 5) & 1;
 | 
			
		||||
      vehicle_state.lap_count = data[2] & 0b111111;
 | 
			
		||||
      vehicle_state.ini_chk_state = data[3];
 | 
			
		||||
      vehicle_state.errors.err_sdc = (data[4] >> 0) & 1;
 | 
			
		||||
      vehicle_state.errors.err_ams = (data[4] >> 1) & 1;
 | 
			
		||||
      vehicle_state.errors.err_pdu = (data[4] >> 2) & 1;
 | 
			
		||||
      vehicle_state.errors.err_ini_chk = (data[4] >> 3) & 1;
 | 
			
		||||
      vehicle_state.errors.err_con_mon = (data[4] >> 4) & 1;
 | 
			
		||||
      vehicle_state.errors.err_scs = (data[4] >> 5) & 1;
 | 
			
		||||
      vehicle_state.errors.err_sbspd = (data[4] >> 6) & 1;
 | 
			
		||||
      vehicle_state.errors.err_appsp = (data[4] >> 7) & 1;
 | 
			
		||||
      vehicle_state.errors.err_as = (data[5] >> 0) & 1;
 | 
			
		||||
      vehicle_state.errors.err_ros = (data[5] >> 1) & 1;
 | 
			
		||||
      vehicle_state.errors.err_res = (data[5] >> 2) & 1;
 | 
			
		||||
      vehicle_state.errors.err_invl = (data[5] >> 3) & 1;
 | 
			
		||||
      vehicle_state.errors.err_invr = (data[5] >> 4) & 1;
 | 
			
		||||
      break;
 | 
			
		||||
    case CAN_ID_SHUNT_CURRENT: {
 | 
			
		||||
      // The first two bytes of shunt result messages are metadata
 | 
			
		||||
      const uint8_t *result_ptr = &data[2];
 | 
			
		||||
      vehicle_state.ts_current = ftcan_unmarshal_signed(&result_ptr, 4) * 1e-3;
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    case CAN_ID_SHUNT_VOLTAGE1: {
 | 
			
		||||
      const uint8_t *result_ptr = &data[2];
 | 
			
		||||
      vehicle_state.ts_voltage_bat =
 | 
			
		||||
          ftcan_unmarshal_signed(&result_ptr, 4) * 1e-3;
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    case CAN_ID_SHUNT_VOLTAGE2: {
 | 
			
		||||
      const uint8_t *result_ptr = &data[2];
 | 
			
		||||
      vehicle_state.ts_voltage_veh =
 | 
			
		||||
          ftcan_unmarshal_signed(&result_ptr, 4) * 1e-3;
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  tx_event_flags_set(&gui_update_events, GUI_UPDATE_VEHICLE_STATE, TX_OR);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -247,6 +247,7 @@ 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 \
 | 
			
		||||
@ -255,6 +256,7 @@ 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 \
 | 
			
		||||
@ -262,6 +264,7 @@ 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 \
 | 
			
		||||
 | 
			
		||||
@ -171,6 +171,30 @@
 | 
			
		||||
      </Text>
 | 
			
		||||
    </TextGroup>
 | 
			
		||||
    <TextGroup Id="Unsorted">
 | 
			
		||||
      <Text Id="__SingleUse_2S21" Alignment="Right" TypographyId="Numbers_Small">
 | 
			
		||||
        <Translation Language="GB"><value></Translation>
 | 
			
		||||
      </Text>
 | 
			
		||||
      <Text Id="__SingleUse_OQ6P" Alignment="Right" TypographyId="Numbers_Small">
 | 
			
		||||
        <Translation Language="GB"><value></Translation>
 | 
			
		||||
      </Text>
 | 
			
		||||
      <Text Id="__SingleUse_590R" Alignment="Left" TypographyId="Chinat_Small">
 | 
			
		||||
        <Translation Language="GB">MSPEED:</Translation>
 | 
			
		||||
      </Text>
 | 
			
		||||
      <Text Id="__SingleUse_Z78U" Alignment="Left" TypographyId="Chinat_Small">
 | 
			
		||||
        <Translation Language="GB">DSPEED:</Translation>
 | 
			
		||||
      </Text>
 | 
			
		||||
      <Text Id="__SingleUse_LLOZ" Alignment="Right" TypographyId="Numbers_Small">
 | 
			
		||||
        <Translation Language="GB"><value></Translation>
 | 
			
		||||
      </Text>
 | 
			
		||||
      <Text Id="__SingleUse_232C" Alignment="Right" TypographyId="Numbers_Small">
 | 
			
		||||
        <Translation Language="GB"><value></Translation>
 | 
			
		||||
      </Text>
 | 
			
		||||
      <Text Id="__SingleUse_JFR7" Alignment="Left" TypographyId="Chinat_Small">
 | 
			
		||||
        <Translation Language="GB">MANG:</Translation>
 | 
			
		||||
      </Text>
 | 
			
		||||
      <Text Id="__SingleUse_3MDX" Alignment="Left" TypographyId="Chinat_Small">
 | 
			
		||||
        <Translation Language="GB">DANG:</Translation>
 | 
			
		||||
      </Text>
 | 
			
		||||
      <Text Id="__SingleUse_F9I5" Alignment="Center" TypographyId="Chinat_Small">
 | 
			
		||||
        <Translation Language="GB"></Translation>
 | 
			
		||||
      </Text>
 | 
			
		||||
@ -207,9 +231,6 @@
 | 
			
		||||
      <Text Id="__SingleUse_20H3" Alignment="Center" TypographyId="Numbers">
 | 
			
		||||
        <Translation Language="GB"><value></Translation>
 | 
			
		||||
      </Text>
 | 
			
		||||
      <Text Id="__SingleUse_SDGP" Alignment="Left" TypographyId="Chinat_Large">
 | 
			
		||||
        <Translation Language="GB">Current Mission:</Translation>
 | 
			
		||||
      </Text>
 | 
			
		||||
      <Text Id="__SingleUse_M5X7" Alignment="Center" TypographyId="Chinat_Small">
 | 
			
		||||
        <Translation Language="GB">Invalid Mission</Translation>
 | 
			
		||||
      </Text>
 | 
			
		||||
@ -225,6 +246,7 @@
 | 
			
		||||
    <Typography Id="Chinat_Huge" Font="CHINN___.ttf" Size="40" Bpp="4" Direction="LTR" FallbackCharacter="?" />
 | 
			
		||||
    <Typography Id="Numbers" Font="lucon.TTF" Size="50" Bpp="4" Direction="LTR" FallbackCharacter="?" WildcardCharacters=". ,-" WildcardCharacterRanges="0-9" />
 | 
			
		||||
    <Typography Id="Default_Bold" Font="verdanab.ttf" Size="20" Bpp="4" Direction="LTR" FallbackCharacter="?" WildcardCharacters="! "" WildcardCharacterRanges="#-~" />
 | 
			
		||||
    <Typography Id="Numbers_Smaller" Font="lucon.TTF" Size="33" Bpp="4" Direction="LTR" FallbackCharacter="?" WildcardCharacters=".,-" WildcardCharacterRanges="0-9" />
 | 
			
		||||
    <Typography Id="Numbers_Smaller" Font="lucon.TTF" Size="33" Bpp="4" Direction="LTR" FallbackCharacter="?" WildcardCharacters=" .,-" WildcardCharacterRanges="0-9" />
 | 
			
		||||
    <Typography Id="Numbers_Small" Font="lucon.TTF" Size="20" Bpp="4" Direction="LTR" FallbackCharacter="?" WildcardCharacters=" .,-" WildcardCharacterRanges="0-9" />
 | 
			
		||||
  </Typographies>
 | 
			
		||||
</TextDatabase>
 | 
			
		||||
 | 
			
		||||
@ -11,6 +11,7 @@
 | 
			
		||||
55
 | 
			
		||||
56
 | 
			
		||||
57
 | 
			
		||||
58
 | 
			
		||||
63
 | 
			
		||||
65
 | 
			
		||||
66
 | 
			
		||||
 | 
			
		||||
@ -10,7 +10,6 @@
 | 
			
		||||
55
 | 
			
		||||
56
 | 
			
		||||
57
 | 
			
		||||
58
 | 
			
		||||
63
 | 
			
		||||
65
 | 
			
		||||
66
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										15
									
								
								TouchGFX/generated/fonts/UnicodeListlucon_TTF_20_4.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								TouchGFX/generated/fonts/UnicodeListlucon_TTF_20_4.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
			
		||||
32
 | 
			
		||||
44
 | 
			
		||||
45
 | 
			
		||||
46
 | 
			
		||||
48
 | 
			
		||||
49
 | 
			
		||||
50
 | 
			
		||||
51
 | 
			
		||||
52
 | 
			
		||||
53
 | 
			
		||||
54
 | 
			
		||||
55
 | 
			
		||||
56
 | 
			
		||||
57
 | 
			
		||||
63
 | 
			
		||||
@ -1,3 +1,4 @@
 | 
			
		||||
32
 | 
			
		||||
44
 | 
			
		||||
45
 | 
			
		||||
46
 | 
			
		||||
 | 
			
		||||
@ -1 +1 @@
 | 
			
		||||
{"typographies":[["Default","verdana.ttf",20,4],["Chinat_Large","CHINN___.ttf",30,4],["Chinat_Small","CHINN___.ttf",20,4],["Chinat_Huge","CHINN___.ttf",40,4],["Numbers","lucon.TTF",50,4],["Default_Bold","verdanab.ttf",20,4],["Numbers_Smaller","lucon.TTF",33,4]],"generate_font_format":"0"}
 | 
			
		||||
{"typographies":[["Default","verdana.ttf",20,4],["Chinat_Large","CHINN___.ttf",30,4],["Chinat_Small","CHINN___.ttf",20,4],["Chinat_Huge","CHINN___.ttf",40,4],["Numbers","lucon.TTF",50,4],["Default_Bold","verdanab.ttf",20,4],["Numbers_Smaller","lucon.TTF",33,4],["Numbers_Small","lucon.TTF",20,4]],"generate_font_format":"0"}
 | 
			
		||||
@ -1 +1 @@
 | 
			
		||||
{"typographies":[["Default","verdana.ttf",20,4],["Chinat_Large","CHINN___.ttf",30,4],["Chinat_Small","CHINN___.ttf",20,4],["Chinat_Huge","CHINN___.ttf",40,4],["Numbers","lucon.TTF",50,4],["Default_Bold","verdanab.ttf",20,4],["Numbers_Smaller","lucon.TTF",33,4]],"generate_font_format":"0"}
 | 
			
		||||
{"typographies":[["Default","verdana.ttf",20,4],["Chinat_Large","CHINN___.ttf",30,4],["Chinat_Small","CHINN___.ttf",20,4],["Chinat_Huge","CHINN___.ttf",40,4],["Numbers","lucon.TTF",50,4],["Default_Bold","verdanab.ttf",20,4],["Numbers_Smaller","lucon.TTF",33,4],["Numbers_Small","lucon.TTF",20,4]],"generate_font_format":"0"}
 | 
			
		||||
@ -12,6 +12,7 @@ AH:0 BA:1 FC:63 EC:0 FF:0 CF:1 FU:0
 | 
			
		||||
55
 | 
			
		||||
56
 | 
			
		||||
57
 | 
			
		||||
58
 | 
			
		||||
63
 | 
			
		||||
65
 | 
			
		||||
66
 | 
			
		||||
 | 
			
		||||
@ -11,7 +11,6 @@ AH:0 BA:1 FC:63 EC:0 FF:0 CF:0 FU:0
 | 
			
		||||
55
 | 
			
		||||
56
 | 
			
		||||
57
 | 
			
		||||
58
 | 
			
		||||
63
 | 
			
		||||
65
 | 
			
		||||
66
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										16
									
								
								TouchGFX/generated/fonts/cache/Font_lucon_TTF_20_4bppCpp.cache
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								TouchGFX/generated/fonts/cache/Font_lucon_TTF_20_4bppCpp.cache
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,16 @@
 | 
			
		||||
AH:0 BA:1 FC:63 EC:0 FF:0 CF:1 FU:0
 | 
			
		||||
32
 | 
			
		||||
44
 | 
			
		||||
45
 | 
			
		||||
46
 | 
			
		||||
48
 | 
			
		||||
49
 | 
			
		||||
50
 | 
			
		||||
51
 | 
			
		||||
52
 | 
			
		||||
53
 | 
			
		||||
54
 | 
			
		||||
55
 | 
			
		||||
56
 | 
			
		||||
57
 | 
			
		||||
63
 | 
			
		||||
@ -1,4 +1,5 @@
 | 
			
		||||
AH:0 BA:1 FC:63 EC:0 FF:0 CF:1 FU:0
 | 
			
		||||
AH:0 BA:1 FC:63 EC:0 FF:0 CF:0 FU:0
 | 
			
		||||
32
 | 
			
		||||
44
 | 
			
		||||
45
 | 
			
		||||
46
 | 
			
		||||
 | 
			
		||||
@ -20,6 +20,7 @@ struct Typography
 | 
			
		||||
    static const touchgfx::FontId NUMBERS = 4;
 | 
			
		||||
    static const touchgfx::FontId DEFAULT_BOLD = 5;
 | 
			
		||||
    static const touchgfx::FontId NUMBERS_SMALLER = 6;
 | 
			
		||||
    static const touchgfx::FontId NUMBERS_SMALL = 7;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct TypographyFontIndex
 | 
			
		||||
@ -31,7 +32,8 @@ struct TypographyFontIndex
 | 
			
		||||
    static const touchgfx::FontId NUMBERS = 4;         // lucon_TTF_50_4bpp
 | 
			
		||||
    static const touchgfx::FontId DEFAULT_BOLD = 5;    // verdanab_20_4bpp
 | 
			
		||||
    static const touchgfx::FontId NUMBERS_SMALLER = 6; // lucon_TTF_33_4bpp
 | 
			
		||||
    static const uint16_t NUMBER_OF_FONTS = 7;
 | 
			
		||||
    static const touchgfx::FontId NUMBERS_SMALL = 7;   // lucon_TTF_20_4bpp
 | 
			
		||||
    static const uint16_t NUMBER_OF_FONTS = 8;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class ApplicationFontProvider : public touchgfx::FontProvider
 | 
			
		||||
 | 
			
		||||
@ -30,6 +30,9 @@ touchgfx::Font* ApplicationFontProvider::getFont(touchgfx::FontId typography)
 | 
			
		||||
    case Typography::NUMBERS_SMALLER:
 | 
			
		||||
        // lucon_TTF_33_4bpp
 | 
			
		||||
        return const_cast<touchgfx::Font*>(TypedTextDatabase::getFonts()[6]);
 | 
			
		||||
    case Typography::NUMBERS_SMALL:
 | 
			
		||||
        // lucon_TTF_20_4bpp
 | 
			
		||||
        return const_cast<touchgfx::Font*>(TypedTextDatabase::getFonts()[7]);
 | 
			
		||||
    default:
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -112,6 +112,9 @@ KEEP extern const uint8_t unicodes_CHINN____20_4bpp_0[] FONT_GLYPH_LOCATION_FLAS
 | 
			
		||||
    0x33, 0x53, 0xFF, 0x3F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E, 0xC0, 0xFF,
 | 
			
		||||
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF,
 | 
			
		||||
    0x3A, 0x00,
 | 
			
		||||
    // Unicode: [0x003A, colon]
 | 
			
		||||
    0xF3, 0xFF, 0x0C, 0xF3, 0xFF, 0x0C, 0xF3, 0xFF, 0x0C, 0xD3, 0xDD, 0x0B, 0x00, 0x00, 0x00, 0xD3,
 | 
			
		||||
    0xDD, 0x0A, 0xF3, 0xFF, 0x0C, 0xF3, 0xFF, 0x0C, 0xF3, 0xFF, 0x0C,
 | 
			
		||||
    // Unicode: [0x003F, question]
 | 
			
		||||
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7D, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
 | 
			
		||||
    0xFF, 0xFF, 0xFF, 0x1C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x44, 0x44,
 | 
			
		||||
 | 
			
		||||
@ -198,11 +198,6 @@ KEEP extern const uint8_t unicodes_CHINN____30_4bpp_0[] FONT_GLYPH_LOCATION_FLAS
 | 
			
		||||
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x30, 0xFF,
 | 
			
		||||
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x30, 0xFF, 0xFF,
 | 
			
		||||
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0x39, 0x00, 0x00,
 | 
			
		||||
    // Unicode: [0x003A, colon]
 | 
			
		||||
    0xFC, 0xFF, 0xFF, 0x03, 0xFC, 0xFF, 0xFF, 0x03, 0xFC, 0xFF, 0xFF, 0x03, 0xFC, 0xFF, 0xFF, 0x03,
 | 
			
		||||
    0xFC, 0xFF, 0xFF, 0x03, 0xFC, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0xEB, 0xEE, 0xEE, 0x03, 0xFC, 0xFF, 0xFF, 0x03, 0xFC, 0xFF, 0xFF, 0x03, 0xFC, 0xFF, 0xFF, 0x03,
 | 
			
		||||
    0xFC, 0xFF, 0xFF, 0x03, 0xFC, 0xFF, 0xFF, 0x03,
 | 
			
		||||
    // Unicode: [0x003F, question]
 | 
			
		||||
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x8C, 0x02, 0x00, 0xFF,
 | 
			
		||||
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF,
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										80
									
								
								TouchGFX/generated/fonts/src/Font_lucon_TTF_20_4bpp_0.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								TouchGFX/generated/fonts/src/Font_lucon_TTF_20_4bpp_0.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,80 @@
 | 
			
		||||
#include <touchgfx/hal/Types.hpp>
 | 
			
		||||
 | 
			
		||||
FONT_GLYPH_LOCATION_FLASH_PRAGMA
 | 
			
		||||
KEEP extern const uint8_t unicodes_lucon_TTF_20_4bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = {
 | 
			
		||||
    // Unicode: [0x0020]
 | 
			
		||||
    // (Has no glyph data)
 | 
			
		||||
    // Unicode: [0x002C]
 | 
			
		||||
    0xE6, 0x7E, 0xF6, 0x7F, 0xF6, 0x7F, 0x40, 0x5F, 0x90, 0x1E, 0xD6, 0x04,
 | 
			
		||||
    // Unicode: [0x002D]
 | 
			
		||||
    0x22, 0x22, 0x22, 0x22, 0xFE, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0x55, 0x55,
 | 
			
		||||
    // Unicode: [0x002E]
 | 
			
		||||
    0xE6, 0x7E, 0xF6, 0x7F, 0xF6, 0x7F,
 | 
			
		||||
    // Unicode: [0x0030]
 | 
			
		||||
    0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0xC4, 0xFF, 0x4D, 0x00, 0x40, 0xDF, 0x66, 0xFD, 0x04, 0xD0,
 | 
			
		||||
    0x2E, 0x00, 0xE1, 0x0D, 0xF5, 0x09, 0x00, 0x90, 0x5F, 0xF9, 0x06, 0x00, 0x50, 0xAF, 0xFC, 0x04,
 | 
			
		||||
    0x00, 0x30, 0xCF, 0xFD, 0x02, 0x00, 0x20, 0xEF, 0xFE, 0x02, 0x00, 0x10, 0xEF, 0xFD, 0x03, 0x00,
 | 
			
		||||
    0x20, 0xEF, 0xFB, 0x04, 0x00, 0x30, 0xCF, 0xF9, 0x06, 0x00, 0x50, 0x9F, 0xF4, 0x0A, 0x00, 0x90,
 | 
			
		||||
    0x5F, 0xC0, 0x3F, 0x00, 0xE2, 0x0D, 0x30, 0xEE, 0x88, 0xEE, 0x03, 0x00, 0xA2, 0xEE, 0x3B, 0x00,
 | 
			
		||||
    // Unicode: [0x0031]
 | 
			
		||||
    0x00, 0x10, 0xA5, 0x08, 0x00, 0x00, 0x61, 0xFB, 0xFF, 0x09, 0x00, 0x00, 0xD3, 0x69, 0xF7, 0x09,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0xF5, 0x09, 0x00, 0x00, 0x00, 0x00, 0xF5, 0x09, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0xF5, 0x09, 0x00, 0x00, 0x00, 0x00, 0xF5, 0x09, 0x00, 0x00, 0x00, 0x00, 0xF5, 0x09, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0xF5, 0x09, 0x00, 0x00, 0x00, 0x00, 0xF5, 0x09, 0x00, 0x00, 0x00, 0x00, 0xF5, 0x09,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0xF5, 0x09, 0x00, 0x00, 0x00, 0x00, 0xF5, 0x09, 0x00, 0x00, 0x71, 0x77,
 | 
			
		||||
    0xFA, 0x7C, 0x77, 0x03, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0x07,
 | 
			
		||||
    // Unicode: [0x0032]
 | 
			
		||||
    0x00, 0x00, 0x12, 0x00, 0x00, 0x80, 0xFD, 0xFF, 0x3B, 0x00, 0xF0, 0x6B, 0x96, 0xEF, 0x03, 0x20,
 | 
			
		||||
    0x00, 0x00, 0xF8, 0x0A, 0x00, 0x00, 0x00, 0xF3, 0x0D, 0x00, 0x00, 0x00, 0xF3, 0x0C, 0x00, 0x00,
 | 
			
		||||
    0x00, 0xF7, 0x09, 0x00, 0x00, 0x10, 0xEE, 0x02, 0x00, 0x00, 0xC1, 0x4F, 0x00, 0x00, 0x00, 0xFB,
 | 
			
		||||
    0x05, 0x00, 0x00, 0xA0, 0x5F, 0x00, 0x00, 0x00, 0xF8, 0x06, 0x00, 0x00, 0x40, 0xBF, 0x00, 0x00,
 | 
			
		||||
    0x00, 0xD1, 0x3F, 0x00, 0x00, 0x00, 0xF5, 0xBF, 0xBB, 0xBB, 0x09, 0xF5, 0xFF, 0xFF, 0xFF, 0x0C,
 | 
			
		||||
    // Unicode: [0x0033]
 | 
			
		||||
    0x00, 0x21, 0x01, 0x00, 0x00, 0xD5, 0xFF, 0xDF, 0x06, 0x00, 0xB7, 0x57, 0xE7, 0x6F, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x50, 0xCF, 0x00, 0x00, 0x00, 0x20, 0xBF, 0x00, 0x00, 0x00, 0x70, 0x7F, 0x00, 0x10, 0x32,
 | 
			
		||||
    0xF7, 0x09, 0x00, 0x60, 0xFF, 0xAF, 0x00, 0x00, 0x20, 0x65, 0xFB, 0x2D, 0x00, 0x00, 0x00, 0x70,
 | 
			
		||||
    0xBF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x02, 0x00, 0x00, 0x00, 0xFC, 0x04, 0x00, 0x00, 0x00, 0xFE,
 | 
			
		||||
    0x02, 0x01, 0x00, 0x80, 0xCF, 0x00, 0xCB, 0x88, 0xFB, 0x3E, 0x00, 0xC7, 0xFE, 0x9D, 0x02, 0x00,
 | 
			
		||||
    // Unicode: [0x0034]
 | 
			
		||||
    0x00, 0x00, 0x10, 0x9A, 0x00, 0x00, 0x00, 0xA0, 0xEF, 0x00, 0x00, 0x00, 0xF4, 0xEF, 0x00, 0x00,
 | 
			
		||||
    0x10, 0xCD, 0xEE, 0x00, 0x00, 0x90, 0x3F, 0xED, 0x00, 0x00, 0xF3, 0x08, 0xED, 0x00, 0x00, 0xDD,
 | 
			
		||||
    0x00, 0xED, 0x00, 0x80, 0x3F, 0x00, 0xED, 0x00, 0xF3, 0x09, 0x00, 0xED, 0x00, 0xEC, 0x23, 0x22,
 | 
			
		||||
    0xEE, 0x22, 0xFE, 0xFF, 0xFF, 0xFF, 0xDF, 0x55, 0x55, 0x55, 0xEE, 0x45, 0x00, 0x00, 0x00, 0xED,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0xED, 0x00, 0x00, 0x00, 0x00, 0xED, 0x00,
 | 
			
		||||
    // Unicode: [0x0035]
 | 
			
		||||
    0xF1, 0xFF, 0xFF, 0xAF, 0x00, 0xF1, 0xBD, 0xBB, 0x7B, 0x00, 0xF1, 0x08, 0x00, 0x00, 0x00, 0xF1,
 | 
			
		||||
    0x08, 0x00, 0x00, 0x00, 0xF1, 0x08, 0x00, 0x00, 0x00, 0xF1, 0x19, 0x00, 0x00, 0x00, 0xF1, 0xFF,
 | 
			
		||||
    0x8D, 0x01, 0x00, 0x50, 0x75, 0xFD, 0x1C, 0x00, 0x00, 0x00, 0xA0, 0x9F, 0x00, 0x00, 0x00, 0x20,
 | 
			
		||||
    0xEF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0x30, 0xEF, 0x00, 0x00, 0x00, 0xA0, 0x9F,
 | 
			
		||||
    0x00, 0xC5, 0x88, 0xFC, 0x1C, 0x00, 0xB3, 0xFE, 0x8D, 0x01, 0x00,
 | 
			
		||||
    // Unicode: [0x0036]
 | 
			
		||||
    0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x40, 0xFC, 0xFF, 0x2B, 0x00, 0xF6, 0x7D, 0x75, 0x2B, 0x30,
 | 
			
		||||
    0xCF, 0x01, 0x00, 0x00, 0xA0, 0x3F, 0x00, 0x00, 0x00, 0xF1, 0x0D, 0x10, 0x01, 0x00, 0xF3, 0x3A,
 | 
			
		||||
    0xFC, 0xBF, 0x02, 0xF5, 0xEC, 0x58, 0xF9, 0x1D, 0xF6, 0x6F, 0x00, 0x90, 0x8F, 0xF6, 0x0F, 0x00,
 | 
			
		||||
    0x20, 0xDF, 0xF5, 0x0D, 0x00, 0x00, 0xEF, 0xF2, 0x0E, 0x00, 0x00, 0xEE, 0xE0, 0x2F, 0x00, 0x20,
 | 
			
		||||
    0xBF, 0x80, 0xAF, 0x00, 0x90, 0x5F, 0x10, 0xFC, 0x7B, 0xFB, 0x0A, 0x00, 0x91, 0xFD, 0x7D, 0x00,
 | 
			
		||||
    // Unicode: [0x0037]
 | 
			
		||||
    0xCC, 0xCC, 0xCC, 0xCC, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0xF7, 0x04, 0x00,
 | 
			
		||||
    0x00, 0x10, 0xBE, 0x00, 0x00, 0x00, 0x80, 0x2F, 0x00, 0x00, 0x00, 0xF2, 0x09, 0x00, 0x00, 0x00,
 | 
			
		||||
    0xFA, 0x02, 0x00, 0x00, 0x30, 0x9F, 0x00, 0x00, 0x00, 0xB0, 0x2F, 0x00, 0x00, 0x00, 0xF4, 0x0A,
 | 
			
		||||
    0x00, 0x00, 0x00, 0xFC, 0x04, 0x00, 0x00, 0x40, 0xEF, 0x00, 0x00, 0x00, 0xA0, 0x9F, 0x00, 0x00,
 | 
			
		||||
    0x00, 0xE0, 0x5F, 0x00, 0x00, 0x00, 0xF2, 0x2F, 0x00, 0x00, 0x00,
 | 
			
		||||
    // Unicode: [0x0038]
 | 
			
		||||
    0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xB3, 0xFF, 0xAF, 0x02, 0x20, 0xEE, 0x67, 0xFA, 0x0C, 0x80,
 | 
			
		||||
    0x4F, 0x00, 0xC0, 0x1F, 0xA0, 0x2F, 0x00, 0x90, 0x1F, 0x80, 0x8F, 0x00, 0xD0, 0x0C, 0x10, 0xFE,
 | 
			
		||||
    0x18, 0xE9, 0x03, 0x00, 0xE3, 0xEF, 0x2E, 0x00, 0x00, 0xEA, 0xFA, 0xBF, 0x01, 0x90, 0x5F, 0x30,
 | 
			
		||||
    0xFD, 0x1D, 0xF2, 0x0B, 0x00, 0xD1, 0x7F, 0xF6, 0x07, 0x00, 0x50, 0xBF, 0xF6, 0x09, 0x00, 0x40,
 | 
			
		||||
    0xAF, 0xF2, 0x2E, 0x00, 0xA0, 0x6F, 0x80, 0xEF, 0x89, 0xFC, 0x0B, 0x00, 0xC6, 0xFE, 0x7C, 0x00,
 | 
			
		||||
    // Unicode: [0x0039]
 | 
			
		||||
    0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0xD5, 0xFF, 0x5D, 0x00, 0x60, 0xCF, 0x76, 0xFE, 0x06, 0xE1,
 | 
			
		||||
    0x0D, 0x00, 0xF2, 0x1E, 0xF6, 0x07, 0x00, 0xA0, 0x5F, 0xF8, 0x05, 0x00, 0x70, 0x9F, 0xF7, 0x07,
 | 
			
		||||
    0x00, 0x80, 0xBF, 0xF4, 0x0C, 0x00, 0xC0, 0xCF, 0xB0, 0xAF, 0x33, 0xDA, 0xCF, 0x10, 0xFB, 0xFF,
 | 
			
		||||
    0x5B, 0xBF, 0x00, 0x20, 0x24, 0x50, 0x9F, 0x00, 0x00, 0x00, 0x90, 0x6F, 0x00, 0x00, 0x00, 0xE1,
 | 
			
		||||
    0x1E, 0x10, 0x00, 0x00, 0xFA, 0x07, 0xB0, 0x8B, 0xC8, 0xAF, 0x00, 0x60, 0xEC, 0xCE, 0x06, 0x00,
 | 
			
		||||
    // Unicode: [0x003F]
 | 
			
		||||
    0x00, 0x10, 0x12, 0x00, 0x00, 0xB4, 0xFE, 0xFF, 0xAE, 0x02, 0xF6, 0x68, 0x75, 0xFB, 0x2E, 0xF6,
 | 
			
		||||
    0x01, 0x00, 0xB0, 0x8F, 0x52, 0x00, 0x00, 0x70, 0x8F, 0x00, 0x00, 0x00, 0xC0, 0x4F, 0x00, 0x00,
 | 
			
		||||
    0x00, 0xF9, 0x09, 0x00, 0x00, 0xA0, 0x9F, 0x00, 0x00, 0x00, 0xF9, 0x07, 0x00, 0x00, 0x40, 0xAF,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x80, 0x5F, 0x00, 0x00, 0x00, 0x80, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x30, 0x23, 0x00, 0x00, 0x00, 0xE0, 0x8F, 0x00, 0x00, 0x00, 0xE0, 0x8F, 0x00, 0x00
 | 
			
		||||
};
 | 
			
		||||
@ -2,6 +2,8 @@
 | 
			
		||||
 | 
			
		||||
FONT_GLYPH_LOCATION_FLASH_PRAGMA
 | 
			
		||||
KEEP extern const uint8_t unicodes_lucon_TTF_33_4bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = {
 | 
			
		||||
    // Unicode: [0x0020]
 | 
			
		||||
    // (Has no glyph data)
 | 
			
		||||
    // Unicode: [0x002C]
 | 
			
		||||
    0xC5, 0xCC, 0x4C, 0xF7, 0xFF, 0x5F, 0xF7, 0xFF, 0x5F, 0xF7, 0xFF, 0x5F, 0xF7, 0xFF, 0x4F, 0x00,
 | 
			
		||||
    0xF8, 0x2F, 0x00, 0xFA, 0x0E, 0x10, 0xFE, 0x08, 0xD3, 0xDF, 0x01, 0xE6, 0x19, 0x00,
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,6 @@
 | 
			
		||||
#include <touchgfx/Font.hpp>
 | 
			
		||||
 | 
			
		||||
FONT_KERNING_LOCATION_FLASH_PRAGMA
 | 
			
		||||
KEEP extern const touchgfx::KerningNode kerning_lucon_TTF_20_4bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE = {
 | 
			
		||||
    { 0, 0 }
 | 
			
		||||
};
 | 
			
		||||
@ -17,60 +17,61 @@ KEEP extern const touchgfx::GlyphNode glyphs_CHINN____20_4bpp[] FONT_TABLE_LOCAT
 | 
			
		||||
    {  1000, 0x0037,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // seven
 | 
			
		||||
    {  1130, 0x0038,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // eight
 | 
			
		||||
    {  1260, 0x0039,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // nine
 | 
			
		||||
    {  1390, 0x003F,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // question
 | 
			
		||||
    {  1520, 0x0041,  20,  13,  13,  -1,  18,   0,   0, 0x00 }, // A
 | 
			
		||||
    {  1650, 0x0042,  20,  13,  13,   0,  21,   0,   0, 0x00 }, // B
 | 
			
		||||
    {  1780, 0x0043,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // C
 | 
			
		||||
    {  1910, 0x0044,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // D
 | 
			
		||||
    {  2040, 0x0045,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // E
 | 
			
		||||
    {  2170, 0x0046,  20,  13,  13,   0,  19,   0,   0, 0x00 }, // F
 | 
			
		||||
    {  2300, 0x0047,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // G
 | 
			
		||||
    {  2430, 0x0048,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // H
 | 
			
		||||
    {  2560, 0x0049,   4,  13,  13,   0,   5,   0,   0, 0x00 }, // I
 | 
			
		||||
    {  2586, 0x004A,  20,  13,  13,  -1,  19,   0,   0, 0x00 }, // J
 | 
			
		||||
    {  2716, 0x004B,  20,  13,  13,   0,  19,   0,   0, 0x00 }, // K
 | 
			
		||||
    {  2846, 0x004C,  20,  13,  13,   0,  19,   0,   0, 0x00 }, // L
 | 
			
		||||
    {  2976, 0x004D,  21,  13,  13,   0,  21,   0,   0, 0x00 }, // M
 | 
			
		||||
    {  3119, 0x004E,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // N
 | 
			
		||||
    {  3249, 0x004F,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // O
 | 
			
		||||
    {  3379, 0x0050,  21,  13,  13,   0,  20,   0,   0, 0x00 }, // P
 | 
			
		||||
    {  3522, 0x0051,  21,  13,  13,   0,  20,   0,   0, 0x00 }, // Q
 | 
			
		||||
    {  3665, 0x0052,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // R
 | 
			
		||||
    {  3795, 0x0053,  22,  13,  13,   0,  22,   0,   0, 0x00 }, // S
 | 
			
		||||
    {  3938, 0x0054,  20,  13,  13,  -1,  19,   0,   0, 0x00 }, // T
 | 
			
		||||
    {  4068, 0x0055,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // U
 | 
			
		||||
    {  4198, 0x0056,  20,  13,  13,  -1,  18,   0,   0, 0x00 }, // V
 | 
			
		||||
    {  4328, 0x0057,  19,  13,  13,   0,  19,   0,   0, 0x00 }, // W
 | 
			
		||||
    {  4458, 0x0058,  19,  13,  13,   0,  19,   0,   0, 0x00 }, // X
 | 
			
		||||
    {  4588, 0x0059,  19,  13,  13,  -1,  18,   0,   0, 0x00 }, // Y
 | 
			
		||||
    {  4718, 0x005A,  22,  13,  13,   0,  22,   0,   0, 0x00 }, // Z
 | 
			
		||||
    {  4861, 0x005F,  10,   3, 255,   0,  10,   0,   0, 0x60 }, // underscore
 | 
			
		||||
    {  4876, 0x0061,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // a
 | 
			
		||||
    {  5006, 0x0062,  20,  13,  13,   0,  21,   0,   0, 0x00 }, // b
 | 
			
		||||
    {  5136, 0x0063,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // c
 | 
			
		||||
    {  5266, 0x0064,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // d
 | 
			
		||||
    {  5396, 0x0065,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // e
 | 
			
		||||
    {  5526, 0x0066,  20,  13,  13,   0,  19,   0,   0, 0x00 }, // f
 | 
			
		||||
    {  5656, 0x0067,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // g
 | 
			
		||||
    {  5786, 0x0068,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // h
 | 
			
		||||
    {  5916, 0x0069,   4,  13,  13,   0,   5,   0,   0, 0x00 }, // i
 | 
			
		||||
    {  5942, 0x006A,  20,  13,  13,  -1,  19,   0,   0, 0x00 }, // j
 | 
			
		||||
    {  6072, 0x006B,  20,  13,  13,   0,  19,   0,   0, 0x00 }, // k
 | 
			
		||||
    {  6202, 0x006C,  15,  13,  13,   0,  14,   0,   0, 0x00 }, // l
 | 
			
		||||
    {  6306, 0x006D,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // m
 | 
			
		||||
    {  6436, 0x006E,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // n
 | 
			
		||||
    {  6566, 0x006F,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // o
 | 
			
		||||
    {  6696, 0x0070,  20,  13,  13,   0,  19,   0,   0, 0x00 }, // p
 | 
			
		||||
    {  6826, 0x0071,  21,  13,  13,   0,  20,   0,   0, 0x00 }, // q
 | 
			
		||||
    {  6969, 0x0072,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // r
 | 
			
		||||
    {  7099, 0x0073,  22,  13,  13,   0,  22,   0,   0, 0x00 }, // s
 | 
			
		||||
    {  7242, 0x0074,  20,  13,  13,  -1,  19,   0,   0, 0x00 }, // t
 | 
			
		||||
    {  7372, 0x0075,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // u
 | 
			
		||||
    {  7502, 0x0076,  20,  13,  13,  -1,  18,   0,   0, 0x00 }, // v
 | 
			
		||||
    {  7632, 0x0077,  22,  13,  13,   0,  22,   0,   0, 0x00 }, // w
 | 
			
		||||
    {  7775, 0x0078,  19,  13,  13,   0,  19,   0,   0, 0x00 }, // x
 | 
			
		||||
    {  7905, 0x0079,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // y
 | 
			
		||||
    {  8035, 0x007A,  22,  13,  13,   0,  22,   0,   0, 0x00 }  // z
 | 
			
		||||
    {  1390, 0x003A,   5,   9,   9,   0,   6,   0,   0, 0x00 }, // colon
 | 
			
		||||
    {  1417, 0x003F,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // question
 | 
			
		||||
    {  1547, 0x0041,  20,  13,  13,  -1,  18,   0,   0, 0x00 }, // A
 | 
			
		||||
    {  1677, 0x0042,  20,  13,  13,   0,  21,   0,   0, 0x00 }, // B
 | 
			
		||||
    {  1807, 0x0043,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // C
 | 
			
		||||
    {  1937, 0x0044,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // D
 | 
			
		||||
    {  2067, 0x0045,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // E
 | 
			
		||||
    {  2197, 0x0046,  20,  13,  13,   0,  19,   0,   0, 0x00 }, // F
 | 
			
		||||
    {  2327, 0x0047,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // G
 | 
			
		||||
    {  2457, 0x0048,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // H
 | 
			
		||||
    {  2587, 0x0049,   4,  13,  13,   0,   5,   0,   0, 0x00 }, // I
 | 
			
		||||
    {  2613, 0x004A,  20,  13,  13,  -1,  19,   0,   0, 0x00 }, // J
 | 
			
		||||
    {  2743, 0x004B,  20,  13,  13,   0,  19,   0,   0, 0x00 }, // K
 | 
			
		||||
    {  2873, 0x004C,  20,  13,  13,   0,  19,   0,   0, 0x00 }, // L
 | 
			
		||||
    {  3003, 0x004D,  21,  13,  13,   0,  21,   0,   0, 0x00 }, // M
 | 
			
		||||
    {  3146, 0x004E,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // N
 | 
			
		||||
    {  3276, 0x004F,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // O
 | 
			
		||||
    {  3406, 0x0050,  21,  13,  13,   0,  20,   0,   0, 0x00 }, // P
 | 
			
		||||
    {  3549, 0x0051,  21,  13,  13,   0,  20,   0,   0, 0x00 }, // Q
 | 
			
		||||
    {  3692, 0x0052,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // R
 | 
			
		||||
    {  3822, 0x0053,  22,  13,  13,   0,  22,   0,   0, 0x00 }, // S
 | 
			
		||||
    {  3965, 0x0054,  20,  13,  13,  -1,  19,   0,   0, 0x00 }, // T
 | 
			
		||||
    {  4095, 0x0055,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // U
 | 
			
		||||
    {  4225, 0x0056,  20,  13,  13,  -1,  18,   0,   0, 0x00 }, // V
 | 
			
		||||
    {  4355, 0x0057,  19,  13,  13,   0,  19,   0,   0, 0x00 }, // W
 | 
			
		||||
    {  4485, 0x0058,  19,  13,  13,   0,  19,   0,   0, 0x00 }, // X
 | 
			
		||||
    {  4615, 0x0059,  19,  13,  13,  -1,  18,   0,   0, 0x00 }, // Y
 | 
			
		||||
    {  4745, 0x005A,  22,  13,  13,   0,  22,   0,   0, 0x00 }, // Z
 | 
			
		||||
    {  4888, 0x005F,  10,   3, 255,   0,  10,   0,   0, 0x60 }, // underscore
 | 
			
		||||
    {  4903, 0x0061,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // a
 | 
			
		||||
    {  5033, 0x0062,  20,  13,  13,   0,  21,   0,   0, 0x00 }, // b
 | 
			
		||||
    {  5163, 0x0063,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // c
 | 
			
		||||
    {  5293, 0x0064,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // d
 | 
			
		||||
    {  5423, 0x0065,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // e
 | 
			
		||||
    {  5553, 0x0066,  20,  13,  13,   0,  19,   0,   0, 0x00 }, // f
 | 
			
		||||
    {  5683, 0x0067,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // g
 | 
			
		||||
    {  5813, 0x0068,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // h
 | 
			
		||||
    {  5943, 0x0069,   4,  13,  13,   0,   5,   0,   0, 0x00 }, // i
 | 
			
		||||
    {  5969, 0x006A,  20,  13,  13,  -1,  19,   0,   0, 0x00 }, // j
 | 
			
		||||
    {  6099, 0x006B,  20,  13,  13,   0,  19,   0,   0, 0x00 }, // k
 | 
			
		||||
    {  6229, 0x006C,  15,  13,  13,   0,  14,   0,   0, 0x00 }, // l
 | 
			
		||||
    {  6333, 0x006D,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // m
 | 
			
		||||
    {  6463, 0x006E,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // n
 | 
			
		||||
    {  6593, 0x006F,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // o
 | 
			
		||||
    {  6723, 0x0070,  20,  13,  13,   0,  19,   0,   0, 0x00 }, // p
 | 
			
		||||
    {  6853, 0x0071,  21,  13,  13,   0,  20,   0,   0, 0x00 }, // q
 | 
			
		||||
    {  6996, 0x0072,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // r
 | 
			
		||||
    {  7126, 0x0073,  22,  13,  13,   0,  22,   0,   0, 0x00 }, // s
 | 
			
		||||
    {  7269, 0x0074,  20,  13,  13,  -1,  19,   0,   0, 0x00 }, // t
 | 
			
		||||
    {  7399, 0x0075,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // u
 | 
			
		||||
    {  7529, 0x0076,  20,  13,  13,  -1,  18,   0,   0, 0x00 }, // v
 | 
			
		||||
    {  7659, 0x0077,  22,  13,  13,   0,  22,   0,   0, 0x00 }, // w
 | 
			
		||||
    {  7802, 0x0078,  19,  13,  13,   0,  19,   0,   0, 0x00 }, // x
 | 
			
		||||
    {  7932, 0x0079,  20,  13,  13,   0,  20,   0,   0, 0x00 }, // y
 | 
			
		||||
    {  8062, 0x007A,  22,  13,  13,   0,  22,   0,   0, 0x00 }  // z
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// CHINN____20_4bpp
 | 
			
		||||
@ -88,6 +89,6 @@ touchgfx::GeneratedFont& getFont_CHINN____20_4bpp();
 | 
			
		||||
 | 
			
		||||
touchgfx::GeneratedFont& getFont_CHINN____20_4bpp()
 | 
			
		||||
{
 | 
			
		||||
    static touchgfx::GeneratedFont CHINN____20_4bpp(glyphs_CHINN____20_4bpp, 67, 24, 20, 0, 0, 4, 1, 1, 1, unicodes_CHINN____20_4bpp, kerning_CHINN____20_4bpp, 63, 0, 0, 0);
 | 
			
		||||
    static touchgfx::GeneratedFont CHINN____20_4bpp(glyphs_CHINN____20_4bpp, 68, 24, 20, 0, 0, 4, 1, 1, 1, unicodes_CHINN____20_4bpp, kerning_CHINN____20_4bpp, 63, 0, 0, 0);
 | 
			
		||||
    return CHINN____20_4bpp;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -16,60 +16,59 @@ KEEP extern const touchgfx::GlyphNode glyphs_CHINN____30_4bpp[] FONT_TABLE_LOCAT
 | 
			
		||||
    {  1975, 0x0037,  29,  20,  20,   0,  30,   0,   0, 0x00 }, // seven
 | 
			
		||||
    {  2275, 0x0038,  29,  20,  20,   0,  30,   0,   0, 0x00 }, // eight
 | 
			
		||||
    {  2575, 0x0039,  29,  20,  20,   0,  30,   0,   0, 0x00 }, // nine
 | 
			
		||||
    {  2875, 0x003A,   7,  14,  14,   1,   8,   0,   0, 0x00 }, // colon
 | 
			
		||||
    {  2931, 0x003F,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // question
 | 
			
		||||
    {  3231, 0x0041,  29,  20,  20,  -1,  27,   0,   0, 0x00 }, // A
 | 
			
		||||
    {  3531, 0x0042,  30,  20,  20,   0,  31,   0,   0, 0x00 }, // B
 | 
			
		||||
    {  3831, 0x0043,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // C
 | 
			
		||||
    {  4131, 0x0044,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // D
 | 
			
		||||
    {  4431, 0x0045,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // E
 | 
			
		||||
    {  4731, 0x0046,  29,  20,  20,   0,  29,   0,   0, 0x00 }, // F
 | 
			
		||||
    {  5031, 0x0047,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // G
 | 
			
		||||
    {  5331, 0x0048,  30,  20,  20,   0,  31,   0,   0, 0x00 }, // H
 | 
			
		||||
    {  5631, 0x0049,   6,  20,  20,   0,   7,   0,   0, 0x00 }, // I
 | 
			
		||||
    {  5691, 0x004A,  30,  20,  20,  -1,  29,   0,   0, 0x00 }, // J
 | 
			
		||||
    {  5991, 0x004B,  30,  20,  20,   0,  29,   0,   0, 0x00 }, // K
 | 
			
		||||
    {  6291, 0x004C,  30,  20,  20,   0,  29,   0,   0, 0x00 }, // L
 | 
			
		||||
    {  6591, 0x004D,  32,  20,  20,   0,  32,   0,   0, 0x00 }, // M
 | 
			
		||||
    {  6911, 0x004E,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // N
 | 
			
		||||
    {  7211, 0x004F,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // O
 | 
			
		||||
    {  7511, 0x0050,  31,  20,  20,   0,  31,   0,   0, 0x00 }, // P
 | 
			
		||||
    {  7831, 0x0051,  31,  20,  20,   0,  31,   0,   0, 0x00 }, // Q
 | 
			
		||||
    {  8151, 0x0052,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // R
 | 
			
		||||
    {  8451, 0x0053,  32,  20,  20,   0,  32,   0,   0, 0x00 }, // S
 | 
			
		||||
    {  8771, 0x0054,  30,  20,  20,  -1,  28,   0,   0, 0x00 }, // T
 | 
			
		||||
    {  9071, 0x0055,  30,  20,  20,   0,  31,   0,   0, 0x00 }, // U
 | 
			
		||||
    {  9371, 0x0056,  29,  20,  20,  -1,  27,   0,   0, 0x00 }, // V
 | 
			
		||||
    {  9671, 0x0057,  28,  20,  20,   0,  28,   0,   0, 0x00 }, // W
 | 
			
		||||
    {  9951, 0x0058,  29,  20,  20,   0,  28,   0,   0, 0x00 }, // X
 | 
			
		||||
    { 10251, 0x0059,  28,  20,  20,  -1,  27,   0,   0, 0x00 }, // Y
 | 
			
		||||
    { 10531, 0x005A,  33,  20,  20,   0,  32,   0,   0, 0x00 }, // Z
 | 
			
		||||
    { 10871, 0x0061,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // a
 | 
			
		||||
    { 11171, 0x0062,  30,  20,  20,   0,  31,   0,   0, 0x00 }, // b
 | 
			
		||||
    { 11471, 0x0063,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // c
 | 
			
		||||
    { 11771, 0x0064,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // d
 | 
			
		||||
    { 12071, 0x0065,  29,  20,  20,   0,  30,   0,   0, 0x00 }, // e
 | 
			
		||||
    { 12371, 0x0066,  29,  20,  20,   0,  29,   0,   0, 0x00 }, // f
 | 
			
		||||
    { 12671, 0x0067,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // g
 | 
			
		||||
    { 12971, 0x0068,  30,  20,  20,   0,  31,   0,   0, 0x00 }, // h
 | 
			
		||||
    { 13271, 0x0069,   6,  20,  20,   0,   7,   0,   0, 0x00 }, // i
 | 
			
		||||
    { 13331, 0x006A,  30,  20,  20,  -1,  29,   0,   0, 0x00 }, // j
 | 
			
		||||
    { 13631, 0x006B,  30,  20,  20,   0,  29,   0,   0, 0x00 }, // k
 | 
			
		||||
    { 13931, 0x006C,  22,  20,  20,   0,  21,   0,   0, 0x00 }, // l
 | 
			
		||||
    { 14151, 0x006D,  29,  20,  20,   0,  30,   0,   0, 0x00 }, // m
 | 
			
		||||
    { 14451, 0x006E,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // n
 | 
			
		||||
    { 14751, 0x006F,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // o
 | 
			
		||||
    { 15051, 0x0070,  29,  20,  20,   0,  29,   0,   0, 0x00 }, // p
 | 
			
		||||
    { 15351, 0x0071,  31,  20,  20,   0,  31,   0,   0, 0x00 }, // q
 | 
			
		||||
    { 15671, 0x0072,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // r
 | 
			
		||||
    { 15971, 0x0073,  32,  20,  20,   0,  32,   0,   0, 0x00 }, // s
 | 
			
		||||
    { 16291, 0x0074,  30,  20,  20,  -1,  28,   0,   0, 0x00 }, // t
 | 
			
		||||
    { 16591, 0x0075,  30,  20,  20,   0,  31,   0,   0, 0x00 }, // u
 | 
			
		||||
    { 16891, 0x0076,  29,  20,  20,  -1,  27,   0,   0, 0x00 }, // v
 | 
			
		||||
    { 17191, 0x0077,  33,  20,  20,   0,  33,   0,   0, 0x00 }, // w
 | 
			
		||||
    { 17531, 0x0078,  29,  20,  20,   0,  28,   0,   0, 0x00 }, // x
 | 
			
		||||
    { 17831, 0x0079,  30,  20,  20,   0,  31,   0,   0, 0x00 }, // y
 | 
			
		||||
    { 18131, 0x007A,  33,  20,  20,   0,  32,   0,   0, 0x00 }  // z
 | 
			
		||||
    {  2875, 0x003F,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // question
 | 
			
		||||
    {  3175, 0x0041,  29,  20,  20,  -1,  27,   0,   0, 0x00 }, // A
 | 
			
		||||
    {  3475, 0x0042,  30,  20,  20,   0,  31,   0,   0, 0x00 }, // B
 | 
			
		||||
    {  3775, 0x0043,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // C
 | 
			
		||||
    {  4075, 0x0044,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // D
 | 
			
		||||
    {  4375, 0x0045,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // E
 | 
			
		||||
    {  4675, 0x0046,  29,  20,  20,   0,  29,   0,   0, 0x00 }, // F
 | 
			
		||||
    {  4975, 0x0047,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // G
 | 
			
		||||
    {  5275, 0x0048,  30,  20,  20,   0,  31,   0,   0, 0x00 }, // H
 | 
			
		||||
    {  5575, 0x0049,   6,  20,  20,   0,   7,   0,   0, 0x00 }, // I
 | 
			
		||||
    {  5635, 0x004A,  30,  20,  20,  -1,  29,   0,   0, 0x00 }, // J
 | 
			
		||||
    {  5935, 0x004B,  30,  20,  20,   0,  29,   0,   0, 0x00 }, // K
 | 
			
		||||
    {  6235, 0x004C,  30,  20,  20,   0,  29,   0,   0, 0x00 }, // L
 | 
			
		||||
    {  6535, 0x004D,  32,  20,  20,   0,  32,   0,   0, 0x00 }, // M
 | 
			
		||||
    {  6855, 0x004E,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // N
 | 
			
		||||
    {  7155, 0x004F,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // O
 | 
			
		||||
    {  7455, 0x0050,  31,  20,  20,   0,  31,   0,   0, 0x00 }, // P
 | 
			
		||||
    {  7775, 0x0051,  31,  20,  20,   0,  31,   0,   0, 0x00 }, // Q
 | 
			
		||||
    {  8095, 0x0052,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // R
 | 
			
		||||
    {  8395, 0x0053,  32,  20,  20,   0,  32,   0,   0, 0x00 }, // S
 | 
			
		||||
    {  8715, 0x0054,  30,  20,  20,  -1,  28,   0,   0, 0x00 }, // T
 | 
			
		||||
    {  9015, 0x0055,  30,  20,  20,   0,  31,   0,   0, 0x00 }, // U
 | 
			
		||||
    {  9315, 0x0056,  29,  20,  20,  -1,  27,   0,   0, 0x00 }, // V
 | 
			
		||||
    {  9615, 0x0057,  28,  20,  20,   0,  28,   0,   0, 0x00 }, // W
 | 
			
		||||
    {  9895, 0x0058,  29,  20,  20,   0,  28,   0,   0, 0x00 }, // X
 | 
			
		||||
    { 10195, 0x0059,  28,  20,  20,  -1,  27,   0,   0, 0x00 }, // Y
 | 
			
		||||
    { 10475, 0x005A,  33,  20,  20,   0,  32,   0,   0, 0x00 }, // Z
 | 
			
		||||
    { 10815, 0x0061,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // a
 | 
			
		||||
    { 11115, 0x0062,  30,  20,  20,   0,  31,   0,   0, 0x00 }, // b
 | 
			
		||||
    { 11415, 0x0063,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // c
 | 
			
		||||
    { 11715, 0x0064,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // d
 | 
			
		||||
    { 12015, 0x0065,  29,  20,  20,   0,  30,   0,   0, 0x00 }, // e
 | 
			
		||||
    { 12315, 0x0066,  29,  20,  20,   0,  29,   0,   0, 0x00 }, // f
 | 
			
		||||
    { 12615, 0x0067,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // g
 | 
			
		||||
    { 12915, 0x0068,  30,  20,  20,   0,  31,   0,   0, 0x00 }, // h
 | 
			
		||||
    { 13215, 0x0069,   6,  20,  20,   0,   7,   0,   0, 0x00 }, // i
 | 
			
		||||
    { 13275, 0x006A,  30,  20,  20,  -1,  29,   0,   0, 0x00 }, // j
 | 
			
		||||
    { 13575, 0x006B,  30,  20,  20,   0,  29,   0,   0, 0x00 }, // k
 | 
			
		||||
    { 13875, 0x006C,  22,  20,  20,   0,  21,   0,   0, 0x00 }, // l
 | 
			
		||||
    { 14095, 0x006D,  29,  20,  20,   0,  30,   0,   0, 0x00 }, // m
 | 
			
		||||
    { 14395, 0x006E,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // n
 | 
			
		||||
    { 14695, 0x006F,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // o
 | 
			
		||||
    { 14995, 0x0070,  29,  20,  20,   0,  29,   0,   0, 0x00 }, // p
 | 
			
		||||
    { 15295, 0x0071,  31,  20,  20,   0,  31,   0,   0, 0x00 }, // q
 | 
			
		||||
    { 15615, 0x0072,  30,  20,  20,   0,  30,   0,   0, 0x00 }, // r
 | 
			
		||||
    { 15915, 0x0073,  32,  20,  20,   0,  32,   0,   0, 0x00 }, // s
 | 
			
		||||
    { 16235, 0x0074,  30,  20,  20,  -1,  28,   0,   0, 0x00 }, // t
 | 
			
		||||
    { 16535, 0x0075,  30,  20,  20,   0,  31,   0,   0, 0x00 }, // u
 | 
			
		||||
    { 16835, 0x0076,  29,  20,  20,  -1,  27,   0,   0, 0x00 }, // v
 | 
			
		||||
    { 17135, 0x0077,  33,  20,  20,   0,  33,   0,   0, 0x00 }, // w
 | 
			
		||||
    { 17475, 0x0078,  29,  20,  20,   0,  28,   0,   0, 0x00 }, // x
 | 
			
		||||
    { 17775, 0x0079,  30,  20,  20,   0,  31,   0,   0, 0x00 }, // y
 | 
			
		||||
    { 18075, 0x007A,  33,  20,  20,   0,  32,   0,   0, 0x00 }  // z
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// CHINN____30_4bpp
 | 
			
		||||
@ -87,6 +86,6 @@ touchgfx::GeneratedFont& getFont_CHINN____30_4bpp();
 | 
			
		||||
 | 
			
		||||
touchgfx::GeneratedFont& getFont_CHINN____30_4bpp()
 | 
			
		||||
{
 | 
			
		||||
    static touchgfx::GeneratedFont CHINN____30_4bpp(glyphs_CHINN____30_4bpp, 66, 30, 30, 0, 0, 4, 1, 1, 1, unicodes_CHINN____30_4bpp, kerning_CHINN____30_4bpp, 63, 0, 0, 0);
 | 
			
		||||
    static touchgfx::GeneratedFont CHINN____30_4bpp(glyphs_CHINN____30_4bpp, 65, 30, 30, 0, 0, 4, 1, 1, 1, unicodes_CHINN____30_4bpp, kerning_CHINN____30_4bpp, 63, 0, 0, 0);
 | 
			
		||||
    return CHINN____30_4bpp;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										41
									
								
								TouchGFX/generated/fonts/src/Table_lucon_TTF_20_4bpp.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								TouchGFX/generated/fonts/src/Table_lucon_TTF_20_4bpp.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,41 @@
 | 
			
		||||
// Autogenerated, do not edit
 | 
			
		||||
 | 
			
		||||
#include <fonts/GeneratedFont.hpp>
 | 
			
		||||
 | 
			
		||||
FONT_TABLE_LOCATION_FLASH_PRAGMA
 | 
			
		||||
KEEP extern const touchgfx::GlyphNode glyphs_lucon_TTF_20_4bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = {
 | 
			
		||||
    {     0, 0x0020,   0,   0,   0,   0,  12,   0,   0, 0x00 },
 | 
			
		||||
    {     0, 0x002C,   4,   6,   3,   4,  12,   0,   0, 0x00 },
 | 
			
		||||
    {    12, 0x002D,   8,   3,   8,   2,  12,   0,   0, 0x00 },
 | 
			
		||||
    {    24, 0x002E,   4,   3,   3,   4,  12,   0,   0, 0x00 },
 | 
			
		||||
    {    30, 0x0030,  10,  16,  16,   1,  12,   0,   0, 0x00 },
 | 
			
		||||
    {   110, 0x0031,  11,  15,  15,   1,  12,   0,   0, 0x00 },
 | 
			
		||||
    {   200, 0x0032,   9,  16,  16,   1,  12,   0,   0, 0x00 },
 | 
			
		||||
    {   280, 0x0033,   9,  16,  16,   2,  12,   0,   0, 0x00 },
 | 
			
		||||
    {   360, 0x0034,  10,  15,  15,   1,  12,   0,   0, 0x00 },
 | 
			
		||||
    {   435, 0x0035,   9,  15,  15,   2,  12,   0,   0, 0x00 },
 | 
			
		||||
    {   510, 0x0036,  10,  16,  16,   1,  12,   0,   0, 0x00 },
 | 
			
		||||
    {   590, 0x0037,   9,  15,  15,   2,  12,   0,   0, 0x00 },
 | 
			
		||||
    {   665, 0x0038,  10,  16,  16,   1,  12,   0,   0, 0x00 },
 | 
			
		||||
    {   745, 0x0039,  10,  16,  16,   1,  12,   0,   0, 0x00 },
 | 
			
		||||
    {   825, 0x003F,  10,  16,  16,   1,  12,   0,   0, 0x00 }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// lucon_TTF_20_4bpp
 | 
			
		||||
FONT_TABLE_LOCATION_FLASH_PRAGMA
 | 
			
		||||
KEEP extern const touchgfx::GlyphNode glyphs_lucon_TTF_20_4bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE;
 | 
			
		||||
FONT_GLYPH_LOCATION_FLASH_PRAGMA
 | 
			
		||||
KEEP extern const uint8_t unicodes_lucon_TTF_20_4bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE;
 | 
			
		||||
FONT_SEARCHTABLE_LOCATION_FLASH_PRAGMA
 | 
			
		||||
KEEP extern const uint8_t* const unicodes_lucon_TTF_20_4bpp[] FONT_SEARCHTABLE_LOCATION_FLASH_ATTRIBUTE = {
 | 
			
		||||
    unicodes_lucon_TTF_20_4bpp_0
 | 
			
		||||
};
 | 
			
		||||
FONT_KERNING_LOCATION_FLASH_PRAGMA
 | 
			
		||||
KEEP extern const touchgfx::KerningNode kerning_lucon_TTF_20_4bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE;
 | 
			
		||||
touchgfx::GeneratedFont& getFont_lucon_TTF_20_4bpp();
 | 
			
		||||
 | 
			
		||||
touchgfx::GeneratedFont& getFont_lucon_TTF_20_4bpp()
 | 
			
		||||
{
 | 
			
		||||
    static touchgfx::GeneratedFont lucon_TTF_20_4bpp(glyphs_lucon_TTF_20_4bpp, 15, 23, 20, 0, 0, 4, 1, 0, 0, unicodes_lucon_TTF_20_4bpp, kerning_lucon_TTF_20_4bpp, 63, 0, 0, 0);
 | 
			
		||||
    return lucon_TTF_20_4bpp;
 | 
			
		||||
}
 | 
			
		||||
@ -4,6 +4,7 @@
 | 
			
		||||
 | 
			
		||||
FONT_TABLE_LOCATION_FLASH_PRAGMA
 | 
			
		||||
KEEP extern const touchgfx::GlyphNode glyphs_lucon_TTF_33_4bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = {
 | 
			
		||||
    {     0, 0x0020,   0,   0,   0,   0,  20,   0,   0, 0x00 },
 | 
			
		||||
    {     0, 0x002C,   6,  10,   5,   7,  20,   0,   0, 0x00 },
 | 
			
		||||
    {    30, 0x002D,  14,   3,  12,   3,  20,   0,   0, 0x00 },
 | 
			
		||||
    {    51, 0x002E,   6,   5,   5,   7,  20,   0,   0, 0x00 },
 | 
			
		||||
@ -35,6 +36,6 @@ touchgfx::GeneratedFont& getFont_lucon_TTF_33_4bpp();
 | 
			
		||||
 | 
			
		||||
touchgfx::GeneratedFont& getFont_lucon_TTF_33_4bpp()
 | 
			
		||||
{
 | 
			
		||||
    static touchgfx::GeneratedFont lucon_TTF_33_4bpp(glyphs_lucon_TTF_33_4bpp, 14, 38, 33, 0, 0, 4, 1, 0, 0, unicodes_lucon_TTF_33_4bpp, kerning_lucon_TTF_33_4bpp, 63, 0, 0, 0);
 | 
			
		||||
    static touchgfx::GeneratedFont lucon_TTF_33_4bpp(glyphs_lucon_TTF_33_4bpp, 15, 38, 33, 0, 0, 4, 1, 0, 0, unicodes_lucon_TTF_33_4bpp, kerning_lucon_TTF_33_4bpp, 63, 0, 0, 0);
 | 
			
		||||
    return lucon_TTF_33_4bpp;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -10,6 +10,10 @@
 | 
			
		||||
#include <touchgfx/widgets/Box.hpp>
 | 
			
		||||
#include <touchgfx/widgets/Image.hpp>
 | 
			
		||||
#include <touchgfx/widgets/TextArea.hpp>
 | 
			
		||||
#include <touchgfx/widgets/TextAreaWithWildcard.hpp>
 | 
			
		||||
#include <touchgfx/containers/Container.hpp>
 | 
			
		||||
#include <touchgfx/widgets/canvas/Shape.hpp>
 | 
			
		||||
#include <touchgfx/widgets/canvas/PainterRGB565.hpp>
 | 
			
		||||
 | 
			
		||||
class AMIViewBase : public touchgfx::View<AMIPresenter>
 | 
			
		||||
{
 | 
			
		||||
@ -28,11 +32,47 @@ protected:
 | 
			
		||||
     */
 | 
			
		||||
    touchgfx::Box __background;
 | 
			
		||||
    touchgfx::Image logo;
 | 
			
		||||
    touchgfx::TextArea title;
 | 
			
		||||
    touchgfx::TextArea currentMission;
 | 
			
		||||
    touchgfx::TextArea textArea1;
 | 
			
		||||
    touchgfx::TextArea textArea2;
 | 
			
		||||
    touchgfx::TextAreaWithOneWildcard desiredAngle;
 | 
			
		||||
    touchgfx::TextAreaWithOneWildcard measuredAngle;
 | 
			
		||||
    touchgfx::TextAreaWithOneWildcard measuredSpeed;
 | 
			
		||||
    touchgfx::TextAreaWithOneWildcard desiredSpeed;
 | 
			
		||||
    touchgfx::TextArea textArea4;
 | 
			
		||||
    touchgfx::TextArea textArea3;
 | 
			
		||||
    touchgfx::Container map;
 | 
			
		||||
    touchgfx::Shape<3> cone0;
 | 
			
		||||
    touchgfx::PainterRGB565 cone0Painter;
 | 
			
		||||
    touchgfx::Shape<3> cone1;
 | 
			
		||||
    touchgfx::PainterRGB565 cone1Painter;
 | 
			
		||||
    touchgfx::Shape<3> cone2;
 | 
			
		||||
    touchgfx::PainterRGB565 cone2Painter;
 | 
			
		||||
    touchgfx::Shape<3> cone3;
 | 
			
		||||
    touchgfx::PainterRGB565 cone3Painter;
 | 
			
		||||
    touchgfx::Shape<3> cone4;
 | 
			
		||||
    touchgfx::PainterRGB565 cone4Painter;
 | 
			
		||||
    touchgfx::Shape<3> cone5;
 | 
			
		||||
    touchgfx::PainterRGB565 cone5Painter;
 | 
			
		||||
    touchgfx::Shape<3> cone6;
 | 
			
		||||
    touchgfx::PainterRGB565 cone6Painter;
 | 
			
		||||
    touchgfx::Shape<3> cone7;
 | 
			
		||||
    touchgfx::PainterRGB565 cone7Painter;
 | 
			
		||||
    touchgfx::Shape<3> cone8;
 | 
			
		||||
    touchgfx::PainterRGB565 cone8Painter;
 | 
			
		||||
    touchgfx::Shape<3> cone9;
 | 
			
		||||
    touchgfx::PainterRGB565 cone9Painter;
 | 
			
		||||
    touchgfx::Shape<3> ft;
 | 
			
		||||
    touchgfx::PainterRGB565 ftPainter;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * Canvas Buffer Size
 | 
			
		||||
     */
 | 
			
		||||
    static const uint32_t CANVAS_BUFFER_SIZE = 7200;
 | 
			
		||||
    uint8_t canvasBuffer[CANVAS_BUFFER_SIZE];
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // AMIVIEWBASE_HPP
 | 
			
		||||
 | 
			
		||||
@ -17,9 +17,12 @@ public:
 | 
			
		||||
 | 
			
		||||
    virtual void changeToStartScreen()
 | 
			
		||||
    {
 | 
			
		||||
        gotoDriverViewScreenNoTransition();
 | 
			
		||||
        gotoMissionSelectScreenNoTransition();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // MissionSelect
 | 
			
		||||
    void gotoMissionSelectScreenNoTransition();
 | 
			
		||||
 | 
			
		||||
    // AMI
 | 
			
		||||
    void gotoAMIScreenNoTransition();
 | 
			
		||||
 | 
			
		||||
@ -37,6 +40,9 @@ protected:
 | 
			
		||||
    FrontendHeap& frontendHeap;
 | 
			
		||||
    Model& model;
 | 
			
		||||
 | 
			
		||||
    // MissionSelect
 | 
			
		||||
    void gotoMissionSelectScreenNoTransitionImpl();
 | 
			
		||||
 | 
			
		||||
    // AMI
 | 
			
		||||
    void gotoAMIScreenNoTransitionImpl();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -89,7 +89,7 @@ public:
 | 
			
		||||
 | 
			
		||||
    virtual void gotoStartScreen(FrontendApplication& app)
 | 
			
		||||
    {
 | 
			
		||||
        app.gotoDriverViewScreenNoTransition();
 | 
			
		||||
        app.gotoMissionSelectScreenNoTransition();
 | 
			
		||||
    }
 | 
			
		||||
protected:
 | 
			
		||||
    FrontendHeapBase(touchgfx::AbstractPartition& presenters, touchgfx::AbstractPartition& views, touchgfx::AbstractPartition& transitions, FrontendApplication& app)
 | 
			
		||||
 | 
			
		||||
@ -2,36 +2,205 @@
 | 
			
		||||
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
 | 
			
		||||
/*********************************************************************************/
 | 
			
		||||
#include <gui_generated/ami_screen/AMIViewBase.hpp>
 | 
			
		||||
#include <touchgfx/canvas_widget_renderer/CanvasWidgetRenderer.hpp>
 | 
			
		||||
#include <touchgfx/Color.hpp>
 | 
			
		||||
#include <images/BitmapDatabase.hpp>
 | 
			
		||||
#include <texts/TextKeysAndLanguages.hpp>
 | 
			
		||||
 | 
			
		||||
AMIViewBase::AMIViewBase()
 | 
			
		||||
{
 | 
			
		||||
    touchgfx::CanvasWidgetRenderer::setupBuffer(canvasBuffer, CANVAS_BUFFER_SIZE);
 | 
			
		||||
    
 | 
			
		||||
    __background.setPosition(0, 0, 480, 320);
 | 
			
		||||
    __background.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0));
 | 
			
		||||
    add(__background);
 | 
			
		||||
 | 
			
		||||
    logo.setXY(160, 266);
 | 
			
		||||
    logo.setBitmap(touchgfx::Bitmap(BITMAP_LOGO_DV_SMALL_WHITE_ID));
 | 
			
		||||
    logo.setVisible(false);
 | 
			
		||||
    add(logo);
 | 
			
		||||
 | 
			
		||||
    title.setXY(42, 20);
 | 
			
		||||
    title.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
 | 
			
		||||
    title.setLinespacing(0);
 | 
			
		||||
    title.setTypedText(touchgfx::TypedText(T___SINGLEUSE_SDGP));
 | 
			
		||||
    add(title);
 | 
			
		||||
 | 
			
		||||
    currentMission.setPosition(0, 130, 480, 49);
 | 
			
		||||
    currentMission.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
 | 
			
		||||
    currentMission.setPosition(0, 15, 480, 49);
 | 
			
		||||
    currentMission.setColor(touchgfx::Color::getColorFromRGB(197, 14, 31));
 | 
			
		||||
    currentMission.setLinespacing(0);
 | 
			
		||||
    currentMission.setTypedText(touchgfx::TypedText(T_INVALID_HUGE));
 | 
			
		||||
    add(currentMission);
 | 
			
		||||
 | 
			
		||||
    textArea1.setXY(273, 103);
 | 
			
		||||
    textArea1.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
 | 
			
		||||
    textArea1.setLinespacing(0);
 | 
			
		||||
    textArea1.setTypedText(touchgfx::TypedText(T___SINGLEUSE_3MDX));
 | 
			
		||||
    add(textArea1);
 | 
			
		||||
 | 
			
		||||
    textArea2.setXY(273, 135);
 | 
			
		||||
    textArea2.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
 | 
			
		||||
    textArea2.setLinespacing(0);
 | 
			
		||||
    textArea2.setTypedText(touchgfx::TypedText(T___SINGLEUSE_JFR7));
 | 
			
		||||
    add(textArea2);
 | 
			
		||||
 | 
			
		||||
    desiredAngle.setPosition(405, 104, 60, 23);
 | 
			
		||||
    desiredAngle.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
 | 
			
		||||
    desiredAngle.setLinespacing(0);
 | 
			
		||||
    desiredAngle.setTypedText(touchgfx::TypedText(T___SINGLEUSE_232C));
 | 
			
		||||
    add(desiredAngle);
 | 
			
		||||
 | 
			
		||||
    measuredAngle.setPosition(405, 136, 60, 23);
 | 
			
		||||
    measuredAngle.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
 | 
			
		||||
    measuredAngle.setLinespacing(0);
 | 
			
		||||
    measuredAngle.setTypedText(touchgfx::TypedText(T___SINGLEUSE_LLOZ));
 | 
			
		||||
    add(measuredAngle);
 | 
			
		||||
 | 
			
		||||
    measuredSpeed.setPosition(405, 199, 60, 23);
 | 
			
		||||
    measuredSpeed.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
 | 
			
		||||
    measuredSpeed.setLinespacing(0);
 | 
			
		||||
    measuredSpeed.setTypedText(touchgfx::TypedText(T___SINGLEUSE_2S21));
 | 
			
		||||
    add(measuredSpeed);
 | 
			
		||||
 | 
			
		||||
    desiredSpeed.setPosition(405, 167, 60, 23);
 | 
			
		||||
    desiredSpeed.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
 | 
			
		||||
    desiredSpeed.setLinespacing(0);
 | 
			
		||||
    desiredSpeed.setTypedText(touchgfx::TypedText(T___SINGLEUSE_OQ6P));
 | 
			
		||||
    add(desiredSpeed);
 | 
			
		||||
 | 
			
		||||
    textArea4.setXY(273, 198);
 | 
			
		||||
    textArea4.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
 | 
			
		||||
    textArea4.setLinespacing(0);
 | 
			
		||||
    textArea4.setTypedText(touchgfx::TypedText(T___SINGLEUSE_590R));
 | 
			
		||||
    add(textArea4);
 | 
			
		||||
 | 
			
		||||
    textArea3.setXY(273, 166);
 | 
			
		||||
    textArea3.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
 | 
			
		||||
    textArea3.setLinespacing(0);
 | 
			
		||||
    textArea3.setTypedText(touchgfx::TypedText(T___SINGLEUSE_Z78U));
 | 
			
		||||
    add(textArea3);
 | 
			
		||||
 | 
			
		||||
    map.setPosition(15, 103, 255, 202);
 | 
			
		||||
    cone0.setPosition(0, 0, 10, 10);
 | 
			
		||||
    cone0.setOrigin(0.0f, 0.0f);
 | 
			
		||||
    cone0.setScale(1.0f, 1.0f);
 | 
			
		||||
    cone0.setAngle(0.0f);
 | 
			
		||||
    cone0Painter.setColor(touchgfx::Color::getColorFromRGB(255, 255, 0));
 | 
			
		||||
    cone0.setPainter(cone0Painter);
 | 
			
		||||
    const touchgfx::AbstractShape::ShapePoint<float> cone0Points[3] = { { 0.0f, 0.0f }, { 10.0f, 5.0f }, { 0.0f, 10.0f } };
 | 
			
		||||
    cone0.setShape(cone0Points);
 | 
			
		||||
    cone0.setVisible(false);
 | 
			
		||||
    map.add(cone0);
 | 
			
		||||
 | 
			
		||||
    cone1.setPosition(0, 0, 10, 10);
 | 
			
		||||
    cone1.setOrigin(0.0f, 0.0f);
 | 
			
		||||
    cone1.setScale(1.0f, 1.0f);
 | 
			
		||||
    cone1.setAngle(0.0f);
 | 
			
		||||
    cone1Painter.setColor(touchgfx::Color::getColorFromRGB(255, 255, 0));
 | 
			
		||||
    cone1.setPainter(cone1Painter);
 | 
			
		||||
    const touchgfx::AbstractShape::ShapePoint<float> cone1Points[3] = { { 0.0f, 0.0f }, { 10.0f, 5.0f }, { 0.0f, 10.0f } };
 | 
			
		||||
    cone1.setShape(cone1Points);
 | 
			
		||||
    cone1.setVisible(false);
 | 
			
		||||
    map.add(cone1);
 | 
			
		||||
 | 
			
		||||
    cone2.setPosition(0, 0, 10, 10);
 | 
			
		||||
    cone2.setOrigin(0.0f, 0.0f);
 | 
			
		||||
    cone2.setScale(1.0f, 1.0f);
 | 
			
		||||
    cone2.setAngle(0.0f);
 | 
			
		||||
    cone2Painter.setColor(touchgfx::Color::getColorFromRGB(255, 255, 0));
 | 
			
		||||
    cone2.setPainter(cone2Painter);
 | 
			
		||||
    const touchgfx::AbstractShape::ShapePoint<float> cone2Points[3] = { { 0.0f, 0.0f }, { 10.0f, 5.0f }, { 0.0f, 10.0f } };
 | 
			
		||||
    cone2.setShape(cone2Points);
 | 
			
		||||
    cone2.setVisible(false);
 | 
			
		||||
    map.add(cone2);
 | 
			
		||||
 | 
			
		||||
    cone3.setPosition(0, 0, 10, 10);
 | 
			
		||||
    cone3.setOrigin(0.0f, 0.0f);
 | 
			
		||||
    cone3.setScale(1.0f, 1.0f);
 | 
			
		||||
    cone3.setAngle(0.0f);
 | 
			
		||||
    cone3Painter.setColor(touchgfx::Color::getColorFromRGB(255, 255, 0));
 | 
			
		||||
    cone3.setPainter(cone3Painter);
 | 
			
		||||
    const touchgfx::AbstractShape::ShapePoint<float> cone3Points[3] = { { 0.0f, 0.0f }, { 10.0f, 5.0f }, { 0.0f, 10.0f } };
 | 
			
		||||
    cone3.setShape(cone3Points);
 | 
			
		||||
    cone3.setVisible(false);
 | 
			
		||||
    map.add(cone3);
 | 
			
		||||
 | 
			
		||||
    cone4.setPosition(0, 0, 10, 10);
 | 
			
		||||
    cone4.setOrigin(0.0f, 0.0f);
 | 
			
		||||
    cone4.setScale(1.0f, 1.0f);
 | 
			
		||||
    cone4.setAngle(0.0f);
 | 
			
		||||
    cone4Painter.setColor(touchgfx::Color::getColorFromRGB(255, 255, 0));
 | 
			
		||||
    cone4.setPainter(cone4Painter);
 | 
			
		||||
    const touchgfx::AbstractShape::ShapePoint<float> cone4Points[3] = { { 0.0f, 0.0f }, { 10.0f, 5.0f }, { 0.0f, 10.0f } };
 | 
			
		||||
    cone4.setShape(cone4Points);
 | 
			
		||||
    cone4.setVisible(false);
 | 
			
		||||
    map.add(cone4);
 | 
			
		||||
 | 
			
		||||
    cone5.setPosition(0, 0, 10, 10);
 | 
			
		||||
    cone5.setOrigin(0.0f, 0.0f);
 | 
			
		||||
    cone5.setScale(1.0f, 1.0f);
 | 
			
		||||
    cone5.setAngle(0.0f);
 | 
			
		||||
    cone5Painter.setColor(touchgfx::Color::getColorFromRGB(255, 255, 0));
 | 
			
		||||
    cone5.setPainter(cone5Painter);
 | 
			
		||||
    const touchgfx::AbstractShape::ShapePoint<float> cone5Points[3] = { { 0.0f, 0.0f }, { 10.0f, 5.0f }, { 0.0f, 10.0f } };
 | 
			
		||||
    cone5.setShape(cone5Points);
 | 
			
		||||
    cone5.setVisible(false);
 | 
			
		||||
    map.add(cone5);
 | 
			
		||||
 | 
			
		||||
    cone6.setPosition(0, 0, 10, 10);
 | 
			
		||||
    cone6.setOrigin(0.0f, 0.0f);
 | 
			
		||||
    cone6.setScale(1.0f, 1.0f);
 | 
			
		||||
    cone6.setAngle(0.0f);
 | 
			
		||||
    cone6Painter.setColor(touchgfx::Color::getColorFromRGB(255, 255, 0));
 | 
			
		||||
    cone6.setPainter(cone6Painter);
 | 
			
		||||
    const touchgfx::AbstractShape::ShapePoint<float> cone6Points[3] = { { 0.0f, 0.0f }, { 10.0f, 5.0f }, { 0.0f, 10.0f } };
 | 
			
		||||
    cone6.setShape(cone6Points);
 | 
			
		||||
    cone6.setVisible(false);
 | 
			
		||||
    map.add(cone6);
 | 
			
		||||
 | 
			
		||||
    cone7.setPosition(0, 0, 10, 10);
 | 
			
		||||
    cone7.setOrigin(0.0f, 0.0f);
 | 
			
		||||
    cone7.setScale(1.0f, 1.0f);
 | 
			
		||||
    cone7.setAngle(0.0f);
 | 
			
		||||
    cone7Painter.setColor(touchgfx::Color::getColorFromRGB(255, 255, 0));
 | 
			
		||||
    cone7.setPainter(cone7Painter);
 | 
			
		||||
    const touchgfx::AbstractShape::ShapePoint<float> cone7Points[3] = { { 0.0f, 0.0f }, { 10.0f, 5.0f }, { 0.0f, 10.0f } };
 | 
			
		||||
    cone7.setShape(cone7Points);
 | 
			
		||||
    cone7.setVisible(false);
 | 
			
		||||
    map.add(cone7);
 | 
			
		||||
 | 
			
		||||
    cone8.setPosition(0, 0, 10, 10);
 | 
			
		||||
    cone8.setOrigin(0.0f, 0.0f);
 | 
			
		||||
    cone8.setScale(1.0f, 1.0f);
 | 
			
		||||
    cone8.setAngle(0.0f);
 | 
			
		||||
    cone8Painter.setColor(touchgfx::Color::getColorFromRGB(255, 255, 0));
 | 
			
		||||
    cone8.setPainter(cone8Painter);
 | 
			
		||||
    const touchgfx::AbstractShape::ShapePoint<float> cone8Points[3] = { { 0.0f, 0.0f }, { 10.0f, 5.0f }, { 0.0f, 10.0f } };
 | 
			
		||||
    cone8.setShape(cone8Points);
 | 
			
		||||
    cone8.setVisible(false);
 | 
			
		||||
    map.add(cone8);
 | 
			
		||||
 | 
			
		||||
    cone9.setPosition(0, 0, 10, 10);
 | 
			
		||||
    cone9.setOrigin(0.0f, 0.0f);
 | 
			
		||||
    cone9.setScale(1.0f, 1.0f);
 | 
			
		||||
    cone9.setAngle(0.0f);
 | 
			
		||||
    cone9Painter.setColor(touchgfx::Color::getColorFromRGB(255, 255, 0));
 | 
			
		||||
    cone9.setPainter(cone9Painter);
 | 
			
		||||
    const touchgfx::AbstractShape::ShapePoint<float> cone9Points[3] = { { 0.0f, 0.0f }, { 10.0f, 5.0f }, { 0.0f, 10.0f } };
 | 
			
		||||
    cone9.setShape(cone9Points);
 | 
			
		||||
    cone9.setVisible(false);
 | 
			
		||||
    map.add(cone9);
 | 
			
		||||
 | 
			
		||||
    ft.setPosition(0, 91, 20, 20);
 | 
			
		||||
    ft.setOrigin(0.0f, 0.0f);
 | 
			
		||||
    ft.setScale(1.0f, 1.0f);
 | 
			
		||||
    ft.setAngle(0.0f);
 | 
			
		||||
    ftPainter.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
 | 
			
		||||
    ft.setPainter(ftPainter);
 | 
			
		||||
    const touchgfx::AbstractShape::ShapePoint<float> ftPoints[3] = { { 0.0f, 0.0f }, { 20.0f, 10.0f }, { 0.0f, 20.0f } };
 | 
			
		||||
    ft.setShape(ftPoints);
 | 
			
		||||
    map.add(ft);
 | 
			
		||||
 | 
			
		||||
    add(map);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
AMIViewBase::~AMIViewBase()
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    touchgfx::CanvasWidgetRenderer::resetBuffer();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AMIViewBase::setupScreen()
 | 
			
		||||
 | 
			
		||||
@ -38,6 +38,19 @@ FrontendApplicationBase::FrontendApplicationBase(Model& m, FrontendHeap& heap)
 | 
			
		||||
 * Screen Transition Declarations
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
// MissionSelect
 | 
			
		||||
 | 
			
		||||
void FrontendApplicationBase::gotoMissionSelectScreenNoTransition()
 | 
			
		||||
{
 | 
			
		||||
    transitionCallback = touchgfx::Callback<FrontendApplicationBase>(this, &FrontendApplicationBase::gotoMissionSelectScreenNoTransitionImpl);
 | 
			
		||||
    pendingScreenTransitionCallback = &transitionCallback;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void FrontendApplicationBase::gotoMissionSelectScreenNoTransitionImpl()
 | 
			
		||||
{
 | 
			
		||||
    touchgfx::makeTransition<MissionSelectView, MissionSelectPresenter, touchgfx::NoTransition, Model >(¤tScreen, ¤tPresenter, frontendHeap, ¤tTransition, &model);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// AMI
 | 
			
		||||
 | 
			
		||||
void FrontendApplicationBase::gotoAMIScreenNoTransition()
 | 
			
		||||
 | 
			
		||||
@ -1 +1 @@
 | 
			
		||||
{"remap":"yes","language":"GB","language_index":0,"indices":[["349","T_LV"],["333","T_PDU"],["341","T_SCS"],["345","T_SDC"],["337","T_R2D"],["330","T_TS"],["325","T_INV"],["321","T_AMS"],["128","T_ERROR_AMS"],["170","T_DEBUGVIEWFIELD_TITLE"],["170","T_DRIVERVIEWFIELD_TITLE"],["170","T_NUMBERSMALLWILDCARD"],["281","T_FIELD_BBAL"],["250","T_FIELD_TSVOLTVEH"],["243","T_FIELD_TSVOLTBAT"],["263","T_FIELD_LVSOC"],["275","T_FIELD_TSSOC"],["291","T_FIELD_MAXCELLTEMP"],["296","T_FIELD_TIREFL"],["301","T_FIELD_TIREFR"],["306","T_FIELD_TIRERL"],["311","T_FIELD_TIRERR"],["286","T_FIELD_LAPCOUNT"],["180","T_FIELD_INICHKSTATE"],["257","T_FIELD_ERR"],["345","T_FIELD_SDC"],["196","T_FIELD_INVRREADY"],["188","T_FIELD_INVLREADY"],["212","T_FIELD_R2DPROGRESS"],["204","T_FIELD_ACTIVEMISSION"],["172","T_FIELD_ASSTATE"],["228","T_FIELD_TSSTATE"],["170","T_NUMBERWILDCARD"],["170","T_DEFAULTWILDCARD_CENTERED"],["170","T_DEFAULTWILDCARD_RIGHTALIGNED"],["329","T_FIELD_TSCURRENT"],["316","T_FIELD_MINCELLVOLT"],["269","T_FIELD_SPEED"],["95","T_INSPECTION_HUGE"],["161","T_EBS_HUGE"],["117","T_TRACKDRIVE_HUGE"],["138","T_AUTOX_HUGE"],["220","T_SKIDPAD_HUGE"],["82","T_ACCEL_HUGE"],["34","T_INVALID_HUGE"],["67","T_MANUAL"],["95","T_INSPECTION"],["161","T_EBS"],["117","T_TRACKDRIVE"],["138","T_AUTOX"],["220","T_SKIDPAD"],["82","T_ACCEL"],["16","T___SINGLEUSE_F9I5"],["170","T___SINGLEUSE_9L8R"],["16","T___SINGLEUSE_1NKF"],["170","T___SINGLEUSE_J5UH"],["337","T___SINGLEUSE_NGUK"],["170","T___SINGLEUSE_4E84"],["170","T___SINGLEUSE_YTAB"],["106","T___SINGLEUSE_RWCE"],["148","T___SINGLEUSE_HMH2"],["158","T___SINGLEUSE_PHFD"],["236","T___SINGLEUSE_H6UX"],["170","T___SINGLEUSE_20H3"],["17","T___SINGLEUSE_SDGP"],["51","T___SINGLEUSE_M5X7"],["0","T___SINGLEUSE_6GPV"]]}
 | 
			
		||||
{"remap":"yes","language":"GB","language_index":0,"indices":[["360","T_LV"],["344","T_PDU"],["352","T_SCS"],["356","T_SDC"],["348","T_R2D"],["341","T_TS"],["336","T_INV"],["332","T_AMS"],["111","T_ERROR_AMS"],["153","T_DEBUGVIEWFIELD_TITLE"],["153","T_DRIVERVIEWFIELD_TITLE"],["153","T_NUMBERSMALLWILDCARD"],["292","T_FIELD_BBAL"],["249","T_FIELD_TSVOLTVEH"],["242","T_FIELD_TSVOLTBAT"],["268","T_FIELD_LVSOC"],["286","T_FIELD_TSSOC"],["302","T_FIELD_MAXCELLTEMP"],["307","T_FIELD_TIREFL"],["312","T_FIELD_TIREFR"],["317","T_FIELD_TIRERL"],["322","T_FIELD_TIRERR"],["297","T_FIELD_LAPCOUNT"],["171","T_FIELD_INICHKSTATE"],["262","T_FIELD_ERR"],["356","T_FIELD_SDC"],["187","T_FIELD_INVRREADY"],["179","T_FIELD_INVLREADY"],["211","T_FIELD_R2DPROGRESS"],["195","T_FIELD_ACTIVEMISSION"],["155","T_FIELD_ASSTATE"],["227","T_FIELD_TSSTATE"],["153","T_NUMBERWILDCARD"],["153","T_DEFAULTWILDCARD_CENTERED"],["153","T_DEFAULTWILDCARD_RIGHTALIGNED"],["340","T_FIELD_TSCURRENT"],["327","T_FIELD_MINCELLVOLT"],["280","T_FIELD_SPEED"],["78","T_INSPECTION_HUGE"],["144","T_EBS_HUGE"],["100","T_TRACKDRIVE_HUGE"],["121","T_AUTOX_HUGE"],["219","T_SKIDPAD_HUGE"],["65","T_ACCEL_HUGE"],["17","T_INVALID_HUGE"],["50","T_MANUAL"],["78","T_INSPECTION"],["144","T_EBS"],["100","T_TRACKDRIVE"],["121","T_AUTOX"],["219","T_SKIDPAD"],["65","T_ACCEL"],["153","T___SINGLEUSE_2S21"],["153","T___SINGLEUSE_OQ6P"],["203","T___SINGLEUSE_590R"],["163","T___SINGLEUSE_Z78U"],["153","T___SINGLEUSE_LLOZ"],["153","T___SINGLEUSE_232C"],["274","T___SINGLEUSE_JFR7"],["256","T___SINGLEUSE_3MDX"],["16","T___SINGLEUSE_F9I5"],["153","T___SINGLEUSE_9L8R"],["16","T___SINGLEUSE_1NKF"],["153","T___SINGLEUSE_J5UH"],["348","T___SINGLEUSE_NGUK"],["153","T___SINGLEUSE_4E84"],["153","T___SINGLEUSE_YTAB"],["89","T___SINGLEUSE_RWCE"],["131","T___SINGLEUSE_HMH2"],["141","T___SINGLEUSE_PHFD"],["235","T___SINGLEUSE_H6UX"],["153","T___SINGLEUSE_20H3"],["34","T___SINGLEUSE_M5X7"],["0","T___SINGLEUSE_6GPV"]]}
 | 
			
		||||
@ -1 +1 @@
 | 
			
		||||
{"languages":["GB"],"textids":["T_LV","T_PDU","T_SCS","T_SDC","T_R2D","T_TS","T_INV","T_AMS","T_ERROR_AMS","T_DEBUGVIEWFIELD_TITLE","T_DRIVERVIEWFIELD_TITLE","T_NUMBERSMALLWILDCARD","T_FIELD_BBAL","T_FIELD_TSVOLTVEH","T_FIELD_TSVOLTBAT","T_FIELD_LVSOC","T_FIELD_TSSOC","T_FIELD_MAXCELLTEMP","T_FIELD_TIREFL","T_FIELD_TIREFR","T_FIELD_TIRERL","T_FIELD_TIRERR","T_FIELD_LAPCOUNT","T_FIELD_INICHKSTATE","T_FIELD_ERR","T_FIELD_SDC","T_FIELD_INVRREADY","T_FIELD_INVLREADY","T_FIELD_R2DPROGRESS","T_FIELD_ACTIVEMISSION","T_FIELD_ASSTATE","T_FIELD_TSSTATE","T_NUMBERWILDCARD","T_DEFAULTWILDCARD_CENTERED","T_DEFAULTWILDCARD_RIGHTALIGNED","T_FIELD_TSCURRENT","T_FIELD_MINCELLVOLT","T_FIELD_SPEED","T_INSPECTION_HUGE","T_EBS_HUGE","T_TRACKDRIVE_HUGE","T_AUTOX_HUGE","T_SKIDPAD_HUGE","T_ACCEL_HUGE","T_INVALID_HUGE","T_MANUAL","T_INSPECTION","T_EBS","T_TRACKDRIVE","T_AUTOX","T_SKIDPAD","T_ACCEL","T___SINGLEUSE_F9I5","T___SINGLEUSE_9L8R","T___SINGLEUSE_1NKF","T___SINGLEUSE_J5UH","T___SINGLEUSE_NGUK","T___SINGLEUSE_4E84","T___SINGLEUSE_YTAB","T___SINGLEUSE_RWCE","T___SINGLEUSE_HMH2","T___SINGLEUSE_PHFD","T___SINGLEUSE_H6UX","T___SINGLEUSE_20H3","T___SINGLEUSE_SDGP","T___SINGLEUSE_M5X7","T___SINGLEUSE_6GPV"]}
 | 
			
		||||
{"languages":["GB"],"textids":["T_LV","T_PDU","T_SCS","T_SDC","T_R2D","T_TS","T_INV","T_AMS","T_ERROR_AMS","T_DEBUGVIEWFIELD_TITLE","T_DRIVERVIEWFIELD_TITLE","T_NUMBERSMALLWILDCARD","T_FIELD_BBAL","T_FIELD_TSVOLTVEH","T_FIELD_TSVOLTBAT","T_FIELD_LVSOC","T_FIELD_TSSOC","T_FIELD_MAXCELLTEMP","T_FIELD_TIREFL","T_FIELD_TIREFR","T_FIELD_TIRERL","T_FIELD_TIRERR","T_FIELD_LAPCOUNT","T_FIELD_INICHKSTATE","T_FIELD_ERR","T_FIELD_SDC","T_FIELD_INVRREADY","T_FIELD_INVLREADY","T_FIELD_R2DPROGRESS","T_FIELD_ACTIVEMISSION","T_FIELD_ASSTATE","T_FIELD_TSSTATE","T_NUMBERWILDCARD","T_DEFAULTWILDCARD_CENTERED","T_DEFAULTWILDCARD_RIGHTALIGNED","T_FIELD_TSCURRENT","T_FIELD_MINCELLVOLT","T_FIELD_SPEED","T_INSPECTION_HUGE","T_EBS_HUGE","T_TRACKDRIVE_HUGE","T_AUTOX_HUGE","T_SKIDPAD_HUGE","T_ACCEL_HUGE","T_INVALID_HUGE","T_MANUAL","T_INSPECTION","T_EBS","T_TRACKDRIVE","T_AUTOX","T_SKIDPAD","T_ACCEL","T___SINGLEUSE_2S21","T___SINGLEUSE_OQ6P","T___SINGLEUSE_590R","T___SINGLEUSE_Z78U","T___SINGLEUSE_LLOZ","T___SINGLEUSE_232C","T___SINGLEUSE_JFR7","T___SINGLEUSE_3MDX","T___SINGLEUSE_F9I5","T___SINGLEUSE_9L8R","T___SINGLEUSE_1NKF","T___SINGLEUSE_J5UH","T___SINGLEUSE_NGUK","T___SINGLEUSE_4E84","T___SINGLEUSE_YTAB","T___SINGLEUSE_RWCE","T___SINGLEUSE_HMH2","T___SINGLEUSE_PHFD","T___SINGLEUSE_H6UX","T___SINGLEUSE_20H3","T___SINGLEUSE_M5X7","T___SINGLEUSE_6GPV"]}
 | 
			
		||||
@ -1 +1 @@
 | 
			
		||||
{"remap":"yes","languages":["Gb"],"characters":[67,104,111,111,115,101,32,97,32,109,105,115,115,105,111,110,0,67,117,114,114,101,110,116,32,77,105,115,115,105,111,110,58,0,73,110,118,97,108,105,100,32,77,105,115,115,105,111,110,33,0,73,110,118,97,108,105,100,32,77,105,115,115,105,111,110,0,77,97,110,117,97,108,32,68,114,105,118,105,110,103,0,65,99,99,101,108,101,114,97,116,105,111,110,0,73,110,115,112,101,99,116,105,111,110,0,80,65,82,65,77,69,84,69,82,83,0,84,114,97,99,107,100,114,105,118,101,0,65,77,83,32,69,114,114,79,114,0,65,117,116,111,99,114,111,115,115,0,80,82,69,67,72,65,82,71,69,0,2,37,0,69,66,83,32,84,101,115,116,0,2,0,65,83,83,84,65,84,69,0,73,67,83,84,65,84,69,0,73,78,86,76,82,68,89,0,73,78,86,82,82,68,89,0,77,73,83,83,73,79,78,0,82,50,68,80,82,79,71,0,83,107,105,100,112,97,100,0,84,83,83,84,65,84,69,0,66,82,65,75,69,83,0,84,83,86,66,65,84,0,84,83,86,86,69,72,0,69,82,82,79,82,0,76,86,83,79,67,0,83,80,69,69,68,0,84,83,83,79,67,0,66,66,65,76,0,76,65,80,83,0,84,77,65,88,0,84,84,70,76,0,84,84,70,82,0,84,84,82,76,0,84,84,82,82,0,86,77,73,78,0,65,77,83,0,73,78,86,0,73,84,83,0,80,68,85,0,82,50,68,0,83,67,83,0,83,68,67,0,76,86,0]}
 | 
			
		||||
{"remap":"yes","languages":["Gb"],"characters":[67,104,111,111,115,101,32,97,32,109,105,115,115,105,111,110,0,73,110,118,97,108,105,100,32,77,105,115,115,105,111,110,33,0,73,110,118,97,108,105,100,32,77,105,115,115,105,111,110,0,77,97,110,117,97,108,32,68,114,105,118,105,110,103,0,65,99,99,101,108,101,114,97,116,105,111,110,0,73,110,115,112,101,99,116,105,111,110,0,80,65,82,65,77,69,84,69,82,83,0,84,114,97,99,107,100,114,105,118,101,0,65,77,83,32,69,114,114,79,114,0,65,117,116,111,99,114,111,115,115,0,80,82,69,67,72,65,82,71,69,0,2,37,0,69,66,83,32,84,101,115,116,0,2,0,65,83,83,84,65,84,69,0,68,83,80,69,69,68,58,0,73,67,83,84,65,84,69,0,73,78,86,76,82,68,89,0,73,78,86,82,82,68,89,0,77,73,83,83,73,79,78,0,77,83,80,69,69,68,58,0,82,50,68,80,82,79,71,0,83,107,105,100,112,97,100,0,84,83,83,84,65,84,69,0,66,82,65,75,69,83,0,84,83,86,66,65,84,0,84,83,86,86,69,72,0,68,65,78,71,58,0,69,82,82,79,82,0,76,86,83,79,67,0,77,65,78,71,58,0,83,80,69,69,68,0,84,83,83,79,67,0,66,66,65,76,0,76,65,80,83,0,84,77,65,88,0,84,84,70,76,0,84,84,70,82,0,84,84,82,76,0,84,84,82,82,0,86,77,73,78,0,65,77,83,0,73,78,86,0,73,84,83,0,80,68,85,0,82,50,68,0,83,67,83,0,83,68,67,0,76,86,0]}
 | 
			
		||||
@ -1 +1 @@
 | 
			
		||||
{"databases":{"GB":[[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[5,"LEFT","LTR"],[2,"CENTER","LTR"],[6,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[0,"CENTER","LTR"],[0,"RIGHT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[0,"LEFT","LTR"],[3,"CENTER","LTR"],[1,"RIGHT","LTR"],[1,"LEFT","LTR"],[4,"RIGHT","LTR"],[1,"LEFT","LTR"],[1,"CENTER","LTR"],[1,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[1,"LEFT","LTR"],[2,"CENTER","LTR"],[1,"LEFT","LTR"]],"DEFAULT":[[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[5,"LEFT","LTR"],[2,"CENTER","LTR"],[6,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[0,"CENTER","LTR"],[0,"RIGHT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[0,"LEFT","LTR"],[3,"CENTER","LTR"],[1,"RIGHT","LTR"],[1,"LEFT","LTR"],[4,"RIGHT","LTR"],[1,"LEFT","LTR"],[1,"CENTER","LTR"],[1,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[1,"LEFT","LTR"],[2,"CENTER","LTR"],[1,"LEFT","LTR"]]},"database_list":["GB"],"fonts":{"getFont_verdana_20_4bpp":0,"getFont_CHINN____30_4bpp":1,"getFont_CHINN____20_4bpp":2,"getFont_CHINN____40_4bpp":3,"getFont_lucon_TTF_50_4bpp":4,"getFont_verdanab_20_4bpp":5,"getFont_lucon_TTF_33_4bpp":6},"generate_font_format":"0"}
 | 
			
		||||
{"databases":{"GB":[[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[5,"LEFT","LTR"],[2,"CENTER","LTR"],[6,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[0,"CENTER","LTR"],[0,"RIGHT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"CENTER","LTR"],[0,"LEFT","LTR"],[3,"CENTER","LTR"],[1,"RIGHT","LTR"],[1,"LEFT","LTR"],[4,"RIGHT","LTR"],[1,"LEFT","LTR"],[1,"CENTER","LTR"],[1,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[2,"CENTER","LTR"],[1,"LEFT","LTR"]],"DEFAULT":[[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[5,"LEFT","LTR"],[2,"CENTER","LTR"],[6,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[0,"CENTER","LTR"],[0,"RIGHT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"CENTER","LTR"],[0,"LEFT","LTR"],[3,"CENTER","LTR"],[1,"RIGHT","LTR"],[1,"LEFT","LTR"],[4,"RIGHT","LTR"],[1,"LEFT","LTR"],[1,"CENTER","LTR"],[1,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[2,"CENTER","LTR"],[1,"LEFT","LTR"]]},"database_list":["GB"],"fonts":{"getFont_verdana_20_4bpp":0,"getFont_CHINN____30_4bpp":1,"getFont_CHINN____20_4bpp":2,"getFont_CHINN____40_4bpp":3,"getFont_lucon_TTF_50_4bpp":4,"getFont_verdanab_20_4bpp":5,"getFont_lucon_TTF_33_4bpp":6,"getFont_lucon_TTF_20_4bpp":7},"generate_font_format":"0"}
 | 
			
		||||
@ -64,6 +64,14 @@ enum TEXTS
 | 
			
		||||
    T_AUTOX,
 | 
			
		||||
    T_SKIDPAD,
 | 
			
		||||
    T_ACCEL,
 | 
			
		||||
    T___SINGLEUSE_2S21,
 | 
			
		||||
    T___SINGLEUSE_OQ6P,
 | 
			
		||||
    T___SINGLEUSE_590R,
 | 
			
		||||
    T___SINGLEUSE_Z78U,
 | 
			
		||||
    T___SINGLEUSE_LLOZ,
 | 
			
		||||
    T___SINGLEUSE_232C,
 | 
			
		||||
    T___SINGLEUSE_JFR7,
 | 
			
		||||
    T___SINGLEUSE_3MDX,
 | 
			
		||||
    T___SINGLEUSE_F9I5,
 | 
			
		||||
    T___SINGLEUSE_9L8R,
 | 
			
		||||
    T___SINGLEUSE_1NKF,
 | 
			
		||||
@ -76,7 +84,6 @@ enum TEXTS
 | 
			
		||||
    T___SINGLEUSE_PHFD,
 | 
			
		||||
    T___SINGLEUSE_H6UX,
 | 
			
		||||
    T___SINGLEUSE_20H3,
 | 
			
		||||
    T___SINGLEUSE_SDGP,
 | 
			
		||||
    T___SINGLEUSE_M5X7,
 | 
			
		||||
    T___SINGLEUSE_6GPV,
 | 
			
		||||
    NUMBER_OF_TEXT_KEYS
 | 
			
		||||
 | 
			
		||||
@ -10,71 +10,78 @@ KEEP extern const uint32_t indicesGb[] TEXT_LOCATION_FLASH_ATTRIBUTE;
 | 
			
		||||
// Remap all strings
 | 
			
		||||
TEXT_LOCATION_FLASH_PRAGMA
 | 
			
		||||
KEEP extern const uint32_t indicesGb[] TEXT_LOCATION_FLASH_ATTRIBUTE = {
 | 
			
		||||
    349, // T_LV: "LV"
 | 
			
		||||
    333, // T_PDU: "PDU"
 | 
			
		||||
    341, // T_SCS: "SCS"
 | 
			
		||||
    345, // T_SDC: "SDC"
 | 
			
		||||
    337, // T_R2D: "R2D"
 | 
			
		||||
    330, // T_TS: "TS"
 | 
			
		||||
    325, // T_INV: "INV"
 | 
			
		||||
    321, // T_AMS: "AMS"
 | 
			
		||||
    128, // T_ERROR_AMS: "AMS ErrOr"
 | 
			
		||||
    170, // T_DEBUGVIEWFIELD_TITLE: "<>"
 | 
			
		||||
    170, // T_DRIVERVIEWFIELD_TITLE: "<>"
 | 
			
		||||
    170, // T_NUMBERSMALLWILDCARD: "<>"
 | 
			
		||||
    281, // T_FIELD_BBAL: "BBAL"
 | 
			
		||||
    250, // T_FIELD_TSVOLTVEH: "TSVVEH"
 | 
			
		||||
    243, // T_FIELD_TSVOLTBAT: "TSVBAT"
 | 
			
		||||
    263, // T_FIELD_LVSOC: "LVSOC"
 | 
			
		||||
    275, // T_FIELD_TSSOC: "TSSOC"
 | 
			
		||||
    291, // T_FIELD_MAXCELLTEMP: "TMAX"
 | 
			
		||||
    296, // T_FIELD_TIREFL: "TTFL"
 | 
			
		||||
    301, // T_FIELD_TIREFR: "TTFR"
 | 
			
		||||
    306, // T_FIELD_TIRERL: "TTRL"
 | 
			
		||||
    311, // T_FIELD_TIRERR: "TTRR"
 | 
			
		||||
    286, // T_FIELD_LAPCOUNT: "LAPS"
 | 
			
		||||
    180, // T_FIELD_INICHKSTATE: "ICSTATE"
 | 
			
		||||
    257, // T_FIELD_ERR: "ERROR"
 | 
			
		||||
    345, // T_FIELD_SDC: "SDC"
 | 
			
		||||
    196, // T_FIELD_INVRREADY: "INVRRDY"
 | 
			
		||||
    188, // T_FIELD_INVLREADY: "INVLRDY"
 | 
			
		||||
    212, // T_FIELD_R2DPROGRESS: "R2DPROG"
 | 
			
		||||
    204, // T_FIELD_ACTIVEMISSION: "MISSION"
 | 
			
		||||
    172, // T_FIELD_ASSTATE: "ASSTATE"
 | 
			
		||||
    228, // T_FIELD_TSSTATE: "TSSTATE"
 | 
			
		||||
    170, // T_NUMBERWILDCARD: "<>"
 | 
			
		||||
    170, // T_DEFAULTWILDCARD_CENTERED: "<>"
 | 
			
		||||
    170, // T_DEFAULTWILDCARD_RIGHTALIGNED: "<>"
 | 
			
		||||
    329, // T_FIELD_TSCURRENT: "ITS"
 | 
			
		||||
    316, // T_FIELD_MINCELLVOLT: "VMIN"
 | 
			
		||||
    269, // T_FIELD_SPEED: "SPEED"
 | 
			
		||||
    95,  // T_INSPECTION_HUGE: "Inspection"
 | 
			
		||||
    161, // T_EBS_HUGE: "EBS Test"
 | 
			
		||||
    117, // T_TRACKDRIVE_HUGE: "Trackdrive"
 | 
			
		||||
    138, // T_AUTOX_HUGE: "Autocross"
 | 
			
		||||
    220, // T_SKIDPAD_HUGE: "Skidpad"
 | 
			
		||||
    82,  // T_ACCEL_HUGE: "Acceleration"
 | 
			
		||||
    34,  // T_INVALID_HUGE: "Invalid Mission!"
 | 
			
		||||
    67,  // T_MANUAL: "Manual Driving"
 | 
			
		||||
    95,  // T_INSPECTION: "Inspection"
 | 
			
		||||
    161, // T_EBS: "EBS Test"
 | 
			
		||||
    117, // T_TRACKDRIVE: "Trackdrive"
 | 
			
		||||
    138, // T_AUTOX: "Autocross"
 | 
			
		||||
    220, // T_SKIDPAD: "Skidpad"
 | 
			
		||||
    82,  // T_ACCEL: "Acceleration"
 | 
			
		||||
    360, // T_LV: "LV"
 | 
			
		||||
    344, // T_PDU: "PDU"
 | 
			
		||||
    352, // T_SCS: "SCS"
 | 
			
		||||
    356, // T_SDC: "SDC"
 | 
			
		||||
    348, // T_R2D: "R2D"
 | 
			
		||||
    341, // T_TS: "TS"
 | 
			
		||||
    336, // T_INV: "INV"
 | 
			
		||||
    332, // T_AMS: "AMS"
 | 
			
		||||
    111, // T_ERROR_AMS: "AMS ErrOr"
 | 
			
		||||
    153, // T_DEBUGVIEWFIELD_TITLE: "<>"
 | 
			
		||||
    153, // T_DRIVERVIEWFIELD_TITLE: "<>"
 | 
			
		||||
    153, // T_NUMBERSMALLWILDCARD: "<>"
 | 
			
		||||
    292, // T_FIELD_BBAL: "BBAL"
 | 
			
		||||
    249, // T_FIELD_TSVOLTVEH: "TSVVEH"
 | 
			
		||||
    242, // T_FIELD_TSVOLTBAT: "TSVBAT"
 | 
			
		||||
    268, // T_FIELD_LVSOC: "LVSOC"
 | 
			
		||||
    286, // T_FIELD_TSSOC: "TSSOC"
 | 
			
		||||
    302, // T_FIELD_MAXCELLTEMP: "TMAX"
 | 
			
		||||
    307, // T_FIELD_TIREFL: "TTFL"
 | 
			
		||||
    312, // T_FIELD_TIREFR: "TTFR"
 | 
			
		||||
    317, // T_FIELD_TIRERL: "TTRL"
 | 
			
		||||
    322, // T_FIELD_TIRERR: "TTRR"
 | 
			
		||||
    297, // T_FIELD_LAPCOUNT: "LAPS"
 | 
			
		||||
    171, // T_FIELD_INICHKSTATE: "ICSTATE"
 | 
			
		||||
    262, // T_FIELD_ERR: "ERROR"
 | 
			
		||||
    356, // T_FIELD_SDC: "SDC"
 | 
			
		||||
    187, // T_FIELD_INVRREADY: "INVRRDY"
 | 
			
		||||
    179, // T_FIELD_INVLREADY: "INVLRDY"
 | 
			
		||||
    211, // T_FIELD_R2DPROGRESS: "R2DPROG"
 | 
			
		||||
    195, // T_FIELD_ACTIVEMISSION: "MISSION"
 | 
			
		||||
    155, // T_FIELD_ASSTATE: "ASSTATE"
 | 
			
		||||
    227, // T_FIELD_TSSTATE: "TSSTATE"
 | 
			
		||||
    153, // T_NUMBERWILDCARD: "<>"
 | 
			
		||||
    153, // T_DEFAULTWILDCARD_CENTERED: "<>"
 | 
			
		||||
    153, // T_DEFAULTWILDCARD_RIGHTALIGNED: "<>"
 | 
			
		||||
    340, // T_FIELD_TSCURRENT: "ITS"
 | 
			
		||||
    327, // T_FIELD_MINCELLVOLT: "VMIN"
 | 
			
		||||
    280, // T_FIELD_SPEED: "SPEED"
 | 
			
		||||
    78,  // T_INSPECTION_HUGE: "Inspection"
 | 
			
		||||
    144, // T_EBS_HUGE: "EBS Test"
 | 
			
		||||
    100, // T_TRACKDRIVE_HUGE: "Trackdrive"
 | 
			
		||||
    121, // T_AUTOX_HUGE: "Autocross"
 | 
			
		||||
    219, // T_SKIDPAD_HUGE: "Skidpad"
 | 
			
		||||
    65,  // T_ACCEL_HUGE: "Acceleration"
 | 
			
		||||
    17,  // T_INVALID_HUGE: "Invalid Mission!"
 | 
			
		||||
    50,  // T_MANUAL: "Manual Driving"
 | 
			
		||||
    78,  // T_INSPECTION: "Inspection"
 | 
			
		||||
    144, // T_EBS: "EBS Test"
 | 
			
		||||
    100, // T_TRACKDRIVE: "Trackdrive"
 | 
			
		||||
    121, // T_AUTOX: "Autocross"
 | 
			
		||||
    219, // T_SKIDPAD: "Skidpad"
 | 
			
		||||
    65,  // T_ACCEL: "Acceleration"
 | 
			
		||||
    153, // T___SINGLEUSE_2S21: "<>"
 | 
			
		||||
    153, // T___SINGLEUSE_OQ6P: "<>"
 | 
			
		||||
    203, // T___SINGLEUSE_590R: "MSPEED:"
 | 
			
		||||
    163, // T___SINGLEUSE_Z78U: "DSPEED:"
 | 
			
		||||
    153, // T___SINGLEUSE_LLOZ: "<>"
 | 
			
		||||
    153, // T___SINGLEUSE_232C: "<>"
 | 
			
		||||
    274, // T___SINGLEUSE_JFR7: "MANG:"
 | 
			
		||||
    256, // T___SINGLEUSE_3MDX: "DANG:"
 | 
			
		||||
    16,  // T___SINGLEUSE_F9I5: ""
 | 
			
		||||
    170, // T___SINGLEUSE_9L8R: "<>"
 | 
			
		||||
    153, // T___SINGLEUSE_9L8R: "<>"
 | 
			
		||||
    16,  // T___SINGLEUSE_1NKF: ""
 | 
			
		||||
    170, // T___SINGLEUSE_J5UH: "<>"
 | 
			
		||||
    337, // T___SINGLEUSE_NGUK: "R2D"
 | 
			
		||||
    170, // T___SINGLEUSE_4E84: "<>"
 | 
			
		||||
    170, // T___SINGLEUSE_YTAB: "<>"
 | 
			
		||||
    106, // T___SINGLEUSE_RWCE: "PARAMETERS"
 | 
			
		||||
    148, // T___SINGLEUSE_HMH2: "PRECHARGE"
 | 
			
		||||
    158, // T___SINGLEUSE_PHFD: "<>%"
 | 
			
		||||
    236, // T___SINGLEUSE_H6UX: "BRAKES"
 | 
			
		||||
    170, // T___SINGLEUSE_20H3: "<>"
 | 
			
		||||
    17,  // T___SINGLEUSE_SDGP: "Current Mission:"
 | 
			
		||||
    51,  // T___SINGLEUSE_M5X7: "Invalid Mission"
 | 
			
		||||
    153, // T___SINGLEUSE_J5UH: "<>"
 | 
			
		||||
    348, // T___SINGLEUSE_NGUK: "R2D"
 | 
			
		||||
    153, // T___SINGLEUSE_4E84: "<>"
 | 
			
		||||
    153, // T___SINGLEUSE_YTAB: "<>"
 | 
			
		||||
    89,  // T___SINGLEUSE_RWCE: "PARAMETERS"
 | 
			
		||||
    131, // T___SINGLEUSE_HMH2: "PRECHARGE"
 | 
			
		||||
    141, // T___SINGLEUSE_PHFD: "<>%"
 | 
			
		||||
    235, // T___SINGLEUSE_H6UX: "BRAKES"
 | 
			
		||||
    153, // T___SINGLEUSE_20H3: "<>"
 | 
			
		||||
    34,  // T___SINGLEUSE_M5X7: "Invalid Mission"
 | 
			
		||||
    0    // T___SINGLEUSE_6GPV: "Choose a mission"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -61,51 +61,54 @@ extern const touchgfx::TypedText::TypedTextData* const typedTextDatabaseArray[];
 | 
			
		||||
TEXT_LOCATION_FLASH_PRAGMA
 | 
			
		||||
KEEP extern const touchgfx::Unicode::UnicodeChar texts_all_languages[] TEXT_LOCATION_FLASH_ATTRIBUTE = {
 | 
			
		||||
    0x43, 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x20, 0x61, 0x20, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0, // @0 "Choose a mission"
 | 
			
		||||
    0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x0, // @17 "Current Mission:"
 | 
			
		||||
    0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x21, 0x0, // @34 "Invalid Mission!"
 | 
			
		||||
    0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0, // @51 "Invalid Mission"
 | 
			
		||||
    0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x20, 0x44, 0x72, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x0, // @67 "Manual Driving"
 | 
			
		||||
    0x41, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0, // @82 "Acceleration"
 | 
			
		||||
    0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0, // @95 "Inspection"
 | 
			
		||||
    0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x53, 0x0, // @106 "PARAMETERS"
 | 
			
		||||
    0x54, 0x72, 0x61, 0x63, 0x6b, 0x64, 0x72, 0x69, 0x76, 0x65, 0x0, // @117 "Trackdrive"
 | 
			
		||||
    0x41, 0x4d, 0x53, 0x20, 0x45, 0x72, 0x72, 0x4f, 0x72, 0x0, // @128 "AMS ErrOr"
 | 
			
		||||
    0x41, 0x75, 0x74, 0x6f, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x0, // @138 "Autocross"
 | 
			
		||||
    0x50, 0x52, 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x0, // @148 "PRECHARGE"
 | 
			
		||||
    0x2, 0x25, 0x0, // @158 "<>%"
 | 
			
		||||
    0x45, 0x42, 0x53, 0x20, 0x54, 0x65, 0x73, 0x74, 0x0, // @161 "EBS Test"
 | 
			
		||||
    0x2, 0x0, // @170 "<>"
 | 
			
		||||
    0x41, 0x53, 0x53, 0x54, 0x41, 0x54, 0x45, 0x0, // @172 "ASSTATE"
 | 
			
		||||
    0x49, 0x43, 0x53, 0x54, 0x41, 0x54, 0x45, 0x0, // @180 "ICSTATE"
 | 
			
		||||
    0x49, 0x4e, 0x56, 0x4c, 0x52, 0x44, 0x59, 0x0, // @188 "INVLRDY"
 | 
			
		||||
    0x49, 0x4e, 0x56, 0x52, 0x52, 0x44, 0x59, 0x0, // @196 "INVRRDY"
 | 
			
		||||
    0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x0, // @204 "MISSION"
 | 
			
		||||
    0x52, 0x32, 0x44, 0x50, 0x52, 0x4f, 0x47, 0x0, // @212 "R2DPROG"
 | 
			
		||||
    0x53, 0x6b, 0x69, 0x64, 0x70, 0x61, 0x64, 0x0, // @220 "Skidpad"
 | 
			
		||||
    0x54, 0x53, 0x53, 0x54, 0x41, 0x54, 0x45, 0x0, // @228 "TSSTATE"
 | 
			
		||||
    0x42, 0x52, 0x41, 0x4b, 0x45, 0x53, 0x0, // @236 "BRAKES"
 | 
			
		||||
    0x54, 0x53, 0x56, 0x42, 0x41, 0x54, 0x0, // @243 "TSVBAT"
 | 
			
		||||
    0x54, 0x53, 0x56, 0x56, 0x45, 0x48, 0x0, // @250 "TSVVEH"
 | 
			
		||||
    0x45, 0x52, 0x52, 0x4f, 0x52, 0x0, // @257 "ERROR"
 | 
			
		||||
    0x4c, 0x56, 0x53, 0x4f, 0x43, 0x0, // @263 "LVSOC"
 | 
			
		||||
    0x53, 0x50, 0x45, 0x45, 0x44, 0x0, // @269 "SPEED"
 | 
			
		||||
    0x54, 0x53, 0x53, 0x4f, 0x43, 0x0, // @275 "TSSOC"
 | 
			
		||||
    0x42, 0x42, 0x41, 0x4c, 0x0, // @281 "BBAL"
 | 
			
		||||
    0x4c, 0x41, 0x50, 0x53, 0x0, // @286 "LAPS"
 | 
			
		||||
    0x54, 0x4d, 0x41, 0x58, 0x0, // @291 "TMAX"
 | 
			
		||||
    0x54, 0x54, 0x46, 0x4c, 0x0, // @296 "TTFL"
 | 
			
		||||
    0x54, 0x54, 0x46, 0x52, 0x0, // @301 "TTFR"
 | 
			
		||||
    0x54, 0x54, 0x52, 0x4c, 0x0, // @306 "TTRL"
 | 
			
		||||
    0x54, 0x54, 0x52, 0x52, 0x0, // @311 "TTRR"
 | 
			
		||||
    0x56, 0x4d, 0x49, 0x4e, 0x0, // @316 "VMIN"
 | 
			
		||||
    0x41, 0x4d, 0x53, 0x0, // @321 "AMS"
 | 
			
		||||
    0x49, 0x4e, 0x56, 0x0, // @325 "INV"
 | 
			
		||||
    0x49, 0x54, 0x53, 0x0, // @329 "ITS"
 | 
			
		||||
    0x50, 0x44, 0x55, 0x0, // @333 "PDU"
 | 
			
		||||
    0x52, 0x32, 0x44, 0x0, // @337 "R2D"
 | 
			
		||||
    0x53, 0x43, 0x53, 0x0, // @341 "SCS"
 | 
			
		||||
    0x53, 0x44, 0x43, 0x0, // @345 "SDC"
 | 
			
		||||
    0x4c, 0x56, 0x0 // @349 "LV"
 | 
			
		||||
    0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x21, 0x0, // @17 "Invalid Mission!"
 | 
			
		||||
    0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0, // @34 "Invalid Mission"
 | 
			
		||||
    0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x20, 0x44, 0x72, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x0, // @50 "Manual Driving"
 | 
			
		||||
    0x41, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0, // @65 "Acceleration"
 | 
			
		||||
    0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0, // @78 "Inspection"
 | 
			
		||||
    0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x53, 0x0, // @89 "PARAMETERS"
 | 
			
		||||
    0x54, 0x72, 0x61, 0x63, 0x6b, 0x64, 0x72, 0x69, 0x76, 0x65, 0x0, // @100 "Trackdrive"
 | 
			
		||||
    0x41, 0x4d, 0x53, 0x20, 0x45, 0x72, 0x72, 0x4f, 0x72, 0x0, // @111 "AMS ErrOr"
 | 
			
		||||
    0x41, 0x75, 0x74, 0x6f, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x0, // @121 "Autocross"
 | 
			
		||||
    0x50, 0x52, 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x0, // @131 "PRECHARGE"
 | 
			
		||||
    0x2, 0x25, 0x0, // @141 "<>%"
 | 
			
		||||
    0x45, 0x42, 0x53, 0x20, 0x54, 0x65, 0x73, 0x74, 0x0, // @144 "EBS Test"
 | 
			
		||||
    0x2, 0x0, // @153 "<>"
 | 
			
		||||
    0x41, 0x53, 0x53, 0x54, 0x41, 0x54, 0x45, 0x0, // @155 "ASSTATE"
 | 
			
		||||
    0x44, 0x53, 0x50, 0x45, 0x45, 0x44, 0x3a, 0x0, // @163 "DSPEED:"
 | 
			
		||||
    0x49, 0x43, 0x53, 0x54, 0x41, 0x54, 0x45, 0x0, // @171 "ICSTATE"
 | 
			
		||||
    0x49, 0x4e, 0x56, 0x4c, 0x52, 0x44, 0x59, 0x0, // @179 "INVLRDY"
 | 
			
		||||
    0x49, 0x4e, 0x56, 0x52, 0x52, 0x44, 0x59, 0x0, // @187 "INVRRDY"
 | 
			
		||||
    0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x0, // @195 "MISSION"
 | 
			
		||||
    0x4d, 0x53, 0x50, 0x45, 0x45, 0x44, 0x3a, 0x0, // @203 "MSPEED:"
 | 
			
		||||
    0x52, 0x32, 0x44, 0x50, 0x52, 0x4f, 0x47, 0x0, // @211 "R2DPROG"
 | 
			
		||||
    0x53, 0x6b, 0x69, 0x64, 0x70, 0x61, 0x64, 0x0, // @219 "Skidpad"
 | 
			
		||||
    0x54, 0x53, 0x53, 0x54, 0x41, 0x54, 0x45, 0x0, // @227 "TSSTATE"
 | 
			
		||||
    0x42, 0x52, 0x41, 0x4b, 0x45, 0x53, 0x0, // @235 "BRAKES"
 | 
			
		||||
    0x54, 0x53, 0x56, 0x42, 0x41, 0x54, 0x0, // @242 "TSVBAT"
 | 
			
		||||
    0x54, 0x53, 0x56, 0x56, 0x45, 0x48, 0x0, // @249 "TSVVEH"
 | 
			
		||||
    0x44, 0x41, 0x4e, 0x47, 0x3a, 0x0, // @256 "DANG:"
 | 
			
		||||
    0x45, 0x52, 0x52, 0x4f, 0x52, 0x0, // @262 "ERROR"
 | 
			
		||||
    0x4c, 0x56, 0x53, 0x4f, 0x43, 0x0, // @268 "LVSOC"
 | 
			
		||||
    0x4d, 0x41, 0x4e, 0x47, 0x3a, 0x0, // @274 "MANG:"
 | 
			
		||||
    0x53, 0x50, 0x45, 0x45, 0x44, 0x0, // @280 "SPEED"
 | 
			
		||||
    0x54, 0x53, 0x53, 0x4f, 0x43, 0x0, // @286 "TSSOC"
 | 
			
		||||
    0x42, 0x42, 0x41, 0x4c, 0x0, // @292 "BBAL"
 | 
			
		||||
    0x4c, 0x41, 0x50, 0x53, 0x0, // @297 "LAPS"
 | 
			
		||||
    0x54, 0x4d, 0x41, 0x58, 0x0, // @302 "TMAX"
 | 
			
		||||
    0x54, 0x54, 0x46, 0x4c, 0x0, // @307 "TTFL"
 | 
			
		||||
    0x54, 0x54, 0x46, 0x52, 0x0, // @312 "TTFR"
 | 
			
		||||
    0x54, 0x54, 0x52, 0x4c, 0x0, // @317 "TTRL"
 | 
			
		||||
    0x54, 0x54, 0x52, 0x52, 0x0, // @322 "TTRR"
 | 
			
		||||
    0x56, 0x4d, 0x49, 0x4e, 0x0, // @327 "VMIN"
 | 
			
		||||
    0x41, 0x4d, 0x53, 0x0, // @332 "AMS"
 | 
			
		||||
    0x49, 0x4e, 0x56, 0x0, // @336 "INV"
 | 
			
		||||
    0x49, 0x54, 0x53, 0x0, // @340 "ITS"
 | 
			
		||||
    0x50, 0x44, 0x55, 0x0, // @344 "PDU"
 | 
			
		||||
    0x52, 0x32, 0x44, 0x0, // @348 "R2D"
 | 
			
		||||
    0x53, 0x43, 0x53, 0x0, // @352 "SCS"
 | 
			
		||||
    0x53, 0x44, 0x43, 0x0, // @356 "SDC"
 | 
			
		||||
    0x4c, 0x56, 0x0 // @360 "LV"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
TEXT_LOCATION_FLASH_PRAGMA
 | 
			
		||||
 | 
			
		||||
@ -12,6 +12,7 @@ extern touchgfx::GeneratedFont& getFont_CHINN____40_4bpp();
 | 
			
		||||
extern touchgfx::GeneratedFont& getFont_lucon_TTF_50_4bpp();
 | 
			
		||||
extern touchgfx::GeneratedFont& getFont_verdanab_20_4bpp();
 | 
			
		||||
extern touchgfx::GeneratedFont& getFont_lucon_TTF_33_4bpp();
 | 
			
		||||
extern touchgfx::GeneratedFont& getFont_lucon_TTF_20_4bpp();
 | 
			
		||||
 | 
			
		||||
const touchgfx::Font* touchgfx_fonts[] = {
 | 
			
		||||
    &(getFont_verdana_20_4bpp()),
 | 
			
		||||
@ -20,7 +21,8 @@ const touchgfx::Font* touchgfx_fonts[] = {
 | 
			
		||||
    &(getFont_CHINN____40_4bpp()),
 | 
			
		||||
    &(getFont_lucon_TTF_50_4bpp()),
 | 
			
		||||
    &(getFont_verdanab_20_4bpp()),
 | 
			
		||||
    &(getFont_lucon_TTF_33_4bpp())
 | 
			
		||||
    &(getFont_lucon_TTF_33_4bpp()),
 | 
			
		||||
    &(getFont_lucon_TTF_20_4bpp())
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
extern const touchgfx::TypedText::TypedTextData typedText_database_DEFAULT[];
 | 
			
		||||
@ -80,6 +82,14 @@ const touchgfx::TypedText::TypedTextData typedText_database_GB[] TEXT_LOCATION_F
 | 
			
		||||
    { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 7, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 7, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 7, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 7, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 3, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
@ -92,7 +102,6 @@ const touchgfx::TypedText::TypedTextData typedText_database_GB[] TEXT_LOCATION_F
 | 
			
		||||
    { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 4, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }
 | 
			
		||||
};
 | 
			
		||||
@ -150,6 +159,14 @@ const touchgfx::TypedText::TypedTextData typedText_database_DEFAULT[] TEXT_LOCAT
 | 
			
		||||
    { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 7, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 7, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 7, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 7, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 3, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
@ -162,7 +179,6 @@ const touchgfx::TypedText::TypedTextData typedText_database_DEFAULT[] TEXT_LOCAT
 | 
			
		||||
    { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 4, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
 | 
			
		||||
    { 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }
 | 
			
		||||
};
 | 
			
		||||
@ -221,6 +237,9 @@ void resetFont(touchgfx::FontId fontId)
 | 
			
		||||
    case 6:
 | 
			
		||||
        touchgfx_fonts[6] = &(getFont_lucon_TTF_33_4bpp());
 | 
			
		||||
        break;
 | 
			
		||||
    case 7:
 | 
			
		||||
        touchgfx_fonts[7] = &(getFont_lucon_TTF_20_4bpp());
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
} // namespace TypedTextDatabase
 | 
			
		||||
 | 
			
		||||
@ -2,9 +2,25 @@
 | 
			
		||||
#define AMIVIEW_HPP
 | 
			
		||||
 | 
			
		||||
#include "stw_defines.h"
 | 
			
		||||
#include "touchgfx/Unicode.hpp"
 | 
			
		||||
#include "touchgfx/widgets/TextArea.hpp"
 | 
			
		||||
#include "touchgfx/widgets/TextAreaWithWildcard.hpp"
 | 
			
		||||
#include "vehicle_state.h"
 | 
			
		||||
#include <gui/ami_screen/AMIPresenter.hpp>
 | 
			
		||||
#include <gui_generated/ami_screen/AMIViewBase.hpp>
 | 
			
		||||
 | 
			
		||||
class AMIDataField {
 | 
			
		||||
public:
 | 
			
		||||
  AMIDataField(touchgfx::TextAreaWithOneWildcard &textArea, const char *fmt);
 | 
			
		||||
 | 
			
		||||
  void setValue(float value);
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
  const char *fmt;
 | 
			
		||||
 | 
			
		||||
  touchgfx::TextAreaWithOneWildcard &textArea;
 | 
			
		||||
  touchgfx::Unicode::UnicodeChar buffer[16];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class AMIView : public AMIViewBase {
 | 
			
		||||
public:
 | 
			
		||||
@ -15,7 +31,20 @@ public:
 | 
			
		||||
 | 
			
		||||
  void setMission(Mission mission);
 | 
			
		||||
 | 
			
		||||
  void updateDataFields();
 | 
			
		||||
  void setJetsonTimeout(bool timeout);
 | 
			
		||||
  void setEPSCTimeout(bool timeout);
 | 
			
		||||
 | 
			
		||||
  void setConePositions(ConePosition *positions, size_t count);
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
  AMIDataField desiredAngleField;
 | 
			
		||||
  AMIDataField measuredAngleField;
 | 
			
		||||
  AMIDataField desiredSpeedField;
 | 
			
		||||
  AMIDataField measuredSpeedField;
 | 
			
		||||
 | 
			
		||||
  touchgfx::Shape<3> cones[NUM_CONES] = {cone0, cone1, cone2, cone3, cone4,
 | 
			
		||||
                                         cone5, cone6, cone7, cone8, cone9};
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // AMIVIEW_HPP
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,7 @@
 | 
			
		||||
#include <gui/ami_screen/AMIPresenter.hpp>
 | 
			
		||||
#include <gui/ami_screen/AMIView.hpp>
 | 
			
		||||
 | 
			
		||||
#include "stm32h7xx_hal.h"
 | 
			
		||||
#include "vehicle_state.h"
 | 
			
		||||
 | 
			
		||||
AMIPresenter::AMIPresenter(AMIView &v) : view(v) {}
 | 
			
		||||
@ -11,4 +12,19 @@ void AMIPresenter::deactivate() {}
 | 
			
		||||
 | 
			
		||||
void AMIPresenter::vehicleStateUpdated() {
 | 
			
		||||
  view.setMission(vehicle_state.active_mission);
 | 
			
		||||
  view.updateDataFields();
 | 
			
		||||
#ifndef SIMULATOR
 | 
			
		||||
  view.setJetsonTimeout(HAL_GetTick() - vehicle_state.last_jetson_msg > 500);
 | 
			
		||||
  view.setEPSCTimeout(HAL_GetTick() - vehicle_state.last_epsc_msg > 500);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  size_t cone_count = 0;
 | 
			
		||||
  for (; cone_count < NUM_CONES; cone_count++) {
 | 
			
		||||
    // A cone position of 0xFF/0xFF indicates that there are no more cones
 | 
			
		||||
    if (vehicle_state.cone_pos[cone_count].x == 0xFF &&
 | 
			
		||||
        vehicle_state.cone_pos[cone_count].y == 0xFF) {
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  view.setConePositions(vehicle_state.cone_pos, cone_count);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,10 +1,28 @@
 | 
			
		||||
#include "gui_generated/ami_screen/AMIViewBase.hpp"
 | 
			
		||||
#include "stw_defines.h"
 | 
			
		||||
#include "texts/TextKeysAndLanguages.hpp"
 | 
			
		||||
#include "touchgfx/Color.hpp"
 | 
			
		||||
#include "touchgfx/TypedText.hpp"
 | 
			
		||||
#include "touchgfx/Unicode.hpp"
 | 
			
		||||
#include "touchgfx/widgets/TextAreaWithWildcard.hpp"
 | 
			
		||||
#include "vehicle_state.h"
 | 
			
		||||
#include <gui/ami_screen/AMIView.hpp>
 | 
			
		||||
 | 
			
		||||
AMIView::AMIView() {}
 | 
			
		||||
AMIDataField::AMIDataField(touchgfx::TextAreaWithOneWildcard &textArea,
 | 
			
		||||
                           const char *fmt)
 | 
			
		||||
    : fmt(fmt), textArea(textArea) {}
 | 
			
		||||
 | 
			
		||||
void AMIDataField::setValue(float value) {
 | 
			
		||||
  Unicode::snprintfFloat(buffer, sizeof(buffer) / sizeof(*buffer), fmt, value);
 | 
			
		||||
  textArea.setWildcard(buffer);
 | 
			
		||||
  textArea.invalidate();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
AMIView::AMIView()
 | 
			
		||||
    : AMIViewBase(), desiredAngleField(desiredAngle, "%5.2f"),
 | 
			
		||||
      measuredAngleField(measuredAngle, "%5.2f"),
 | 
			
		||||
      desiredSpeedField(desiredSpeed, "%5.1f"),
 | 
			
		||||
      measuredSpeedField(measuredSpeed, "%5.1f") {}
 | 
			
		||||
 | 
			
		||||
void AMIView::setupScreen() { AMIViewBase::setupScreen(); }
 | 
			
		||||
 | 
			
		||||
@ -34,8 +52,43 @@ void AMIView::setMission(Mission mission) {
 | 
			
		||||
  case MISSION_NONE:
 | 
			
		||||
  default:
 | 
			
		||||
    currentMission.setTypedText(TypedText(T_INVALID_HUGE));
 | 
			
		||||
    currentMission.setColor(touchgfx::Color::getColorFromRGB(0xFF, 0, 0));
 | 
			
		||||
    break;
 | 
			
		||||
  }
 | 
			
		||||
  currentMission.invalidate();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AMIView::updateDataFields() {
 | 
			
		||||
  desiredAngleField.setValue(vehicle_state.desired_angle);
 | 
			
		||||
  measuredAngleField.setValue(vehicle_state.measured_angle);
 | 
			
		||||
  desiredSpeedField.setValue(vehicle_state.desired_speed);
 | 
			
		||||
  measuredSpeedField.setValue(vehicle_state.speed);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AMIView::setJetsonTimeout(bool timeout) {
 | 
			
		||||
  if (timeout) {
 | 
			
		||||
    desiredAngle.setColor(touchgfx::Color::getColorFromRGB(0xFF, 0, 0));
 | 
			
		||||
  } else {
 | 
			
		||||
    desiredAngle.setColor(touchgfx::Color::getColorFromRGB(0xFF, 0xFF, 0xFF));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AMIView::setEPSCTimeout(bool timeout) {
 | 
			
		||||
  if (timeout) {
 | 
			
		||||
    measuredAngle.setColor(touchgfx::Color::getColorFromRGB(0xFF, 0, 0));
 | 
			
		||||
  } else {
 | 
			
		||||
    measuredAngle.setColor(touchgfx::Color::getColorFromRGB(0xFF, 0xFF, 0xFF));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AMIView::setConePositions(ConePosition *cone_positions, size_t count) {
 | 
			
		||||
  for (size_t i = 0; i < count; i++) {
 | 
			
		||||
    cones[i].setX(cone_positions[i].x);
 | 
			
		||||
    cones[i].setY(cone_positions[i].y);
 | 
			
		||||
    cones[i].setVisible(true);
 | 
			
		||||
    cones[i].invalidate();
 | 
			
		||||
  }
 | 
			
		||||
  for (size_t i = count; i < NUM_CONES; i++) {
 | 
			
		||||
    cones[i].setVisible(false);
 | 
			
		||||
    cones[i].invalidate();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -197,6 +197,7 @@
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "Name": "AMI",
 | 
			
		||||
        "CanvasBufferSize": 7200,
 | 
			
		||||
        "Components": [
 | 
			
		||||
          {
 | 
			
		||||
            "Type": "Image",
 | 
			
		||||
@ -205,16 +206,31 @@
 | 
			
		||||
            "Y": 266,
 | 
			
		||||
            "Width": 160,
 | 
			
		||||
            "Height": 39,
 | 
			
		||||
            "Visible": false,
 | 
			
		||||
            "RelativeFilename": "logo_dv_small_white.png"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "Type": "TextArea",
 | 
			
		||||
            "Name": "title",
 | 
			
		||||
            "X": 42,
 | 
			
		||||
            "Y": 20,
 | 
			
		||||
            "Width": 396,
 | 
			
		||||
            "Height": 37,
 | 
			
		||||
            "TextId": "__SingleUse_SDGP",
 | 
			
		||||
            "Name": "currentMission",
 | 
			
		||||
            "Y": 15,
 | 
			
		||||
            "Width": 480,
 | 
			
		||||
            "Height": 49,
 | 
			
		||||
            "TextId": "Invalid_Huge",
 | 
			
		||||
            "TextRotation": "0",
 | 
			
		||||
            "Color": {
 | 
			
		||||
              "Red": 197,
 | 
			
		||||
              "Green": 14,
 | 
			
		||||
              "Blue": 31
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "Type": "TextArea",
 | 
			
		||||
            "Name": "textArea1",
 | 
			
		||||
            "X": 273,
 | 
			
		||||
            "Y": 103,
 | 
			
		||||
            "Width": 84,
 | 
			
		||||
            "Height": 24,
 | 
			
		||||
            "TextId": "__SingleUse_3MDX",
 | 
			
		||||
            "TextRotation": "0",
 | 
			
		||||
            "Color": {
 | 
			
		||||
              "Red": 255,
 | 
			
		||||
@ -225,17 +241,379 @@
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "Type": "TextArea",
 | 
			
		||||
            "Name": "currentMission",
 | 
			
		||||
            "Y": 130,
 | 
			
		||||
            "Width": 480,
 | 
			
		||||
            "Height": 49,
 | 
			
		||||
            "TextId": "Invalid_Huge",
 | 
			
		||||
            "Name": "textArea2",
 | 
			
		||||
            "X": 273,
 | 
			
		||||
            "Y": 135,
 | 
			
		||||
            "Width": 85,
 | 
			
		||||
            "Height": 24,
 | 
			
		||||
            "TextId": "__SingleUse_JFR7",
 | 
			
		||||
            "TextRotation": "0",
 | 
			
		||||
            "Color": {
 | 
			
		||||
              "Red": 255,
 | 
			
		||||
              "Green": 255,
 | 
			
		||||
              "Blue": 255
 | 
			
		||||
            }
 | 
			
		||||
            },
 | 
			
		||||
            "AutoSize": true
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "Type": "TextArea",
 | 
			
		||||
            "Name": "desiredAngle",
 | 
			
		||||
            "X": 405,
 | 
			
		||||
            "Y": 104,
 | 
			
		||||
            "Width": 60,
 | 
			
		||||
            "Height": 23,
 | 
			
		||||
            "TextId": "__SingleUse_232C",
 | 
			
		||||
            "TextRotation": "0",
 | 
			
		||||
            "Color": {
 | 
			
		||||
              "Red": 255,
 | 
			
		||||
              "Green": 255,
 | 
			
		||||
              "Blue": 255
 | 
			
		||||
            },
 | 
			
		||||
            "Wildcard1": {}
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "Type": "TextArea",
 | 
			
		||||
            "Name": "measuredAngle",
 | 
			
		||||
            "X": 405,
 | 
			
		||||
            "Y": 136,
 | 
			
		||||
            "Width": 60,
 | 
			
		||||
            "Height": 23,
 | 
			
		||||
            "TextId": "__SingleUse_LLOZ",
 | 
			
		||||
            "TextRotation": "0",
 | 
			
		||||
            "Color": {
 | 
			
		||||
              "Red": 255,
 | 
			
		||||
              "Green": 255,
 | 
			
		||||
              "Blue": 255
 | 
			
		||||
            },
 | 
			
		||||
            "Wildcard1": {}
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "Type": "TextArea",
 | 
			
		||||
            "Name": "measuredSpeed",
 | 
			
		||||
            "X": 405,
 | 
			
		||||
            "Y": 199,
 | 
			
		||||
            "Width": 60,
 | 
			
		||||
            "Height": 23,
 | 
			
		||||
            "TextId": "__SingleUse_2S21",
 | 
			
		||||
            "TextRotation": "0",
 | 
			
		||||
            "Color": {
 | 
			
		||||
              "Red": 255,
 | 
			
		||||
              "Green": 255,
 | 
			
		||||
              "Blue": 255
 | 
			
		||||
            },
 | 
			
		||||
            "Wildcard1": {}
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "Type": "TextArea",
 | 
			
		||||
            "Name": "desiredSpeed",
 | 
			
		||||
            "X": 405,
 | 
			
		||||
            "Y": 167,
 | 
			
		||||
            "Width": 60,
 | 
			
		||||
            "Height": 23,
 | 
			
		||||
            "TextId": "__SingleUse_OQ6P",
 | 
			
		||||
            "TextRotation": "0",
 | 
			
		||||
            "Color": {
 | 
			
		||||
              "Red": 255,
 | 
			
		||||
              "Green": 255,
 | 
			
		||||
              "Blue": 255
 | 
			
		||||
            },
 | 
			
		||||
            "Wildcard1": {}
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "Type": "TextArea",
 | 
			
		||||
            "Name": "textArea4",
 | 
			
		||||
            "X": 273,
 | 
			
		||||
            "Y": 198,
 | 
			
		||||
            "Width": 129,
 | 
			
		||||
            "Height": 24,
 | 
			
		||||
            "TextId": "__SingleUse_590R",
 | 
			
		||||
            "TextRotation": "0",
 | 
			
		||||
            "Color": {
 | 
			
		||||
              "Red": 255,
 | 
			
		||||
              "Green": 255,
 | 
			
		||||
              "Blue": 255
 | 
			
		||||
            },
 | 
			
		||||
            "AutoSize": true
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "Type": "TextArea",
 | 
			
		||||
            "Name": "textArea3",
 | 
			
		||||
            "X": 273,
 | 
			
		||||
            "Y": 166,
 | 
			
		||||
            "Width": 128,
 | 
			
		||||
            "Height": 24,
 | 
			
		||||
            "TextId": "__SingleUse_Z78U",
 | 
			
		||||
            "TextRotation": "0",
 | 
			
		||||
            "Color": {
 | 
			
		||||
              "Red": 255,
 | 
			
		||||
              "Green": 255,
 | 
			
		||||
              "Blue": 255
 | 
			
		||||
            },
 | 
			
		||||
            "AutoSize": true
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "Type": "Container",
 | 
			
		||||
            "Name": "map",
 | 
			
		||||
            "X": 15,
 | 
			
		||||
            "Y": 103,
 | 
			
		||||
            "Width": 255,
 | 
			
		||||
            "Height": 202,
 | 
			
		||||
            "Components": [
 | 
			
		||||
              {
 | 
			
		||||
                "Type": "Shape",
 | 
			
		||||
                "Name": "cone0",
 | 
			
		||||
                "Width": 10,
 | 
			
		||||
                "Height": 10,
 | 
			
		||||
                "Visible": false,
 | 
			
		||||
                "Color": {
 | 
			
		||||
                  "Red": 255,
 | 
			
		||||
                  "Green": 255
 | 
			
		||||
                },
 | 
			
		||||
                "Points": [
 | 
			
		||||
                  {},
 | 
			
		||||
                  {
 | 
			
		||||
                    "X": 10.0,
 | 
			
		||||
                    "Y": 5.0
 | 
			
		||||
                  },
 | 
			
		||||
                  {
 | 
			
		||||
                    "Y": 10.0
 | 
			
		||||
                  }
 | 
			
		||||
                ],
 | 
			
		||||
                "XScale": 1.0,
 | 
			
		||||
                "YScale": 1.0
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "Type": "Shape",
 | 
			
		||||
                "Name": "cone1",
 | 
			
		||||
                "Width": 10,
 | 
			
		||||
                "Height": 10,
 | 
			
		||||
                "Visible": false,
 | 
			
		||||
                "Color": {
 | 
			
		||||
                  "Red": 255,
 | 
			
		||||
                  "Green": 255
 | 
			
		||||
                },
 | 
			
		||||
                "Points": [
 | 
			
		||||
                  {},
 | 
			
		||||
                  {
 | 
			
		||||
                    "X": 10.0,
 | 
			
		||||
                    "Y": 5.0
 | 
			
		||||
                  },
 | 
			
		||||
                  {
 | 
			
		||||
                    "Y": 10.0
 | 
			
		||||
                  }
 | 
			
		||||
                ],
 | 
			
		||||
                "XScale": 1.0,
 | 
			
		||||
                "YScale": 1.0
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "Type": "Shape",
 | 
			
		||||
                "Name": "cone2",
 | 
			
		||||
                "Width": 10,
 | 
			
		||||
                "Height": 10,
 | 
			
		||||
                "Visible": false,
 | 
			
		||||
                "Color": {
 | 
			
		||||
                  "Red": 255,
 | 
			
		||||
                  "Green": 255
 | 
			
		||||
                },
 | 
			
		||||
                "Points": [
 | 
			
		||||
                  {},
 | 
			
		||||
                  {
 | 
			
		||||
                    "X": 10.0,
 | 
			
		||||
                    "Y": 5.0
 | 
			
		||||
                  },
 | 
			
		||||
                  {
 | 
			
		||||
                    "Y": 10.0
 | 
			
		||||
                  }
 | 
			
		||||
                ],
 | 
			
		||||
                "XScale": 1.0,
 | 
			
		||||
                "YScale": 1.0
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "Type": "Shape",
 | 
			
		||||
                "Name": "cone3",
 | 
			
		||||
                "Width": 10,
 | 
			
		||||
                "Height": 10,
 | 
			
		||||
                "Visible": false,
 | 
			
		||||
                "Color": {
 | 
			
		||||
                  "Red": 255,
 | 
			
		||||
                  "Green": 255
 | 
			
		||||
                },
 | 
			
		||||
                "Points": [
 | 
			
		||||
                  {},
 | 
			
		||||
                  {
 | 
			
		||||
                    "X": 10.0,
 | 
			
		||||
                    "Y": 5.0
 | 
			
		||||
                  },
 | 
			
		||||
                  {
 | 
			
		||||
                    "Y": 10.0
 | 
			
		||||
                  }
 | 
			
		||||
                ],
 | 
			
		||||
                "XScale": 1.0,
 | 
			
		||||
                "YScale": 1.0
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "Type": "Shape",
 | 
			
		||||
                "Name": "cone4",
 | 
			
		||||
                "Width": 10,
 | 
			
		||||
                "Height": 10,
 | 
			
		||||
                "Visible": false,
 | 
			
		||||
                "Color": {
 | 
			
		||||
                  "Red": 255,
 | 
			
		||||
                  "Green": 255
 | 
			
		||||
                },
 | 
			
		||||
                "Points": [
 | 
			
		||||
                  {},
 | 
			
		||||
                  {
 | 
			
		||||
                    "X": 10.0,
 | 
			
		||||
                    "Y": 5.0
 | 
			
		||||
                  },
 | 
			
		||||
                  {
 | 
			
		||||
                    "Y": 10.0
 | 
			
		||||
                  }
 | 
			
		||||
                ],
 | 
			
		||||
                "XScale": 1.0,
 | 
			
		||||
                "YScale": 1.0
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "Type": "Shape",
 | 
			
		||||
                "Name": "cone5",
 | 
			
		||||
                "Width": 10,
 | 
			
		||||
                "Height": 10,
 | 
			
		||||
                "Visible": false,
 | 
			
		||||
                "Color": {
 | 
			
		||||
                  "Red": 255,
 | 
			
		||||
                  "Green": 255
 | 
			
		||||
                },
 | 
			
		||||
                "Points": [
 | 
			
		||||
                  {},
 | 
			
		||||
                  {
 | 
			
		||||
                    "X": 10.0,
 | 
			
		||||
                    "Y": 5.0
 | 
			
		||||
                  },
 | 
			
		||||
                  {
 | 
			
		||||
                    "Y": 10.0
 | 
			
		||||
                  }
 | 
			
		||||
                ],
 | 
			
		||||
                "XScale": 1.0,
 | 
			
		||||
                "YScale": 1.0
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "Type": "Shape",
 | 
			
		||||
                "Name": "cone6",
 | 
			
		||||
                "Width": 10,
 | 
			
		||||
                "Height": 10,
 | 
			
		||||
                "Visible": false,
 | 
			
		||||
                "Color": {
 | 
			
		||||
                  "Red": 255,
 | 
			
		||||
                  "Green": 255
 | 
			
		||||
                },
 | 
			
		||||
                "Points": [
 | 
			
		||||
                  {},
 | 
			
		||||
                  {
 | 
			
		||||
                    "X": 10.0,
 | 
			
		||||
                    "Y": 5.0
 | 
			
		||||
                  },
 | 
			
		||||
                  {
 | 
			
		||||
                    "Y": 10.0
 | 
			
		||||
                  }
 | 
			
		||||
                ],
 | 
			
		||||
                "XScale": 1.0,
 | 
			
		||||
                "YScale": 1.0
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "Type": "Shape",
 | 
			
		||||
                "Name": "cone7",
 | 
			
		||||
                "Width": 10,
 | 
			
		||||
                "Height": 10,
 | 
			
		||||
                "Visible": false,
 | 
			
		||||
                "Color": {
 | 
			
		||||
                  "Red": 255,
 | 
			
		||||
                  "Green": 255
 | 
			
		||||
                },
 | 
			
		||||
                "Points": [
 | 
			
		||||
                  {},
 | 
			
		||||
                  {
 | 
			
		||||
                    "X": 10.0,
 | 
			
		||||
                    "Y": 5.0
 | 
			
		||||
                  },
 | 
			
		||||
                  {
 | 
			
		||||
                    "Y": 10.0
 | 
			
		||||
                  }
 | 
			
		||||
                ],
 | 
			
		||||
                "XScale": 1.0,
 | 
			
		||||
                "YScale": 1.0
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "Type": "Shape",
 | 
			
		||||
                "Name": "cone8",
 | 
			
		||||
                "Width": 10,
 | 
			
		||||
                "Height": 10,
 | 
			
		||||
                "Visible": false,
 | 
			
		||||
                "Color": {
 | 
			
		||||
                  "Red": 255,
 | 
			
		||||
                  "Green": 255
 | 
			
		||||
                },
 | 
			
		||||
                "Points": [
 | 
			
		||||
                  {},
 | 
			
		||||
                  {
 | 
			
		||||
                    "X": 10.0,
 | 
			
		||||
                    "Y": 5.0
 | 
			
		||||
                  },
 | 
			
		||||
                  {
 | 
			
		||||
                    "Y": 10.0
 | 
			
		||||
                  }
 | 
			
		||||
                ],
 | 
			
		||||
                "XScale": 1.0,
 | 
			
		||||
                "YScale": 1.0
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "Type": "Shape",
 | 
			
		||||
                "Name": "cone9",
 | 
			
		||||
                "Width": 10,
 | 
			
		||||
                "Height": 10,
 | 
			
		||||
                "Visible": false,
 | 
			
		||||
                "Color": {
 | 
			
		||||
                  "Red": 255,
 | 
			
		||||
                  "Green": 255
 | 
			
		||||
                },
 | 
			
		||||
                "Points": [
 | 
			
		||||
                  {},
 | 
			
		||||
                  {
 | 
			
		||||
                    "X": 10.0,
 | 
			
		||||
                    "Y": 5.0
 | 
			
		||||
                  },
 | 
			
		||||
                  {
 | 
			
		||||
                    "Y": 10.0
 | 
			
		||||
                  }
 | 
			
		||||
                ],
 | 
			
		||||
                "XScale": 1.0,
 | 
			
		||||
                "YScale": 1.0
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "Type": "Shape",
 | 
			
		||||
                "Name": "ft",
 | 
			
		||||
                "Y": 91,
 | 
			
		||||
                "Width": 20,
 | 
			
		||||
                "Height": 20,
 | 
			
		||||
                "Color": {
 | 
			
		||||
                  "Red": 255,
 | 
			
		||||
                  "Green": 255,
 | 
			
		||||
                  "Blue": 255
 | 
			
		||||
                },
 | 
			
		||||
                "Points": [
 | 
			
		||||
                  {},
 | 
			
		||||
                  {
 | 
			
		||||
                    "X": 20.0,
 | 
			
		||||
                    "Y": 10.0
 | 
			
		||||
                  },
 | 
			
		||||
                  {
 | 
			
		||||
                    "Y": 20.0
 | 
			
		||||
                  }
 | 
			
		||||
                ],
 | 
			
		||||
                "XScale": 1.0,
 | 
			
		||||
                "YScale": 1.0
 | 
			
		||||
              }
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "Interactions": []
 | 
			
		||||
@ -1325,7 +1703,7 @@
 | 
			
		||||
      "Height": 480
 | 
			
		||||
    },
 | 
			
		||||
    "SelectedColorDepth": 16,
 | 
			
		||||
    "StartupScreenName": "DriverView",
 | 
			
		||||
    "StartupScreenName": "MissionSelect",
 | 
			
		||||
    "SelectedStartupLanguage": "GB",
 | 
			
		||||
    "TouchGfxPath": "../Middlewares/ST/touchgfx",
 | 
			
		||||
    "UIPath": ".",
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user