Modify & transmit params via CAN
This commit is contained in:
		@ -27,6 +27,7 @@
 | 
			
		||||
#include "ft_logo_rainbow_rgb565.h"
 | 
			
		||||
#include "hx8357d.h"
 | 
			
		||||
#include "leds.h"
 | 
			
		||||
#include "params.h"
 | 
			
		||||
#include "shorttimer.h"
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
@ -144,6 +145,7 @@ int main(void) {
 | 
			
		||||
  if (HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_4) != HAL_OK) {
 | 
			
		||||
    Error_Handler();
 | 
			
		||||
  }
 | 
			
		||||
  params_init();
 | 
			
		||||
  shorttimer_init(htim_us);
 | 
			
		||||
  led_init(&hspi3, &htim1);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,3 +1,118 @@
 | 
			
		||||
#include "params.h"
 | 
			
		||||
#include "can-halal.h"
 | 
			
		||||
#include "vehicle.h"
 | 
			
		||||
 | 
			
		||||
Params params = {0};
 | 
			
		||||
 | 
			
		||||
void params_init() { params.bbal = 50; }
 | 
			
		||||
 | 
			
		||||
void params_inc(ParamType param) {
 | 
			
		||||
  switch (param) {
 | 
			
		||||
  case PF_BBAL:
 | 
			
		||||
    params.bbal += 0.5f;
 | 
			
		||||
    if (params.bbal > 100.0f) {
 | 
			
		||||
      params.bbal = 100.0f;
 | 
			
		||||
    }
 | 
			
		||||
    break;
 | 
			
		||||
  case PF_TC1:
 | 
			
		||||
    params.tc1++;
 | 
			
		||||
    break;
 | 
			
		||||
  case PF_TC2:
 | 
			
		||||
    params.tc2++;
 | 
			
		||||
    break;
 | 
			
		||||
  case PF_TORQUEMAP:
 | 
			
		||||
    params.torque_map++;
 | 
			
		||||
    break;
 | 
			
		||||
  case PF_TEST1:
 | 
			
		||||
    params.test[0]++;
 | 
			
		||||
    break;
 | 
			
		||||
  case PF_TEST2:
 | 
			
		||||
    params.test[1]++;
 | 
			
		||||
    break;
 | 
			
		||||
  case PF_TEST3:
 | 
			
		||||
    params.test[2]++;
 | 
			
		||||
    break;
 | 
			
		||||
  case PF_TEST4:
 | 
			
		||||
    params.test[3]++;
 | 
			
		||||
    break;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void params_dec(ParamType param) {
 | 
			
		||||
  switch (param) {
 | 
			
		||||
  case PF_BBAL:
 | 
			
		||||
    params.bbal -= 0.5f;
 | 
			
		||||
    if (params.bbal < 0.0f) {
 | 
			
		||||
      params.bbal = 0.0f;
 | 
			
		||||
    }
 | 
			
		||||
    break;
 | 
			
		||||
  case PF_TC1:
 | 
			
		||||
    if (params.tc1 > 0) {
 | 
			
		||||
      params.tc1--;
 | 
			
		||||
    }
 | 
			
		||||
    break;
 | 
			
		||||
  case PF_TC2:
 | 
			
		||||
    if (params.tc2 > 0) {
 | 
			
		||||
      params.tc2--;
 | 
			
		||||
    }
 | 
			
		||||
    break;
 | 
			
		||||
  case PF_TORQUEMAP:
 | 
			
		||||
    if (params.torque_map > 0) {
 | 
			
		||||
      params.torque_map--;
 | 
			
		||||
    }
 | 
			
		||||
    break;
 | 
			
		||||
  case PF_TEST1:
 | 
			
		||||
    if (params.test[0] > 0) {
 | 
			
		||||
      params.test[0]--;
 | 
			
		||||
    }
 | 
			
		||||
    break;
 | 
			
		||||
  case PF_TEST2:
 | 
			
		||||
    if (params.test[1] > 0) {
 | 
			
		||||
      params.test[1]--;
 | 
			
		||||
    }
 | 
			
		||||
    break;
 | 
			
		||||
  case PF_TEST3:
 | 
			
		||||
    if (params.test[2] > 0) {
 | 
			
		||||
      params.test[2]--;
 | 
			
		||||
    }
 | 
			
		||||
    break;
 | 
			
		||||
  case PF_TEST4:
 | 
			
		||||
    if (params.test[3] > 0) {
 | 
			
		||||
      params.test[3]--;
 | 
			
		||||
    }
 | 
			
		||||
    break;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void params_broadcast(ParamType param) {
 | 
			
		||||
  int32_t value;
 | 
			
		||||
  switch (param) {
 | 
			
		||||
  case PF_BBAL:
 | 
			
		||||
    value = params.bbal * 10;
 | 
			
		||||
    break;
 | 
			
		||||
  case PF_TC1:
 | 
			
		||||
    value = params.tc1;
 | 
			
		||||
    break;
 | 
			
		||||
  case PF_TC2:
 | 
			
		||||
    value = params.tc2;
 | 
			
		||||
    break;
 | 
			
		||||
  case PF_TORQUEMAP:
 | 
			
		||||
    value = params.torque_map;
 | 
			
		||||
    break;
 | 
			
		||||
  case PF_TEST1:
 | 
			
		||||
    value = params.test[0];
 | 
			
		||||
    break;
 | 
			
		||||
  case PF_TEST2:
 | 
			
		||||
    value = params.test[1];
 | 
			
		||||
    break;
 | 
			
		||||
  case PF_TEST3:
 | 
			
		||||
    value = params.test[2];
 | 
			
		||||
    break;
 | 
			
		||||
  case PF_TEST4:
 | 
			
		||||
    value = params.test[3];
 | 
			
		||||
    break;
 | 
			
		||||
  default:
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  vehicle_broadcast_param(param, value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -13,6 +13,7 @@
 | 
			
		||||
 | 
			
		||||
#define CAN_ID_AMS_STATUS 0xA
 | 
			
		||||
#define CAN_ID_MISSION_SELECTED 0x400
 | 
			
		||||
#define CAN_ID_STW_PARAM_SET 0x402
 | 
			
		||||
#define CAN_ID_AS_MISSION_FB 0x410
 | 
			
		||||
#define CAN_ID_STW_STATUS 0x412
 | 
			
		||||
#define CAN_ID_SHUNT_CURRENT 0x521
 | 
			
		||||
@ -33,8 +34,6 @@ void vehicle_thread_entry(ULONG hfdcan_addr) {
 | 
			
		||||
  ftcan_add_filter(CAN_ID_SHUNT_VOLTAGE3, 0x7FF);
 | 
			
		||||
 | 
			
		||||
  while (1) {
 | 
			
		||||
    uint8_t data[] = {0xFF, 0xEE};
 | 
			
		||||
    ftcan_transmit(0x456, data, 2);
 | 
			
		||||
    tx_thread_sleep(10);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -44,6 +43,14 @@ void vehicle_select_mission(Mission mission) {
 | 
			
		||||
  ftcan_transmit(CAN_ID_MISSION_SELECTED, &mission_int, 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void vehicle_broadcast_param(ParamType param, int32_t value) {
 | 
			
		||||
  uint8_t data[5];
 | 
			
		||||
  uint8_t *ptr = data;
 | 
			
		||||
  ptr = ftcan_marshal_unsigned(ptr, param, 1);
 | 
			
		||||
  ptr = ftcan_marshal_signed(ptr, value, 4);
 | 
			
		||||
  ftcan_transmit(CAN_ID_STW_PARAM_SET, data, 5);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t *data) {
 | 
			
		||||
  switch (id) {
 | 
			
		||||
  case CAN_ID_AMS_STATUS:
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user