597 lines
17 KiB
C
597 lines
17 KiB
C
#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
|
||
'1' , //AC_HD_VERSION_03
|
||
'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
|
||
'.' , //AC_SW_VERSION_02
|
||
'0' , //AC_SW_VERSION_03
|
||
'2' , //AC_SW_VERSION_04
|
||
'.' , //AC_SW_VERSION_05
|
||
'0' , //AC_SW_VERSION_06
|
||
'0' , //AC_SW_VERSION_07
|
||
' ' , //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[]={
|
||
'0' , //
|
||
'2' , //
|
||
'0' , //
|
||
'1' , //
|
||
' ' , //
|
||
' ' , //
|
||
' ' , //
|
||
' ' , //
|
||
' ' , //
|
||
' ' , //
|
||
' ' , //
|
||
' ' , //
|
||
' ' , //
|
||
' ' , //
|
||
' ' , //
|
||
' ' , //
|
||
};
|
||
|
||
|
||
#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;
|
||
// }
|
||
return 0;
|
||
}
|
||
|
||
/************************************************************************************/
|
||
/* 输入参数 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;
|
||
// }
|
||
return 0;
|
||
}
|
||
|
||
/************************************************************************************/
|
||
/* 输入参数 p : */
|
||
/* 0: TEMP 驾驶员侧温度风门位置 */
|
||
/* 1: REC 内外循环模式 */
|
||
/* 2: FAN 鼓风机档位 */
|
||
/* 3: MODE 模式风门位置 */
|
||
/* 4: DEFROST 除霜开关 */
|
||
/* 5: REARDEF 后除霜控制 */
|
||
/* 6: AC A/C制冷按键按键 */
|
||
/* 7: K30 ECU Supplier voltage */
|
||
/* */
|
||
/* 返回值: */
|
||
/* 0: 对应的data,具体见22,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;
|
||
|
||
}
|
||
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电源正常 1:IGN > 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;
|
||
|
||
case 2:
|
||
ReadFlashData(read_buf,0x000F1000+0x420,len);
|
||
return 0;
|
||
|
||
case 3:
|
||
ReadFlashData(read_buf,0x000F1000+0x430,len);
|
||
return 0;
|
||
|
||
case 4:
|
||
ReadFlashData(read_buf,0x000F1000+0x438,len);
|
||
return 0;
|
||
|
||
|
||
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;
|
||
|
||
for(cnt=0;cnt<13;cnt++){
|
||
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;
|
||
return 0;
|
||
}
|
||
/******************************/
|
||
//获取BCM节点丢失状态
|
||
//返回值
|
||
/******************************/
|
||
|
||
unsigned char GetBcmCommFault(void)
|
||
{
|
||
// if(uiBcmCommFaultCnt < 500)
|
||
// {
|
||
// return 0;
|
||
// }
|
||
// else
|
||
// {
|
||
// BCM_Recover=0;
|
||
// BCM=0;
|
||
// return 1;
|
||
// }
|
||
return 0;
|
||
}
|
||
/******************************/
|
||
//获取ACP节点丢失状态
|
||
//返回值
|
||
/******************************/
|
||
unsigned char GetAcpCommFault(void)
|
||
{
|
||
// if(uiAcpCommFaultCnt < 500)
|
||
// {
|
||
// return 0;
|
||
// }
|
||
// else
|
||
// {
|
||
// ACP_Recover=0;
|
||
// ACP=0;
|
||
// return 1;
|
||
// }
|
||
return 0;
|
||
}
|
||
|
||
/******************************/
|
||
//获取历史成功编程次数
|
||
//输入参数
|
||
//
|
||
//返回值:历史成功编程次数
|
||
/******************************/
|
||
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
|
||
|
||
|
||
|
||
|
||
|
||
void getInputState(unsigned char* data)
|
||
{
|
||
data[0] = 0;
|
||
|
||
}
|
||
|
||
|
||
extern uint16_t SupplyVoltage;
|
||
void getSupplyVoltage(unsigned char* data)
|
||
{
|
||
data[0] = SupplyVoltage;
|
||
}
|