HDG/ECU_APP/diagnose/extern.c

592 lines
17 KiB
C
Raw Normal View History

2024-05-26 08:08:32 +08:00
#include "extern.h"
#include "hwCtrl.h"
#include "PINdef.h"
#pragma section const DID_TBL
__far const unsigned char HD_VERSION[]={
'H' , //AC_HD_VERSION_00
'W' , //AC_HD_VERSION_01
'0' , //AC_HD_VERSION_02
2024-05-26 11:13:55 +08:00
'3' , //AC_HD_VERSION_03
2024-05-26 08:08:32 +08:00
'0' , //AC_HD_VERSION_04
'0' , //AC_HD_VERSION_05
' ' , //AC_HD_VERSION_06
' ' , //AC_HD_VERSION_07
' ' , //AC_HD_VERSION_08
' ' , //AC_HD_VERSION_09
' ' , //AC_HD_VERSION_10
' ' , //AC_HD_VERSION_11
' ' , //AC_HD_VERSION_12
' ' , //AC_HD_VERSION_13
' ' , //AC_HD_VERSION_14
' ' , //AC_HD_VERSION_15
};
__far const unsigned char SW_VERSION[]={
'0' , //AC_SW_VERSION_00
'1' , //AC_SW_VERSION_01
2024-05-26 11:13:55 +08:00
'.' , //AC_SW_VERSION_02
'0' , //AC_SW_VERSION_03
'1' , //AC_SW_VERSION_04
'.' , //AC_SW_VERSION_05
'0' , //AC_SW_VERSION_06
'1' , //AC_SW_VERSION_07
2024-05-26 08:08:32 +08:00
' ' , //AC_SW_VERSION_08
' ' , //AC_SW_VERSION_09
' ' , //AC_SW_VERSION_10
' ' , //AC_SW_VERSION_11
' ' , //AC_SW_VERSION_12
};
__far const unsigned char SUP_ECU_SW_VERSION[]={
2024-05-26 11:13:55 +08:00
'0' , //
'2' , //
'0' , //
'1' , //
' ' , //
' ' , //
' ' , //
' ' , //
' ' , //
2024-05-26 08:08:32 +08:00
' ' , //
' ' , //
' ' , //
' ' , //
' ' , //
' ' , //
' ' , //
};
#pragma section
IO_parameter_t io_parameter[8];
const unsigned char DID_0xF110_VehicleNetworkConfiguration[8]={0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20};
const unsigned char DID_0xF190_vehicleIdentificationNumber[17]={0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20};
const unsigned char DID_0xF197_SystemNameOrEngineType[8]={0x44,0x41,0x4D,0x49,0x4e,0x47,0x41,0x43};
const unsigned char DID_0xF198_RepairShopCodeOrTesterSerialNumber[16]={0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20};
const unsigned char DID_0xF199_ProgrammingOrConfigurationDate[4]={0x20,0x00,0x01,0x01};
const unsigned char DID_0xF19D_ECUInstallationDateDataIdentifier[4]={0x20,0x00,0x01,0x01};
const unsigned char DID_0xF112_VehicleName[8]={0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20};
can_frame_t TxCanMessageT;
//const unsigned char DID_0xF15A[]={};
/****************************************************************************************/
/* 输入参数 ch : */
/* 0: 压缩机温度 */
/* 1: 室外温度 */
/* 2: 室内温度 */
/* 返回值: */
/* 对应的电压*10即返回的电压值精度是0.1V的) */
/* */
unsigned char GetVoltage(unsigned char ch)
{
/* 这里可以做数组的方式返回,但尽量不要在这里计算,例如下 return Voltage[ch]; */
// switch(ch)
// {
// case EVA_SENSOR:
// return uiDuctAdVal;
// break;
// case OUTSIDE_SENSOR:
// return uiAmbAdVal;
// break;
// case INSIDE_SENSOR:
// return uiIncarAdVal;
// break;
// default:
// return 0;
// break;
// }
}
/************************************************************************************/
/* 输入参数 motor : */
/* 1: 驾驶员侧温度调节电机 */
/* 2: 出风模式电机电机 */
/* 3: 循环风门调节电机 */
/* */
/* 返回值: */
/* 0: 电机正常 1电机堵转 */
/* */
unsigned char GetMotorLockStatus(unsigned char motor)
{
// switch(motor)
// {
// case 1:
// return temprunErr;
// break;
// case 2:
// return moderunErr;
// break;
// case 3:
// return 0;
// break;
// default:
// return 0;
// break;
// }
}
/************************************************************************************/
/* 输入参数 p : */
/* 0: TEMP 驾驶员侧温度风门位置 */
/* 1: REC 内外循环模式 */
/* 2: FAN 鼓风机档位 */
/* 3: MODE 模式风门位置 */
/* 4: DEFROST 除霜开关 */
/* 5: REARDEF 后除霜控制 */
/* 6: AC A/C制冷按键按键 */
/* 7: K30 ECU Supplier voltage */
/* */
/* 返回值: */
/* 0: 对应的data,具体见222F服务 */
/************************************************************************************/
unsigned char GetIoParameter(unsigned char p)
{
switch(p)
{
case 0:
break;
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
break;
default:
return 0;
break;
}
return (io_parameter[p].data);
}
/************************************************************************************/
/* 主函数查询 */
/*输入参数 p : */
/* 0: TEMP 驾驶员侧温度风门位置 */
/* 1: REC 内外循环模式 */
/* 2: FAN 鼓风机档位 */
/* 3: MODE 模式风门位置 */
/* 4: DEFROST 无效 */
/* 5: REARDEF 后除霜控制 */
/* 6: AC 无效 */
/* 7: K30 无效 */
/* 返回值: */
/* */
/************************************************************************************/
void WriteIoParameter(unsigned char p,unsigned char data)
{
io_parameter[p].write = 1; //此值为1代表着需要对对应用的参数写入data。APP完成写入操作后面把这个清零。
io_parameter[p].data = data;
}
/************************************************************************************/
/* 输入参数 p : */
/* */
/* */
/* 返回值: */
/* 0: IGN电源正常 1IGN > 16V 或 IGN < 9V */
/* */
/************************************************************************************/
unsigned char GetIgnVoltStatus(void)
{
// if(*Power_Protect.mark == 1)
// {
// return 0;
// }
// else
// {
// return 1;
// }
return 0;
}
unsigned char TransmitCAN_Message(unsigned int ID,unsigned char Dlc,unsigned char *Data)
{
Can_RtnType re_flag;
TxCanMessageT.IDL=ID;
TxCanMessageT.DLC=Dlc;
TxCanMessageT.IDE = 0; /* IDE 0:Standard 1:Extend */
TxCanMessageT.RTR = 0; /* RTR 0:Data 1:Remote */
TxCanMessageT.THDSE = 0; /* Transmit History Data Store Enable */
TxCanMessageT.IDH = 0; /* ID Data (high) */
TxCanMessageT.DLC = 8; /* DLC Data */
TxCanMessageT.LBL = 0; /* Label Data */
TxCanMessageT.TS = 0; /* Timestamp Data */
Copy_Array_to_Array(TxCanMessageT.DB,Data,Dlc);
re_flag=R_CAN_TrmByTRFIFO0_CH0(&TxCanMessageT);
if(re_flag == CAN_RTN_OK)
{
return 0;
}
else
{
return 1;
}
}
unsigned char DF_Write(unsigned char* write_buf,unsigned char data_num,unsigned char len)
{
unsigned char DID_Buf[0x50],i;
i=0;
switch(data_num)
{
case 1:
ReadFlashData(DID_Buf,0x000F1000+0x400,0x50);
for(i=0;i<len;i++)
{
DID_Buf[i+0]=*write_buf;
write_buf++;
}
if(WriteDataflash(DID_Buf,0x000F1000+0x400,0x50) == 0x11)
{
return 0;
}
break;
case 2:
ReadFlashData(DID_Buf,0x000F1000+0x400,0x50);
for(i=0;i<len;i++)
{
DID_Buf[i+0x40]=*write_buf;
write_buf++;
}
if(WriteDataflash(DID_Buf,0x000F1000+0x400,0x50) == 0x11)
{
return 0;
}
break;
case 3:
ReadFlashData(DID_Buf,0x000F1000+0x400,0x50);
for(i=0;i<len;i++)
{
DID_Buf[i+0x30]=*write_buf;
write_buf++;
}
if(WriteDataflash(DID_Buf,0x000F1000+0x400,0x50) == 0x11)
{
return 0;
}
break;
case 4:
ReadFlashData(DID_Buf,0x000F1000+0x400,0x50);
for(i=0;i<len;i++)
{
DID_Buf[i+0x38]=*write_buf;
write_buf++;
}
if(WriteDataflash(DID_Buf,0x000F1000+0x400,0x50) == 0x11)
{
return 0;
}
break;
default:
break;
}
return 0;
}
unsigned char DF_Read(unsigned char* read_buf,unsigned char data_num,unsigned char len)
{
switch(data_num)
{
case 1:
ReadFlashData(read_buf,0x000F1000+0x400,len);
return 0;
break;
case 2:
ReadFlashData(read_buf,0x000F1000+0x420,len);
return 0;
break;
case 3:
ReadFlashData(read_buf,0x000F1000+0x430,len);
return 0;
break;
case 4:
ReadFlashData(read_buf,0x000F1000+0x438,len);
return 0;
break;
default:
break;
}
return 0;
}
uint32 GetTimerCnt(void)
{
return Can_1ms_count_alive;
}
/************************************************************************************
// 获取data Flash数据存取索引号 //
// 输入参数 code : //
// 0 : 获取APP重编程请求标志索引号 //
// 1 : 获取2E服务0xF110的索引号 //
// 2 : 获取2E服务0xF190的索引号 //
// 3 : 获取2E服务0xF197的索引号 //
// 4 : 获取2E服务0xF198的索引号 //
// 5 : 获取2E服务0xF199的索引号 //
// 6 : 获取2E服务0xF19D的索引号 //
// 7 : 获取2E服务0xF112的索引号 //
// 8 : 获取19服务0xF00616的索引号
// 9 : 获取19服务0xF00617的索引号
// 10: 获取19服务0x918112的索引号
// 11: 获取19服务0x918114的索引号
// 12: 获取19服务0x918171的索引号
// 13: 获取19服务0x918312的索引号
// 14: 获取19服务0x918314的索引号
// 15: 获取19服务0x918371的索引号
// 16: 获取19服务0x918412的索引号
// 17: 获取19服务0x918414的索引号
// 18: 获取19服务0x918471的索引号
// 19: 获取19服务0x918611的索引号
// 20: 获取19服务0x918614的索引号
// 21: 获取19服务0xC07300的索引号
// 返回值: //
// 2E 服务数据索引号 //
// //
************************************************************************************/
const unsigned char DF_INDEX_TAB[]={
0U , //APP REProgrammer Request
1U , //BLOCK_0xF110,
2U , //BLOCK_0xF190,
3U , //BLOCK_0xF197,
4U , //BLOCK_0xF198,
5U , //BLOCK_0xF199,
6U , //BLOCK_0xF19D,
7U , //BLOCK_0xF112,
8U , //19服务0xF00616
9U , //19服务0xF00617
10U , //19服务0x918112
11U , //19服务0x918114
12U , //19服务0x918171
13U , //19服务0x918312
14U , //19服务0x918314
15U , //19服务0x918371
16U , //19服务0x918412
17U , //19服务0x918414
18U , //19服务0x918471
19U , //19服务0x918611
20U , //19服务0x918614
21U //19服务0xC07300
};
unsigned char GetIndexNumber(unsigned char code)
{
return(DF_INDEX_TAB[code]);
}
/************************************************************************************
// 获取AC硬件版本 //
// 输入参数 hdv : //
// 指向读取数据存入的缓冲区的地址 //
// //
// 返回值: //
// //
// //
************************************************************************************/
void GetHardwareVersion(unsigned char* hdv)
{
unsigned char cnt;
for(cnt=0;cnt<16;cnt++){
hdv[cnt] = HD_VERSION[cnt];
}
}
/************************************************************************************
// 获取AC软件版本 //
// 输入参数 swv : //
// 指向读取数据存入的缓冲区的地址 //
// //
// 返回值: //
// //
// //
************************************************************************************/
void GetSoftwareVersion(unsigned char* swv)
{
unsigned char cnt;
2024-05-26 11:13:55 +08:00
for(cnt=0;cnt<13;cnt++){
2024-05-26 08:08:32 +08:00
swv[cnt] = SW_VERSION[cnt];
}
}
/************************************************************************************
// 获取AC供应商软件版本 //
// 输入参数 swv : //
// 指向读取数据存入的缓冲区的地址 //
// //
// 返回值: //
// //
// //
************************************************************************************/
void GetSupplierSoftwareVersion(unsigned char* swv)
{
unsigned char cnt;
for(cnt=0;cnt<16;cnt++){
swv[cnt] = SUP_ECU_SW_VERSION[cnt];
}
}
/************************************************************************************
// 获取AC生产日期 //
// 输入参数 *date : //
// data[0] = YEAR //
// data[1] = MONTH //
// data[0] = DAY //
// //
// 返回值: //
// //
// //
************************************************************************************/
const unsigned char MANUFACTURING_DATE[]={
0x18, //Year
0x06, //Month
0x15, //Day
};
void GetManufacturingDate(unsigned char* date)
{
date[0] = MANUFACTURING_DATE[0];
date[1] = MANUFACTURING_DATE[1];
date[2] = MANUFACTURING_DATE[2];
}
/******************************/
//获取can总线出错状态
//返回值
/******************************/
unsigned char GetCanBusOffErr(void)
{
// if(BusOff_flag==0)
// return 0;
// else
// return 1;
}
/******************************/
//获取BCM节点丢失状态
//返回值
/******************************/
unsigned char GetBcmCommFault(void)
{
// if(uiBcmCommFaultCnt < 500)
// {
// return 0;
// }
// else
// {
// BCM_Recover=0;
// BCM=0;
// return 1;
// }
}
/******************************/
//获取ACP节点丢失状态
//返回值
/******************************/
unsigned char GetAcpCommFault(void)
{
// if(uiAcpCommFaultCnt < 500)
// {
// return 0;
// }
// else
// {
// ACP_Recover=0;
// ACP=0;
// return 1;
// }
}
/******************************/
//获取历史成功编程次数
//输入参数
//
//返回值:历史成功编程次数
/******************************/
unsigned char GetProgrammingCounter(void)
{
return 0;
}
/******************************/
//获取历史编程次数
//输入参数
//
//返回值:历史编程次数
/******************************/
unsigned char GetProgrammingAttempCounter(void)
{
return 0;
}
/******************************/
//清除DTC
//目前仅BusOff
//
//返回值0
/******************************/
unsigned char Clear_DTC_Data(void)
{
//Clear_DTC_Data_Command=1;
return 0;
}
//S51EV
2024-05-26 11:13:55 +08:00
2024-05-26 08:08:32 +08:00
void getInputState(unsigned char* data)
{
2024-05-26 11:13:55 +08:00
data[0] = 0;
2024-05-26 08:08:32 +08:00
}
extern uint16_t SupplyVoltage;
void getSupplyVoltage(unsigned char* data)
{
data[0] = SupplyVoltage;
}