From 04c5eb047eec17691c96777d38444721ee86a403 Mon Sep 17 00:00:00 2001 From: Oliver Walter Date: Tue, 21 May 2024 22:17:47 +0200 Subject: [PATCH] Locking the car will shutdown the system --- Application/CLS_BSP/CLS_BSP.c | 25 +++++++++++++++++ Application/CLS_BSP/CLS_BSP.h | 3 ++ Application/Tasks/CanDataTask.c | 49 +++++++++++++++++++++++++++++++-- Application/Tasks/LightState.c | 1 + 4 files changed, 75 insertions(+), 3 deletions(-) diff --git a/Application/CLS_BSP/CLS_BSP.c b/Application/CLS_BSP/CLS_BSP.c index ad3581f..b5eaeec 100644 --- a/Application/CLS_BSP/CLS_BSP.c +++ b/Application/CLS_BSP/CLS_BSP.c @@ -25,6 +25,31 @@ HAL_StatusTypeDef CLS_BSP_CAN_SetUniversalFilter(const CLS_BSP_CAN_UniversalFilt #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) { return cls_device_Type_MASTER; diff --git a/Application/CLS_BSP/CLS_BSP.h b/Application/CLS_BSP/CLS_BSP.h index 4cb9605..4265816 100644 --- a/Application/CLS_BSP/CLS_BSP.h +++ b/Application/CLS_BSP/CLS_BSP.h @@ -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_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_TO_RXFIFO0 FDCAN_FILTER_TO_RXFIFO0 #define CLS_CAN_FILTER_TO_RXFIFO1 FDCAN_FILTER_TO_RXFIFO1 diff --git a/Application/Tasks/CanDataTask.c b/Application/Tasks/CanDataTask.c index 72039b8..4ed0646 100644 --- a/Application/Tasks/CanDataTask.c +++ b/Application/Tasks/CanDataTask.c @@ -9,6 +9,7 @@ #include "usb.pb.h" #include "version_info.h" #include "ulog.h" +#include "BSP_POWER.h" // Define thread flags #define FLAG_FDCAN_RX_FIFO0 (1<<0) #define FLAG_FDCAN_RX_FIFO1 (1<<1) @@ -140,10 +141,20 @@ void byteToHex(uint8_t byte, char * hex) { void CarCanTask_func(void *argument) { // 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) { 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 */ if (HAL_FDCAN_Start(&hfdcan2) != HAL_OK){ Error_Handler(); @@ -166,7 +177,7 @@ void CarCanTask_func(void *argument) { } else { // do something with the can data - last_car_message_time = osKernelGetTickCount(); + //last_car_message_time = osKernelGetTickCount(); char msg[17] = {0}; switch (RxHeader.DataLength) @@ -230,7 +241,7 @@ void CarCanTask_func(void *argument) { 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 { // do something with the can data - last_car_message_time = osKernelGetTickCount(); + 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(); + } + + + 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(); + } + + } } } diff --git a/Application/Tasks/LightState.c b/Application/Tasks/LightState.c index 268ae11..7e14266 100644 --- a/Application/Tasks/LightState.c +++ b/Application/Tasks/LightState.c @@ -4,6 +4,7 @@ #include "BSP_ADC.h" #include "LightTask.h" #include "ulog.h" +#include "stdbool.h" // Create the task with a specific priority and stack size osThreadAttr_t task_attr = {