2024-03-18 00:26:23 +08:00

598 lines
17 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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
'.' , //AC_HD_VERSION_06
'1' , //AC_HD_VERSION_02
'.' , //AC_HD_VERSION_03
'0' , //AC_HD_VERSION_04
'1' , //AC_HD_VERSION_05
'.' , //AC_HD_VERSION_06
'0' , //AC_HD_VERSION_07
'1' , //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
};
__far const unsigned char SW_VERSION[]={
'S' , //AC_SW_VERSION_00
'W' , //AC_SW_VERSION_01
'.' , //AC_SW_VERSION_02
'1' , //AC_SW_VERSION_03
'.' , //AC_SW_VERSION_04
'0' , //AC_SW_VERSION_05
'1' , //AC_SW_VERSION_06
'.' , //AC_SW_VERSION_07
'0' , //AC_SW_VERSION_08
'5' , //AC_SW_VERSION_09
' ' , //AC_SW_VERSION_10
' ' , //AC_SW_VERSION_11
' ' , //AC_SW_VERSION_12
' ' , //AC_SW_VERSION_13
' ' , //AC_SW_VERSION_14
' ' , //AC_SW_VERSION_14
};
__far const unsigned char SUP_ECU_SW_VERSION[]={
'B' , //
'T' , //
'.' , //
'1' , //
'.' , //
'0' , //
'0' , //
'.' , //
'0' , //
'0' , //
' ' , //
' ' , //
' ' , //
' ' , //
' ' , //
' ' , //
};
#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;
extern uint16_t SupplyVoltage;
//const unsigned char DID_0xF15A[]={};
/****************************************************************************************/
unsigned char GetVoltage(unsigned char ch)
{
switch (ch)
{
case KL30_VOLTAGE:
if (SupplyVoltage > 0xff)
{
return 0xff;
}
return SupplyVoltage;
default:
return 0;
}
return 0;
}
/************************************************************************************/
/* 输入参数 motor : */
/* 1: 驾驶员侧温度调节电机 */
/* 2: 出<>?<3F>模式电机电<E69CBA>?? */
/* 3: <20>??<3F>??风门调节电机 */
/* */
/* 返回值: */
/* 0: 电机正常 1电机堵<E69CBA>?? */
/* */
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 内<>?<3F><EFBFBD>??模式 */
/* 2: FAN 鼓<>?<3F>机档位 */
/* 3: MODE 模式风门位置 */
/* 4: DEFROST 除霜开<E99C9C>?? */
/* 5: REARDEF 后除霜控<E99C9C>?? */
/* 6: AC A/C制冷按键按键 */
/* 7: K30 ECU Supplier voltage */
/* */
/* 返回值: */
/* 0: 对应的data,具体<E585B7>??22<32>??2F服务 */
/************************************************************************************/
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);
}
/************************************************************************************/
/* 主函数查<E695B0>?? */
/*输入参数 p : */
/* 0: TEMP 驾驶员侧温度风门位置 */
/* 1: REC 内<>?<3F><EFBFBD>??模式 */
/* 2: FAN 鼓<>?<3F>机档位 */
/* 3: MODE 模式风门位置 */
/* 4: DEFROST 无效 */
/* 5: REARDEF 后除霜控<E99C9C>?? */
/* 6: AC 无效 */
/* 7: K30 无效 */
/* 返回值: */
/* */
/************************************************************************************/
void WriteIoParameter(unsigned char p,unsigned char data)
{
io_parameter[p].write = 1; //
io_parameter[p].data = data;
}
/************************************************************************************/
/* 输入参数 p : */
/* */
/* */
/* 返回值: */
/* 0: IGN电源正常 1IGN > 16V <20>?? 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数据存取索引<E7B4A2>?? //
// 输入参数 code : //
// 0 : 获取APP重编程<E7BC96>?<3F>求标志索引<E7B4A2>?? //
// 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 服务数据索引<E7B4A2>?? //
// //
************************************************************************************/
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<41>??件版<E4BBB6>?? //
// 输入参数 hdv : //
// 指向读取数据存入的缓冲区的地址 //
// //
// 返回值: //
// //
// //
************************************************************************************/
void GetHardwareVersion(unsigned char* hdv)
{
unsigned char cnt;
for(cnt=0;cnt<16;cnt++){
hdv[cnt] = HD_VERSION[cnt];
}
}
/************************************************************************************
// 获取AC<41>??件版<E4BBB6>?? //
// 输入参数 swv : //
// 指向读取数据存入的缓冲区的地址 //
// //
// 返回值: //
// //
// //
************************************************************************************/
void GetSoftwareVersion(unsigned char* swv)
{
unsigned char cnt;
for(cnt=0;cnt<10;cnt++){
swv[cnt] = SW_VERSION[cnt];
}
}
/************************************************************************************
// 获取AC供应商软件版<E4BBB6>?? //
// 输入参数 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[]={
0x24, //Year
0x03, //Month
0x04, //Day
//批次
0x00,0x00,
//序列号
0x00,0x00,0x00,0x00,0x00
};
void GetManufacturingDate(unsigned char* date)
{
uint8_t i;
for (i = 0; i < 10; i++)
{
date[i] = MANUFACTURING_DATE[i];
}
}
/******************************/
//获取can总线出错状<E99499>?
//返回<E8BF94>??
/******************************/
extern unsigned char ucBusOffModeState;
unsigned char GetCanBusOffErr(void)
{
if(ucBusOffModeState>=8)
return 1;
else
return 0;
}
/******************************/
//获取BCM节点丢失状<E5A4B1>?
//返回<E8BF94>??
/******************************/
unsigned char GetBcmCommFault(void)
{
// if(uiBcmCommFaultCnt < 500)
// {
// return 0;
// }
// else
// {
// BCM_Recover=0;
// BCM=0;
// return 1;
// }
}
/******************************/
//获取ACP节点丢失状<E5A4B1>?
//返回<E8BF94>??
/******************************/
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
//<2F>??前仅BusOff
//
//返回值0
/******************************/
unsigned char Clear_DTC_Data(void)
{
//Clear_DTC_Data_Command=1;
return 0;
}
//S51EV
void getInputState(unsigned char* data)
{
}
void getOutputState(unsigned char* data)
{
}
void getSupplyVoltage(unsigned char* data)
{
data[0] = SupplyVoltage;
}