MAX_CARLINK_A270S/MXC_A27-PCB4.5-270T/app/moto/protocol/can_protocol.c

128 lines
2.6 KiB
C

#include "awtk.h"
#include "can_protocol.h"
uint8_t tcs_twinkle = 0;
uint8_t tcs_switch = 0;
//37B
void tcsworking_event_handing(int *buf){
uint8_t data = 0;
*(buf++);
*(buf++);
data = *(buf++);
tcs_twinkle = getBitValue(data,7);//tcs闪烁控制指令 为1闪烁
}
//12B
void tcsswitch_event_handing(int *buf){
uint8_t data = 0;
uint8_t tcs_data = 0;
data = *(buf++);
tcs_data = getBit2Value(data,0);//tcs开关信号
if(tcs_data<=1)
tcs_switch = tcs_data;
}
//101
void speed_event_handing(int *buf){
uint16_t eng_temp = 0;
uint16_t data = 0;
uint8_t state_data = 0;
double buf_value = 0;
*(buf++);
*(buf++);
*(buf++);
*(buf++);
data = *(buf++) &0xFF;
data = (*(buf++)&0xFF) | data<<8;
buf_value = data;
if(buf_value>5280)
buf_value = 255;
else if(buf_value>2730)
buf_value = ((buf_value*0.1)-273);
else
buf_value = 0;
eng_temp = (int)buf_value;
Set_sys_can_temp(eng_temp);
state_data = *(buf++);
Set_sys_can_state(state_data);
}
//0xA5
void abs_dtc_event_handing(int *buf){
char dtc[5] = {0};
dtc[4] = *(buf++)&0xFF;
dtc[3] = *(buf++)&0xFF;
dtc[2] = *(buf++)&0xFF;
dtc[1] = *(buf++)&0xFF;
dtc[0] = *(buf++)&0xFF;
Set_can_abs_dtc(dtc);
}
//0x402
void ecu_dtc_event_handing2(int *buf){
char dtc[5] = {0};
dtc[4] = *(buf++)&0xFF;
dtc[3] = *(buf++)&0xFF;
dtc[2] = *(buf++)&0xFF;
dtc[1] = *(buf++)&0xFF;
dtc[0] = *(buf++)&0xFF;
Set_can_abs_dtc(dtc);
}
uint8_t dtc_flag = 0;
void A59_dtc_event_handing(int *buf){
uint32_t sum,sum1,sum2;
sum = 0;
sum1 = *(buf++)&0xFF;
*(buf++)&0xFF;
sum2 = *(buf++)&0xFF;
////低位再前
//sum = sum1 | sum2<<8;
//高位再前
sum = sum1<<8 | sum2;
// if (sum !=0)
Set_sys_now_defect_code(sum);
dtc_flag = *(buf++)&0xFF;
sum = 0;
sum1 = *(buf++)&0xFF;
*(buf++)&0xFF;
sum2 = *(buf++)&0xFF;
sum = sum1<<8 | sum2;
// if (sum !=0)
Set_sys_his_defect_code(sum);
}
//101
void A59_speed_event_handing(int *buf){
uint16_t eng_temp = 0;
uint16_t data = 0;
uint8_t state_data = 0;
double buf_value = 0;
*(buf++);
*(buf++);
*(buf++);
*(buf++);
data = *(buf++) &0xFF;
data = (*(buf++)&0xFF) | data<<8;
buf_value = data;
if(buf_value>5280)
buf_value = 255;
else if(buf_value>2730)
buf_value = ((buf_value*0.1)-273);
else
buf_value = 0;
eng_temp = (int)buf_value;
Set_sys_can_temp(eng_temp);
state_data = *(buf++);
Set_sys_can_state(state_data);
}