TTS/Software/Core/Src/tts.c

185 lines
5.6 KiB
C

/*
* tts.c
*
* Created on: Jun 28, 2024
* Author: ted
*/
#include "tts.h"
#include "HTPA_32x32d.h"
// CAN Frame:
#define TTS_CANIDSTART 0x701; //
CAN_HandleTypeDef* tts_hcan;
CAN_TxHeaderTypeDef tts_canHeader;
uint8_t tts_canData[8];
uint32_t tts_canMailbox;
// Car / Tire info:
TTS_SensorID tts_sensorid;
TTS_CarID tts_carid;
TTS_TireID tts_tireid;
TTS_TireData tts_tiredb[4];
void TTS_Init(CAN_HandleTypeDef *hcan) {
// initialize values
TTS_LoadTireData();
tts_sensorid = TTS_FL;
tts_carid = FT24;
tts_tireid = OZ7_SLICKS;
// init CAN
tts_hcan = hcan;
// set CAN filter
/*
CAN_FilterTypeDef canfilterconfig;
canfilterconfig.FilterActivation = CAN_FILTER_ENABLE;
canfilterconfig.FilterBank = 0;
canfilterconfig.FilterFIFOAssignment = CAN_FILTER_FIFO0;
canfilterconfig.FilterIdHigh = 0x704<<5;
canfilterconfig.FilterIdLow = 0x700<<5;
canfilterconfig.FilterMaskIdHigh = 0x704<<5;
canfilterconfig.FilterMaskIdLow = 0x700<<5;
canfilterconfig.FilterMode = CAN_FILTERMODE_IDMASK;
canfilterconfig.FilterScale = CAN_FILTERSCALE_32BIT;
HAL_CAN_ConfigFilter(tts_hcan, &canfilterconfig);
*/
// init CAN_Tx Frame
//uint8_t canID = tts_sensorid + TTS_CANIDSTART;
tts_canHeader.IDE = CAN_ID_STD;
tts_canHeader.StdId = 0x701;
tts_canHeader.DLC = 8;
tts_canHeader.RTR = CAN_RTR_DATA;
for(uint8_t i=0; i<8; i++) {
tts_canData[i] = 0xFF;
}
}
void TTS_SendCAN(uint32_t tireZones[5]) {
// Outer left:
tts_canData[0] = tireZones[0] & 0xFF;
tts_canData[1] = (tireZones[0] >> 8) & 0xF;
// Center left:
tts_canData[1] = tts_canData[1] | ((tireZones[1] & 0xF) << 4);
tts_canData[2] = (tireZones[1] >> 4) & 0xFF;
// Center:
tts_canData[3] = tireZones[2] & 0xFF;
tts_canData[4] = (tireZones[2] >> 8) & 0xF;
// Center right:
tts_canData[4] = tts_canData[4] | ((tireZones[3] & 0xF) << 4);
tts_canData[5] = (tireZones[3] >> 4) & 0xFF;
// Center right:
tts_canData[6] = tireZones[4] & 0xFF;
tts_canData[7] = (tireZones[4] >> 8) & 0xF;
// current tire selected:
//tts_canData[7] = tts_canData[7] | ((tts_tireid & 0xF) << 4);
if(HAL_CAN_AddTxMessage(tts_hcan, &tts_canHeader, tts_canData, &tts_canMailbox) != HAL_OK) {
Error_Handler();
}
}
void TTS_TireZones(uint32_t tempArray[32], uint32_t tireTempArray[5]) {
for(uint8_t i = 0; i < 5; i++) {
tireTempArray[i] = 0;
}
uint8_t zoneWidth[5] = {0};
uint8_t tireid = tts_tireid;
for(uint8_t i = 0; i < 32; i++) {
// outer right:
if((i <= tts_tiredb[tts_tireid].outerRightStart) && (i >= tts_tiredb[tts_tireid].outerRightStop)) {
tireTempArray[4] = tireTempArray[4] + tempArray[i];
zoneWidth[4]++;
}
// center right:
if((i <= tts_tiredb[tts_tireid].centerRightStart) && (i >= tts_tiredb[tts_tireid].centerRightStop)) {
tireTempArray[3] = tireTempArray[3] + tempArray[i];
zoneWidth[3]++;
}
// center:
if((i <= tts_tiredb[tts_tireid].centerStart) && (i >= tts_tiredb[tts_tireid].centerStop)) {
tireTempArray[2] = tireTempArray[2] + tempArray[i];
zoneWidth[2]++;
}
// center left:
if((i <= tts_tiredb[tts_tireid].centerLeftStart) && (i >= tts_tiredb[tts_tireid].centerLeftStop)) {
tireTempArray[1] = tireTempArray[1] + tempArray[i];
zoneWidth[1]++;
}
// outer left:
if((i <= tts_tiredb[tts_tireid].outerLeftStart) && (i >= tts_tiredb[tts_tireid].outerLeftStop)) {
tireTempArray[0] = tireTempArray[0] + tempArray[i];
zoneWidth[0]++;
}
}
tireTempArray[4] = tireTempArray[4] / zoneWidth[4];
tireTempArray[3] = tireTempArray[3] / zoneWidth[3];
tireTempArray[2] = tireTempArray[2] / zoneWidth[2];
tireTempArray[1] = tireTempArray[1] / zoneWidth[1];
tireTempArray[0] = tireTempArray[0] / zoneWidth[0];
}
void TTS_LoadTireData(void) {
tts_tiredb[UNKNOWN].id = UNKNOWN;
tts_tiredb[UNKNOWN].epsilon = 84;
tts_tiredb[UNKNOWN].outerLeftStart = 31;
tts_tiredb[UNKNOWN].outerLeftStop = 26;
tts_tiredb[UNKNOWN].centerLeftStart = 25;
tts_tiredb[UNKNOWN].centerLeftStop = 20;
tts_tiredb[UNKNOWN].centerStart = 19;
tts_tiredb[UNKNOWN].centerStop = 12;
tts_tiredb[UNKNOWN].centerRightStart = 11;
tts_tiredb[UNKNOWN].centerRightStop = 6;
tts_tiredb[UNKNOWN].outerRightStart = 5;
tts_tiredb[UNKNOWN].outerRightStop = 0;
tts_tiredb[OZ7_SLICKS].id = OZ7_SLICKS;
tts_tiredb[OZ7_SLICKS].epsilon = 84;
tts_tiredb[OZ7_SLICKS].outerLeftStart = 27;
tts_tiredb[OZ7_SLICKS].outerLeftStop = 25;
tts_tiredb[OZ7_SLICKS].centerLeftStart = 24;
tts_tiredb[OZ7_SLICKS].centerLeftStop = 19;
tts_tiredb[OZ7_SLICKS].centerStart = 18;
tts_tiredb[OZ7_SLICKS].centerStop = 13;
tts_tiredb[OZ7_SLICKS].centerRightStart = 12;
tts_tiredb[OZ7_SLICKS].centerRightStop = 7;
tts_tiredb[OZ7_SLICKS].outerRightStart = 6;
tts_tiredb[OZ7_SLICKS].outerRightStop = 4;
tts_tiredb[OZ7_RAIN].id = OZ7_RAIN;
tts_tiredb[OZ7_RAIN].epsilon = 84;
tts_tiredb[OZ7_RAIN].outerLeftStart = 31;
tts_tiredb[OZ7_RAIN].outerLeftStop = 26;
tts_tiredb[OZ7_RAIN].centerLeftStart = 25;
tts_tiredb[OZ7_RAIN].centerLeftStop = 20;
tts_tiredb[OZ7_RAIN].centerStart = 19;
tts_tiredb[OZ7_RAIN].centerStop = 12;
tts_tiredb[OZ7_RAIN].centerRightStart = 11;
tts_tiredb[OZ7_RAIN].centerRightStop = 6;
tts_tiredb[OZ7_RAIN].outerRightStart = 5;
tts_tiredb[OZ7_RAIN].outerRightStop = 0;
tts_tiredb[JP8_SLICKS].id = JP8_SLICKS;
tts_tiredb[JP8_SLICKS].epsilon = 84;
tts_tiredb[JP8_SLICKS].outerLeftStart = 28;
tts_tiredb[JP8_SLICKS].outerLeftStop = 24;
tts_tiredb[JP8_SLICKS].centerLeftStart = 23;
tts_tiredb[JP8_SLICKS].centerLeftStop = 19;
tts_tiredb[JP8_SLICKS].centerStart = 18;
tts_tiredb[JP8_SLICKS].centerStop = 13;
tts_tiredb[JP8_SLICKS].centerRightStart = 12;
tts_tiredb[JP8_SLICKS].centerRightStop = 8;
tts_tiredb[JP8_SLICKS].outerRightStart = 7;
tts_tiredb[JP8_SLICKS].outerRightStop = 3;
}