FINAL1
FINAL1
h"
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include <stdbool.h>
#include"dcm_rdbi.h"
#include"dcm_seca.h"
#include"dcm_wdbi.h"
#include"dcm.h"
#include"stm32f4xx_hal_conf.h"
#include"stm32f4xx_it.h"
CAN_HandleTypeDef hcan1;
CAN_HandleTypeDef hcan2;
//TIM_HandleTypeDef htim2;
UART_HandleTypeDef huart3;
//TIM_HandleTypeDef htim3;
UART_HandleTypeDef huart3;
uint8_t uart3_receive;
CAN_HandleTypeDef hcan1;
CAN_HandleTypeDef hcan2;
CAN_TxHeaderTypeDef CAN1_pHeader;
CAN_RxHeaderTypeDef CAN1_pHeaderRx;
CAN_FilterTypeDef CAN1_sFilterConfig;
CAN_TxHeaderTypeDef CAN2_pHeader;
CAN_RxHeaderTypeDef CAN2_pHeaderRx;
CAN_FilterTypeDef CAN2_sFilterConfig;
uint32_t CAN1_pTxMailbox;
uint32_t CAN2_pTxMailbox;
uint16_t NumBytesReq = 0;
uint8_t REQ_BUFFER [4096];
uint8_t REQ_1BYTE_DATA;
uint8_t CAN1_DATA_TX[8] =
{0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00}
;
uint8_t CAN1_DATA_RX[8] =
{0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00}
;
uint8_t CAN2_DATA_TX[8] =
{0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00}
;
uint8_t CAN2_DATA_RX[8] =
{0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00}
;
uint16_t Num_Consecutive_Tester;
uint8_t Flg_Consecutive = 0;
uint8_t MessageCounter = 0;
uint8_t flag = 0;
uint32_t newStdID;
volatile uint8_t SecurityUnlocked = 0;
uint8_t SeedProvided = 0;
volatile uint8_t check;
volatile uint8_t CAN2_flag=0;
volatile uint8_t CAN1_flag=0;
//
//void CAN2CommSetup();
//void CAN1_Send();
//void CAN2_Send();
//void Read_DATA_BUFFER(uint8_t *
REQ_BUFFER, uint8_t length, uint8_t *
DATA_TX);
//uint16_t compare_Key(uint8_t * key1,
uint8_t * key2, uint8_t length);
//void Calculate_Key(uint8_t * Seed, uint8_t *
Key);
/* USER CODE END PFP */
void
HAL_CAN_RxFifo0MsgPendingCallback(CA
N_HandleTypeDef *hcan);
void CAN1_TX();
void CAN2_TX();
void HAL_GPIO_EXTI_Callback(uint16_t
GPIO_Pin);
int main(void)
{
uint16_t i,j = 0;
uint16_t Consecutive_Cntr = 0;
HAL_Init();
MX_CAN1_Setup(ProtocolI_RX);
MX_CAN2_Setup(ProtocolI_TX);
__HAL_UART_ENABLE_IT(&huart3,
UART_IT_RXNE);
while (1)
{
CAN2_TX();
delay(2000);
CAN1_TX();
delay(2000);
//// if(!BtnU) /*IG OFF->ON stimulation*/
//// {
//// delay(20);
//// USART3_SendString((uint8_t *)"IG
OFF \n");
//// while(!BtnU){
//// CAN2_TX();
//// delay(2000);
//// CAN1_TX();
//// delay(2000);
//// }
//// while(!BtnU);
////// MX_CAN1_Setup(ProtocolI_RX);
////// MX_CAN2_Setup(ProtocolI_TX);
//// USART3_SendString((uint8_t *)"-> IG
ON \n");
//// delay(20);
//// }
// if (NumBytesReq != 0) {
// delay(100);
//
Read_DATA_BUFFER(REQ_BUFFER,
NumBytesReq, CAN1_DATA_TX);
// CAN1_Send();
// delay(100);
// NumBytesReq = 0;
// }
//
// if (CAN2_flag) {
// switch (REQ_BUFFER[0]) {
// case 0x27:
//
SID_27_Practice(CAN2_DATA_TX,
CAN2_DATA_RX);
//
//dcm_seca(CAN2_DATA_RX);
// break;
// case 0x22:
//
SID_22_Practice(CAN2_DATA_TX,
CAN2_DATA_RX);
//
//dcm_rdbi(CAN2_DATA_RX);
// break;
// case 0x2E:
//
//dcm_wdbi(CAN2_DATA_RX);
//
SID_2E_Practice(CAN2_DATA_TX,
CAN2_DATA_RX);
// break;
// default:
//
USART3_SendString((uint8_t*) "Service
not support\n");
// break;
// }
// CAN2_flag = 0;
// }
// if (CAN1_flag) {
// USART3_SendString((uint8_t*)
"Response: ");
//
PrintCANLog(CAN1_pHeaderRx.StdId,
CAN1_DATA_RX);
// CAN1_flag = 0;
// }
// if (!BtnU) /*IG OFF->ON
stimulation*/
// {
// delay(20);
// USART3_SendString((uint8_t*)
"IG OFF ");
// while (!BtnU);
// CAN1_pHeader.StdId = newStdID;
// CAN2CommSetup();
// MX_CAN1_Setup(ProtocolI_RX);
// MX_CAN2_Setup(ProtocolI_TX);
// USART3_SendString((uint8_t*) "-
> IG ON \n");
// delay(20);
// }
// }
// if(REQ_BUFFER[0] != 0)
// {
// delay(50);
// USART3_SendString((uint8_t*)" \n");
// if(NumBytesReq <= 7)
// {
// CAN1_DATA_TX[0] = NumBytesReq;
// for(i=1; i < 8;i++)
// {
// CAN1_DATA_TX[i] =
REQ_BUFFER[i-1];
// }
//
// PrintCANLog(CAN1_pHeader.StdId,
&CAN1_DATA_TX[0]);
// HAL_CAN_AddTxMessage(&hcan1,
&CAN1_pHeader, CAN1_DATA_TX,
&CAN1_pTxMailbox);
// }
// else
// {
// j = 0;
// Flg_Consecutive = 0;
// Num_Consecutive_Tester = 0;
// Consecutive_Cntr = 0;
//
// Num_Consecutive_Tester =
NumBytesReq - 6;
// if(Num_Consecutive_Tester % 7 ==
0)
// {
// Num_Consecutive_Tester /=7 ;
// }
// else
// {
// Num_Consecutive_Tester /=7;
// Num_Consecutive_Tester +=1;
// }
//
// CAN1_DATA_TX[0] =
((NumBytesReq >> 8) + 0x10) &0x1F;
// CAN1_DATA_TX[1] =
NumBytesReq;
// CAN1_DATA_TX[2] =
REQ_BUFFER[0];
// CAN1_DATA_TX[3] =
REQ_BUFFER[1];
// CAN1_DATA_TX[4] =
REQ_BUFFER[2];
// CAN1_DATA_TX[5] =
REQ_BUFFER[3];
// CAN1_DATA_TX[6] =
REQ_BUFFER[4];
// CAN1_DATA_TX[7] =
REQ_BUFFER[5];
//
// PrintCANLog(CAN1_pHeader.StdId,
&CAN1_DATA_TX[0]);
// HAL_CAN_AddTxMessage(&hcan1,
&CAN1_pHeader, CAN1_DATA_TX,
&CAN1_pTxMailbox);
//
// j = 6;
//
// while(Num_Consecutive_Tester > 0)
// {
// if(Flg_Consecutive == 0x01)
// {
// Flg_Consecutive = 0;
// CAN1_DATA_TX[0] =
(Consecutive_Cntr & 0x0F) + 0x20;
// for(i=0;i<7;i++)
// {
// CAN1_DATA_TX[i-1] =
REQ_BUFFER[i+j];
// }
//
//
// j +=7;
// PrintCANLog(CAN1_pHeader.StdId,
&CAN1_DATA_TX[0]);
// HAL_CAN_AddTxMessage(&hcan1,
&CAN1_pHeader, CAN1_DATA_TX,
&CAN1_pTxMailbox);
// Num_Consecutive_Tester --;
// Consecutive_Cntr ++;
// }
// }
//CAN_TP2DCM(0x012,CAN2_DATA_TX);
//CAN2_DCM2TP();
//Gen_Random_Seed();
// /*debug*/
// delay(500);
// char c[2]="";
//
USART3_SendString((uint8_t*)"Data_Of_Du
mmy_Ram: ");
// for(i=0;i<100;i++)
// {
// dummy_eeprom_buffer[i] =
Dcm_Msg_Info_s.dataBuff[i];
// if(i==0) dummy_eeprom_buffer[i] =
Dcm_Msg_Info_s.Sid;
//
sprintf(c,"%02X",dummy_eeprom_buffer[i]);
//
// sprintf(c,
"%02X",Dcm_Msg_Info_s.dataBuff[i]);
//
// USART3_SendString((uint8_t*)c);
// USART3_SendString((uint8_t*)" ");
// }
// USART3_SendString((uint8_t*)" \n");
// }
// }
memset(&REQ_BUFFER,0x00,4096);
NumBytesReq = 0;
}
}
//}
//}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct =
{0};
RCC_ClkInitTypeDef RCC_ClkInitStruct =
{0};
/** Configure the main internal regulator
output voltage
*/
__HAL_RCC_PWR_CLK_ENABLE();
__HAL_PWR_VOLTAGESCALING_CONFI
G(PWR_REGULATOR_VOLTAGE_SCALE1
);
if
(HAL_RCC_ClockConfig(&RCC_ClkInitStru
ct, FLASH_LATENCY_2) != HAL_OK)
{
Error_Handler();
}
}
CAN1_sFilterConfig.FilterFIFOAssignment=
CAN_FILTER_FIFO0;
CAN1_sFilterConfig.FilterMode =
CAN_FILTERMODE_IDMASK;
CAN1_sFilterConfig.FilterScale =
CAN_FILTERSCALE_32BIT;
CAN1_sFilterConfig.FilterIdHigh = 0x0123
<< 5;//CANID
CAN1_sFilterConfig.FilterIdLow = 0x0000;
CAN1_sFilterConfig.FilterMaskIdHigh =
0x0000; //(0x7FF << 5) ; //0xFFE0
CAN1_sFilterConfig.FilterMaskIdLow =
0x0000;
CAN1_sFilterConfig.FilterActivation =
ENABLE;
hcan2.Instance = CAN2;
hcan2.Init.Prescaler = 1;
hcan2.Init.Mode = CAN_MODE_NORMAL;
hcan2.Init.SyncJumpWidth =
CAN_SJW_2TQ;
hcan2.Init.TimeSeg1 = CAN_BS1_11TQ;
hcan2.Init.TimeSeg2 = CAN_BS2_4TQ;
hcan2.Init.TimeTriggeredMode = DISABLE;
hcan2.Init.AutoBusOff = DISABLE;
hcan2.Init.AutoWakeUp = DISABLE;
hcan2.Init.AutoRetransmission = DISABLE;
hcan2.Init.ReceiveFifoLocked = DISABLE;
hcan2.Init.TransmitFifoPriority = DISABLE;
if (HAL_CAN_Init(&hcan2) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN CAN2_Init 2 */
CAN2_sFilterConfig.FilterActivation=CAN_F
ILTER_ENABLE;
CAN2_sFilterConfig.SlaveStartFilterBank=13
;
CAN2_sFilterConfig.FilterBank=19;
CAN2_sFilterConfig.FilterFIFOAssignment=
CAN_FILTER_FIFO0;
CAN2_sFilterConfig.FilterMode =
CAN_FILTERMODE_IDMASK;
CAN2_sFilterConfig.FilterScale =
CAN_FILTERSCALE_32BIT;
CAN2_sFilterConfig.FilterIdHigh = 0x0123
<< 5;
CAN2_sFilterConfig.FilterIdLow = 0x0000;
CAN2_sFilterConfig.FilterMaskIdHigh =
0x0000; //0xFFE0
CAN2_sFilterConfig.FilterMaskIdLow =
0x0000;
CAN2_sFilterConfig.FilterActivation =
ENABLE;
/* USER CODE END CAN2_Init 2 */
}
static void MX_USART3_UART_Init(void)
{
huart3.Instance = USART3;
huart3.Init.BaudRate = 115200;
huart3.Init.WordLength =
UART_WORDLENGTH_8B;
huart3.Init.StopBits = UART_STOPBITS_1;
huart3.Init.Parity = UART_PARITY_NONE;
huart3.Init.Mode = UART_MODE_TX_RX;
huart3.Init.HwFlowCtl =
UART_HWCONTROL_NONE;
huart3.Init.OverSampling =
UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart3) != HAL_OK)
{
Error_Handler();
}
}
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode =
GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed =
GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB,
&GPIO_InitStruct);
HAL_GPIO_WritePin(GPIOB,
GPIO_PIN_0, GPIO_PIN_RESET);
/* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI0_IRQn, 3, 0);
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
}
void MX_CAN1_Setup(uint32_t CANID)
{
CAN1_sFilterConfig.FilterActivation=CAN_F
ILTER_ENABLE;
CAN1_sFilterConfig.SlaveStartFilterBank
= 14;
CAN1_sFilterConfig.FilterBank = 8;
CAN1_sFilterConfig.FilterFIFOAssignment=
CAN_FILTER_FIFO0;
CAN1_sFilterConfig.FilterMode =
CAN_FILTERMODE_IDMASK;
CAN1_sFilterConfig.FilterScale =
CAN_FILTERSCALE_32BIT;
CAN1_sFilterConfig.FilterIdHigh =
CANID << 5;//CANID
CAN1_sFilterConfig.FilterIdLow =
0x0000;
CAN1_sFilterConfig.FilterMaskIdHigh =
0x0000; //(0x7FF << 5) ; //0xFFE0
CAN1_sFilterConfig.FilterMaskIdLow =
0x0000;
CAN1_sFilterConfig.FilterActivation =
ENABLE;
HAL_CAN_ConfigFilter(&hcan1,
&CAN1_sFilterConfig);
HAL_CAN_Start(&hcan1);
HAL_CAN_ActivateNotification(&hcan1,
CAN_IT_RX_FIFO0_MSG_PENDING);
CAN1_pHeader.DLC = 8;
CAN1_pHeader.IDE = CAN_ID_STD;
CAN1_pHeader.RTR =
CAN_RTR_DATA;
CAN1_pHeader.StdId = CANID;
}
CAN2_sFilterConfig.FilterActivation=CAN_F
ILTER_ENABLE;
CAN2_sFilterConfig.SlaveStartFilterBank=14
;
CAN2_sFilterConfig.FilterBank=19;
CAN2_sFilterConfig.FilterFIFOAssignment=
CAN_FILTER_FIFO0;
CAN2_sFilterConfig.FilterMode =
CAN_FILTERMODE_IDMASK;
CAN2_sFilterConfig.FilterScale =
CAN_FILTERSCALE_32BIT;
CAN2_sFilterConfig.FilterIdHigh =
CANID <<5;
CAN2_sFilterConfig.FilterIdLow = 0x0000;
CAN2_sFilterConfig.FilterMaskIdHigh =
0x0000; //0xFFE0
CAN2_sFilterConfig.FilterMaskIdLow =
0x0000;
CAN2_sFilterConfig.FilterActivation =
ENABLE;
HAL_CAN_ConfigFilter(&hcan2,
&CAN2_sFilterConfig);
HAL_CAN_Start(&hcan2);
HAL_CAN_ActivateNotification(&hcan2,
CAN_IT_RX_FIFO0_MSG_PENDING);
CAN2_pHeader.DLC = 8;
CAN2_pHeader.IDE = CAN_ID_STD;
CAN2_pHeader.RTR =
CAN_RTR_DATA;
CAN2_pHeader.StdId = CANID;
}
sprintf(bufID,"%03X",CANID);
for(loopIndx = 0; loopIndx < 3; loopIndx +
+)
{
bufsend[loopIndx] = bufID[loopIndx];
}
bufsend[3] = ':';
bufsend[4] = ' ';
void
HAL_UART_RxCpltCallback(UART_Handle
TypeDef *huart)
{
REQ_BUFFER[NumBytesReq] =
REQ_1BYTE_DATA;
NumBytesReq++;
//REQ_BUFFER[7] = NumBytesReq;
}
{
HAL_Delay(delay);
}
//void SID_22_Practice(uint8_t *
TX_BUFFER, uint8_t *RX_BUFFER) {
// delay(100);
// if (RX_BUFFER[0] != 3) //Invalid length
// {
// TX_BUFFER[0] = 0x03;
// TX_BUFFER[1] = NRC;
// TX_BUFFER[2] = READ_SID;
// TX_BUFFER[3] =
NRC13_INVALID_LEN;
// for (int i = 4; i < 8; i++) {
// TX_BUFFER[i] = 0x55;
// }
// } else if (((RX_BUFFER[2] << 8) |
RX_BUFFER[3]) != DID) //INVALID DID
// {
// TX_BUFFER[0] = 0x03;
// TX_BUFFER[1] = NRC;
// TX_BUFFER[2] = READ_SID;
// TX_BUFFER[3] =
NRC31_DID_NOTSUPPORT ;
// for (int i = 4; i < 8; i++) {
// TX_BUFFER[i] = 0x55;
// }
// } else //CAN2 Receive Correct message
// {
// TX_BUFFER[0] = 0x05;
// TX_BUFFER[1] = RX_BUFFER[1] +
0x40;
// TX_BUFFER[2] = RX_BUFFER[2];
// TX_BUFFER[3] = RX_BUFFER[3];
// TX_BUFFER[4] =
(CAN1_pHeader.StdId) >> 8;
// TX_BUFFER[5] =
CAN1_pHeader.StdId & 0xFF;
// TX_BUFFER[6] = 0x55;
// TX_BUFFER[7] = 0x55;
// }
// if (HAL_CAN_AddTxMessage(&hcan2,
&CAN2_pHeader, TX_BUFFER,
&CAN2_pTxMailbox) != HAL_OK) {
// Error_Handler();
// }
// delay(100);
//}
//void SID_27_Practice(uint8_t *
TX_BUFFER, uint8_t *RX_BUFFER) {
// delay(100);
// switch (RX_BUFFER[2]) {
// case 0x01:
// if (RX_BUFFER[0] != 2) {
// TX_BUFFER[0] = 0x03;
// TX_BUFFER[1] = NRC;
// TX_BUFFER[2] = SESSION_SID;
// TX_BUFFER[3] =
NRC13_INVALID_LEN ;
// for (int i = 4; i < 8; i++) {
// TX_BUFFER[i] = 0x55;
// }
// } else {
// TX_BUFFER[0] = 0x06;
// TX_BUFFER[1] =
RX_BUFFER[1] + 0x40;
// TX_BUFFER[2] = 0x01;
// for (int i = 3; i < 7; i++) {
// Seed[i - 3] = rand(); // Store
the random value in the seed array
// TX_BUFFER[i] = Seed[i -
3]; // Assign the random value to
TX_BUFFER
// }
// TX_BUFFER[7] = 0x55;
// Calculate_Key(Seed, KEY);
//
// SeedProvided = 1;
// }
// break;
// case 0x02:
// if (RX_BUFFER[0] != 6) {
// TX_BUFFER[0] = 0x03;
// TX_BUFFER[1] = NRC;
// TX_BUFFER[2] = SESSION_SID;
// TX_BUFFER[3] =
NRC13_INVALID_LEN ;
// for (int i = 4; i < 8; i++) {
// TX_BUFFER[i] = 0x55;
// }
// } else if (!compare_Key(KEY,
&RX_BUFFER[3], 4)) {
// TX_BUFFER[0] = 0x03;
// TX_BUFFER[1] = NRC;
// TX_BUFFER[2] = SESSION_SID;
// TX_BUFFER[3] =
NRC35_INVALID_KEY;
// for (int i = 4; i < 8; i++) {
// TX_BUFFER[i] = 0x55;
// }
// } else if (SeedProvided && !
SecurityUnlocked) {
//
HAL_TIM_Base_Start_IT(&htim2);
// SecurityUnlocked = 1;
// HAL_GPIO_WritePin(GPIOB,
GPIO_PIN_0, GPIO_PIN_SET);
// USART3_SendString((uint8_t*)
"Session Unlocked\n");
//
// TX_BUFFER[0] = 0x02;
// TX_BUFFER[1]
=RX_BUFFER[1] + 0x40;
// TX_BUFFER[2] = 0x02;
// for (int i = 3; i < 8; i++) {
// TX_BUFFER[i] = 0x55;
// }
// SeedProvided = 0;
// } else {
// return;
// }
// break;
// default:
// if (RX_BUFFER[0]) { // Case "01 27"
// TX_BUFFER[0] = 0x03;
// TX_BUFFER[1] = NRC;
// TX_BUFFER[2] = SESSION_SID;
// TX_BUFFER[3] =
NRC13_INVALID_LEN ;
// for (int i = 4; i < 8; i++) {
// TX_BUFFER[i] = 0x55;
// }
// }
// else
// return;
// break;
// }
// if (HAL_CAN_AddTxMessage(&hcan2,
&CAN2_pHeader, TX_BUFFER,
&CAN2_pTxMailbox) != HAL_OK) {
// Error_Handler();
// }
// delay(100);
//
//}
////void SID_2E_Practice(uint8_t *
TX_BUFFER, uint8_t * RX_BUFFER) {
// delay(100);
// if (!SecurityUnlocked) {
// TX_BUFFER[0] = 0x03;
// TX_BUFFER[1] = NRC;
// TX_BUFFER[2] = WRITE_SID;
// TX_BUFFER[3] =
NRC33_SECURITY_ACCESS_DENIED;
// for (int i = 4; i < 8; i++) {
// TX_BUFFER[i] = 0x55;
// }
// } else if (RX_BUFFER[0] < 5) {
// TX_BUFFER[0] = 0x03;
// TX_BUFFER[1] = NRC;
// TX_BUFFER[2] = WRITE_SID;
// TX_BUFFER[3] =
NRC13_INVALID_LEN;
// for (int i = 4; i < 8; i++) {
// TX_BUFFER[i] = 0x55;
// }
// } else if (((RX_BUFFER[2] << 8) |
RX_BUFFER[3]) != DID) //INVALID DID
// {
// TX_BUFFER[0] = 0x03;
// TX_BUFFER[1] = NRC;
// TX_BUFFER[2] = WRITE_SID;
// TX_BUFFER[3] =
NRC31_DID_NOTSUPPORT ;
// for (int i = 4; i < 8; i++) {
// TX_BUFFER[i] = 0x55;
// }
// } else {
// newStdID = ((((uint32_t)
RX_BUFFER[4]) << 8) | (RX_BUFFER[5]))
& 0x7FF;
// TX_BUFFER[0] = 0x03;
// TX_BUFFER[1] = RX_BUFFER[1] +
0x40;
// TX_BUFFER[2] = RX_BUFFER[2];
// TX_BUFFER[3] = RX_BUFFER[3];
// for (int i = 4; i < 8; i++) {
// TX_BUFFER[i] = 0x55;
// }
// }
// if (HAL_CAN_AddTxMessage(&hcan2,
&CAN2_pHeader, TX_BUFFER,
&CAN2_pTxMailbox) != HAL_OK) {
// Error_Handler();
// }
// delay(100);
//
//}
//
//void
HAL_CAN_RxFifo0MsgPendingCallback(CA
N_HandleTypeDef *hcan)
//{
// if (hcan == &hcan1)
// {
// if (HAL_CAN_GetRxMessage(&hcan1,
CAN_RX_FIFO0, &CAN1_pHeaderRx,
CAN1_DATA_RX) != HAL_OK)
// {
// Error_Handler();
// }
// CAN1_flag=1;
// return;
// }
// else if (hcan == &hcan2)
// {
// if (HAL_CAN_GetRxMessage(&hcan2,
CAN_RX_FIFO0, &CAN2_pHeaderRx,
CAN2_DATA_RX) != HAL_OK)
// {
// Error_Handler();
// }
// CAN2_flag=1;
// return;
// }
//}
//void CAN1_Send(){
// if(HAL_CAN_AddTxMessage(&hcan1,
&CAN1_pHeader, CAN1_DATA_TX,
&CAN1_pTxMailbox) != HAL_OK){
// Error_Handler();
// }
// char buffer1[50] = "Request: ";
// USART3_SendString((uint8_t*)buffer1 );
// PrintCANLog(CAN1_pHeader.StdId,
CAN1_DATA_TX);
//}
//
//void CAN2_Send(){
// if(HAL_CAN_AddTxMessage(&hcan2,
&CAN2_pHeader, CAN2_DATA_TX,
&CAN2_pTxMailbox) != HAL_OK){
// Error_Handler();
// }
// PrintCANLog(CAN2_pHeader.StdId,
CAN2_DATA_TX);
//}
//void CAN1CommSetup() {
//
CAN1_sFilterConfig.FilterActivation=CAN_F
ILTER_ENABLE;
//
CAN1_sFilterConfig.SlaveStartFilterBank=14
;
// CAN1_sFilterConfig.FilterBank=19;
//
CAN1_sFilterConfig.FilterFIFOAssignment=
CAN_FILTER_FIFO0;
// CAN1_sFilterConfig.FilterMode =
CAN_FILTERMODE_IDMASK;
// CAN1_sFilterConfig.FilterScale =
CAN_FILTERSCALE_32BIT;
// CAN1_sFilterConfig.FilterIdHigh =
0x0123 <<5;
// CAN1_sFilterConfig.FilterIdLow =
0x0000;
// CAN1_sFilterConfig.FilterMaskIdHigh
= 0x0123 <<5; //0xFFE0
// CAN1_sFilterConfig.FilterMaskIdLow
= 0x0000;
// CAN1_sFilterConfig.FilterActivation =
ENABLE;
//
// HAL_CAN_ConfigFilter(&hcan1,
&CAN1_sFilterConfig);
// HAL_CAN_Start(&hcan1);
//
HAL_CAN_ActivateNotification(&hcan1,
CAN_IT_RX_FIFO0_MSG_PENDING);
//
// CAN1_pHeader.DLC = 8;
// CAN1_pHeader.IDE = CAN_ID_STD;
// CAN1_pHeader.RTR =
CAN_RTR_DATA;
// CAN1_pHeader.StdId = 0x7FF;
//}
//void CAN2CommSetup() {
//
CAN2_sFilterConfig.FilterActivation=CAN_F
ILTER_ENABLE;
//
CAN2_sFilterConfig.SlaveStartFilterBank=14
;
// CAN2_sFilterConfig.FilterBank=19;
//
CAN2_sFilterConfig.FilterFIFOAssignment=
CAN_FILTER_FIFO0;
// CAN2_sFilterConfig.FilterMode =
CAN_FILTERMODE_IDMASK;
// CAN2_sFilterConfig.FilterScale =
CAN_FILTERSCALE_32BIT;
// CAN2_sFilterConfig.FilterIdHigh =
CAN1_pHeader.StdId <<5;
// CAN2_sFilterConfig.FilterIdLow =
0x0000;
// CAN2_sFilterConfig.FilterMaskIdHigh
= CAN1_pHeader.StdId; //0xFFE0
// CAN2_sFilterConfig.FilterMaskIdLow
= 0x0000;
// CAN2_sFilterConfig.FilterActivation =
ENABLE;
//
// HAL_CAN_ConfigFilter(&hcan2,
&CAN2_sFilterConfig);
// HAL_CAN_Start(&hcan2);
//
HAL_CAN_ActivateNotification(&hcan2,
CAN_IT_RX_FIFO0_MSG_PENDING);
//
// CAN2_pHeader.DLC = 8;
// CAN2_pHeader.IDE = CAN_ID_STD;
// CAN2_pHeader.RTR =
CAN_RTR_DATA;
// CAN2_pHeader.StdId = 0x0123;
//}
//void Read_DATA_BUFFER(uint8_t
*REQ_BUFFER, uint8_t length, uint8_t
*DATA_TX) {
// DATA_TX[0] = length;
// uint8_t i;
// for (i = 0; i < length; i++) {
// DATA_TX[i + 1] = REQ_BUFFER[i];
// }
// while (i <= 7) {
// i++;
// DATA_TX[i] = 0x55;
// }
//}
//uint16_t compare_Key(uint8_t* key1,
uint8_t* key2, uint8_t length) {
// for (uint8_t i = 0; i < length; i++) {
// if (key1[i] != key2[i]) {
// return 0;
// }
// }
// return 1;
//}
//void Calculate_Key(uint8_t *Seed, uint8_t
*Key) {
// Key[0] = Seed[0] ^ Seed[1];
// Key[1] = Seed[1] + Seed[2];
// Key[2] = Seed[2] ^ Seed[3];
// Key[3] = Seed[3] + Seed[0];
//}
//void
HAL_TIM_PeriodElapsedCallback(TIM_Han
dleTypeDef *htim) {
// if (htim == &htim2) {
// if (SecurityUnlocked == 0){
//
// return;
// }
// else {
// HAL_TIM_Base_Stop_IT(htim);
// SecurityUnlocked = 0;
// HAL_GPIO_WritePin(GPIOB,
GPIO_PIN_0, GPIO_PIN_RESET);
// USART3_SendString((uint8_t*)
"Session Locked\n");
// }
// }
//}
{
uint8_t idx, crc, temp1, temp2, idy;
crc = 0;
idx = 0;
idy = 0;
temp1 = 0;
temp2 = 0;
for(idx=0;idx < crc_len+1;idx++)
{
if(idx == 0)
{
temp1 = 0;
}
else
{
temp1 = data[crc_len-idx];
}
crc = (crc^temp1);
for(idy=(uint8_t)8; idy>0; idy--)
{
// Save the value before the top bit is
shifted out.
temp2 = crc;
crc <<= 1;
if (0 != (temp2 & (uint8_t)128))
crc ^= 0x1D;
}
}
return crc;
}
if(flag == 0){
CAN1_DATA_TX[7] =
calc_SAE_J1850(CAN1_DATA_TX, 7); //
Gửi CRC đúng
} else {
CAN1_DATA_TX[7] =
calc_SAE_J1850(CAN1_DATA_TX, 7) & 0x0
; // Gửi CRC sai
}
}
else{
char buffer1[50] = "CAN1 ERROR \
n";
USART3_SendString((unsigned char
*)buffer1);
}
//
// CAN2_DATA_TX[0] = 0x01;
// CAN2_DATA_TX[1] = 0x02;
// CAN2_DATA_TX[2] =
CAN2_DATA_TX[0]+CAN2_DATA_TX[1];
// CAN2_DATA_TX[6] = MessageCounter;
// CAN2_DATA_TX[7] =
calc_SAE_J1850(CAN2_DATA_TX,7);
if(flag == 0)
{
if(CAN2_DATA_RX[7] ==
calc_SAE_J1850(CAN2_DATA_RX,7)){
CAN2_DATA_TX[0] = 0x01;
CAN2_DATA_TX[1] = 0x02;
CAN2_DATA_TX[2] =
CAN2_DATA_TX[0]+CAN2_DATA_TX[1];
CAN2_DATA_TX[6] =
MessageCounter;
CAN2_DATA_TX[7] =
calc_SAE_J1850(CAN2_DATA_TX,7);
}else{
CAN2_DATA_RX[7] =
calc_SAE_J1850(CAN2_DATA_RX,7);
CAN2_DATA_TX[0] = 0x01;
CAN2_DATA_TX[1] = 0x02;
CAN2_DATA_TX[2] =
CAN2_DATA_TX[0]+CAN2_DATA_TX[1];
CAN2_DATA_TX[6] =
MessageCounter;
CAN2_DATA_TX[7] =
calc_SAE_J1850(CAN2_DATA_TX,7);
}
}
else {
CAN2_DATA_TX[0] = 0x00;
CAN2_DATA_TX[1] = 0x00;
CAN2_DATA_TX[2] = 0x00;
CAN2_DATA_TX[3] = 0x00;
CAN2_DATA_TX[4] = 0x00;
CAN2_DATA_TX[5] = 0x00;
CAN2_DATA_TX[6] =
MessageCounter;
CAN2_DATA_TX[7] =
calc_SAE_J1850(CAN2_DATA_TX, 7);
}
// if(BtnU)
// {
// if(CAN2_DATA_RX[7] ==
calc_SAE_J1850(CAN2_DATA_RX,7)){
// CAN2_DATA_TX[0] = 0x01;
// CAN2_DATA_TX[1] = 0x02;
// CAN2_DATA_TX[2] =
CAN2_DATA_TX[0]+CAN2_DATA_TX[1];
// CAN2_DATA_TX[6] =
MessageCounter;
// CAN2_DATA_TX[7] =
calc_SAE_J1850(CAN2_DATA_TX,7);
// }else{
// USART3_SendString((unsigned char
*)"CAN2 ERROR \n");
// }
//
// }
// else{
// CAN2_DATA_TX[0] = 0x00;
// CAN2_DATA_TX[1] = 0x00;
// CAN2_DATA_TX[2] = 0x00;
// CAN2_DATA_TX[3] = 0x00;
// CAN2_DATA_TX[4] = 0x00;
// CAN2_DATA_TX[5] = 0x00;
// CAN2_DATA_TX[6] =
MessageCounter;
// CAN2_DATA_TX[7] =
calc_SAE_J1850(CAN2_DATA_TX, 7);
// }
char buffer4[50] = "CAN2 TX \n";
USART3_SendString((unsigned char
*)buffer4);
PrintCANLog(0xA2, CAN2_DATA_TX);
HAL_CAN_AddTxMessage(&hcan2,
&CAN2_pHeader, CAN2_DATA_TX,
&CAN2_pTxMailbox);
MessageCounter = (MessageCounter + 1)
& 0xF;
}
USART3_SendString((uint8_t *)buffer8);
break;
case 1:
flag = 0;
char buffer9[50] = "-> IG
ON \n";
USART3_SendString((uint8_t *)buffer9);
break;
default:
break;
}
}
}
}
void Error_Handler(void)
{
__disable_irq();
USART3_SendString((unsigned char
*)"Error Detected\n");
while (1)
{
}
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t *file, uint32_t line)
{}
#endif