base
This commit is contained in:
171
DBW_V2/Core/Src/mazda_can.c
Normal file
171
DBW_V2/Core/Src/mazda_can.c
Normal file
@@ -0,0 +1,171 @@
|
||||
/*
|
||||
* mazda_can.c
|
||||
*
|
||||
* Created on: Mar 17, 2022
|
||||
* Author: v0stap
|
||||
*/
|
||||
|
||||
/*
|
||||
* app.c
|
||||
*
|
||||
* Created on: Jul 25, 2020
|
||||
* Author: v0stap
|
||||
*/
|
||||
#include "main.h"
|
||||
uint32_t var_time = 0, rpm_time = 0, can_tim = 0;
|
||||
can_msg_typedef tmpCanMsg;
|
||||
//https://www.chamberofunderstanding.co.uk/2021/06/11/rx8-project-part-21-canbus-6-working-code/
|
||||
void MAZDA_Send_Data(void) {
|
||||
can_tim++;
|
||||
tmpCanMsg.id = 0x201; // Send RPM = Actual RPM * 3.85 Throttle Pedal 0x00 - 0xC8 in 0.5% increments Send KPH = (Actual KPH * 100) + 10000
|
||||
tmpCanMsg.format = STD_FORMAT;
|
||||
tmpCanMsg.frame = DATA_FRAME;
|
||||
tmpCanMsg.lenght = 7;
|
||||
tmpCanMsg.data[0] = (((uint16_t) (var.rpm * 3.85)) >> 8); // RPM high
|
||||
tmpCanMsg.data[1] = (uint8_t) ((var.rpm) * 3.85); // RPM low
|
||||
tmpCanMsg.data[2] = 0xFF;
|
||||
tmpCanMsg.data[3] = 0xFF;
|
||||
tmpCanMsg.data[4] = (var.vss * 100 + 10000) >> 8; // VSS KPH high
|
||||
tmpCanMsg.data[5] = (var.vss * 100 + 10000); // VSS KPH low
|
||||
tmpCanMsg.data[6] = var.pps / 5; // TPS
|
||||
tmpCanMsg.data[7] = 0xFF;
|
||||
CAN_Add_TX_Buffer(&tmpCanMsg);
|
||||
|
||||
tmpCanMsg.id = 0x250;
|
||||
tmpCanMsg.format = STD_FORMAT;
|
||||
tmpCanMsg.frame = DATA_FRAME;
|
||||
tmpCanMsg.lenght = 8;
|
||||
tmpCanMsg.data[0] = 0x00;
|
||||
tmpCanMsg.data[1] = 0x00;
|
||||
tmpCanMsg.data[2] = 0xCF;
|
||||
tmpCanMsg.data[3] = 0x87;
|
||||
tmpCanMsg.data[4] = 0x7F;
|
||||
tmpCanMsg.data[5] = 0x83;
|
||||
tmpCanMsg.data[6] = 0x00;
|
||||
tmpCanMsg.data[7] = 0x00;
|
||||
CAN_Add_TX_Buffer(&tmpCanMsg);
|
||||
|
||||
tmpCanMsg.id = 0x620; // Type of ABS
|
||||
tmpCanMsg.format = STD_FORMAT;
|
||||
tmpCanMsg.frame = DATA_FRAME;
|
||||
tmpCanMsg.lenght = 1;
|
||||
tmpCanMsg.data[0] = 0x00;
|
||||
tmpCanMsg.data[1] = 0x00;
|
||||
tmpCanMsg.data[2] = 0x00;
|
||||
tmpCanMsg.data[3] = 0x00;
|
||||
tmpCanMsg.data[4] = 0x00;
|
||||
tmpCanMsg.data[5] = 0x00;
|
||||
tmpCanMsg.data[6] = 0x02; // ABS type 2,3 or 4
|
||||
tmpCanMsg.data[7] = 0x00;
|
||||
CAN_Add_TX_Buffer(&tmpCanMsg);
|
||||
tmpCanMsg.id = 0x630; // Type of Transmission and Wheel Size
|
||||
tmpCanMsg.format = STD_FORMAT;
|
||||
tmpCanMsg.frame = DATA_FRAME;
|
||||
tmpCanMsg.lenght = 1;
|
||||
tmpCanMsg.data[0] = 0x08; //8 = MT, 2 = AT
|
||||
tmpCanMsg.data[1] = 0x00;
|
||||
tmpCanMsg.data[2] = 0x00;
|
||||
tmpCanMsg.data[3] = 0x00;
|
||||
tmpCanMsg.data[4] = 0x00;
|
||||
tmpCanMsg.data[5] = 0x00;
|
||||
tmpCanMsg.data[6] = 0x6A; // Wheel Size
|
||||
tmpCanMsg.data[7] = 0x6A; // Wheel Size
|
||||
CAN_Add_TX_Buffer(&tmpCanMsg);
|
||||
tmpCanMsg.id = 0x650; // CRUISE CONTROL
|
||||
tmpCanMsg.format = STD_FORMAT;
|
||||
tmpCanMsg.frame = DATA_FRAME;
|
||||
tmpCanMsg.lenght = 1;
|
||||
tmpCanMsg.data[0] = 0x00; // 0x40 Green 0x80 Yellow 0xC0 Both
|
||||
//tmpCanMsg.data[1] = 0;
|
||||
//tmpCanMsg.data[2] = 0xcf;
|
||||
//tmpCanMsg.data[3] = 0x87;
|
||||
//tmpCanMsg.data[4] = 0x7f;
|
||||
//tmpCanMsg.data[5] = 0x83;
|
||||
//tmpCanMsg.data[6] = 0;
|
||||
//tmpCanMsg.data[7] = 0;
|
||||
CAN_Add_TX_Buffer(&tmpCanMsg);
|
||||
if (can_tim>4){
|
||||
can_tim = 0;
|
||||
tmpCanMsg.id = 0x203; //This needs sending witin 0.5 seconds of ignition otherwise traction light will come on
|
||||
tmpCanMsg.format = STD_FORMAT;
|
||||
tmpCanMsg.frame = DATA_FRAME;
|
||||
tmpCanMsg.lenght = 7;
|
||||
tmpCanMsg.data[0] = 0x16;
|
||||
tmpCanMsg.data[1] = 0x16;
|
||||
tmpCanMsg.data[2] = 0x16;
|
||||
tmpCanMsg.data[3] = 0x16;
|
||||
tmpCanMsg.data[4] = 0xAF;
|
||||
tmpCanMsg.data[5] = 3;
|
||||
tmpCanMsg.data[6] = 0x16;
|
||||
//tmpCanMsg.data[7] = ;
|
||||
CAN_Add_TX_Buffer(&tmpCanMsg);
|
||||
tmpCanMsg.id = 0x215; // This needs sending witin 0.5 seconds of ignition otherwise traction light will come on
|
||||
tmpCanMsg.format = STD_FORMAT;
|
||||
tmpCanMsg.frame = DATA_FRAME;
|
||||
tmpCanMsg.lenght = 8;
|
||||
tmpCanMsg.data[0] = 0x02;
|
||||
tmpCanMsg.data[1] = 0x2D;
|
||||
tmpCanMsg.data[2] = 0x02;
|
||||
tmpCanMsg.data[3] = 0x2D;
|
||||
tmpCanMsg.data[4] = 0x02;
|
||||
tmpCanMsg.data[5] = 0x2A;
|
||||
tmpCanMsg.data[6] = 0x06;
|
||||
tmpCanMsg.data[7] = 0x81;
|
||||
CAN_Add_TX_Buffer(&tmpCanMsg);
|
||||
tmpCanMsg.id = 0x231; // This needs sending witin 0.5 seconds of ignition otherwise traction light will come on
|
||||
tmpCanMsg.format = STD_FORMAT;
|
||||
tmpCanMsg.frame = DATA_FRAME;
|
||||
tmpCanMsg.lenght = 5;
|
||||
tmpCanMsg.data[0] = 15;
|
||||
tmpCanMsg.data[1] = 0;
|
||||
tmpCanMsg.data[2] = 0xff;
|
||||
tmpCanMsg.data[3] = 0xff;
|
||||
tmpCanMsg.data[4] = 0x00;
|
||||
//tmpCanMsg.data[5] = 0x37;
|
||||
//tmpCanMsg.data[6] = 0x06;
|
||||
//tmpCanMsg.data[7] = 0x81;
|
||||
CAN_Add_TX_Buffer(&tmpCanMsg);
|
||||
tmpCanMsg.id = 0x240; // This needs sending witin 0.5 seconds of ignition otherwise traction light will come on
|
||||
tmpCanMsg.format = STD_FORMAT;
|
||||
tmpCanMsg.frame = DATA_FRAME;
|
||||
tmpCanMsg.lenght = 8;
|
||||
tmpCanMsg.data[0] = 0x04;
|
||||
tmpCanMsg.data[1] = 0;
|
||||
tmpCanMsg.data[2] = 40;
|
||||
tmpCanMsg.data[3] = 0x00;
|
||||
tmpCanMsg.data[4] = 0x02;
|
||||
tmpCanMsg.data[5] = 55;
|
||||
tmpCanMsg.data[6] = 0x06;
|
||||
tmpCanMsg.data[7] = 0x81;
|
||||
CAN_Add_TX_Buffer(&tmpCanMsg);
|
||||
}
|
||||
}
|
||||
void MAZDA_CAN_Read(void) {
|
||||
CAN_Read_RX_Buffer(&tmpCanMsg);
|
||||
if (tmpCanMsg.id == 0x4c0) {
|
||||
tmpCanMsg.id = 0x420; // Engine Temp Odometer from 4c0 Oil Pressure Check Engine Low Water Bat Charge Oil Pressure
|
||||
tmpCanMsg.format = STD_FORMAT;
|
||||
tmpCanMsg.frame = DATA_FRAME;
|
||||
tmpCanMsg.lenght = 8;
|
||||
tmpCanMsg.data[0] = 0x00; // clt
|
||||
tmpCanMsg.data[1] = tmpCanMsg.data[1]; // Odometer from 4c0 (pwm)
|
||||
tmpCanMsg.data[2] = 0x00;
|
||||
tmpCanMsg.data[3] = 0x00;
|
||||
tmpCanMsg.data[4] = 0x00; //Oil Pressure 0x00 - 0x01 (pwm)
|
||||
tmpCanMsg.data[5] = 0x00; // Check Engine Bit 7 MIL Check Engine Bit 8 BL
|
||||
tmpCanMsg.data[6] = 0;
|
||||
if (var.vbat_adc < 1200) {
|
||||
tmpCanMsg.data[6] |= 1 << 2;
|
||||
} else {
|
||||
tmpCanMsg.data[6] &= ~(1 << 2);
|
||||
}
|
||||
//tmpCanMsg.data[6] = var.ic_status2; //Low Water Bit 2 MIL Bat Charge Bit 7 MIL Oil Pressure Bit 8 MIL
|
||||
tmpCanMsg.data[7] = 0x00;
|
||||
CAN_Add_TX_Buffer(&tmpCanMsg);
|
||||
} else if (tmpCanMsg.id == 0x4B1) {
|
||||
var.vss = ((tmpCanMsg.data[4] << 8) + tmpCanMsg.data[5] + (tmpCanMsg.data[6] << 8) + tmpCanMsg.data[7]) / 4;
|
||||
//todo // add option to make vss output on/off
|
||||
VSS_Set((uint8_t)var.vss);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user