Commit 0b9ea76e authored by 薛晓虎's avatar 薛晓虎

🐞 fix:CAN检测台添加诊断和ble交互

parent ce596ba3
...@@ -145,6 +145,17 @@ const st_CANMsgAttribute CAN_MSG_CONST_ARRAY [ CAN_CH0_ID_TOTAL_MAX ] = ...@@ -145,6 +145,17 @@ const st_CANMsgAttribute CAN_MSG_CONST_ARRAY [ CAN_CH0_ID_TOTAL_MAX ] =
(( void * )0), (( void * )0),
}, },
{
{0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u},
{0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u},
{0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u},
5000ul,
0x0F4254FFul,//BT MAC接受ID
(( void * )0),
(( void * )0),
(( void * )0),
},
}; };
...@@ -307,6 +318,33 @@ uint8_t Get_CAN_CH0_ID_794_byte7_Sig(void) ...@@ -307,6 +318,33 @@ uint8_t Get_CAN_CH0_ID_794_byte7_Sig(void)
} }
uint8_t Get_CAN_CH0_ID_0X7F4254FF_BT_MAC_byte0_Sig(void)
{
return (((uint8_t)((uint8_t)CAN_MSG_Read(CAN_CH0_ID_BT_MAC_Msg_Count, 0u) >> 0u) & 0xFFu));
}
uint8_t Get_CAN_CH0_ID_0X7F4254FF_BT_MAC_byte1_Sig(void)
{
return (((uint8_t)((uint8_t)CAN_MSG_Read(CAN_CH0_ID_BT_MAC_Msg_Count, 1u) >> 0u) & 0xFFu));
}
uint8_t Get_CAN_CH0_ID_0X7F4254FF_BT_MAC_byte2_Sig(void)
{
return (((uint8_t)((uint8_t)CAN_MSG_Read(CAN_CH0_ID_BT_MAC_Msg_Count, 2u) >> 0u) & 0xFFu));
}
uint8_t Get_CAN_CH0_ID_0X7F4254FF_BT_MAC_byte3_Sig(void)
{
return (((uint8_t)((uint8_t)CAN_MSG_Read(CAN_CH0_ID_BT_MAC_Msg_Count, 3u) >> 0u) & 0xFFu));
}
uint8_t Get_CAN_CH0_ID_0X7F4254FF_BT_MAC_byte4_Sig(void)
{
return (((uint8_t)((uint8_t)CAN_MSG_Read(CAN_CH0_ID_BT_MAC_Msg_Count, 4u) >> 0u) & 0xFFu));
}
uint8_t Get_CAN_CH0_ID_0X7F4254FF_BT_MAC_byte5_Sig(void)
{
return (((uint8_t)((uint8_t)CAN_MSG_Read(CAN_CH0_ID_BT_MAC_Msg_Count, 5u) >> 0u) & 0xFFu));
}
...@@ -361,6 +399,9 @@ uint8_t Co_Can_ConvertSubID(uint32_t MsgID) ...@@ -361,6 +399,9 @@ uint8_t Co_Can_ConvertSubID(uint32_t MsgID)
case CAN_CH0_ID_UDS_REC_Msg: case CAN_CH0_ID_UDS_REC_Msg:
u8Result = CAN_CH0_ID_UDS_REC_Msg_Count; u8Result = CAN_CH0_ID_UDS_REC_Msg_Count;
break; break;
case CAN_BT_MAC_ID:
u8Result = CAN_CH0_ID_BT_MAC_Msg_Count;
break;
default : default :
u8Result = CAN_CH0_ID_TOTAL_MAX; u8Result = CAN_CH0_ID_TOTAL_MAX;
break; break;
......
...@@ -21,6 +21,7 @@ typedef enum ...@@ -21,6 +21,7 @@ typedef enum
CAN_CH0_ID_gm_esp_ee_Msg_Count, CAN_CH0_ID_gm_esp_ee_Msg_Count,
CAN_CH0_ID_UDS_REC_Msg_Count, CAN_CH0_ID_UDS_REC_Msg_Count,
CAN_CH0_ID_BT_MAC_Msg_Count,
CAN_CH0_ID_TOTAL_MAX, CAN_CH0_ID_TOTAL_MAX,
} CAN_MSG_ID_t; } CAN_MSG_ID_t;
...@@ -50,6 +51,7 @@ extern const st_CAN_SendAttribute st_CANSendAttr[ID_SEND_TOTAL] ; ...@@ -50,6 +51,7 @@ extern const st_CAN_SendAttribute st_CANSendAttr[ID_SEND_TOTAL] ;
#define CAN_CH0_ID_esp32_soft_Msg 0x0C70FFD4ul #define CAN_CH0_ID_esp32_soft_Msg 0x0C70FFD4ul
#define CAN_CH0_ID_gm_esp_ee_Msg 0x0C87FFD4ul #define CAN_CH0_ID_gm_esp_ee_Msg 0x0C87FFD4ul
#define CAN_CH0_ID_UDS_REC_Msg 0x794ul #define CAN_CH0_ID_UDS_REC_Msg 0x794ul
#define CAN_BT_MAC_ID 0X0F4254FF
extern uint32_t Get_ID_ODO(void); extern uint32_t Get_ID_ODO(void);
...@@ -85,7 +87,12 @@ extern uint8_t Get_CAN_CH0_ID_794_byte5_Sig(void); ...@@ -85,7 +87,12 @@ extern uint8_t Get_CAN_CH0_ID_794_byte5_Sig(void);
extern uint8_t Get_CAN_CH0_ID_794_byte6_Sig(void); extern uint8_t Get_CAN_CH0_ID_794_byte6_Sig(void);
extern uint8_t Get_CAN_CH0_ID_794_byte7_Sig(void); extern uint8_t Get_CAN_CH0_ID_794_byte7_Sig(void);
extern uint8_t Get_CAN_CH0_ID_0X7F4254FF_BT_MAC_byte0_Sig(void);
extern uint8_t Get_CAN_CH0_ID_0X7F4254FF_BT_MAC_byte1_Sig(void);
extern uint8_t Get_CAN_CH0_ID_0X7F4254FF_BT_MAC_byte2_Sig(void);
extern uint8_t Get_CAN_CH0_ID_0X7F4254FF_BT_MAC_byte3_Sig(void);
extern uint8_t Get_CAN_CH0_ID_0X7F4254FF_BT_MAC_byte4_Sig(void);
extern uint8_t Get_CAN_CH0_ID_0X7F4254FF_BT_MAC_byte5_Sig(void);
......
...@@ -73,10 +73,14 @@ void MENU_CHECK_STEP_ADD(void) ...@@ -73,10 +73,14 @@ void MENU_CHECK_STEP_ADD(void)
MENU_CHECK_STEP++; MENU_CHECK_STEP++;
// if(MENU_CHECK_STEP > 17) // if(MENU_CHECK_STEP > 17)
if(MENU_CHECK_STEP > 13) if(MENU_CHECK_STEP>16)
{ {
MENU_CHECK_STEP = 0; MENU_CHECK_STEP = 0;
} }
else if(MENU_CHECK_STEP > 13)
{
MENU_CHECK_STEP = 16;
}
} }
void MENU_CHECK_STEP_SUB(void) void MENU_CHECK_STEP_SUB(void)
{ {
...@@ -126,7 +130,7 @@ void HW_CHECK_IPK_EXIST(void) ...@@ -126,7 +130,7 @@ void HW_CHECK_IPK_EXIST(void)
DIAG_BUFER [ 1 ] = 0x00; DIAG_BUFER [ 1 ] = 0x00;
UDS_S_Data_Request(DIAG_ID_Tx, DIAG_BUFER, 2); UDS_S_Data_Request(DIAG_ID_Tx, DIAG_BUFER, 2);
SET_IPK_NONE( ); // SET_IPK_NONE( );
} }
void SET_IPK_NONE(void) void SET_IPK_NONE(void)
......
...@@ -8,8 +8,8 @@ ...@@ -8,8 +8,8 @@
#ifndef _DIAG_ID_DEF_H_ #ifndef _DIAG_ID_DEF_H_
#define _DIAG_ID_DEF_H_ #define _DIAG_ID_DEF_H_
#define DIAG_ID_Tx 0x18DA17FAu /*����ID*/ #define DIAG_ID_Tx 0x714u /*����ID*/
#define DIAG_ID_Rx_PHY 0x18DAFA17u /*����ID,����Ѱַ*/ #define DIAG_ID_Rx_PHY 0x794u /*����ID,����Ѱַ*/
#define DIAG_ID_Rx_FUN 0x18DAFA17u /*����ID,����Ѱַ*/ #define DIAG_ID_Rx_FUN 0x7dfu /*����ID,����Ѱַ*/
#endif #endif
...@@ -4635,6 +4635,7 @@ void Display_Send_Vspead(uint8_t menu) ...@@ -4635,6 +4635,7 @@ void Display_Send_Vspead(uint8_t menu)
//Send_Init(); //Send_Init();
//Send_ODO_Init(); //Send_ODO_Init();
HW_Static_Current_Check(1); HW_Static_Current_Check(1);
memset(blename,0xFF,5);
break; break;
case 14: case 14:
GUI_Display_Version_Code_Service(25, 20, "Please enter password ", Letter_Num_11, PCodeText_Space_size); GUI_Display_Version_Code_Service(25, 20, "Please enter password ", Letter_Num_11, PCodeText_Space_size);
......
...@@ -109,6 +109,10 @@ void Key_Operation_SW7(Key_Event_en_t enKeyEvent) ...@@ -109,6 +109,10 @@ void Key_Operation_SW7(Key_Event_en_t enKeyEvent)
if(zhenduanflag != 2 && zhenduanflag != 3) if(zhenduanflag != 2 && zhenduanflag != 3)
{ {
zhenduanflag = 2; zhenduanflag = 2;
FYReadState = FYReadState_ReqF187;
} }
else else
{ {
...@@ -136,6 +140,10 @@ void Key_Operation_SW8(Key_Event_en_t enKeyEvent) ...@@ -136,6 +140,10 @@ void Key_Operation_SW8(Key_Event_en_t enKeyEvent)
if(zhenduanflag != 1) if(zhenduanflag != 1)
{ {
zhenduanflag = 1; zhenduanflag = 1;
FYWriteState = FYWriteState_Req1003;
} }
else else
{ {
......
...@@ -96,7 +96,7 @@ uint8_t Can_Write(_CAN_Msg *Msg) ...@@ -96,7 +96,7 @@ uint8_t Can_Write(_CAN_Msg *Msg)
uint32_t idx; uint32_t idx;
m_msg.u32CANID = Msg->MsgID; m_msg.u32CANID = Msg->MsgID;
m_msg.u8CANLEN = Msg->MsgDLC; m_msg.u8CANLEN = Msg->MsgDLC;
m_msg.u8CANFrameIDE = 1; m_msg.u8CANFrameIDE = 0;
for ( i = 0; i < m_msg.u8CANLEN; i++ ) for ( i = 0; i < m_msg.u8CANLEN; i++ )
{ {
m_msg.unCANData.u8CANData [ i ] = Msg->Msg [ i ]; m_msg.unCANData.u8CANData [ i ] = Msg->Msg [ i ];
...@@ -107,6 +107,8 @@ uint8_t Can_Write(_CAN_Msg *Msg) ...@@ -107,6 +107,8 @@ uint8_t Can_Write(_CAN_Msg *Msg)
} }
RSCAN0_CH4_Set_TXBUF_Data(Msg->MsgPro, &m_msg); RSCAN0_CH4_Set_TXBUF_Data(Msg->MsgPro, &m_msg);
// RSCAN0_CH4_Set_FIFO0_Data(&m_msg);
return 0; return 0;
} }
......
...@@ -22,6 +22,8 @@ ...@@ -22,6 +22,8 @@
#include "RTE_WDT.h" #include "RTE_WDT.h"
#include "R485_Communication_Matrix.h" #include "R485_Communication_Matrix.h"
#include "CAN_Communication_Matrix.h" #include "CAN_Communication_Matrix.h"
// #include <stdio.h>
// #include <stdint.h>
/******************************************************************************* /*******************************************************************************
* * * *
* ϵͳ��������ģʽ(SYS_MODE_OFF / SYS_MODE_ON / SYS_MODE_STANDBY )�����б� * * ϵͳ��������ģʽ(SYS_MODE_OFF / SYS_MODE_ON / SYS_MODE_STANDBY )�����б� *
...@@ -40,9 +42,14 @@ uint8_t startONfalg = 0; ...@@ -40,9 +42,14 @@ uint8_t startONfalg = 0;
uint32_t startIGONtime = 0; uint32_t startIGONtime = 0;
uint8_t compareresult; uint8_t compareresult;
extern uint8_t keyopenble; extern uint8_t keyopenble;
uint8_t Ble_Can_name[5];
const unsigned char gImage_cuo1[] = {24, 24,0X00,0X00,0X00,0X00,0X30,0X70,0XE0,0XC0,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XC0,0X70,0X30,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X83,0XC7,0X66,0X38,0X38,0X7C,0XE6,0XC3,0X81,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0C,0X0C,0X06,0X03,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X03,0X07,0X0E,0X0C,0X00,0X00,0X00,0X00,}; const unsigned char gImage_cuo1[] = {24, 24,0X00,0X00,0X00,0X00,0X30,0X70,0XE0,0XC0,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XC0,0X70,0X30,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X83,0XC7,0X66,0X38,0X38,0X7C,0XE6,0XC3,0X81,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0C,0X0C,0X06,0X03,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X03,0X07,0X0E,0X0C,0X00,0X00,0X00,0X00,};
const unsigned char gImage_dui1[] = {24, 24,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XC0,0XE0,0X40,0X00,0X00,0X00,0X00,0X08,0X18,0X30,0X70,0XC0,0X80,0X00,0X00,0X80,0XC0,0XE0,0X70,0X38,0X1C,0X0E,0X07,0X03,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X03,0X07,0X03,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,}; const unsigned char gImage_dui1[] = {24, 24,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XC0,0XE0,0X40,0X00,0X00,0X00,0X00,0X08,0X18,0X30,0X70,0XC0,0X80,0X00,0X00,0X80,0XC0,0XE0,0X70,0X38,0X1C,0X0E,0X07,0X03,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X03,0X07,0X03,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,};
static uint8 bcd2ascii[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
void Get_PN_msg(void); void Get_PN_msg(void);
void OPE_BLE_Address(void);
void Send_BT_MAC(void);
void LY_Connect(void);
void Sys_Run_Mode_Pseudo_Real_Time_Tasks(void) void Sys_Run_Mode_Pseudo_Real_Time_Tasks(void)
{ {
SD_FMQ = 1; SD_FMQ = 1;
...@@ -68,6 +75,9 @@ void Sys_Run_Mode_2ms_Tasks_Group(void) ...@@ -68,6 +75,9 @@ void Sys_Run_Mode_2ms_Tasks_Group(void)
RTE_ADC_Services( ); RTE_ADC_Services( );
Get_static_Current(); Get_static_Current();
// can_std_io = 0; // can_std_io = 0;
UDS_FiveYardsRead();
UDS_FiveYardsWrite();
} }
/*============================================================================== /*==============================================================================
...@@ -292,13 +302,15 @@ void Sys_Run_Mode_10ms_Tasks_Group(void) ...@@ -292,13 +302,15 @@ void Sys_Run_Mode_10ms_Tasks_Group(void)
{ {
// R485_Send_0x47(); // R485_Send_0x47();
// comparestart = 0; // comparestart = 0;
Can_Send_0x714(); // Can_Send_0x714();
} }
else if (zhenduanflag == 2) else if (zhenduanflag == 2)
{ {
// R485_Sendcheck_0x47(); // R485_Sendcheck_0x47();
Can_Send_0x714_CHECK(); // Can_Send_0x714_CHECK();
Get_PN_msg(); // Get_PN_msg();
} }
else else
{ {
...@@ -389,7 +401,7 @@ void Sys_Run_Mode_50ms_Tasks_Group(void) ...@@ -389,7 +401,7 @@ void Sys_Run_Mode_50ms_Tasks_Group(void)
// timerms = 0; // timerms = 0;
// } // }
// // Read_IPK_Session_Type( );//请求仪表发送 软硬件版本号 等数据。 // Read_IPK_Session_Type( );//请求仪表发送 软硬件版本号 等数据。
// } // }
if(timerms >=60) if(timerms >=60)
...@@ -411,9 +423,15 @@ uint8_t compareresult; ...@@ -411,9 +423,15 @@ uint8_t compareresult;
uint8_t flashtime = 0; uint8_t flashtime = 0;
uint8_t showtime = 0; uint8_t showtime = 0;
uint8_t bleuarttime = 0; uint8_t bleuarttime = 0;
uint8_t CANOpenBle[17] = {0};
void Sys_Run_Mode_100ms_Tasks_Group(void) void Sys_Run_Mode_100ms_Tasks_Group(void)
{ {
static uint32_t loc_timer = 0; static uint32_t loc_timer = 0;
static uint32_t BleCan_timer = 0;
static uint32_t BTCan_timer = 0;
static uint32_t LY_Connect_Can_timer =- 0;
loc_timer++; loc_timer++;
if ( loc_timer >= 3 ) if ( loc_timer >= 3 )
{ {
...@@ -423,7 +441,27 @@ void Sys_Run_Mode_100ms_Tasks_Group(void) ...@@ -423,7 +441,27 @@ void Sys_Run_Mode_100ms_Tasks_Group(void)
} }
Display_PageNum(); Display_PageNum();
BleCan_timer++;
if(BleCan_timer >= 10)
{
BleCan_timer = 0;
OPE_BLE_Address();
Get_Ble_Address();
}
BTCan_timer++;
if(BTCan_timer >= 20)
{
BTCan_timer = 0;
Send_BT_MAC();
}
LY_Connect_Can_timer++;
if(LY_Connect_Can_timer >= 2)
{
LY_Connect_Can_timer = 0;
LY_Connect();
}
// Freln_Duty_HZ_Service(); // Freln_Duty_HZ_Service();
if(RS485_send_time<0xFFFFFFFF) if(RS485_send_time<0xFFFFFFFF)
...@@ -748,8 +786,14 @@ void can_submit(void) ...@@ -748,8 +786,14 @@ void can_submit(void)
uint8_t data19[8] = {0, 0, 0, 0, 0, 0, 0, 0};//0x0C21FFD3 uint8_t data19[8] = {0, 0, 0, 0, 0, 0, 0, 0};//0x0C21FFD3
CAN_Frame_st_t m_msg25;//密码 CAN_Frame_st_t m_msg25;//密码
uint8_t data25[8] = {0, 0, 0, 0, 0, 0, 0, 0};//0x0C20FFD1 uint8_t data25[8] = {0, 0, 0, 0, 0, 0, 0, 0};//0x0C20FFD1
if(MENU_CHECK_STEP != 16)
{
CANOpenBle[8] = 0;
UART_Ch2_Send_Multiple_Byte(CANOpenBle,sizeof(CANOpenBle));
}
switch (MENU_CHECK_STEP) switch (MENU_CHECK_STEP)
{ {
case 0: case 0:
...@@ -1561,6 +1605,9 @@ CAN_Frame_st_t m_msg25;//密码 ...@@ -1561,6 +1605,9 @@ CAN_Frame_st_t m_msg25;//密码
init_CAN_Frame(&m_msg18, 0x0CA0FFDC, 8, 1, data18); // abs驱动tcs init_CAN_Frame(&m_msg18, 0x0CA0FFDC, 8, 1, data18); // abs驱动tcs
break; break;
case 16:
CANOpenBle[8] = 1;
UART_Ch2_Send_Multiple_Byte(CANOpenBle,sizeof(CANOpenBle));
default: default:
init_CAN_Frame(&m_msg1, 0x0C20FFD2, 8, 1, data1); // 车速 init_CAN_Frame(&m_msg1, 0x0C20FFD2, 8, 1, data1); // 车速
...@@ -1603,6 +1650,7 @@ CAN_Frame_st_t m_msg25;//密码 ...@@ -1603,6 +1650,7 @@ CAN_Frame_st_t m_msg25;//密码
} }
if(MENU_CHECK_STEP == 0) if(MENU_CHECK_STEP == 0)
{ {
//can_mid(m_msg1);
; ;
} }
else if(MENU_CHECK_STEP == 14) else if(MENU_CHECK_STEP == 14)
...@@ -1711,264 +1759,158 @@ CAN_Frame_st_t m_msg25;//密码 ...@@ -1711,264 +1759,158 @@ CAN_Frame_st_t m_msg25;//密码
uint8_t test[20] = {0}; uint8_t test[20] = {0};
void Can_Send_0x714(void) void Can_Send_0x714(void)
{ {
}
switch (zhenduansendStep)
{
case 0:
// if(barcode_Msg[0] != 51 && barcode_Msg[1] != 55)
// {
// zhenduansendStep = 0;
// break;
// }
data20[0] = 0x02;
data20[1] = 0x10;
data20[2] = 0x03;
data20[3] = 0xAA;
data20[4] = 0xAA;
data20[5] = 0xAA;
data20[6] = 0xAA;
data20[7] = 0xAA;
init_CAN_Frame(&m_msg20, 0x714, 8, 0, data20); //诊断
can_mid(m_msg20);
zhenduansendStep++;
break;
case 1:
data20[0] = 0x02;
data20[1] = 0x27;
data20[2] = 0x01;
data20[3] = 0xAA;
data20[4] = 0xAA;
data20[5] = 0xAA;
data20[6] = 0xAA;
data20[7] = 0xAA;
init_CAN_Frame(&m_msg20, 0x714, 8, 0, data20); //诊断
can_mid(m_msg20);
seed_value[0] = CAN_MSG_Read(11,3);
seed_value[1] = CAN_MSG_Read(11,4);
seed_value[2] = CAN_MSG_Read(11,5);
seed_value[3] = CAN_MSG_Read(11,6);
zhenduansendStep++;
break;
case 2:
seed_value[0] = CAN_MSG_Read(11,3); uint8_t isDateCorrect(uint8_t date[])
seed_value[1] = CAN_MSG_Read(11,4); {
seed_value[2] = CAN_MSG_Read(11,5); uint8_t i;
seed_value[3] = CAN_MSG_Read(11,6); uint8_t enResult = 0;
if(CAN_MSG_Read(11,1) == 0x67 && CAN_MSG_Read(11,2) == 0x01) uint16_t yearValue = 0;
uint8_t monthValue = 0;
uint8_t dayValue = 0;
for (i = 0; i < 4; i++)
{ {
get_key_value(); if (((date[i] & 0xF) > 9) || (((date[i] >> 4) & 0xF) > 9))
zhenduansendStep++;
}
else
{ {
// seed_value[0] = CAN_MSG_Read(11,1); enResult = 1; // not BCD, break loop and return.
// seed_value[1] = CAN_MSG_Read(11,2);
// zhenduansendStep--;
return;
}
//Gen_TimeDelay(10000, 50);
break;
case 3:
//Gen_TimeDelay(10000, 50);
data20[0] = 0x06;
data20[1] = 0x27;
data20[2] = 0x02;
data20[3] = key_array[0];
data20[4] = key_array[1];
data20[5] = key_array[2];
data20[6] = key_array[3];
data20[7] = 0xAA;
init_CAN_Frame(&m_msg20, 0x714, 8, 0, data20); //诊断
can_mid(m_msg20);
zhenduansendStep++;
//Gen_TimeDelay(10000, 50);
break; break;
case 4:
if(CAN_MSG_Read(11,1) == 0x67 && CAN_MSG_Read(11,2) == 0x02)
{
zhenduansendStep++;
} }
else
{
return;
} }
case 5: if (enResult == 0)
data20[0] = 0x10; {
data20[1] = 0x12; yearValue = (date[3] << 8) + date[2];
data20[2] = 0x2E; monthValue = date[1];
data20[3] = 0xF1; dayValue = date[0];
data20[4] = 0x87;
data20[5] = barcode_Msg[0];
data20[6] = barcode_Msg[1];
data20[7] = barcode_Msg[2];
init_CAN_Frame(&m_msg20, 0x714, 8, 0, data20);
can_mid(m_msg20);
Gen_TimeDelay(10000, 50);
zhenduansendStep++;
//Gen_TimeDelay(10000, 50);
yearValue = ((yearValue >> 12) & 0xF) * 1000 + ((yearValue >> 8) & 0xF) * 100 + ((yearValue >> 4) & 0xF) * 10 + (yearValue & 0xF);
monthValue = ((monthValue >> 4) & 0xF) * 10 + (monthValue & 0xF);
dayValue = ((dayValue >> 4) & 0xF) * 10 + (dayValue & 0xF);
case 6: if ((monthValue >= 1) && (monthValue <= 13))
data20[0] = 0x21; {
data20[1] = barcode_Msg[3]; if (monthValue == 2)
data20[2] = barcode_Msg[4]; {
data20[3] = barcode_Msg[5]; if ((yearValue % 400 == 0) || ((yearValue % 100 != 0) && (yearValue % 4 == 0))) // leap year
data20[4] = barcode_Msg[6];
data20[5] = barcode_Msg[7];
data20[6] = barcode_Msg[8];
data20[7] = barcode_Msg[9];
init_CAN_Frame(&m_msg20, 0x714, 8, 0, data20);
can_mid(m_msg20);
zhenduansendStep++;
case 7:
data20[0] = 0x22;
data20[1] = barcode_Msg[10];
data20[2] = barcode_Msg[11];
data20[3] = barcode_Msg[12];
data20[4] = barcode_Msg[13];
data20[5] = barcode_Msg[14];
data20[6] = 0xAA;
data20[7] = 0xAA;
init_CAN_Frame(&m_msg20, 0x714, 8, 0, data20);
can_mid(m_msg20);
zhenduansendStep++;
Gen_TimeDelay(10000, 50);
case 8:
if(CAN_MSG_Read(11,0) == 0x03 && CAN_MSG_Read(11,1) == 0x6E)
{ {
zhenduansendStep++; if ((dayValue == 0) || (dayValue > 29))
{
enResult = 4; // incorrect day
}
} }
else else
{ {
return; if ((dayValue == 0) || (dayValue > 28))
{
enResult = 4; // incorrect day
} }
break; }
case 9: }
data20[0] = 0x10; else if ((monthValue == 4) || (monthValue == 6) || (monthValue == 9) || (monthValue == 11))
data20[1] = 0x08; {
data20[2] = 0x2E; if ((dayValue == 0) || (dayValue > 30))
data20[3] = 0xF1;
data20[4] = 0x8A;
data20[5] = barcode_Msg[15];
data20[6] = barcode_Msg[16];
data20[7] = barcode_Msg[17];
init_CAN_Frame(&m_msg20, 0x714, 8, 0, data20);
can_mid(m_msg20);
Gen_TimeDelay(10000, 50);
zhenduansendStep++;
break;
case 10:
data20[0] = 0x21;
data20[1] = barcode_Msg[18];
data20[2] = barcode_Msg[19];
data20[3] = 0xAA;
data20[4] = 0xAA;
data20[5] = 0xAA;
data20[6] = 0xAA;
data20[7] = 0xAA;
init_CAN_Frame(&m_msg20, 0x714, 8, 0, data20);
can_mid(m_msg20);
Gen_TimeDelay(10000, 50);
zhenduansendStep++;
break;
case 11:
if(CAN_MSG_Read(11,0) == 0x03 && CAN_MSG_Read(11,1) == 0x6E && CAN_MSG_Read(11,3) == 0x8A)
{ {
zhenduansendStep++; enResult = 4; // incorrect day
}
} }
else else
{ {
return; if ((dayValue == 0) || (dayValue > 31))
}
break;
case 12:
data20[0] = 0x07;
data20[1] = 0x2E;
data20[2] = 0xF1;
data20[3] = 0x99;
data20[4] = (barcode_Msg[20] - 0x30) >> 4 | (barcode_Msg[21] - 0x30);
data20[5] = (barcode_Msg[22] - 0x30) >> 4 | (barcode_Msg[23] - 0x30);
data20[6] = (barcode_Msg[24] - 0x30) >> 4 | (barcode_Msg[25] - 0x30);
data20[7] = (barcode_Msg[26] - 0x30) >> 4 | (barcode_Msg[27] - 0x30);
init_CAN_Frame(&m_msg20, 0x714, 8, 0, data20);
can_mid(m_msg20);
Gen_TimeDelay(10000, 50);
zhenduansendStep++;
break;
case 13:
Gen_TimeDelay(10000, 50);
if(CAN_MSG_Read(11,0) == 0x03 && CAN_MSG_Read(11,1) == 0x6E && CAN_MSG_Read(11,3) == 0x99)
{ {
zhenduansendStep++; enResult = 4; // incorrect day
}
}
} }
else else
{ {
return; enResult = 3; // incorrect month
}
} }
break;
case 14:
data20[0] = 0x10;
data20[1] = 0x09;
data20[2] = 0x2E;
data20[3] = 0xF1;
data20[4] = 0x8C;
data20[5] = barcode_Msg[28] - 0x30;
data20[6] = barcode_Msg[29] - 0x30;
data20[7] = barcode_Msg[30] - 0x30;
init_CAN_Frame(&m_msg20, 0x714, 8, 0, data20);
can_mid(m_msg20);
Gen_TimeDelay(10000, 50);
zhenduansendStep++;
break; return enResult;
case 15: }
data20[0] = 0x21;
data20[1] = barcode_Msg[31] - 0x30;
data20[2] = barcode_Msg[32] - 0x30;
data20[3] = barcode_Msg[33] - 0x30;
data20[4] = 0xAA; void ASC2BCD(uint8_t* bcd, const uint8_t* asc, uint8_t len);
data20[5] = 0xAA; void BCD2ASC(uint8_t* asc, const uint8_t* bcd, uint8_t len);
data20[6] = 0xAA;
data20[7] = 0xAA; // int main(void)//测试程序
init_CAN_Frame(&m_msg20, 0x714, 8, 0, data20); // {
can_mid(m_msg20); // uint16_t ascii[8] = {0};
Gen_TimeDelay(10000, 50); // uint16_t bcd[4] = {0x20,0x25,0x02,0x22};
zhenduansendStep++;
break; // BCD2ASC(ascii, bcd, 4);
case 16:
Gen_TimeDelay(10000, 50); // for(int i = 0; i < 8; i++)
if(CAN_MSG_Read(11,0) == 0x03 && CAN_MSG_Read(11,1) == 0x6E && CAN_MSG_Read(11,3) == 0x8C) // {
// printf("ascii = 0x%.2x\n", ascii[i]);
// }
// return 0;
// }
void ASC2BCD(uint8_t* bcd, const uint8_t* asc, uint8_t len)
{
uint8_t c = 0;
int index = 0;
len >>= 1;
//high BCD
for(int i = 0; i < len; i++)
{ {
zhenduansendStep++; //first BCD
if(*asc >= 0x30 && *asc <= 0x39)
{
index = *asc - 0x30;
c = index<<4;
} }
else asc++;
//low BCD
if(*asc >= 0x30 && *asc <= 0x39)
{ {
return; index = *asc - 0x30;
c |= index;
} }
break; asc++;
case 17: *bcd++ = c;
LINE_OUT_NEG_01 = 0; }
LINE_OUT_NEG_02 = 0; }
LINE_OUT_NEG_03 = 0;
LINE_OUT_NEG_04 = 0;
zhenduansendStep = 0; void BCD2ASC (uint8_t *asc, const uint8_t *bcd, uint8_t len)
break; {
default: uint8_t c = 0;
break; uint8_t i;
for(i = 0; i < len; i++)
{
//first BCD
c = *bcd >> 4;
*asc++ = bcd2ascii[c];
//second
c = *bcd & 0x0f;
*asc++ = bcd2ascii[c];
bcd++;
} }
// if(zhenduansendStep != 4)
// {
// u32sendendflag = can_mid(m_msg20);
// }
//return u32sendendflag;
} }
#define MASK_01 0x1A2B3C06
#define MASK_11 0x1A2B4D06
void get_key_value(void) void get_key_value(void)
{ {
uint8_t i = 0; uint8_t i = 0;
...@@ -2017,315 +1959,306 @@ void get_key_value(void) ...@@ -2017,315 +1959,306 @@ void get_key_value(void)
key_value_all = SeedValue; key_value_all = SeedValue;
} }
} }
static void Ser27_CalculateKeyLV11(uint8_t Seed[], uint8_t Key[])
{
uint8_t i = 0;
uint32_t SeedValue = 0;
SeedValue = (uint32_t)Seed[0];
SeedValue = (SeedValue << 8u) | ((uint32_t)Seed[1]);
SeedValue = (SeedValue << 8u) | ((uint32_t)Seed[2]);
SeedValue = (SeedValue << 8u) | ((uint32_t)Seed[3]);
if (SeedValue != 0)
{
for (i = 0; i < 47; i++)
{
if (SeedValue & 0x80000000)
{
SeedValue = SeedValue << 1;
SeedValue = SeedValue ^ MASK_11;
}
else if (SeedValue & 0x40000000)
{
SeedValue = SeedValue << 2;
SeedValue = SeedValue ^ MASK_11;
}
else if (SeedValue & 0x20000000)
{
SeedValue = SeedValue << 3;
SeedValue = SeedValue ^ MASK_11;
}
else if (SeedValue & 0x10000000)
{
SeedValue = SeedValue << 4;
SeedValue = SeedValue ^ MASK_11;
}
else
{
SeedValue = ~SeedValue;
}
}
SeedValue = (uint32_t)(((SeedValue << 3) ^ (MASK_11 >> 2)) ^ ((SeedValue >> 2) ^ (MASK_11 << 3)));
Key[0] = (uint8_t)(SeedValue >> 24);
Key[1] = (uint8_t)(SeedValue >> 16);
Key[2] = (uint8_t)(SeedValue >> 8);
Key[3] = (uint8_t)SeedValue;
}
}
uint8_t u8get714msg[8]; uint8_t u8get714msg[8];
uint8_t PNtestresult = 0; uint8_t PNtestresult = 0;
uint8_t lingjianhao[21]; uint8_t lingjianhao[21];
uint8_t PNresult = 0; uint8_t PNresult = 0;
void Get_PN_msg(void) void Get_PN_msg(void)
{ {
if(PNtestresult == 1) }
{
return ;
}
u8get714msg[0] = Get_CAN_CH0_ID_794_byte0_Sig();
u8get714msg[1] = Get_CAN_CH0_ID_794_byte1_Sig();
u8get714msg[2] = Get_CAN_CH0_ID_794_byte2_Sig();
u8get714msg[3] = Get_CAN_CH0_ID_794_byte3_Sig();
u8get714msg[4] = Get_CAN_CH0_ID_794_byte4_Sig();
u8get714msg[5] = Get_CAN_CH0_ID_794_byte5_Sig();
u8get714msg[6] = Get_CAN_CH0_ID_794_byte6_Sig();
u8get714msg[7] = Get_CAN_CH0_ID_794_byte7_Sig();
if(u8get714msg[0] == 0x10 && u8get714msg[4] == 0x87 && PNresult == 0)
{
memset(lingjianhao,0xFF,sizeof(lingjianhao));
// memcpy(&lingjianhao[0],&u8get714msg[5],3);
lingjianhao[0] = u8get714msg[5];
lingjianhao[1] = u8get714msg[6];
lingjianhao[2] = u8get714msg[7];
PNresult = 1;
}
else if(u8get714msg[0] == 0x21 && PNresult == 1)
{
// memcpy(&lingjianhao[3],&u8get714msg[1],7);
lingjianhao[3] = u8get714msg[1];
lingjianhao[4] = u8get714msg[2];
lingjianhao[5] = u8get714msg[3];
lingjianhao[6] = u8get714msg[4];
lingjianhao[7] = u8get714msg[5];
lingjianhao[8] = u8get714msg[6];
lingjianhao[9] = u8get714msg[7];
PNresult = 2;
}
else if(u8get714msg[0] == 0x22 && PNresult == 2)
{
// memcpy(&lingjianhao[10],&u8get714msg[1],7);
lingjianhao[10] = u8get714msg[1];
lingjianhao[11] = u8get714msg[2];
lingjianhao[12] = u8get714msg[3];
lingjianhao[13] = u8get714msg[4];
lingjianhao[14] = u8get714msg[5];
lingjianhao[15] = u8get714msg[6];
// lingjianhao[16] = u8get714msg[7];
PNresult = 3;
}
else if(u8get714msg[0] == 0x23 && PNresult == 3)
{
// lingjianhao[21] = 0xFF;
// memcpy(&lingjianhao[17],&u8get714msg[1],7);
General_Number_Disp(lingjianhao, 15, 100);
PNtestresult = 1;
}
void Send_BT_MAC(void)
{
uint8_t BT_Mac[8] = {0} ;
CAN_Frame_st_t CanBTMsg;
BT_Mac[0] = CANOpenBle[7];
BT_Mac[1] = CANOpenBle[6];
BT_Mac[2] = CANOpenBle[5];
BT_Mac[3] = CANOpenBle[4];
BT_Mac[4] = CANOpenBle[3];
BT_Mac[5] = CANOpenBle[2];
BT_Mac[6] = 0x00;
BT_Mac[7] = 0x00;
init_CAN_Frame(&CanBTMsg,BLE_ID_TX,8,1,BT_Mac);
can_mid(CanBTMsg);
}
void Get_Ble_Address(void)
{
uint8_t Ble_Request[8] = {0};
CAN_Frame_st_t CanBleMsg;
Ble_Request[0] = 0x0A;
Ble_Request[1] = 0x05;
Ble_Request[2] = 0x05;
Ble_Request[3] = 0x0A;
Ble_Request[4] = 0x07;
Ble_Request[5] = 0x08;
Ble_Request[6] = 0x08;
Ble_Request[7] = 0x07;
init_CAN_Frame(&CanBleMsg,BT_ID_TX,8,1,Ble_Request);
can_mid(CanBleMsg);
}
void LY_Connect(void)
{
uint8_t LY_Connect[8] = {0};
CAN_Frame_st_t LYConnectMsg;
init_CAN_Frame(&LYConnectMsg,LY_CON_ID,8,1,LY_Connect);
can_mid(LYConnectMsg);
} }
void OPE_BLE_Address(void)
{
CANOpenBle[0] = 0x56;
CANOpenBle[1] = 0x44;
CANOpenBle[2] = 0x0A;
CANOpenBle[3] = 0x8A;
CANOpenBle[4] = 0x0A;
CANOpenBle[5] = 0x0A;
CANOpenBle[6] = name1;
CANOpenBle[7] = name2;
CANOpenBle[8] = 0x01;
CANOpenBle[9] = Get_CAN_CH0_ID_0X7F4254FF_BT_MAC_byte0_Sig();
CANOpenBle[10] = Get_CAN_CH0_ID_0X7F4254FF_BT_MAC_byte1_Sig();
CANOpenBle[11] = Get_CAN_CH0_ID_0X7F4254FF_BT_MAC_byte2_Sig();
CANOpenBle[12] = Get_CAN_CH0_ID_0X7F4254FF_BT_MAC_byte3_Sig();
CANOpenBle[13] = Get_CAN_CH0_ID_0X7F4254FF_BT_MAC_byte4_Sig();
CANOpenBle[14] = Get_CAN_CH0_ID_0X7F4254FF_BT_MAC_byte5_Sig();
CANOpenBle[15] = 0x4B;
CANOpenBle[16] = 0x4A;
BCD2ASC(blename,&name1,2);
BCD2ASC(blename+2,&name2,2);
blename[4] = 0xff;
}
void Can_Send_0x714_CHECK(void) void Can_Send_0x714_CHECK(void)
{ {
// if (Get_CAN_CH0_ID_794_byte0_Sig() == 0x21)
// {
// get_num_buf[3] = Get_CAN_CH0_ID_794_byte1_Sig();
// get_num_buf[4] = Get_CAN_CH0_ID_794_byte2_Sig();
// get_num_buf[5] =Get_CAN_CH0_ID_794_byte3_Sig();
// get_num_buf[6] = Get_CAN_CH0_ID_794_byte4_Sig();
// get_num_buf[7] = Get_CAN_CH0_ID_794_byte5_Sig();
// get_num_buf[8] =Get_CAN_CH0_ID_794_byte6_Sig();
// get_num_buf[9] = Get_CAN_CH0_ID_794_byte7_Sig();
// // zhenduansendStep++;
// }
switch (zhenduansendStep)
{
case 0:
// if(barcode_Msg1[0] != 51 && barcode_Msg1[1] != 55)
// {
// zhenduansendStep = 0;
// break;
// }
data20[0] = 0x03;
data20[1] = 0x22;
data20[2] = 0xF1;
data20[3] = 0x87;
data20[4] = 0xAA;
data20[5] = 0xAA;
data20[6] = 0xAA;
data20[7] = 0xAA;
init_CAN_Frame(&m_msg20, 0x714, 8, 0, data20); //诊断
can_mid(m_msg20);
// Gen_TimeDelay(10000, 50);
zhenduansendStep++;
break;
case 1:
Get_PN_msg();
data20[0] = 0x30;
data20[1] = 0x00;
data20[2] = 0x00;
data20[3] = 0xAA;
data20[4] = 0xAA;
data20[5] = 0xAA;
data20[6] = 0xAA;
data20[7] = 0xAA;
init_CAN_Frame(&m_msg20, 0x714, 8, 0, data20); // 诊断
can_mid(m_msg20);
zhenduansendStep++;
Get_PN_msg();
break;
case 2:
Get_PN_msg();
//Gen_TimeDelay(10000, 50);
zhenduansendStep++;
break;
case 3:
// uint8_t asd = 0;
// uint8_t bzy = 0;
// asd = CAN_MSG_Read(11,0);
// bzy = CAN_MSG_Read(11,1);
test[3] = CAN_MSG_Read(11, 1);
test[4] = CAN_MSG_Read(11, 2);
test[5] = CAN_MSG_Read(11, 3);
test[6] = CAN_MSG_Read(11, 4);
test[7] = CAN_MSG_Read(11, 5);
test[8] = CAN_MSG_Read(11, 6);
test[9] = CAN_MSG_Read(11, 7);
if (CAN_MSG_Read(11, 0) == 0x21)
{
get_num_buf[3] = CAN_MSG_Read(11, 1);
get_num_buf[4] = CAN_MSG_Read(11, 2);
get_num_buf[5] = CAN_MSG_Read(11, 3);
get_num_buf[6] = CAN_MSG_Read(11, 4);
get_num_buf[7] = CAN_MSG_Read(11, 5);
get_num_buf[8] = CAN_MSG_Read(11, 6);
get_num_buf[9] = CAN_MSG_Read(11, 7);
zhenduansendStep++;
}
// else }
// {
// return;
// } uint8_t GlobalDial = 1u;
break; uint8_t LockSts = 0u;
case 4: uint8_t FYReadState = FYReadState_Idel;
// if(CAN_MSG_Read(11,0) == 0x22) uint8_t FYWriteState = FYWriteState_Idel;
// { void UDS_ReadDIDRequest(uint16_t did)
if (CAN_MSG_Read(11, 0) == 0x22) {
uint8_t read_buf [ 8 ] = {0xaa};
read_buf [ 0 ] = 0x22;
read_buf [ 1 ] = (did >> 8) & 0xff;
read_buf [ 2 ] = did & 0xff;
UDS_S_Data_Request(DIAG_ID_Tx, read_buf, 3u);
}
void UDS_FiveYardsRead(void )
{
if(FYReadState >= FYReadState_Idel)
{ {
get_num_buf[10] = CAN_MSG_Read(11, 1); return;
get_num_buf[11] = CAN_MSG_Read(11, 2);
get_num_buf[12] = CAN_MSG_Read(11, 3);
get_num_buf[13] = CAN_MSG_Read(11, 4);
get_num_buf[14] = CAN_MSG_Read(11, 5);
get_num_buf[15] = CAN_MSG_Read(11, 6);
get_num_buf[16] = CAN_MSG_Read(11, 7);
zhenduansendStep++;
} }
// } switch(FYReadState)
// else {
// { case FYReadState_ReqF187:
// return; {
// } UDS_ReadDIDRequest(0xF187);
break; break;
case 5: }
data20[0] = 0x03; case FYReadState_ReqF18A:
data20[1] = 0x22; {
data20[2] = 0xF1; UDS_ReadDIDRequest(0xF18A);
data20[3] = 0x8A;
data20[4] = 0xAA;
data20[5] = 0xAA;
data20[6] = 0xAA;
data20[7] = 0xAA;
init_CAN_Frame(&m_msg20, 0x714, 8, 0, data20); //诊断
can_mid(m_msg20);
Gen_TimeDelay(10000, 50);
zhenduansendStep++;
break; break;
case 6: }
get_num_buf[17] = CAN_MSG_Read(11,5); case FYReadState_ReqF18B:
get_num_buf[18] = CAN_MSG_Read(11,6); {
get_num_buf[19] = CAN_MSG_Read(11,7); UDS_ReadDIDRequest(0xF18b);
zhenduansendStep++;
break; break;
case 7: }
data20[0] = 0x30; case FYReadState_ReqF18C:
data20[1] = 0x00; {
data20[2] = 0x00; UDS_ReadDIDRequest(0xF18C);
data20[3] = 0xAA;
data20[4] = 0xAA;
data20[5] = 0xAA;
data20[6] = 0xAA;
data20[7] = 0xAA;
init_CAN_Frame(&m_msg20, 0x714, 8, 0, data20); //诊断
can_mid(m_msg20);
Gen_TimeDelay(10000, 50);
zhenduansendStep++;
break; break;
case 8: }
if(CAN_MSG_Read(11,0) == 0x21) case FYReadState_ReadALL:
{ {
get_num_buf[20] = CAN_MSG_Read(11,1); // General_Number_Disp(lingjianhao, 15, 100);
get_num_buf[21] = CAN_MSG_Read(11,2); comparestart = 1u;
get_num_buf[22] = CAN_MSG_Read(11,3); flashtime = 0u;
get_num_buf[23] = CAN_MSG_Read(11,4); zhenduanflag = 3;
get_num_buf[25] = CAN_MSG_Read(11,5); break;
get_num_buf[26] = CAN_MSG_Read(11,6);
get_num_buf[27] = CAN_MSG_Read(11,7);
zhenduansendStep++;
} }
else }
FYReadState = FYReadState_Idel;
}
// key_array
void UDS_FiveYardsWrite(void )
{
uint8_t write_buf[64] = 0xaa;
uint8_t bcd_buf[10] = {0};
write_buf[0] = 0x2e;
if(FYWriteState >= FYWriteState_Idel)
{ {
return; return;
} }
break;
case 9: switch(FYWriteState)
data20[0] = 0x03;
data20[1] = 0x22;
data20[2] = 0xF1;
data20[3] = 0x99;
data20[4] = 0xAA;
data20[5] = 0xAA;
data20[6] = 0xAA;
data20[7] = 0xAA;
init_CAN_Frame(&m_msg20, 0x714, 8, 0, data20); //诊断
can_mid(m_msg20);
Gen_TimeDelay(10000, 50);
zhenduansendStep++;
break;
case 10:
if(CAN_MSG_Read(11,0) == 0x07 && CAN_MSG_Read(11,1) == 0x62)
{ {
get_num_buf[28] = CAN_MSG_Read(11,4); case FYWriteState_Req1003:
get_num_buf[29] = CAN_MSG_Read(11,5);
get_num_buf[30] = CAN_MSG_Read(11,6);
get_num_buf[31] = CAN_MSG_Read(11,7);
zhenduansendStep++;
}
else
{ {
return; write_buf [ 0 ] = 0x10;
write_buf [ 1 ] = 0x03;
UDS_S_Data_Request(DIAG_ID_Tx, write_buf, 2u);
break;
} }
case FYWriteState_Req1002:
{
write_buf [ 0 ] = 0x10;
write_buf [ 1 ] = 0x02;
UDS_S_Data_Request(DIAG_ID_Tx, write_buf, 2u);
break; break;
case 11: }
data20[0] = 0x03; case FYWriteState_Req2701:
data20[1] = 0x22; {
data20[2] = 0xF1; write_buf [ 0 ] = 0x27;
data20[3] = 0x8C; write_buf [ 1 ] = 0x07;
data20[4] = 0xAA; UDS_S_Data_Request(DIAG_ID_Tx, write_buf, 2u);
data20[5] = 0xAA;
data20[6] = 0xAA;
data20[7] = 0xAA;
init_CAN_Frame(&m_msg20, 0x714, 8, 0, data20); //诊断
can_mid(m_msg20);
Gen_TimeDelay(10000, 50);
zhenduansendStep++;
break; break;
case 12: }
get_num_buf[17] = CAN_MSG_Read(11,5); case FYWriteState_Req2702:
get_num_buf[18] = CAN_MSG_Read(11,6); {
get_num_buf[19] = CAN_MSG_Read(11,7); // get_key_value();
zhenduansendStep++;
case 13: Ser27_CalculateKeyLV11(seed_value, key_array);
data20[0] = 0x30; write_buf [ 0 ] = 0x27;
data20[1] = 0x00; write_buf [ 1 ] = 0x08;
data20[2] = 0x00; write_buf [ 2 ] = key_array [ 0 ];
data20[3] = 0xAA; write_buf [ 3 ] = key_array [ 1 ];
data20[4] = 0xAA; write_buf [ 4 ] = key_array [ 2 ];
data20[5] = 0xAA; write_buf [ 5 ] = key_array [ 3 ];
data20[6] = 0xAA; UDS_S_Data_Request(DIAG_ID_Tx, write_buf, 6u);
data20[7] = 0xAA;
init_CAN_Frame(&m_msg20, 0x714, 8, 0, data20); //诊断
can_mid(m_msg20);
Gen_TimeDelay(10000, 50);
zhenduansendStep++;
break; break;
case 14: }
if(CAN_MSG_Read(11,0) == 0x21) case FYWriteState_ReqF187:
{ {
get_num_buf[20] = CAN_MSG_Read(11,1); write_buf[1] = 0xf1;
get_num_buf[21] = CAN_MSG_Read(11,2); write_buf[2] = 0x87;
get_num_buf[22] = CAN_MSG_Read(11,3); memcpy(&write_buf[3], &barcode_Msg[0], UDS_F187_LEN);
get_num_buf[23] = CAN_MSG_Read(11,4); UDS_S_Data_Request(DIAG_ID_Tx, write_buf, 3u + UDS_F187_LEN);
get_num_buf[25] = CAN_MSG_Read(11,5); break;
get_num_buf[26] = CAN_MSG_Read(11,6);
get_num_buf[27] = CAN_MSG_Read(11,7);
zhenduansendStep++;
} }
else case FYWriteState_ReqF18A:
{ {
return; write_buf[1] = 0xf1;
write_buf[2] = 0x8A;
memcpy(&write_buf[3], &barcode_Msg[UDS_F187_LEN], UDS_F18A_LEN);
UDS_S_Data_Request(DIAG_ID_Tx, write_buf, 3u + UDS_F18A_LEN);
break;
} }
case FYWriteState_ReqF18B:
{
write_buf[1] = 0xf1;
write_buf[2] = 0x8b;
// ASC2BCD( bcd_buf, &barcode_Msg[UDS_F187_LEN + UDS_F18A_LEN], 8);
// write_buf[3] = bcd_buf[3];
// write_buf[4] = bcd_buf[2];
// write_buf[5] = bcd_buf[1];
// write_buf[6] = bcd_buf[0];
memcpy(&write_buf[3], &barcode_Msg[UDS_F187_LEN + UDS_F18A_LEN], UDS_F18B_LEN);
// uint8_t err = isDateCorrect(&write_buf[3]);
UDS_S_Data_Request(DIAG_ID_Tx, write_buf, 3u + UDS_F18B_LEN);
break; break;
case 15: }
// LINE_OUT_NEG_01 = 0; case FYWriteState_ReqF18C:
// LINE_OUT_NEG_02 = 0; {
// LINE_OUT_NEG_03 = 0;
// LINE_OUT_NEG_04 = 0;
zhenduansendStep = 0; write_buf[1] = 0xf1;
write_buf[2] = 0x8C;
memcpy(&write_buf[3], &barcode_Msg[UDS_F187_LEN + UDS_F18A_LEN + UDS_F18B_LEN], UDS_F18C_LEN);
UDS_S_Data_Request(DIAG_ID_Tx, write_buf, 3u + UDS_F18C_LEN);
// comparestart = 1; break;
// zhenduanflag = 3; }
case FYWriteState_WriteALL:
{
// General_Number_Disp(lingjianhao, 15, 100);
LINE_OUT_NEG_01 = 0;
LINE_OUT_NEG_02 = 0;
LINE_OUT_NEG_03 = 0;
LINE_OUT_NEG_04 = 0;
break;
}
} }
}
FYWriteState = FYWriteState_Idel;
}
......
...@@ -32,4 +32,47 @@ void can_submit(void); ...@@ -32,4 +32,47 @@ void can_submit(void);
void Can_Send_0x714(void); void Can_Send_0x714(void);
void Can_Send_0x714_CHECK(void); void Can_Send_0x714_CHECK(void);
#define UDS_F187_LEN 15U
#define UDS_F18A_LEN 5U
#define UDS_F18B_LEN 8U
#define UDS_F18C_LEN 6U
#define BT_ID_TX 0X0F4442FF /*?? ID*/
#define BT_ID_RX 0X0F4254FF /*BT MAC ID*/
#define BLE_ID_TX 0x0C75FFD3 /*BLE MAC ID*/
#define LY_CON_ID 0x0C21FFD3 /*???? ID*/
typedef enum
{
FYReadState_ReqF187,
FYReadState_ReqF18A,
FYReadState_ReqF18B,
FYReadState_ReqF18C,
FYReadState_ReadALL,
FYReadState_Idel,
}_FYReadState_st;
typedef enum
{
FYWriteState_Req1003,
FYWriteState_Req1002,
FYWriteState_Req2701,
FYWriteState_Req2702,
FYWriteState_ReqF187,
FYWriteState_ReqF18A,
FYWriteState_ReqF18B,
FYWriteState_ReqF18C,
FYWriteState_WriteALL,
FYWriteState_Idel,
}_FYWriteState_st;
extern uint8_t FYReadState;
extern uint8_t FYWriteState;
void UDS_FiveYardsRead(void );
void UDS_FiveYardsWrite(void );
void Get_Ble_Address(void);
#endif #endif
\ No newline at end of file
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#include "Check_Ctrl.h" #include "Check_Ctrl.h"
#include "string.h" #include "string.h"
#include "COM_CAN.h" #include "COM_CAN.h"
#include "Barcode_Scanner.h"
const uint8_t XorArray[4]= {0x56,0x45,0x73,0x54};//密钥使用 const uint8_t XorArray[4]= {0x56,0x45,0x73,0x54};//密钥使用
...@@ -21,13 +22,14 @@ void UDS_Service_50_Indication(uint32_t A_TA_type, uint16_t A_Length, uint8_t A_ ...@@ -21,13 +22,14 @@ void UDS_Service_50_Indication(uint32_t A_TA_type, uint16_t A_Length, uint8_t A_
{ {
UDS_ISO14229_Transfer [ i ] = *(A_Data + i); UDS_ISO14229_Transfer [ i ] = *(A_Data + i);
} }
if ( UDS_ISO14229_Transfer [ 0 ] == 0x3 ) if ( UDS_ISO14229_Transfer [ 0 ] == 0x2 )
{
Global_Session = 3;
if ( loc_Step == 1 )
{ {
loc_Step = 2; FYWriteState = FYWriteState_Req2701;
} }
if ( UDS_ISO14229_Transfer [ 0 ] == 0x3 )
{
FYWriteState = FYWriteState_Req1002;
} }
} }
void UDS_Service_51_Indication(uint32_t A_TA_type, uint16_t A_Length, uint8_t A_Data []) void UDS_Service_51_Indication(uint32_t A_TA_type, uint16_t A_Length, uint8_t A_Data [])
...@@ -76,50 +78,33 @@ void UDS_Service_62_Indication(uint32_t A_TA_type, uint16_t A_Length, uint8_t A_ ...@@ -76,50 +78,33 @@ void UDS_Service_62_Indication(uint32_t A_TA_type, uint16_t A_Length, uint8_t A_
DIDRequest = (( uint16_t )UDS_ISO14229_Transfer [ 0 ] << 8) | (( uint16_t )UDS_ISO14229_Transfer [ 1 ]); DIDRequest = (( uint16_t )UDS_ISO14229_Transfer [ 0 ] << 8) | (( uint16_t )UDS_ISO14229_Transfer [ 1 ]);
switch ( DIDRequest ) switch ( DIDRequest )
{ {
case 0xF086: //天有为版本 case 0xF187:
memcpy(InterNal_Version, &UDS_ISO14229_Transfer [ 2 ], Service22DiagDataLength - 2); {
memcpy(&get_num_buf[0], &UDS_ISO14229_Transfer [ 2 ], Service22DiagDataLength - 2);
FYReadState = FYReadState_ReqF18A;
break; break;
}
case 0xF18A:
case 0x2014: //天有为版本 {
memcpy(BCM_2014, &UDS_ISO14229_Transfer [ 2 ], Service22DiagDataLength - 2); memcpy(&get_num_buf[UDS_F187_LEN], &UDS_ISO14229_Transfer [ 2 ], Service22DiagDataLength - 2);
FYReadState = FYReadState_ReqF18B;
break; break;
}
case SV_DID: //软件版本号 case 0XF18B:
memcpy(SW_Version, &UDS_ISO14229_Transfer [ 2 ], Service22DiagDataLength - 2); {
break; memcpy(&get_num_buf[UDS_F187_LEN + UDS_F18A_LEN], &UDS_ISO14229_Transfer [ 2 ], Service22DiagDataLength - 2);
case HV_DID: //硬件版本号 FYReadState = FYReadState_ReqF18C;
memcpy(HW_Version, &UDS_ISO14229_Transfer [ 2 ], Service22DiagDataLength - 2);
break;
case PV_DID: //零件号
memcpy(Part_Version, &UDS_ISO14229_Transfer [ 2 ], Service22DiagDataLength - 2);
break;
case FUEL_DID: //燃油阻值
RES_CHECK_BEGIN = 2u;
memcpy(Res_St, &UDS_ISO14229_Transfer [ 2 ], Service22DiagDataLength - 2);
break;
case DATE_DID: //制造日期
memcpy(Made_Date, &UDS_ISO14229_Transfer [ 2 ], Service22DiagDataLength - 2);
break;
case CODE_DID: //供应商代码
memcpy(SUPPLIER, &UDS_ISO14229_Transfer [ 2 ], Service22DiagDataLength - 2);
break; break;
}
case 0xF18C:
{
memcpy(&get_num_buf[UDS_F187_LEN + UDS_F18A_LEN + UDS_F18B_LEN], &UDS_ISO14229_Transfer [ 2 ], Service22DiagDataLength - 2);
FYReadState = FYReadState_ReadALL;
case 0xF202:
memcpy(Evade_ODO, &UDS_ISO14229_Transfer [ 2 ], Service22DiagDataLength - 2);
break;
case 0xF203:
memcpy(Risk_Evade, &UDS_ISO14229_Transfer [ 2 ], Service22DiagDataLength - 2);
break; break;
}
case 0x6200: case 0x6200:
//Global_Session = UDS_ISO14229_Transfer [ 2 ]; //Global_Session = UDS_ISO14229_Transfer [ 2 ];
if ( loc_Step == 0 ) if ( loc_Step == 0 )
...@@ -127,10 +112,6 @@ void UDS_Service_62_Indication(uint32_t A_TA_type, uint16_t A_Length, uint8_t A_ ...@@ -127,10 +112,6 @@ void UDS_Service_62_Indication(uint32_t A_TA_type, uint16_t A_Length, uint8_t A_
loc_Step = 5; loc_Step = 5;
} }
break; break;
case 0x6201: case 0x6201:
LINE_IN_CHECK_BEGIN = 2; LINE_IN_CHECK_BEGIN = 2;
memcpy(Line_IN_St, &UDS_ISO14229_Transfer [ 2 ], Service22DiagDataLength - 2); memcpy(Line_IN_St, &UDS_ISO14229_Transfer [ 2 ], Service22DiagDataLength - 2);
...@@ -160,23 +141,25 @@ void UDS_Service_67_Indication(uint32_t A_TA_type, uint16_t A_Length, uint8_t ...@@ -160,23 +141,25 @@ void UDS_Service_67_Indication(uint32_t A_TA_type, uint16_t A_Length, uint8_t
DIDRequest = UDS_ISO14229_Transfer [ 0 ]; DIDRequest = UDS_ISO14229_Transfer [ 0 ];
switch ( DIDRequest ) switch ( DIDRequest )
{ {
case 3: case 7:
UnLock_Flag = 2; UnLock_Flag = 2;
if ( loc_Step == 2 ) if ( loc_Step == 2 )
{ {
loc_Step = 3; loc_Step = 3;
} }
memcpy(seed_buff, &UDS_ISO14229_Transfer [ 1 ], 4);
Ser27_CalculateKeyLV1(seed_buff, KEYBUFFER);//密钥计算 memcpy(seed_value, &UDS_ISO14229_Transfer [ 1 ], 4);
FYWriteState = FYWriteState_Req2702;
break; break;
case 4: case 8:
UnLock_Flag = 0x55; UnLock_Flag = 0x55;
if ( loc_Step == 3 ) if ( loc_Step == 3 )
{ {
loc_Step = 4; loc_Step = 4;
} }
memset(seed_buff, 0, 4); memset(seed_value, 0, 4);
memset(KEYBUFFER, 0, 4); memset(key_array, 0, 4);
FYWriteState = FYWriteState_ReqF187;
break; break;
} }
} }
...@@ -216,6 +199,31 @@ void UDS_Service_6E_Indication(uint32_t A_TA_type, uint16_t A_Length, uint8_t A_ ...@@ -216,6 +199,31 @@ void UDS_Service_6E_Indication(uint32_t A_TA_type, uint16_t A_Length, uint8_t A_
{ {
UDS_ISO14229_Transfer [ i ] = *(A_Data + i); UDS_ISO14229_Transfer [ i ] = *(A_Data + i);
} }
DIDRequest = (( uint16_t )UDS_ISO14229_Transfer [ 0 ] << 8) | (( uint16_t )UDS_ISO14229_Transfer [ 1 ]);
switch ( DIDRequest )
{
case 0xF187:
{
FYWriteState = FYWriteState_ReqF18A;
break;
}
case 0xF18A:
{
FYWriteState = FYWriteState_ReqF18B;
break;
}
case 0xF18B:
{
FYWriteState = FYWriteState_ReqF18C;
break;
}
case 0xF18C:
{
FYWriteState = FYWriteState_WriteALL;
break;
}
}
} }
void UDS_Service_7E_Indication(uint32_t A_TA_type, uint16_t A_Length, uint8_t A_Data []) void UDS_Service_7E_Indication(uint32_t A_TA_type, uint16_t A_Length, uint8_t A_Data [])
{ {
......
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