Locking the car will shutdown the system
This commit is contained in:
@@ -25,6 +25,31 @@ HAL_StatusTypeDef CLS_BSP_CAN_SetUniversalFilter(const CLS_BSP_CAN_UniversalFilt
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t CLS_BSP_DLC_ToBytes(uint32_t dlc) {
|
||||||
|
|
||||||
|
switch (dlc) {
|
||||||
|
case CLS_BSP_DLC_BYTES_1:
|
||||||
|
return 1;
|
||||||
|
case CLS_BSP_DLC_BYTES_2:
|
||||||
|
return 2;
|
||||||
|
case CLS_BSP_DLC_BYTES_3:
|
||||||
|
return 3;
|
||||||
|
case CLS_BSP_DLC_BYTES_4:
|
||||||
|
return 4;
|
||||||
|
case CLS_BSP_DLC_BYTES_5:
|
||||||
|
return 5;
|
||||||
|
case CLS_BSP_DLC_BYTES_6:
|
||||||
|
return 6;
|
||||||
|
case CLS_BSP_DLC_BYTES_7:
|
||||||
|
return 7;
|
||||||
|
case CLS_BSP_DLC_BYTES_8:
|
||||||
|
return 8;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
CLS_Type_t CLS_BSP_GetDeviceType(void) {
|
CLS_Type_t CLS_BSP_GetDeviceType(void) {
|
||||||
return cls_device_Type_MASTER;
|
return cls_device_Type_MASTER;
|
||||||
|
|||||||
@@ -30,6 +30,9 @@ typedef FDCAN_TxHeaderTypeDef CLS_BSP_TxHeaderType;
|
|||||||
#define CLS_BSP_DLC_BYTES_7 FDCAN_DLC_BYTES_7
|
#define CLS_BSP_DLC_BYTES_7 FDCAN_DLC_BYTES_7
|
||||||
#define CLS_BSP_DLC_BYTES_8 FDCAN_DLC_BYTES_8
|
#define CLS_BSP_DLC_BYTES_8 FDCAN_DLC_BYTES_8
|
||||||
|
|
||||||
|
// function to convert DLC to bytes
|
||||||
|
uint8_t CLS_BSP_DLC_ToBytes(uint32_t dlc);
|
||||||
|
|
||||||
#define CLS_CAN_FILTER_DISABLE FDCAN_FILTER_DISABLE
|
#define CLS_CAN_FILTER_DISABLE FDCAN_FILTER_DISABLE
|
||||||
#define CLS_CAN_FILTER_TO_RXFIFO0 FDCAN_FILTER_TO_RXFIFO0
|
#define CLS_CAN_FILTER_TO_RXFIFO0 FDCAN_FILTER_TO_RXFIFO0
|
||||||
#define CLS_CAN_FILTER_TO_RXFIFO1 FDCAN_FILTER_TO_RXFIFO1
|
#define CLS_CAN_FILTER_TO_RXFIFO1 FDCAN_FILTER_TO_RXFIFO1
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
#include "usb.pb.h"
|
#include "usb.pb.h"
|
||||||
#include "version_info.h"
|
#include "version_info.h"
|
||||||
#include "ulog.h"
|
#include "ulog.h"
|
||||||
|
#include "BSP_POWER.h"
|
||||||
// Define thread flags
|
// Define thread flags
|
||||||
#define FLAG_FDCAN_RX_FIFO0 (1<<0)
|
#define FLAG_FDCAN_RX_FIFO0 (1<<0)
|
||||||
#define FLAG_FDCAN_RX_FIFO1 (1<<1)
|
#define FLAG_FDCAN_RX_FIFO1 (1<<1)
|
||||||
@@ -140,10 +141,20 @@ void byteToHex(uint8_t byte, char * hex) {
|
|||||||
void CarCanTask_func(void *argument) {
|
void CarCanTask_func(void *argument) {
|
||||||
|
|
||||||
// for testing accept all messages from the car can bus
|
// for testing accept all messages from the car can bus
|
||||||
|
// put unkown messages in fifo 0
|
||||||
if (HAL_FDCAN_ConfigGlobalFilter(&hfdcan2, FDCAN_ACCEPT_IN_RX_FIFO0, FDCAN_ACCEPT_IN_RX_FIFO0, FDCAN_REJECT_REMOTE, FDCAN_REJECT_REMOTE) != HAL_OK) {
|
if (HAL_FDCAN_ConfigGlobalFilter(&hfdcan2, FDCAN_ACCEPT_IN_RX_FIFO0, FDCAN_ACCEPT_IN_RX_FIFO0, FDCAN_REJECT_REMOTE, FDCAN_REJECT_REMOTE) != HAL_OK) {
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FDCAN_FilterTypeDef sFilterConfig;
|
||||||
|
sFilterConfig.IdType = FDCAN_STANDARD_ID;
|
||||||
|
sFilterConfig.FilterIndex = 0;
|
||||||
|
sFilterConfig.FilterType = CLS_BSP_CAN_FILTER_LIST;
|
||||||
|
sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO1;
|
||||||
|
sFilterConfig.FilterID1 = 0x391;
|
||||||
|
sFilterConfig.FilterID2 = 0x395;
|
||||||
|
HAL_FDCAN_ConfigFilter(&hfdcan2, &sFilterConfig);
|
||||||
|
|
||||||
/* Start the FDCAN module */
|
/* Start the FDCAN module */
|
||||||
if (HAL_FDCAN_Start(&hfdcan2) != HAL_OK){
|
if (HAL_FDCAN_Start(&hfdcan2) != HAL_OK){
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
@@ -166,7 +177,7 @@ void CarCanTask_func(void *argument) {
|
|||||||
} else {
|
} else {
|
||||||
|
|
||||||
// do something with the can data
|
// do something with the can data
|
||||||
last_car_message_time = osKernelGetTickCount();
|
//last_car_message_time = osKernelGetTickCount();
|
||||||
char msg[17] = {0};
|
char msg[17] = {0};
|
||||||
|
|
||||||
switch (RxHeader.DataLength)
|
switch (RxHeader.DataLength)
|
||||||
@@ -230,7 +241,7 @@ void CarCanTask_func(void *argument) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ULOG_DEBUG("Car MSG: %x, %d %s", RxHeader.Identifier, RxHeader.DataLength, msg);
|
ULOG_DEBUG("Car MSG: %x, %d %s", RxHeader.Identifier,CLS_BSP_DLC_ToBytes(RxHeader.DataLength) , msg);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -240,7 +251,39 @@ void CarCanTask_func(void *argument) {
|
|||||||
} else {
|
} else {
|
||||||
|
|
||||||
// do something with the can data
|
// do something with the can data
|
||||||
|
ULOG_DEBUG("Car LOCK MSG: %x, %d", RxHeader.Identifier, CLS_BSP_DLC_ToBytes(RxHeader.DataLength));
|
||||||
|
|
||||||
|
|
||||||
|
if(RxHeader.Identifier == 0x391) {
|
||||||
|
if (RxData[1] == 4)
|
||||||
|
{
|
||||||
|
// car was unlocked
|
||||||
last_car_message_time = osKernelGetTickCount();
|
last_car_message_time = osKernelGetTickCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (RxData[1] == 80)
|
||||||
|
{
|
||||||
|
// car was locked
|
||||||
|
BSP_POWER_EnterStandby();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (RxHeader.Identifier == 0x395) {
|
||||||
|
// send the unlock message to the car
|
||||||
|
if ((RxData[0] & 0x0F) == 0x01) {
|
||||||
|
// car was unlocked
|
||||||
|
last_car_message_time = osKernelGetTickCount();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((RxData[0] & 0x0F) == 0x02) {
|
||||||
|
// car was locked
|
||||||
|
BSP_POWER_EnterStandby();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
#include "BSP_ADC.h"
|
#include "BSP_ADC.h"
|
||||||
#include "LightTask.h"
|
#include "LightTask.h"
|
||||||
#include "ulog.h"
|
#include "ulog.h"
|
||||||
|
#include "stdbool.h"
|
||||||
|
|
||||||
// Create the task with a specific priority and stack size
|
// Create the task with a specific priority and stack size
|
||||||
osThreadAttr_t task_attr = {
|
osThreadAttr_t task_attr = {
|
||||||
|
|||||||
Reference in New Issue
Block a user