185 lines
5.6 KiB
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;
|
|
}
|