Commit 3763c3c0 authored by hu's avatar hu

debug

parent 3f892b4b
......@@ -1287,6 +1287,7 @@ void Key_Operation_ODOTrip(Key_Event_en_t enKeyEvent)
}
else if (bCurMenuIDX == _MN_DSP_Menu_Test)
{
}
else if (User_set_Num.Trip_Type == 0u)
{
......
......@@ -2,13 +2,13 @@
#include "kwp2000_interface.h"
#include "UART.h"
#define BOARD_TMBCLK_HZ 32000000
#define BOARD_TMBCLK_HZ 32000000
/* physical and functional addresses for the ECU */
unsigned char kwp2000_PhysicalAddress;
unsigned char kwp2000_FunctionalAddress;
unsigned char kwp2000_ServerAddress;
unsigned int kwp2000_P3_MAX_LIMIT;
unsigned int kwp2000_P3_MAX_LIMIT;
/*-------------------------------------------------------------------------
* Function Name : Kwp2000_SetAddress
......@@ -18,7 +18,7 @@ unsigned int kwp2000_P3_MAX_LIMIT;
* Return : None
* onther :
--------------------------------------------------------------------------*/
void Kwp2000_SetAddress( void )
void Kwp2000_SetAddress(void)
{
kwp2000_PhysicalAddress = KWP2000_ADDR_IC;
kwp2000_FunctionalAddress = KWP2000_ADDR_OBD;
......@@ -33,20 +33,20 @@ void Kwp2000_SetAddress( void )
* Return : None
* onther :
--------------------------------------------------------------------------*/
void Kwp2000_SetTiming( void )
void Kwp2000_SetTiming(void)
{
kwp2000_P3_MAX_LIMIT = KWP2000_P3_MAX;
}
/*-------------------------------------------------------------------------
* Function Name : Kwp2000_AscDisableRx
* Description : 禁止收 使能发
* Description : 禁止收 使能发
* Input :
* Output : None
* Return : None
* onther :
--------------------------------------------------------------------------*/
void Kwp2000_AscDisableRx( void )
void Kwp2000_AscDisableRx(void)
{
Uart_DisableRx();
Uart_EnableTx();
......@@ -54,13 +54,13 @@ void Kwp2000_AscDisableRx( void )
/*-------------------------------------------------------------------------
* Function Name : Kwp2000_AscEnableRx
* Description : 使能接收功能
* Description : 使能接收功能
* Input :
* Output : None
* Return : None
* onther :
--------------------------------------------------------------------------*/
void Kwp2000_AscEnableRx( void )
void Kwp2000_AscEnableRx(void)
{
/* enable receiver, clear all error flags */
Uart_ClearAllErrorFlag();
......@@ -69,13 +69,13 @@ void Kwp2000_AscEnableRx( void )
/*-------------------------------------------------------------------------
* Function Name : Kwp2000_AscTx
* Description : 送数据字节
* Description : 发送数据字节
* Input :
* Output : None
* Return : None
* onther :
--------------------------------------------------------------------------*/
void Kwp2000_AscTx( unsigned char* xBuffer_pu8 )
void Kwp2000_AscTx(unsigned char *xBuffer_pu8)
{
Uart_SetData(*xBuffer_pu8);
}
......@@ -88,9 +88,8 @@ void Kwp2000_AscTx( unsigned char* xBuffer_pu8 )
* Return : None
* onther :
--------------------------------------------------------------------------*/
void Kwp2000_AscStart( void )
void Kwp2000_AscStart(void)
{
}
/*-------------------------------------------------------------------------
......@@ -101,27 +100,24 @@ void Kwp2000_AscStart( void )
* Return : None
* onther :
--------------------------------------------------------------------------*/
void Kwp2000_AscStop( void )
void Kwp2000_AscStop(void)
{
}
/*-------------------------------------------------------------------------
* Function Name : Kwp2000_AscInit
* Description : 串口模块初始化
* Description : 串口模块初始化
* Input :
* Output : None
* Return : None
* onther :
--------------------------------------------------------------------------*/
void Kwp2000_AscInit( void )
void Kwp2000_AscInit(void)
{
Kwp2000_AscStop(); // disable ASC_A mode
Kwp2000_AscStop(); // disable ASC_A mode
/* disable interrupt service request, clear service request flags */
/*预留设置*/
/*预留设置*/
/* enable receiver and transmitter function*/
Uart_EnableRx();
......@@ -139,13 +135,13 @@ void Kwp2000_AscInit( void )
/// -----------------------------------------------------------------------
/// Configuration of the used ASC0 Port Pins:
/// -----------------------------------------------------------------------
Uart_SetTxGpio(); //TX
Uart_SetRxGpio(); //RX
Uart_SetTxGpio(); // TX
Uart_SetRxGpio(); // RX
/// -----------------------------------------------------------------------
/// Configuration of priority of SCI_A interrupt:
/// -----------------------------------------------------------------------
/*预留优先级设置*/
/*预留优先级设置*/
/* Configuration of Baudrate , as 10400bps */
Kwp2000_AscSwitchBaudrate(KWP2000_DEFAULT_BAUDRATE_KLINE_DU);
......@@ -158,8 +154,8 @@ void Kwp2000_AscInit( void )
/*-------------------------------------------------------------------------
* Function Name : Kwp2000_AscSwitchBaudrate
* Description : 置波特率
* Input : xBaudrate_u32 特率数值
* Description : 设置波特率
* Input : xBaudrate_u32 波特率数值
* Output : None
* Return : None
* onther :
......@@ -167,7 +163,7 @@ void Kwp2000_AscInit( void )
void Kwp2000_AscSwitchBaudrate(unsigned long xBaudrate_u32)
{
/* if configuration is valid, ... */
if ( xBaudrate_u32 != 0ul )
if (xBaudrate_u32 != 0ul)
{
Kwp2000_AscStop();
......
......@@ -7,57 +7,57 @@
*********************************************************************
*/
/* Defined for ComStatus */
#define KWP2000_DEFAULT_BAUDRATE_KLINE_DU 10400ul
#define KWP2000_MID_BAUDRATE_KLINE_DU 57600ul
#define KWP2000_HIGH_BAUDRATE_KLINE_DU 249600ul
#define KWP2000_DEFAULT_BAUDRATE_KLINE_DU 10400ul
#define KWP2000_MID_BAUDRATE_KLINE_DU 57600ul
#define KWP2000_HIGH_BAUDRATE_KLINE_DU 249600ul
#define KWP2000_ADDR_IC 0x60u
#define KWP2000_ADDR_OBD 0x33u
#define KWP2000_ADDR_SERVER 0xF1u
#define KWP2000_ADDR_IC 0x60u
#define KWP2000_ADDR_OBD 0x33u
#define KWP2000_ADDR_SERVER 0xF1u
#define KWP2000_P2_MIN 0
#define KWP2000_P3_MAX 5000
#define KWP2000_P2_MIN 0
#define KWP2000_P3_MAX 5000
/*
*********************************************************************
* variable
*********************************************************************
*/
extern unsigned char kwp2000_PhysicalAddress;
extern unsigned char kwp2000_FunctionalAddress;
extern unsigned char kwp2000_ServerAddress;
extern unsigned int kwp2000_P3_MAX_LIMIT;
extern unsigned char kwp2000_PhysicalAddress;
extern unsigned char kwp2000_FunctionalAddress;
extern unsigned char kwp2000_ServerAddress;
extern unsigned int kwp2000_P3_MAX_LIMIT;
/*
*********************************************************************
* function
*********************************************************************
*/
extern void Kwp2000_AscInit( void );
extern void Kwp2000_AscInit(void);
extern void Kwp2000_AscSwitchBaudrate(unsigned long xBaudrate_u32);
extern unsigned short Uart_GetData( void );
extern unsigned char Uart_GetRxLevel(void);
extern void Uart_SetData( unsigned char xBuffer_pu8 );
extern void Uart_DisableReceiveIsrReq( void );
extern void Uart_EnableReceiveIsrReq( void );
extern void Uart_ClearAllErrorFlag( void );
extern void Uart_EnableRx( void );
extern void Uart_DisableRx( void );
extern void Uart_EnableTx( void );
extern void Uart_SetRxGpio( void );
extern void Uart_SetTxGpio( void );
extern void Uart_SetBaudrate( unsigned long xBaudrate_u32 );
extern void Uart_ClearRxFullFlag(void);
extern void Uart_DisableTxInterrupt( void );
extern void Uart_ConfigOperationMode(void);
extern void TJA1021_Enable( unsigned char state );
extern void Kwp2000_SetTiming( void );
extern void Kwp2000_SetAddress( void );
extern void Kwp2000_AscTx( unsigned char* xBuffer_pu8 );
extern void Kwp2000_AscEnableRx( void );
extern unsigned short Uart_GetData(void);
extern unsigned char Uart_GetRxLevel(void);
extern void Uart_SetData(unsigned char xBuffer_pu8);
extern void Uart_DisableReceiveIsrReq(void);
extern void Uart_EnableReceiveIsrReq(void);
extern void Uart_ClearAllErrorFlag(void);
extern void Uart_EnableRx(void);
extern void Uart_DisableRx(void);
extern void Uart_EnableTx(void);
extern void Uart_SetRxGpio(void);
extern void Uart_SetTxGpio(void);
extern void Uart_SetBaudrate(unsigned long xBaudrate_u32);
extern void Uart_ClearRxFullFlag(void);
extern void Uart_DisableTxInterrupt(void);
extern void Uart_ConfigOperationMode(void);
extern void TJA1021_Enable(unsigned char state);
extern void Kwp2000_SetTiming(void);
extern void Kwp2000_SetAddress(void);
extern void Kwp2000_AscTx(unsigned char *xBuffer_pu8);
extern void Kwp2000_AscEnableRx(void);
#endif
......@@ -4,7 +4,6 @@
*********************************************************************
*/
#include "kwp2000_tp.h"
#include "kwp2000_service.h"
#include "kwp2000_protocol.h"
......@@ -16,7 +15,6 @@
*********************************************************************
*/
typedef unsigned char Kwp2000_Service_t(unsigned char *, unsigned char *);
typedef struct
......@@ -25,14 +23,13 @@ typedef struct
Kwp2000_Service_t *Kwp2000_Servie;
} Kwp2000_ServiceTab_Entry_t;
/*
*********************************************************************
* variable
*********************************************************************
*/
unsigned char Kwp2000_ComState_Flag;
unsigned char Kwp2000_ComState_Flag;
/*
*********************************************************************
......@@ -40,27 +37,25 @@ unsigned char Kwp2000_ComState_Flag;
*********************************************************************
*/
void Kwp2000_CallService(unsigned char Sid_u8);
unsigned char kwp2000_CalcSeriveTabSize(void);
unsigned char kwp2000_CalcSeriveTabSize(void);
/*-----------------------------------------------------------------------------------*/
const Kwp2000_ServiceTab_Entry_t Kwp2000_ServiceTab[] =
{
{KWP2000_ECURESET_REQUEST , kwp_EcuReset }, //0x11
{KWP2000_TESTERPRESENT_REQUEST , kwp_TesterPresent }, //0x3E
{KWP2000_STARTCOMMUNICATION_REQUEST , kwp_StartCommunication }, //0x81
{KWP2000_STOPCOMMUNICATION_REQUEST , kwp_StopCommunication }, //0x82
{KWP2000_READECUIDENTIFICATION_REQUEST , kwp_readEcuIdentification }, //0x1A
{KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST , kwp_writeDataByLocalIdentifier }, //0x3B
{KWP2000_READDATABYLOCALIDENTIFIER_REQUEST , kwp_readDataByLocalIdentifier }, //0x21
{KWP2000_READDATABYCOMMONIDENTIFIER_REQUEST , kwp_readDataByCommonIdentifier }, //0x22
{KWP2000_READDIAGNOSTICTROUBLECODESBYSTATUS_REQUEST, kwp_readDataStatusofDTC }, //0x18
{KWP2000_CLEARDIAGNOSTICINFORMATION_REQUEST , kwp_ClearDiagnosticInformation }, //0x14
{KWP2000_SECURITYACCESS_REQUEST , kwp_readDataAccessMode }, //0x27
{KWP2000_STARTROUTINEBYLOCALIDENTIFIER_REQUEST , kwp_StartroutInebykocalIdentifier }, //0x31
{KWP2000_ECURESET_REQUEST, kwp_EcuReset }, /* 0x11 */
{KWP2000_TESTERPRESENT_REQUEST, kwp_TesterPresent }, /* 0x3E */
{KWP2000_STARTCOMMUNICATION_REQUEST, kwp_StartCommunication }, /* 0x81 */
{KWP2000_STOPCOMMUNICATION_REQUEST, kwp_StopCommunication }, /* 0x82 */
{KWP2000_READECUIDENTIFICATION_REQUEST, kwp_readEcuIdentification }, /* 0x1A */
{KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST, kwp_writeDataByLocalIdentifier }, /* 0x3B */
{KWP2000_READDATABYLOCALIDENTIFIER_REQUEST, kwp_readDataByLocalIdentifier }, /* 0x21 */
{KWP2000_READDATABYCOMMONIDENTIFIER_REQUEST, kwp_readDataByCommonIdentifier }, /* 0x22 */
{KWP2000_READDIAGNOSTICTROUBLECODESBYSTATUS_REQUEST, kwp_readDataStatusofDTC }, /* 0x18 */
{KWP2000_CLEARDIAGNOSTICINFORMATION_REQUEST, kwp_ClearDiagnosticInformation }, /* 0x14 */
{KWP2000_SECURITYACCESS_REQUEST, kwp_readDataAccessMode }, /* 0x27 */
{KWP2000_STARTROUTINEBYLOCALIDENTIFIER_REQUEST, kwp_StartroutInebykocalIdentifier }, /* 0x31 */
};
/*-------------------------------------------------------------------------
* Function Name : Kwp2000_CallService
* Description :
......@@ -83,7 +78,7 @@ void Kwp2000_CallService(unsigned char Sid_u8)
{
serviceFound = 1;
Kwp2000_ComState.Tx_len = Kwp2000_ServiceTab[index].Kwp2000_Servie((unsigned char *)&Kwp2000_ComState.TxBuffer[4], \
Kwp2000_ComState.Tx_len = Kwp2000_ServiceTab[index].Kwp2000_Servie((unsigned char *)&Kwp2000_ComState.TxBuffer[4],
(unsigned char *)&Kwp2000_ComState.Request_Datas[1]);
break;
}
......@@ -93,7 +88,7 @@ void Kwp2000_CallService(unsigned char Sid_u8)
{
Kwp2000_ComState.Tx_len = kwp_NegativeResponse(Sid_u8, KWP2000_serviceNotSupported, (unsigned char *)&Kwp2000_ComState.TxBuffer[4]);
}
else if (Kwp2000_Negative.ResponseCode) /* 其他负反馈处理 后添加原来没有 */
else if (Kwp2000_Negative.ResponseCode) /*其他负反馈处理 后添加原来没有*/
{
Kwp2000_ComState.Tx_len = kwp_NegativeResponse(Sid_u8, Kwp2000_Negative.ResponseCode, (unsigned char *)&Kwp2000_ComState.TxBuffer[4]);
Kwp2000_Negative.ResponseCode = 0;
......@@ -105,7 +100,7 @@ void Kwp2000_CallService(unsigned char Sid_u8)
*(Kwp2000_ComState.Response_Datas + Kwp2000_ComState.Tx_len) = Kwp2000_ChecksumCalculate(Kwp2000_ComState.Response_Datas, Kwp2000_ComState.Tx_len);
Kwp2000_ComState.Tx_len ++;
Kwp2000_ComState.Tx_len++;
}
}
......@@ -121,10 +116,8 @@ void Kwp2000_Handle(void)
{
if ((Kwp2000_ComMode & PROTOCOL) == KWP2000)
{
/*在FAST_INIT之后,如果在RX中断中接到数据,在转为接收模式,在FAST_INIT后加一个
超时时间,如果FAST_INIT后10ms没有接到新到来的数据就回到等待空闲模式避免来个wakeup
后仪表无法接收数据*/
/*在FAST_INIT之后,如果在RX中断中接收数据,在转为几首模式,在FAST_INIT后加一个超时时间
如果FAST_INIT后10ms没有接到新到来得数据就会回到等待空闲模式避免来个wakeup后仪表无法接收数据*/
/*
if(Kwp2000_ComMode == KWP2000_FAST_INIT)
{
......@@ -133,14 +126,14 @@ void Kwp2000_Handle(void)
*/
switch (Kwp2000_ComMode)
{
case KWP2000_WAIT_RECEPTION://0x22
case KWP2000_WAIT_RECEPTION: /* 0x22 */
if (Kwp2000_ComState.Rx_len >= 1)
{
Kwp2000_ComState.headerSize = Kwp2000_FormatAnalyse();
Kwp2000_ComMode = KWP2000_WAIT_HEADER;
}
break;
case KWP2000_WAIT_HEADER: //0x23
case KWP2000_WAIT_HEADER: /* 0x23 */
if (Kwp2000_ComState.Rx_len >= Kwp2000_ComState.headerSize)
{
Kwp2000_HeaderAnalyse();
......@@ -158,8 +151,8 @@ void Kwp2000_Handle(void)
}
}
break;
case KWP2000_COMMUNICATION: //0x25
case KWP2000_WAIT_DATAS: //0x24
case KWP2000_COMMUNICATION: /* 0x25 */
case KWP2000_WAIT_DATAS: /* 0x24 */
if (Kwp2000_ComState.Rx_len > (Kwp2000_ComState.headerSize + Kwp2000_ComState.kwp2000_Len))
{
Kwp2000_ComState.kwp2000_Checksum = Kwp2000_ComState.RxBuffer[Kwp2000_ComState.headerSize + Kwp2000_ComState.kwp2000_Len];
......@@ -178,10 +171,9 @@ void Kwp2000_Handle(void)
}
else
{
}
break;
case KWP2000_BUILD_RESPONSE: //0x26
case KWP2000_BUILD_RESPONSE: /* 0x26 */
if (!Kwp2000_ComState.ResponsePending)
{
Kwp2000_ComState.SId = *(Kwp2000_ComState.Request_Datas);
......@@ -194,27 +186,27 @@ void Kwp2000_Handle(void)
Kwp2000_ComState_Flag++;
if (Kwp2000_ComState_Flag > 7)
{
/*
if()
#if 0
if ()
{
SeedKey =(unsigned long)RealTimeClock.RollingCounter;
SeedKey = SeedKey<<16;
SeedKey |=(unsigned long)(~RealTimeClock.RollingCounter);
Seed1 = (unsigned char)(SeedKey>>24);
Seed2 = (unsigned char)(SeedKey>>16);
Seed3 = (unsigned char)(SeedKey>>8);
Seed4 = (unsigned char)(SeedKey);
App_Uds_Calc_Key(); //----计算密钥等待应答
SeedKey = (unsigned long)RealTimeClock.RollingCounter;
SeedKey = SeedKey << 16;
SeedKey |= (unsigned long)(~RealTimeClock.RollingCounter);
Seed1 = (unsigned char)(SeedKey >> 24);
Seed2 = (unsigned char)(SeedKey >> 16);
Seed3 = (unsigned char)(SeedKey >> 8);
Seed4 = (unsigned char)(SeedKey);
App_Uds_Calc_Key(); /*计算密钥等待应答*/
}
*/
#endif
Kwp2000_ComState_Flag = 0;
Kwp2000_CallService(Kwp2000_ComState.SId);
}
if (Kwp2000_ComState.Tx_len != 0)
{
Kwp2000_AscTx(Kwp2000_ComState.Response_Datas); /* qitiancun */
Kwp2000_AscTx(Kwp2000_ComState.Response_Datas); /*qitiancun 数据发送----20220303----*/
Kwp2000_ComMode = KWP2000_SEND_RESPONSE;
}
else
......@@ -222,18 +214,16 @@ void Kwp2000_Handle(void)
Kwp2000_ComMode = KWP2000_WAIT_RECEPTION;
}
break;
case KWP2000_SEND_RESPONSE: //0x27
case KWP2000_SEND_RESPONSE: /* 0x27 */
/* Wait when sending response message */
if (Kwp2000_ComState.Tx_len)
{
}
else
{
}
break;
case KWP2000_MODIFY_CONFIG: //0x28
case KWP2000_MODIFY_CONFIG: /* 0x28 */
switch (Kwp2000_Modify.typeOfModif)
{
case KWP2000_MODIFY_NULL:
......@@ -253,10 +243,10 @@ void Kwp2000_Handle(void)
switch (Kwp2000_Modify.resetType)
{
case 0x01:
//Reset_SWResetRequest(SWRESET_GRP_POWERON_E, SWRESET_POWERON_E, 0x0); qitiancun
// Reset_SWResetRequest(SWRESET_GRP_POWERON_E, SWRESET_POWERON_E, 0x0); qitiancun
break;
case 0x6A:
//Reset_SWResetRequest(SWRESET_GRP_SB_E, SWRESET_RB_PROG_E, 0x0); qitiancun
// Reset_SWResetRequest(SWRESET_GRP_SB_E, SWRESET_RB_PROG_E, 0x0); qitiancun
break;
default:
/*do nothing */
......@@ -281,7 +271,7 @@ void Kwp2000_Handle(void)
}
/*-------------------------------------------------------------------------
* Function Name : kwp_NegativeResponse
* Function Name : kwp2000_CalcSeriveTabSize
* Description : kwp2000 Calculate Serive Table Size
* Input :
* Output : None
......@@ -292,4 +282,3 @@ unsigned char kwp2000_CalcSeriveTabSize(void)
{
return (unsigned char)(sizeof(Kwp2000_ServiceTab) / sizeof(Kwp2000_ServiceTab_Entry_t));
}
......@@ -3,10 +3,6 @@
#ifndef _KWP2000_SERVICE_H
#define _KWP2000_SERVICE_H
extern void Kwp2000_Handle( void );
extern void Kwp2000_Handle(void);
#endif
......@@ -15,38 +15,34 @@
*********************************************************************
*/
/*
*********************************************************************
* variable
*********************************************************************
*/
Kwp2000_Negative_t Kwp2000_Negative;
Kwp2000_Negative_t Kwp2000_Negative;
_K_LINE_SIGNAL_FLAG K_LINE_SIGNAL_FLAG;
_K_LINE_SIGNAL_FLAG K_LINE_SIGNAL_FLAG;
unsigned char Sendseed1;
unsigned char Sendseed2;
unsigned char Sendseed3;
unsigned char Sendseed4;
unsigned char Sendseed1;
unsigned char Sendseed2;
unsigned char Sendseed3;
unsigned char Sendseed4;
unsigned char Recvseed1;
unsigned char Recvseed2;
unsigned char Recvseed3;
unsigned char Recvseed4;
unsigned char Recvseed1;
unsigned char Recvseed2;
unsigned char Recvseed3;
unsigned char Recvseed4;
unsigned char Seed1, Seed2, Seed3, Seed4;
_NVMNODIGIT NVMNODIGIT;
_ECUStatus ECUStatusONE;
_NVMNODIGIT NVMNODIGIT;
_ECUStatus ECUStatusONE;
unsigned char DTCstatusCHGFFK_Line;
unsigned char DTCstatusCHGFFK_Line;
unsigned char AccessMode2701KeyTimeFlag;
unsigned char AccessMode2701KeyTime;
unsigned char AccessMode2701KeyTimeFlag;
unsigned char AccessMode2701KeyTime;
/*
*********************************************************************
* function
......@@ -85,21 +81,21 @@ unsigned char kwp_EcuReset(unsigned char *TxData, unsigned char *RequestData)
{
unsigned char Tx_Len = 0;
switch (RequestData[ 0 ]) /* subFunction */
switch (RequestData[0]) /* subFunction */
{
case 1: /* hardReset */
case 1: /* hardReset */
(*TxData++) = KWP2000_ECURESET_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData) = RequestData[ 0 ];
(*TxData) = RequestData[0];
Tx_Len = 2;
break;
case 2: /* keyOffOnReset */
case 2: /* keyOffOnReset */
(*TxData++) = KWP2000_ECURESET_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData) = RequestData[ 0 ];
(*TxData) = RequestData[0];
Tx_Len = 2;
break;
case 3: /* softReset */
case 3: /* softReset */
(*TxData++) = KWP2000_ECURESET_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData) = RequestData[ 0 ];
(*TxData) = RequestData[0];
Tx_Len = 2;
break;
default: /* subFunctionNotSupported */
......@@ -138,8 +134,8 @@ unsigned char kwp_StartCommunication(unsigned char *TxData, unsigned char *Reque
unsigned char Tx_Len = 0;
K_LINE_SIGNAL_FLAG.RecvStart = 1;
(*TxData ++) = KWP2000_STARTCOMMUNICATION_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData ++) = KWP2000_KEYBYTE1;
(*TxData++) = KWP2000_STARTCOMMUNICATION_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = KWP2000_KEYBYTE1;
(*TxData) = KWP2000_KEYBYTE2;
Tx_Len = 3;
......@@ -152,15 +148,15 @@ unsigned char kwp_StartCommunication(unsigned char *TxData, unsigned char *Reque
* Input :
* Output : None
* Return : None
* onther : 82 服务,没有否定应答
* onther : 82 服务,没有否定应答
--------------------------------------------------------------------------*/
unsigned char kwp_StopCommunication(unsigned char *TxData, unsigned char *RequestData)
{
unsigned char Tx_Len = 0;
if (K_LINE_SIGNAL_FLAG.RecvStart == 1)
{
K_LINE_SIGNAL_FLAG.RecvStart = 0; //EOL诊断结束标识
K_LINE_SIGNAL_FLAG.SendSeedEQUSRecvSeed = 0; //清空密钥配对成功标识
K_LINE_SIGNAL_FLAG.RecvStart = 0; /*EOL诊断结束标识*/
K_LINE_SIGNAL_FLAG.SendSeedEQUSRecvSeed = 0; /*清空密钥配对成功标识*/
(*TxData) = KWP2000_STOPCOMMUNICATION_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
Tx_Len = 1;
......@@ -183,29 +179,29 @@ unsigned char kwp_StopCommunication(unsigned char *TxData, unsigned char *Reques
unsigned char kwp_readEcuIdentification(unsigned char *TxData, unsigned char *RequestData)
{
unsigned char Tx_Len = 0;
switch (RequestData[ 0 ]) /* subFunction */
switch (RequestData[0]) /* subFunction */
{
case 0x81: /* ECUIdentificationScalingTable */
case 0x81: /* ECUIdentificationScalingTable */
(*TxData++) = KWP2000_READECUIDENTIFICATION_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = RequestData[ 0 ];
(*TxData++) = 0x03; //Scaling Offset
(*TxData++) = 0x91; //汽车制造厂编号
(*TxData++) = 0x6A; //Ascii 10 byte
(*TxData++) = RequestData[0];
(*TxData++) = 0x03; /* Scaling Offset*/
(*TxData++) = 0x91; /* 汽车制造厂编号*/
(*TxData++) = 0x6A; /* Ascii 10 byte*/
(*TxData++) = 0xFF;
Tx_Len = 6;
break;
case 0x91: /* vehicleManufacturerECUHardwareNumber */
(*TxData++) = KWP2000_READECUIDENTIFICATION_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = RequestData[ 0 ]; //ISUZU Parts No. 8979683010
(*TxData++) = NVMNODIGIT.No_Digit1 ;
(*TxData++) = NVMNODIGIT.No_Digit2 ;
(*TxData++) = NVMNODIGIT.No_Digit3 ;
(*TxData++) = NVMNODIGIT.No_Digit4 ;
(*TxData++) = NVMNODIGIT.No_Digit5 ;
(*TxData++) = NVMNODIGIT.No_Digit6 ;
(*TxData++) = NVMNODIGIT.No_Digit7 ;
(*TxData++) = NVMNODIGIT.No_Digit8 ;
(*TxData++) = NVMNODIGIT.No_Digit9 ;
(*TxData++) = RequestData[0]; // ISUZU Parts No. 8979683010
(*TxData++) = NVMNODIGIT.No_Digit1;
(*TxData++) = NVMNODIGIT.No_Digit2;
(*TxData++) = NVMNODIGIT.No_Digit3;
(*TxData++) = NVMNODIGIT.No_Digit4;
(*TxData++) = NVMNODIGIT.No_Digit5;
(*TxData++) = NVMNODIGIT.No_Digit6;
(*TxData++) = NVMNODIGIT.No_Digit7;
(*TxData++) = NVMNODIGIT.No_Digit8;
(*TxData++) = NVMNODIGIT.No_Digit9;
(*TxData++) = NVMNODIGIT.No_Digit10;
Tx_Len = 12;
break;
......@@ -228,425 +224,425 @@ unsigned char kwp_writeDataByLocalIdentifier(unsigned char *TxData, unsigned cha
{
unsigned char Tx_Len = 0;
unsigned char CupFlag = 0;
//if ((NVMUserSettings.KLINE == 0) || ((NVMUserSettings.KLINE == 1) && (K_LINE_SIGNAL_FLAG.SendSeedEQUSRecvSeed == 1)))
// if ((NVMUserSettings.KLINE == 0) || ((NVMUserSettings.KLINE == 1) && (K_LINE_SIGNAL_FLAG.SendSeedEQUSRecvSeed == 1)))
if (0)
{
switch (RequestData[ 0 ]) /* */
switch (RequestData[0]) /* */
{
case 0x20: /*应对ECE R13 0:非应对、1:应对*/
case 0x20: /*应对ECE R13 0:非应对、1:应对*/
K_Line_Set.K_Line_LID20 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x20;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x21: /*EBS/ABS 0:无、1:EBS、2:ABS(CAN应对) 3:ABS (CAN非应对)*/
case 0x21: /*EBS/ABS 0:无、1:EBS、2:ABS(CAN应对) 3:ABS (CAN非应对)*/
K_Line_Set.K_Line_LID21 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x21;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x22: /* EVSC 0:无、1:有 */
case 0x22: /* EVSC 0:无、1:有 */
K_Line_Set.K_Line_LID22 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x22;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x23: /* 驻车锁定 0:无、1:有*/
case 0x23: /* 驻车锁定 0:无、1:有*/
K_Line_Set.K_Line_LID23 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x23;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x24: /* HSA */
case 0x24: /* HSA */
K_Line_Set.K_Line_LID24 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x24;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x25: /* AEBS */
case 0x25: /* AEBS */
K_Line_Set.K_Line_LID25 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x25;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x26: /* ACC */
case 0x26: /* ACC */
K_Line_Set.K_Line_LID26 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x26;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x27: /* LDWS */
case 0x27: /* LDWS */
K_Line_Set.K_Line_LID27 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x27;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x28: /* 车辆间报警 */
case 0x28: /* 车辆间报警 */
K_Line_Set.K_Line_LID28 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x28;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x29: /* 有无巡航 */
case 0x29: /* 有无巡航 */
K_Line_Set.K_Line_LID29 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x29;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x2A: /* 气悬 */
case 0x2A: /* 气悬 */
K_Line_Set.K_Line_LID2A = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x2A;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x2B: /* ISS */
case 0x2B: /* ISS */
K_Line_Set.K_Line_LID2B = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x2B;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x2C: /* 装货台工作警报蜂鸣器 */
case 0x2C: /* 装货台工作警报蜂鸣器 */
K_Line_Set.K_Line_LID2C = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x2C;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x2D: /* ROWS */
case 0x2D: /* ROWS */
K_Line_Set.K_Line_LID2D = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x2D;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x2E: /* 行车记录仪 */
case 0x2E: /* 行车记录仪*/
K_Line_Set.K_Line_LID2E = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x2E;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x2F: /* 车型 */
case 0x2F: /* 车型 */
K_Line_Set.K_Line_LID2F = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x2F;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x30: /* 缓速器 */
case 0x30: /* 缓速器 */
K_Line_Set.K_Line_LID30 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x30;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x31: /* 地图巡航 */
case 0x31: /* 地图巡航 */
K_Line_Set.K_Line_LID31 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x31;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x32: /* 装货台种类 */
case 0x32: /* 装货台种类 */
K_Line_Set.K_Line_LID32 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x32;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x33: /* SCR?DPD */
case 0x33: /* SCR?DPD */
K_Line_Set.K_Line_LID33 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x33;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x34: /* 驻车种类 */
case 0x34: /* 驻车种类 */
K_Line_Set.K_Line_LID34 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x34;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x35: /* 气压计 */
case 0x35: /* 气压计 */
K_Line_Set.K_Line_LID35 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x35;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x36: /* 低压警报压 */
case 0x36: /* 低气压报警 */
K_Line_Set.K_Line_LID36 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x36;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x37: /* 超限警报 */
case 0x37: /* 超限警报 */
K_Line_Set.K_Line_LID37 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x37;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x38: /* 速度警报 */
case 0x38: /* 速度警报 */
K_Line_Set.K_Line_LID38 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x38;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x39: /* 可变SLD */
case 0x39: /* 可变SLD */
K_Line_Set.K_Line_LID39 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x39;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x3A: /* OEM */
case 0x3A: /* OEM */
K_Line_Set.K_Line_LID3A = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x3A;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x3B: /* 预留 */
case 0x3B: /*预留 */
K_Line_Set.K_Line_LID3B = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x3B;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x3C: /* 预留 */
case 0x3C: /* 预留 */
K_Line_Set.K_Line_LID3C = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x3C;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x3D: /* 预留 */
case 0x3D: /* 预留 */
K_Line_Set.K_Line_LID3D = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x3D;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x3E: /* 预留 */
case 0x3E: /* 预留 */
K_Line_Set.K_Line_LID3E = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x3E;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x3F: /* 预留 */
case 0x3F: /* 预留 */
K_Line_Set.K_Line_LID3F = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x3F;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x40: /* 发动机种类名称 */
case 0x40: /* 发动机种类名称 */
K_Line_Set.K_Line_LID40 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x40;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x41: /* 变速器种类&控制 */
case 0x41: /* 变速器种类&控制 */
K_Line_Set.K_Line_LID41 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x41;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x42: /* 驻车管道 */
case 0x42: /* 驻车管道 */
K_Line_Set.K_Line_LID42 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x42;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x43: /* 车型 */
case 0x43: /* 车型 */
K_Line_Set.K_Line_LID43 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x43;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x44: /* 速度警报 */
case 0x44: /* 速度警报 */
K_Line_Set.K_Line_LID44 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x44;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x45: /* 发动机转速 */
case 0x45: /* 发动机转速 */
K_Line_Set.K_Line_LID45 = RequestData[2];
User_App.User_Speed = K_Line_Set.K_Line_LID45;
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x45;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x46: /* 急加速 */
case 0x46: /* 急加速 */
K_Line_Set.K_Line_LID46 = RequestData[2];
User_App.User_JADD = K_Line_Set.K_Line_LID46;
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x46;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x47: /* 急减速 */
case 0x47: /* 急减速 */
K_Line_Set.K_Line_LID47 = RequestData[2];
User_App.User_JSUB = K_Line_Set.K_Line_LID47;
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x47;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x48: /* 长时间怠速 */
case 0x48: /* 长时间怠速 */
K_Line_Set.K_Line_LID48 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x48;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x49: /* 辅助驻车 */
case 0x49: /* 辅助驻车 */
K_Line_Set.K_Line_LID49 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x49;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x4A: /* 变速箱油 */
case 0x4A: /* 变速箱油 */
K_Line_Set.K_Line_LID4A = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x4A;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x4B: /* 差速器油 */
case 0x4B: /* 差速器油 */
K_Line_Set.K_Line_LID4B = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x4B;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x4C: /* 离合器油 */
case 0x4C: /* 离合器油 */
K_Line_Set.K_Line_LID4C = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x4C;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x4D: /* 动力转向油 */
case 0x4D: /* 动力转向油 */
K_Line_Set.K_Line_LID4D = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x4D;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x4E: /* 轮胎 */
case 0x4E: /* 轮胎 */
K_Line_Set.K_Line_LID4E = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x4E;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x4F: /* 机油&滤清器 */
case 0x4F: /* 机油&滤清器 */
K_Line_Set.K_Line_LID4F = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x4F;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x50: /* 预留 */
case 0x50: /* 预留 */
K_Line_Set.K_Line_LID50 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x50;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x51: /* 工作模式 */
case 0x51: /* 工作模式 */
K_Line_Set.K_Line_LID51 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x51;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x52: /* 电子部件设定 */
case 0x52: /* 电子部件设定 */
K_Line_Set.K_Line_LID52 = RequestData[2];
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x52;
Tx_Len = 2;
DTCstatusCHGFFK_Line = 1 ;
DTCstatusCHGFFK_Line = 1;
break;
case 0x91: /* */
NVMNODIGIT.No_Digit1 = RequestData[1];
NVMNODIGIT.No_Digit2 = RequestData[2];
NVMNODIGIT.No_Digit3 = RequestData[3];
NVMNODIGIT.No_Digit4 = RequestData[4];
NVMNODIGIT.No_Digit5 = RequestData[5];
NVMNODIGIT.No_Digit6 = RequestData[6];
NVMNODIGIT.No_Digit7 = RequestData[7];
NVMNODIGIT.No_Digit8 = RequestData[8];
NVMNODIGIT.No_Digit9 = RequestData[9];
case 0x91: /* */
NVMNODIGIT.No_Digit1 = RequestData[1];
NVMNODIGIT.No_Digit2 = RequestData[2];
NVMNODIGIT.No_Digit3 = RequestData[3];
NVMNODIGIT.No_Digit4 = RequestData[4];
NVMNODIGIT.No_Digit5 = RequestData[5];
NVMNODIGIT.No_Digit6 = RequestData[6];
NVMNODIGIT.No_Digit7 = RequestData[7];
NVMNODIGIT.No_Digit8 = RequestData[8];
NVMNODIGIT.No_Digit9 = RequestData[9];
NVMNODIGIT.No_Digit10 = RequestData[10];
/*写EEP*/
//NVM_Data_Update(NVM_NO_DIGIT); //----ECU ID_ECU件号eep
/*写EEP*/
// NVM_Data_Update(NVM_NO_DIGIT); //----ECU ID_ECU件号 eep
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = RequestData[0];
Tx_Len = 2;
break;
case 0xA0: /* */
case 0xA0: /* */
NVMNODIGIT.TesterECU = RequestData[2];
if (NVMNODIGIT.METERCOUNT < 0xFF)
{
NVMNODIGIT.METERCOUNT ++ ; /*修正率次数增加*/
/*写EEP*/
//NVM_Data_Update(NVM_NO_DIGIT);
NVMNODIGIT.METERCOUNT++; /*修正率次数增加*/
/*写EEP*/
// NVM_Data_Update(NVM_NO_DIGIT);
}
else
{
NVMNODIGIT.METERCOUNT = 0xFF; /*修正率次数增加*/
/*写EEP*/
//NVM_Data_Update(NVM_NO_DIGIT);
NVMNODIGIT.METERCOUNT = 0xFF; /*修正率次数增加*/
/*写EEP*/
// NVM_Data_Update(NVM_NO_DIGIT);
}
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0xA0;
Tx_Len = 2;
break;
case 0xA3: /* */
case 0xA3: /* */
NVMNODIGIT.TesterECUCAN = RequestData[2];
if (NVMNODIGIT.METERCOUNT < 0xFF)
{
NVMNODIGIT.METERCOUNT ++ ; /*修正率次数增加*/
/*写EEP*/
//NVM_Data_Update(NVM_NO_DIGIT);
NVMNODIGIT.METERCOUNT++; /*修正率次数增加*/
/*写EEP*/
// NVM_Data_Update(NVM_NO_DIGIT);
}
else
{
NVMNODIGIT.METERCOUNT = 0xFF; /*修正率次数增加*/
/*写EEP*/
//NVM_Data_Update(NVM_NO_DIGIT);
NVMNODIGIT.METERCOUNT = 0xFF; /*修正率次数增加*/
/*写EEP*/
// NVM_Data_Update(NVM_NO_DIGIT);
}
(*TxData++) = KWP2000_WRITEDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
......@@ -661,7 +657,7 @@ unsigned char kwp_writeDataByLocalIdentifier(unsigned char *TxData, unsigned cha
}
else
{
//if ((NVMUserSettings.KLINE == 1u) && (K_LINE_SIGNAL_FLAG.SendSeedEQUSRecvSeed == 0u))
// if ((NVMUserSettings.KLINE == 1u) && (K_LINE_SIGNAL_FLAG.SendSeedEQUSRecvSeed == 0u))
if (1)
{
if (((RequestData[0] >= 0x20) && (RequestData[0] <= 0x52)) || (RequestData[0] == 0x91) || (RequestData[0] == 0xA0) || (RequestData[0] == 0xA3))
......@@ -686,381 +682,381 @@ unsigned char kwp_readDataByLocalIdentifier(unsigned char *TxData, unsigned char
{
unsigned char Tx_Len = 0;
unsigned int ECUStatusCup = 0;
switch (RequestData[ 0 ]) /* subFunction */
switch (RequestData[0]) /* subFunction */
{
case 0x20: /* 应对ECE R13 */
case 0x20: /* 应对ECE R13 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x20;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID20 ;
(*TxData++) = K_Line_Set.K_Line_LID20;
Tx_Len = 4;
break;
case 0x21: /* EBS/ABS */
case 0x21: /* EBS/ABS */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x21;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID21 ;
(*TxData++) = K_Line_Set.K_Line_LID21;
Tx_Len = 4;
break;
case 0x22: /* EVSC */
case 0x22: /* EVSC */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x22;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID22 ;
(*TxData++) = K_Line_Set.K_Line_LID22;
Tx_Len = 4;
break;
case 0x23: /* 驻车锁定 */
case 0x23: /* 驻车锁定 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x23;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID23 ;
(*TxData++) = K_Line_Set.K_Line_LID23;
Tx_Len = 4;
break;
case 0x24: /* HSA */
case 0x24: /* HSA */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x24;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID24 ;
(*TxData++) = K_Line_Set.K_Line_LID24;
Tx_Len = 4;
break;
case 0x25: /* AEBS */
case 0x25: /* AEBS */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x25;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID25 ;
(*TxData++) = K_Line_Set.K_Line_LID25;
Tx_Len = 4;
break;
case 0x26: /* ACC */
case 0x26: /* ACC */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x26;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID26 ;
(*TxData++) = K_Line_Set.K_Line_LID26;
Tx_Len = 4;
break;
case 0x27: /* LDWS */
case 0x27: /* LDWS */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x27;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID27 ;
(*TxData++) = K_Line_Set.K_Line_LID27;
Tx_Len = 4;
break;
case 0x28: /* 车辆间报警 */
case 0x28: /* 车辆间报警 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x28;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID28 ;
(*TxData++) = K_Line_Set.K_Line_LID28;
Tx_Len = 4;
break;
case 0x29: /* 有无巡航 */
case 0x29: /* 有无巡航 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x29;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID29 ;
(*TxData++) = K_Line_Set.K_Line_LID29;
Tx_Len = 4;
break;
case 0x2A: /* 气悬 */
case 0x2A: /* 气悬 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x2A;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID2A ;
(*TxData++) = K_Line_Set.K_Line_LID2A;
Tx_Len = 4;
break;
case 0x2B: /* ISS */
case 0x2B: /* ISS */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x2B;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID2B ;
(*TxData++) = K_Line_Set.K_Line_LID2B;
Tx_Len = 4;
break;
case 0x2C: /* 装货台工作警报蜂鸣器 */
case 0x2C: /* װ装货台工作警报蜂鸣器 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x2C;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID2C ;
(*TxData++) = K_Line_Set.K_Line_LID2C;
Tx_Len = 4;
break;
case 0x2D: /* ROWS */
case 0x2D: /* ROWS */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x2D;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID2D ;
(*TxData++) = K_Line_Set.K_Line_LID2D;
Tx_Len = 4;
break;
case 0x2E: /* 行车记录仪 */
case 0x2E: /* 行车记录仪 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x2E;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID2E ;
(*TxData++) = K_Line_Set.K_Line_LID2E;
Tx_Len = 4;
break;
case 0x2F: /*  车型 */
case 0x2F: /* 车型 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x2F;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID2F ;
(*TxData++) = K_Line_Set.K_Line_LID2F;
Tx_Len = 4;
break;
case 0x30: /* 缓速器 */
case 0x30: /* 缓速器 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x30;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID30 ;
(*TxData++) = K_Line_Set.K_Line_LID30;
Tx_Len = 4;
break;
case 0x31: /* 地图巡航 */
case 0x31: /* 地图巡航 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x31;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID31 ;
(*TxData++) = K_Line_Set.K_Line_LID31;
Tx_Len = 4;
break;
case 0x32: /* 装货台种类 */
case 0x32: /* 装货台种类 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x32;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID32 ;
(*TxData++) = K_Line_Set.K_Line_LID32;
Tx_Len = 4;
break;
case 0x33: /* SCR?DPD */
case 0x33: /* SCR?DPD */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x33;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID33 ;
(*TxData++) = K_Line_Set.K_Line_LID33;
Tx_Len = 4;
break;
case 0x34: /* 驻车种类 */
case 0x34: /* 驻车种类 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x34;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID34 ;
(*TxData++) = K_Line_Set.K_Line_LID34;
Tx_Len = 4;
break;
case 0x35: /* 气压计 */
case 0x35: /* 气压计 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x35;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID35 ;
(*TxData++) = K_Line_Set.K_Line_LID35;
Tx_Len = 4;
break;
case 0x36: /* 低压警报压 */
case 0x36: /* 低压警报 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x36;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID36 ;
(*TxData++) = K_Line_Set.K_Line_LID36;
Tx_Len = 4;
break;
case 0x37: /* 超限警报 */
case 0x37: /* 超限警报 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x37;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID37 ;
(*TxData++) = K_Line_Set.K_Line_LID37;
Tx_Len = 4;
break;
case 0x38: /* 速度警报 */
case 0x38: /* 速度警报 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x38;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID38 ;
(*TxData++) = K_Line_Set.K_Line_LID38;
Tx_Len = 4;
break;
case 0x39: /*  可变SLD */
case 0x39: /* 可变SLD */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x39;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID39 ;
(*TxData++) = K_Line_Set.K_Line_LID39;
Tx_Len = 4;
break;
case 0x3A: /*  OEM */
case 0x3A: /* OEM */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x3A;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID3A ;
(*TxData++) = K_Line_Set.K_Line_LID3A;
Tx_Len = 4;
break;
case 0x3B: /* */
case 0x3B: /* */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x3B;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID3B ;
(*TxData++) = K_Line_Set.K_Line_LID3B;
Tx_Len = 4;
break;
case 0x3C: /* */
case 0x3C: /* */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x3C;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID3C ;
(*TxData++) = K_Line_Set.K_Line_LID3C;
Tx_Len = 4;
break;
case 0x3D: /* */
case 0x3D: /* */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x3D;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID3D ;
(*TxData++) = K_Line_Set.K_Line_LID3D;
Tx_Len = 4;
break;
case 0x3E: /* */
case 0x3E: /* */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x3E;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID3E ;
(*TxData++) = K_Line_Set.K_Line_LID3E;
Tx_Len = 4;
break;
case 0x3F: /* */
case 0x3F: /* */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x3F;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID3F ;
(*TxData++) = K_Line_Set.K_Line_LID3F;
Tx_Len = 4;
break;
case 0x40: /* 发动机种类 */
case 0x40: /* 发动机种类 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x40;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID40 ;
(*TxData++) = K_Line_Set.K_Line_LID40;
Tx_Len = 4;
break;
case 0x41: /* 变速器种类&控制 */
case 0x41: /* 变速器种类&控制 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x41;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID41 ;
(*TxData++) = K_Line_Set.K_Line_LID41;
Tx_Len = 4;
break;
case 0x42: /* 5.2.14.1.4. 驻车管道 */
case 0x42: /* 5.2.14.1.4. 驻车管道*/
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x42;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID42 ;
(*TxData++) = K_Line_Set.K_Line_LID42;
Tx_Len = 4;
break;
case 0x43: /* 5.2.14.1.5. 车型 */
case 0x43: /* 5.2.14.1.5. 车型 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x43;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID43 ;
(*TxData++) = K_Line_Set.K_Line_LID43;
Tx_Len = 4;
break;
case 0x44: /* 速度警报 */
case 0x44: /* 速度警报 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x44;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID44 ;
(*TxData++) = K_Line_Set.K_Line_LID44;
Tx_Len = 4;
break;
case 0x45: /* 发动机转速 */
case 0x45: /* 发动机转速 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x45;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID45 ;
(*TxData++) = K_Line_Set.K_Line_LID45;
Tx_Len = 4;
break;
case 0x46: /* 急加速 */
case 0x46: /* 急加速 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x46;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID46 ;
(*TxData++) = K_Line_Set.K_Line_LID46;
Tx_Len = 4;
break;
case 0x47: /* 急减速 */
case 0x47: /* 急减速 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x47;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID47 ;
(*TxData++) = K_Line_Set.K_Line_LID47;
Tx_Len = 4;
break;
case 0x48: /* 长时间怠速 */
case 0x48: /* 长时间怠速 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x48;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID48 ;
(*TxData++) = K_Line_Set.K_Line_LID48;
Tx_Len = 4;
break;
case 0x49: /* 辅助驻车 */
case 0x49: /* 辅助驻车 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x49;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID49 ;
(*TxData++) = K_Line_Set.K_Line_LID49;
Tx_Len = 4;
break;
case 0x4A: /* 变速箱油 */
case 0x4A: /* 变速箱油 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x4A;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID4A ;
(*TxData++) = K_Line_Set.K_Line_LID4A;
Tx_Len = 4;
break;
case 0x4B: /* 差速器油 */
case 0x4B: /* 差速器油 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x4B;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID4B ;
(*TxData++) = K_Line_Set.K_Line_LID4B;
Tx_Len = 4;
break;
case 0x4C: /* 离合器油 */
case 0x4C: /* 离合器油 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x4C;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID4C ;
(*TxData++) = K_Line_Set.K_Line_LID4C;
Tx_Len = 4;
break;
case 0x4D: /* 动力转向油 */
case 0x4D: /* 动力转向油 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x4D;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID4D ;
(*TxData++) = K_Line_Set.K_Line_LID4D;
Tx_Len = 4;
break;
case 0x4E: /* 轮胎 */
case 0x4E: /* 轮胎 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x4E;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID4E ;
(*TxData++) = K_Line_Set.K_Line_LID4E;
Tx_Len = 4;
break;
case 0x4F: /* 机油&滤清器 */
case 0x4F: /* 机油&滤清器 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x4F;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID4F ;
(*TxData++) = K_Line_Set.K_Line_LID4F;
Tx_Len = 4;
break;
case 0x50: /* 预留 */
case 0x50: /* 预留 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x50;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID50 ;
(*TxData++) = K_Line_Set.K_Line_LID50;
Tx_Len = 4;
break;
case 0x51: /* 5.2.14.1.8. 工作模式*/
case 0x51: /* 5.2.14.1.8. 工作模式 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x51;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID51 ;
(*TxData++) = K_Line_Set.K_Line_LID51;
Tx_Len = 4;
break;
case 0x52: /* 5.2.14.1.9. 电子部件设定( */
case 0x52: /* 5.2.14.1.9. 电子部件设定 */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x52;
(*TxData++) = 0x00;
(*TxData++) = K_Line_Set.K_Line_LID52 ;
(*TxData++) = K_Line_Set.K_Line_LID52;
Tx_Len = 4;
break;
case 0xA0: /* */
case 0xA0: /* */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0xA0;
(*TxData++) = 0x00;
(*TxData++) = NVMNODIGIT.TesterECU;
Tx_Len = 4;
break;
case 0xA3: /* */
case 0xA3: /* */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0xA3;
(*TxData++) = 0x00;
(*TxData++) = NVMNODIGIT.TesterECUCAN;
Tx_Len = 4;
break;
case 0xA1: /* */
case 0xA1: /* */
/*
NVMNODIGIT.ECUStatus1 = ECUStatusONE.Data[0];
......@@ -1083,10 +1079,10 @@ unsigned char kwp_readDataByLocalIdentifier(unsigned char *TxData, unsigned char
Tx_Len = 7;
break;
*/
case 0xA2: /* */
case 0xA2: /* */
(*TxData++) = KWP2000_READDATABYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0xA2;
(*TxData++) = NVMNODIGIT.METERCOUNT; //修正率替换次数
(*TxData++) = NVMNODIGIT.METERCOUNT; /*修正率替换次数*/
Tx_Len = 3;
break;
default: /* subFunctionNotSupported */
......@@ -1121,22 +1117,24 @@ unsigned char kwp_readDataAccessMode(unsigned char *TxData, unsigned char *Reque
unsigned long SeedKey = 0;
unsigned char Tx_Len = 0;
switch (RequestData[ 0 ]) /* subFunction */
switch (RequestData[0]) /* subFunction */
{
case 0x01: /* */
//if (NVMUserSettings.KLINE == 1)/*是否锁定标记*/
case 0x01: /* */
// if (NVMUserSettings.KLINE == 1)/*是否锁定标记*/
if (0)
{
/*密钥随机数生成*/
//SeedKey = (unsigned long)RealTimeClock.RollingCounter;
//SeedKey = SeedKey << 16;
//SeedKey |= (unsigned long)(~RealTimeClock.RollingCounter);
/*密钥随机数生成*/
// SeedKey = (unsigned long)RealTimeClock.RollingCounter;
// SeedKey = SeedKey << 16;
// SeedKey |= (unsigned long)(~RealTimeClock.RollingCounter);
Seed1 = (unsigned char)(SeedKey >> 24);
Seed2 = (unsigned char)(SeedKey >> 16);
Seed3 = (unsigned char)(SeedKey >> 8);
Seed4 = (unsigned char)(SeedKey);
App_Uds_Calc_Key(); //----计算密钥等待应答
/*计算密钥等待应答*/
App_Uds_Calc_Key();
K_LINE_SIGNAL_FLAG.AccessMode2701 = 1;
AccessMode2701KeyTime = 0;
......@@ -1155,20 +1153,19 @@ unsigned char kwp_readDataAccessMode(unsigned char *TxData, unsigned char *Reque
Kwp2000_Negative.ResponseCode = KWP2000_subFunctionNotSupported;
}
break;
case 0x02: /* */
Recvseed1 = RequestData[ 1 ];
Recvseed2 = RequestData[ 2 ];
Recvseed3 = RequestData[ 3 ];
Recvseed4 = RequestData[ 4 ];
case 0x02: /* */
Recvseed1 = RequestData[1];
Recvseed2 = RequestData[2];
Recvseed3 = RequestData[3];
Recvseed4 = RequestData[4];
if (
(Sendseed1 == Recvseed1) && \
(Sendseed2 == Recvseed2) && \
(Sendseed3 == Recvseed3) && \
(Sendseed4 == Recvseed4) && \
(AccessMode2701KeyTimeFlag == 1 )
)
(Sendseed1 == Recvseed1) &&
(Sendseed2 == Recvseed2) &&
(Sendseed3 == Recvseed3) &&
(Sendseed4 == Recvseed4) &&
(AccessMode2701KeyTimeFlag == 1))
{
K_LINE_SIGNAL_FLAG.AccessMode2701 = 0 ;
K_LINE_SIGNAL_FLAG.AccessMode2701 = 0;
AccessMode2701KeyTimeFlag = 1;
K_LINE_SIGNAL_FLAG.SendSeedEQUSRecvSeed = 1;
......@@ -1200,13 +1197,13 @@ unsigned char kwp_readDataAccessMode(unsigned char *TxData, unsigned char *Reque
unsigned char kwp_StartroutInebykocalIdentifier(unsigned char *TxData, unsigned char *RequestData)
{
unsigned char Tx_Len = 0;
switch (RequestData[ 0 ]) /* */
switch (RequestData[0]) /* */
{
case 0x08: /* */
//K_LINE_SIGNAL_FLAG.S_Regist = 1;
//NVMUserSettings.KLINE = 1 ;
/*写EEP*/
//NVM_Data_Update(NVM_USER_SETTINGS);
case 0x08: /* */
// K_LINE_SIGNAL_FLAG.S_Regist = 1;
// NVMUserSettings.KLINE = 1 ;
/*写EEP*/
// NVM_Data_Update(NVM_USER_SETTINGS);
(*TxData++) = KWP2000_STARTROUTINEBYLOCALIDENTIFIER_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0x08;
Tx_Len = 2;
......@@ -1228,9 +1225,9 @@ unsigned char kwp_StartroutInebykocalIdentifier(unsigned char *TxData, unsigned
unsigned char kwp_readDataStatusofDTC(unsigned char *TxData, unsigned char *RequestData)
{
unsigned char Tx_Len = 0;
switch (RequestData[ 0 ]) /* subFunction */
switch (RequestData[0]) /* subFunction */
{
case 0x00: /* */
case 0x00: /* */
/*
if ((RequestData[1] == 0xFF)&&(RequestData[2] == 0x00))
{
......@@ -1326,15 +1323,15 @@ unsigned char kwp_ClearDiagnosticInformation(unsigned char *TxData, unsigned cha
{
unsigned char Tx_Len = 0;
switch (RequestData[ 0 ]) /* subFunction */
switch (RequestData[0]) /* subFunction */
{
case 0xFF: /* */
case 0xFF: /* */
if (RequestData[1] == 0x00)
{
(*TxData++) = KWP2000_CLEARDIAGNOSTICINFORMATION_REQUEST + KWP2000_POSITIVE_RESPONSE_OFFSET;
(*TxData++) = 0xFF;
(*TxData++) = 0x00;
//NVMNODIGIT.NoOfDTCFF00 == 0x00;
// NVMNODIGIT.NoOfDTCFF00 == 0x00;
Tx_Len = 3;
}
else
......@@ -1347,7 +1344,6 @@ unsigned char kwp_ClearDiagnosticInformation(unsigned char *TxData, unsigned cha
break;
}
return Tx_Len;
}
/*-------------------------------------------------------------------------
* Function Name : App_Uds_Calc_Key
......@@ -1359,40 +1355,40 @@ unsigned char kwp_ClearDiagnosticInformation(unsigned char *TxData, unsigned cha
--------------------------------------------------------------------------*/
void App_Uds_Calc_Key(void)
{
unsigned char CupChar1 = 0;
unsigned char CupChar2 = 0;
unsigned char CupChar3 = 0;
unsigned char CupChar4 = 0;
unsigned char CupChar1 = 0;
unsigned char CupChar2 = 0;
unsigned char CupChar3 = 0;
unsigned char CupChar4 = 0;
unsigned char CupChar5 = 0;
unsigned char CupChar6 = 0;
unsigned char CupChar7 = 0;
unsigned char CupChar8 = 0;
unsigned char CupChar5 = 0;
unsigned char CupChar6 = 0;
unsigned char CupChar7 = 0;
unsigned char CupChar8 = 0;
unsigned char CupChar9 = 0;
unsigned char CupChar9 = 0;
unsigned char CupChar10 = 0;
unsigned char CupChar11 = 0;
unsigned char CupChar12 = 0;
CupChar1 = Cup_Key(Seed1 , 1, Seed1);
CupChar2 = Cup_Key(Seed2 , 2, Seed2);
CupChar3 = Cup_Key(Seed3 , 3, Seed3);
CupChar4 = Cup_Key(Seed4 , 4, Seed4);
CupChar1 = Cup_Key(Seed1, 1, Seed1);
CupChar2 = Cup_Key(Seed2, 2, Seed2);
CupChar3 = Cup_Key(Seed3, 3, Seed3);
CupChar4 = Cup_Key(Seed4, 4, Seed4);
CupChar5 = Cup_Key(CupChar4 , 1, Seed1);
CupChar6 = Cup_Key(CupChar3 , 2, Seed2);
CupChar7 = Cup_Key(CupChar2 , 3, Seed3);
CupChar8 = Cup_Key(CupChar1 , 4, Seed4);
CupChar5 = Cup_Key(CupChar4, 1, Seed1);
CupChar6 = Cup_Key(CupChar3, 2, Seed2);
CupChar7 = Cup_Key(CupChar2, 3, Seed3);
CupChar8 = Cup_Key(CupChar1, 4, Seed4);
CupChar9 = Cup_Key(CupChar8 , 1, Seed1);
CupChar10 = Cup_Key(CupChar7 , 2, Seed2);
CupChar11 = Cup_Key(CupChar6 , 3, Seed3);
CupChar12 = Cup_Key(CupChar5 , 4, Seed4);
CupChar9 = Cup_Key(CupChar8, 1, Seed1);
CupChar10 = Cup_Key(CupChar7, 2, Seed2);
CupChar11 = Cup_Key(CupChar6, 3, Seed3);
CupChar12 = Cup_Key(CupChar5, 4, Seed4);
Sendseed4 = Cup_Key(CupChar12 , 1, Seed1);
Sendseed3 = Cup_Key(CupChar11 , 2, Seed2);
Sendseed2 = Cup_Key(CupChar10 , 3, Seed3);
Sendseed1 = Cup_Key(CupChar9 , 4, Seed4);
Sendseed4 = Cup_Key(CupChar12, 1, Seed1);
Sendseed3 = Cup_Key(CupChar11, 2, Seed2);
Sendseed2 = Cup_Key(CupChar10, 3, Seed3);
Sendseed1 = Cup_Key(CupChar9, 4, Seed4);
}
unsigned char Cup_Key(unsigned char KLineseed, unsigned char Num, unsigned char Seed)
......@@ -1400,10 +1396,10 @@ unsigned char Cup_Key(unsigned char KLineseed, unsigned char Num, unsigned char
unsigned char CupCharL = 0;
unsigned char CupCharR = 0;
CupCharL = KLineseed ;
CupCharR = KLineseed ;
CupCharL = KLineseed;
CupCharR = KLineseed;
CupCharL = (CupCharL << Num) ;
CupCharL = (CupCharL << Num);
CupCharR = (CupCharR >> (8 - Num));
CupCharL = (CupCharL | CupCharR);
......@@ -1416,12 +1412,12 @@ unsigned char Cup_Key(unsigned char KLineseed, unsigned char Num, unsigned char
return CupCharL;
}
unsigned char BitReplace (unsigned char Data)
unsigned char BitReplace(unsigned char Data)
{
unsigned char i = 0;
unsigned char temp = 0;
for (i = 0; i < 8; i ++)
for (i = 0; i < 8; i++)
{
temp = temp << 1;
temp |= (Data >> i) & 0x01;
......
......@@ -125,28 +125,28 @@ extern unsigned char kwp_ClearDiagnosticInformation(unsigned char *TxData, unsig
typedef union
{
unsigned char SendSeedEQUSRecvSeed; //密钥配对成功标识 0 失败,1 成功
unsigned char RecvStart ; //通讯开始表示位 0 结束,1 开始
unsigned char S_Regist ; //是否注册标识
unsigned char AccessMode2701 ; //27服务进入计时标志
unsigned char SendSeedEQUSRecvSeed; /*密钥配对成功标识 0-失败 1-成功*/
unsigned char RecvStart ; /*通讯开始标识 0-结束 1-开始*/
unsigned char S_Regist ; /*是否注册标识*/
unsigned char AccessMode2701 ; /*27服务进入计时标志*/
} _K_LINE_SIGNAL_FLAG;
extern _K_LINE_SIGNAL_FLAG K_LINE_SIGNAL_FLAG;
typedef union
{
unsigned char ActiveSecurityAccess ; /*修正值状态 0-未实施 1-实施后*/
unsigned char SensorStatus ; /*传感器输入状态 0-LOW 1-HIGH*/
unsigned char Security_Active ; /*锁定状态 0-未锁定 1-锁定*/
unsigned char ActiveSecurityAccess ; /*修正值状态 0-未实施 1-实施后*/
unsigned char SensorStatus ; /*传感器输入状态 0-LOW 1-HIGH*/
unsigned char Security_Active ; /*锁定状态 0-未锁定 1-锁定*/
unsigned char reserve ;
} _ECUStatus;
extern _ECUStatus ECUStatusONE;
#define ECUSTATUST_F 00 /*修正系数 EOL系数*2048*/
#define ECUSTATUST_F 00 /*修正系数 EOL系数*2048*/
/******************************************************************************
5.2.5. ECU ID_ECU件号写入(SID=$3B LID=$91)
5.2.5. ECU ID_ECU件号写入(SID=$3B LID=$91)
******************************************************************************/
typedef union
{
......@@ -166,21 +166,21 @@ typedef union
unsigned char ECUStatus3; //13
unsigned char ECUStatus4; //14
unsigned char ECUStatus5; //15
unsigned char METERCOUNT; //16 修正率次数
unsigned char METERCOUNT; //16 修正率次数
unsigned char NoOfDTCFF00; //17
unsigned char NoOfDTC8000; //18
unsigned char TesterECU; //19 车速修正码
unsigned char TesterECUCAN; //20 CAN发送用修正码
unsigned char TesterECU; //19 车速修正码
unsigned char TesterECUCAN; //20 CAN发送用修正码
} _NVMNODIGIT;
extern _NVMNODIGIT NVMNODIGIT;
extern unsigned char Sendseed1; //仪表计算的
extern unsigned char Sendseed1; /*仪表计算*/
extern unsigned char Sendseed2;
extern unsigned char Sendseed3;
extern unsigned char Sendseed4;
extern unsigned char Recvseed1; //仪表接收的
extern unsigned char Recvseed1; /*仪表接收*/
extern unsigned char Recvseed2;
extern unsigned char Recvseed3;
extern unsigned char Recvseed4;
......
......@@ -14,15 +14,15 @@
*********************************************************************
*/
/* Possible initialization formats */
#define KWP2000_FORMAT_NOADDRESS 0 /* 00 */
#define KWP2000_FORMAT_CARB 1 /* 01 Exception mode */
#define KWP2000_FORMAT_PHYSICALADDRESSING 2 /* 10 */
#define KWP2000_FORMAT_FUNCTIONALADDRESSING 3 /* 11 */
#define KWP2000_FORMAT_NOADDRESS 0u /* 00 */
#define KWP2000_FORMAT_CARB 1u /* 01 Exception mode */
#define KWP2000_FORMAT_PHYSICALADDRESSING 2u /* 10 */
#define KWP2000_FORMAT_FUNCTIONALADDRESSING 3u /* 11 */
#define KWP2000_WUP_TI_IDLE_DU 5ul /* idle time of RX pins [us] */
#define KWP2000_WUP_TI_IDLE_DU 5ul /* idle time of RX pins [us] */
#define KWP2000_WUP_TI_MIN_DU 24ul /* duration of WUP, min value (low time/hi time) [ms] */
#define KWP2000_WUP_TI_MAX_DU 26ul /* duration of WUP, max value (low time/hi time) [ms] */
#define KWP2000_WUP_TI_MIN_DU 24ul /* duration of WUP, min value (low time/hi time) [ms] */
#define KWP2000_WUP_TI_MAX_DU 26ul /* duration of WUP, max value (low time/hi time) [ms] */
/*
*********************************************************************
......@@ -37,21 +37,20 @@ typedef enum
KWP2000_WUP_SCANLO_E,
KWP2000_WUP_WAIT4SCANHI_E = 0x20,
KWP2000_WUP_SCANHI_E,
KWP2000_WUP_SCANASC_E = 0x30,
KWP2000_WUP_SCANASC_E = 0x30,
KWP2000_WUP_DETECTED_E = 0x80,
} Kwp2000_ScanStates_t;
typedef struct
{
unsigned long xPortIn_pu32;
unsigned long xPortInMsk_u32;
unsigned long tiStartSample_u32;
unsigned long xPortIn_pu32;
unsigned long xPortInMsk_u32;
unsigned long tiStartSample_u32;
Kwp2000_ScanStates_t xScanState_u32;
unsigned char xBusType_u32;
unsigned long tiCom_u32;
unsigned char xBusType_u32;
unsigned long tiCom_u32;
} Kwp2000_ScanWup_t;
/*
*********************************************************************
* variable
......@@ -64,29 +63,24 @@ unsigned char kwp2000_CARB_TgtRequest;
unsigned char kwp2000_CARB_TgtResponse;
unsigned char kwp2000_CARB_Fmt;
unsigned long Kwp2000_TimeCounter;
unsigned long Kwp2000_P2_TimeCounter;
unsigned long Kwp2000_ComMode;
Kwp2000_ScanWup_t Kwp2000_ScanWup;
Kwp2000_Modify_t Kwp2000_Modify;
Kwp2000_ScanWup_t Kwp2000_ScanWup;
Kwp2000_Modify_t Kwp2000_Modify;
Kwp2000_ComState_t Kwp2000_ComState;
/*
*********************************************************************
* function
*********************************************************************
*/
void Kwp2000_ProtocolInit( void );
void Kwp2000_ProtocolInit(void);
/*-------------------------------------------------------------------------
* Function Name : Kwp2000_Init
* Description : Kwp2000始化
* Description : Kwp2000初始化
* Input :
* Output : None
* Return : None
......@@ -94,29 +88,19 @@ void Kwp2000_ProtocolInit( void );
--------------------------------------------------------------------------*/
void Kwp2000_Init(void)
{
unsigned char PartID[2];
/*
PartID[ 0 ] = *((unsigned char *)0x001A);
PartID[ 1 ] = *((unsigned char *)0x001B);
if((PartID[ 0 ] != 0xE0) || (PartID[ 1 ] != 0x10))
{
return;
}
*/
Kwp2000_AscInit();
Kwp2000_ProtocolInit();
}
/*-------------------------------------------------------------------------
* Function Name : Kwp2000_ProtocolInit
* Description : KWP2000协议初始化
* Description : KWP2000协议初始化
* Input :
* Output : None
* Return : None
* onther :
--------------------------------------------------------------------------*/
void Kwp2000_ProtocolInit( void )
void Kwp2000_ProtocolInit(void)
{
/* Initial time base */
Kwp2000_TimeCounter = 0;
......@@ -125,7 +109,7 @@ void Kwp2000_ProtocolInit( void )
/* Prepare Wup scan */
Kwp2000_ComMode = COM_INIT;
Kwp2000_ScanWup.xScanState_u32 = KWP2000_WUP_WAIT4IDLE_E;
Kwp2000_ScanWup.xScanState_u32 = KWP2000_WUP_WAIT4IDLE_E;
Kwp2000_ScanWup.tiStartSample_u32 = Kwp2000_TimeCounter;
Uart_DisableReceiveIsrReq();
......@@ -133,7 +117,6 @@ void Kwp2000_ProtocolInit( void )
/*Set RX as GPIO-IN*/
Uart_SetRxGpio();
Kwp2000_Modify.typeOfModif = KWP2000_MODIFY_NULL;
Kwp2000_ComState.Rx_len = 0;
......@@ -170,7 +153,6 @@ void Kwp2000_Timeout(void)
if ((tiSample_u32 - Kwp2000_ComState.tiCom_u32) >= 20u)
{
Kwp2000_ProtocolInit();
}
}
else
......@@ -194,13 +176,13 @@ void Kwp2000_Timeout(void)
/*-------------------------------------------------------------------------
* Function Name : Kwp2000_CommuniationDown
* Description : 通讯底层与协议层初始化
* Description : Í通讯底层与协议层初始化
* Input :
* Output : None
* Return : None
* onther :
--------------------------------------------------------------------------*/
void Kwp2000_CommuniationDown( void )
void Kwp2000_CommuniationDown(void)
{
Kwp2000_AscInit();
Kwp2000_ProtocolInit();
......@@ -252,7 +234,7 @@ unsigned char Kwp2000_ChecksumCalculate(unsigned char *dataBuffer, unsigned shor
/* Resets the sum */
sum = 0;
for (i = 0 ; i < numberOfBytes ; i++)
for (i = 0; i < numberOfBytes; i++)
{
/* add each byte to the sum */
sum += dataBuffer[i];
......@@ -291,20 +273,20 @@ unsigned char Kwp2000_PrepareHeader(unsigned char dataSize)
/* Test the format used */
switch (Kwp2000_ComState.Format)
{
case KWP2000_FORMAT_NOADDRESS :
case KWP2000_FORMAT_NOADDRESS:
/* if no address then nothing to be added to the header */
break;
case KWP2000_FORMAT_CARB :
case KWP2000_FORMAT_CARB:
// /* CARB mode */
// fmt = kwp2000_CARB_Fmt;
// asc0_CommunicationBuf.b[4-(headerSize++)]= kwp2000_CARB_Address;
// asc0_CommunicationBuf.b[4-(headerSize++)]= kwp2000_CARB_TgtResponse;
break;
case KWP2000_FORMAT_FUNCTIONALADDRESSING :
case KWP2000_FORMAT_PHYSICALADDRESSING :
case KWP2000_FORMAT_FUNCTIONALADDRESSING:
case KWP2000_FORMAT_PHYSICALADDRESSING:
/* Physical addressing */
Kwp2000_ComState.TxBuffer[4 - (headerSize++)] = kwp2000_PhysicalAddress;
Kwp2000_ComState.TxBuffer[4 - (headerSize++)] = Kwp2000_ComState.SrcAddr; //kwp2000_ServerAddress;
Kwp2000_ComState.TxBuffer[4 - (headerSize++)] = Kwp2000_ComState.SrcAddr; // kwp2000_ServerAddress;
break;
}
Kwp2000_ComState.TxBuffer[4 - headerSize] = fmt;
......@@ -327,19 +309,19 @@ void Kwp2000_HeaderAnalyse(void)
/* Tests the header size */
switch (Kwp2000_ComState.headerSize)
{
case 1 :
case 1:
/* 1 byte -> FMT */
break;
case 2 :
case 2:
/* 2 bytes -> FMT LEN */
Kwp2000_ComState.kwp2000_Len = Kwp2000_ComState.RxBuffer[1];
break;
case 3 :
case 3:
/* 3 bytes -> FMT TGT SRC */
Kwp2000_ComState.TgtAddr = Kwp2000_ComState.RxBuffer[1];
Kwp2000_ComState.SrcAddr = Kwp2000_ComState.RxBuffer[2];
break;
case 4 :
case 4:
/* 4 bytes -> FMT TGT SRC LEN */
Kwp2000_ComState.TgtAddr = Kwp2000_ComState.RxBuffer[1];
Kwp2000_ComState.SrcAddr = Kwp2000_ComState.RxBuffer[2];
......@@ -350,7 +332,7 @@ void Kwp2000_HeaderAnalyse(void)
/*-------------------------------------------------------------------------
* Function Name : Kwp2000_FormatAnalyse
* Description : 据帧解析
* Description : ����֡����
* Input :
* Output : None
* Return : None
......@@ -369,14 +351,14 @@ unsigned char Kwp2000_FormatAnalyse(void)
/* Tests the format */
switch (Kwp2000_ComState.Format)
{
case KWP2000_FORMAT_NOADDRESS :
case KWP2000_FORMAT_NOADDRESS:
/* There is no address */
break;
case KWP2000_FORMAT_CARB :
case KWP2000_FORMAT_CARB:
/* There are source and target addresses */
Kwp2000_ComState.kwp2000_Len = 0;
case KWP2000_FORMAT_PHYSICALADDRESSING :
case KWP2000_FORMAT_FUNCTIONALADDRESSING :
case KWP2000_FORMAT_PHYSICALADDRESSING:
case KWP2000_FORMAT_FUNCTIONALADDRESSING:
/* There are source and target addresses */
headerSize += 2;
break;
......@@ -389,10 +371,9 @@ unsigned char Kwp2000_FormatAnalyse(void)
}
else
{
}
/* Sets the pointer at the beginning of the datas */
Kwp2000_ComState.Request_Datas = (unsigned char *) & (Kwp2000_ComState.RxBuffer[ headerSize ]);
Kwp2000_ComState.Request_Datas = (unsigned char *) & (Kwp2000_ComState.RxBuffer[headerSize]);
return (headerSize);
}
......@@ -420,7 +401,7 @@ unsigned char kwp2000_AddressTest(void)
{
switch (Kwp2000_ComState.Format)
{
case KWP2000_FORMAT_CARB :
case KWP2000_FORMAT_CARB:
/* CARB addressing mode */
if (Kwp2000_ComState.TgtAddr == kwp2000_CARB_TgtRequest)
{
......@@ -433,7 +414,7 @@ unsigned char kwp2000_AddressTest(void)
answer = 0;
}
break;
case KWP2000_FORMAT_PHYSICALADDRESSING :
case KWP2000_FORMAT_PHYSICALADDRESSING:
/* Physical addressing mode */
if (Kwp2000_ComState.TgtAddr == kwp2000_PhysicalAddress)
{
......@@ -446,7 +427,7 @@ unsigned char kwp2000_AddressTest(void)
answer = 0;
}
break;
case KWP2000_FORMAT_FUNCTIONALADDRESSING :
case KWP2000_FORMAT_FUNCTIONALADDRESSING:
/* Functional addressing mode */
if ((Kwp2000_ComState.TgtAddr == kwp2000_FunctionalAddress) || (Kwp2000_ComState.TgtAddr == kwp2000_PhysicalAddress))
{
......@@ -469,7 +450,7 @@ unsigned char kwp2000_AddressTest(void)
/*-------------------------------------------------------------------------
* Function Name : Kwp2000_ComInit_Handle
* Description : 量 Twup
* Description : 测量Twup
* Input :
* Output : None
* Return : None
......@@ -508,7 +489,6 @@ void Kwp2000_ComInit_Handle(void)
Kwp2000_ScanWup.xScanState_u32 = KWP2000_WUP_SCANLO_E;
Kwp2000_ScanWup.tiStartSample_u32 = Kwp2000_TimeCounter;
}
}
// measure low level time on RX-pin, if level changes to high during the first 25ms
// abort measurement
......@@ -516,8 +496,7 @@ void Kwp2000_ComInit_Handle(void)
{
if (RxPortState != 0)
{
if (((Kwp2000_TimeCounter - Kwp2000_ScanWup.tiStartSample_u32) >= KWP2000_WUP_TI_MIN_DU)
&& ((Kwp2000_TimeCounter - Kwp2000_ScanWup.tiStartSample_u32) <= KWP2000_WUP_TI_MAX_DU))
if (((Kwp2000_TimeCounter - Kwp2000_ScanWup.tiStartSample_u32) >= KWP2000_WUP_TI_MIN_DU) && ((Kwp2000_TimeCounter - Kwp2000_ScanWup.tiStartSample_u32) <= KWP2000_WUP_TI_MAX_DU))
{
Kwp2000_ScanWup.tiStartSample_u32 = Kwp2000_TimeCounter;
Kwp2000_ScanWup.xScanState_u32 = KWP2000_WUP_WAIT4SCANHI_E;
......@@ -539,7 +518,7 @@ void Kwp2000_ComInit_Handle(void)
{
Kwp2000_ScanWup.xScanState_u32 = KWP2000_WUP_DETECTED_E;
Uart_SetRxGpio(); //RX
Uart_SetRxGpio(); // RX
Kwp2000_AscEnableRx();
/* reset variables, which are used by the receive interrupt function */
......@@ -569,17 +548,17 @@ void Kwp2000_ComInit_Handle(void)
/*-------------------------------------------------------------------------
* Function Name : Kwp2000_AscRxInterrupt
* Description : 串口接收中断
* Description : ���ڽ����ж�
* Input :
* Output : None
* Return : None
* onther :
--------------------------------------------------------------------------*/
void Kwp2000_AscRxInterrupt( void )
void Kwp2000_AscRxInterrupt(void)
{
unsigned short rxUartData;
unsigned short rxUartData;
Uart_ClearRxFullFlag(); /* clear service request flags */
Uart_ClearRxFullFlag(); /* clear service request flags */
if ((Kwp2000_ComMode & PROTOCOL) == KWP2000)
{
......@@ -593,33 +572,32 @@ void Kwp2000_AscRxInterrupt( void )
if (Kwp2000_ComState.Rx_len < KWP2000_RX_BUFFER_SIZE)
{
rxUartData = Uart_GetData();
rxUartData = Uart_GetData(); /*读取串口数据 ----20220303----*/
Kwp2000_ComState.RxBuffer[Kwp2000_ComState.Rx_len] = (unsigned char)rxUartData;
Kwp2000_ComState.tiCom_u32 = Kwp2000_TimeCounter;
Kwp2000_ComState.Rx_len ++;;
Kwp2000_ComState.Rx_len++;
}
}
else
{
/* if transmit on going, do nothing */
rxUartData = Uart_GetData();
rxUartData = Uart_GetData(); /* 读取串口数据----20220303----*/
if (Kwp2000_ComState.Tx_len)
{
Kwp2000_ComState.Tx_len--;
}
if (Kwp2000_ComState.Tx_len > 0)
{
if (rxUartData == (*Kwp2000_ComState.Response_Datas))
{
Kwp2000_P2_TimeCounter = 0;
Kwp2000_ComState.Response_Datas++;
Kwp2000_AscTx (Kwp2000_ComState.Response_Datas);
Kwp2000_AscTx(Kwp2000_ComState.Response_Datas); /* 数据发送----20220303----*/
}
else
{
......
......@@ -2,6 +2,7 @@
#include "dr7f701441.dvf.h"
#include "UART.h"
//#include "rh850_macros.h"
#include "GPIO.h"
#include "r_dev_api.h"
#include "kwp2000_tp.h"
......@@ -490,6 +491,7 @@ void Uart_ConfigOperationMode(void)
unsigned char Uart_GetRxLevel(void)
{
// return PTS_PTS0;
return GPIO_OUT_PORT00_PIN03;
}
/*-------------------------------------------------------------------------
......@@ -682,6 +684,7 @@ void TJA1021_Enable(unsigned char state)
// DDRR_DDRR3 = 1;
// PTR_PTR3 = state;
GPIO_OUT_PORT16_PIN04 = state;
}
/*-------------------------------------------------------------------------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment