diff --git a/Application/CLS/CLS.c b/Application/CLS/CLS.c index ca92ab5..2a1c813 100644 --- a/Application/CLS/CLS.c +++ b/Application/CLS/CLS.c @@ -6,13 +6,6 @@ osTimerId_t CLS_HeatbeatTimerId; // Timer ID -static const CLSAddress address = { - .code = CLS_CODE_STATUS, - .device = CLS_DEVICE, - .channel = CLS_CH_STA_HEATBEAT, -}; - - static uint8_t cls_hartbeat_counter = 0; static FDCAN_TxHeaderTypeDef cls_hartbeat_header = { .IdType = FDCAN_STANDARD_ID, @@ -25,12 +18,20 @@ static FDCAN_TxHeaderTypeDef cls_hartbeat_header = { .TxEventFifoControl = FDCAN_NO_TX_EVENTS, .MessageMarker = 0xCC, }; + +uint8_t TxData[8]; + FDCAN_TxHeaderTypeDef TxHeader; + void CLS_Heatbeat(void *argument) { // Code to be executed every 500ms cls_hartbeat_counter++; - HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &cls_hartbeat_header, &cls_hartbeat_counter); + if (HAL_FDCAN_GetTxFifoFreeLevel(&hfdcan1) > 1){ + HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &cls_hartbeat_header, &cls_hartbeat_counter); + } } + + void CLS_Init(void) { osTimerAttr_t timerAttr; timerAttr.name = "CLS_Heatbeat"; diff --git a/Application/CLS/CLSAddress.h b/Application/CLS/CLSAddress.h index ea4addb..22f0fc0 100644 --- a/Application/CLS/CLSAddress.h +++ b/Application/CLS/CLSAddress.h @@ -33,7 +33,7 @@ typedef enum { CLS_CH_FW_4 = 4, // 0b100 CLS_CH_FW_5 = 5, // 0b101 CLS_CH_FW_6 = 6, // 0b110 - CLS_CH_FW_7 = 7 // 0b111 + CLS_CH_FW_BOOTCALL = 7 // 0b111 } CLSChannelFirmware; @@ -46,7 +46,7 @@ typedef enum { CLS_CH_STA_5 = 5, // 0b101 CLS_CH_STA_6 = 6, // 0b110 CLS_CH_STA_7 = 7 // 0b111 -} CLSChannel; +} CLSChannelStatus; typedef struct { diff --git a/Application/CLS/CLSFirmware.c b/Application/CLS/CLSFirmware.c new file mode 100644 index 0000000..54c6af1 --- /dev/null +++ b/Application/CLS/CLSFirmware.c @@ -0,0 +1,112 @@ +#include "fdcan.h" +#include "CanDataHandler.h" +#include "cmsis_os2.h" +#include "FreeRTOS.h" + + +// Memory for the task +StaticTask_t CLS_FW_Task_cb; +uint32_t CLS_FW_Task_stk[512]; +// Attributes for the task +osThreadId_t CLS_FW_Task_id; +const osThreadAttr_t CLS_FW_Task_attr = { + .name = "CLS_FW_Task", + .attr_bits = 0U, + .cb_mem = &CLS_FW_Task_cb, + .cb_size = sizeof(CLS_FW_Task_cb), + .stack_mem = CLS_FW_Task_stk, + .stack_size = sizeof(CLS_FW_Task_stk), + .priority = osPriorityNormal, + .tz_module = 0U, + .reserved = 0U +}; + +void wait_for_start_callback() { + osThreadFlagsSet(CLS_FW_Task_id, 1); +} + +void wait_for_start_enter() { + // CanData_regEventMsg(...) // wait_for_start_callback // MessageCode::Firmware(FirmwareChannel::SlaveOutMasterIn); +} + + +void wait_for_start() { + //osWaitForNotify // add timeout with eeror + //wait_for_start_exit() + //goto running +} + +void wait_for_start_exit() { + //CanData_removeEvent(...) + //f_lseek(&SDFile,0); or Open file + // frame.counter = 0; +} + + + + +void running_callback_error() { + // lock the file + // reset the file + // reset the packcount + // unlock the filec +} + +void running_callback_ack() { + //osNotify +} + +void running_enter() { + // CanData_regEventMsg(...) // running_callback_error // MessageCode::Firmware(FirmwareChannel::SlaveOutMasterIn); + // CanData_regEventMsg(...) //running_callback_ack // MessageCode::Firmware(FirmwareChannel::SlaveFeedback); +} + + +void running() { + + //4x + // -- read file upto 4 bytes + // -- send bytes can + // -- if eof -> exit() + // wait for Notify ack and repeat ^^ + +} + +void running_exit() { + // send DONE PACK + + //CanData_removeEvent(...) + //CanData_removeEvent(...) + + // we are done task exit +} + + +typedef struct { + char name[16]; + uint8_t device; +} CLSFirmwareUpdateArgs; + +void CLSFirmwareUpdateTask_func(void *argument); + +void CLSFirmwareUpdateTask_start(CLSFirmwareUpdateArgs args) { + // Task functionality here + + // check CLS_FW_Task_id is null or stopped + // osThreadGetState + CLS_FW_Task_id = osThreadNew(CLSFirmwareUpdateTask_func, NULL, &CLS_FW_Task_attr); +} + + +void CLSFirmwareUpdateTask_func(void *argument) { + + wait_for_start_enter(); + wait_for_start(); + wait_for_start_exit(); + + running_enter(); + running(); + running_exit(); + + osThreadExit(); +} \ No newline at end of file diff --git a/Application/CLS/CLSFirmware.h b/Application/CLS/CLSFirmware.h new file mode 100644 index 0000000..e69de29 diff --git a/Application/CLS/CMakeLists.txt b/Application/CLS/CMakeLists.txt index 67dd4ad..5a81715 100644 --- a/Application/CLS/CMakeLists.txt +++ b/Application/CLS/CMakeLists.txt @@ -7,9 +7,12 @@ add_library(${PROJECT_NAME} STATIC "") target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/CLS.c + ${CMAKE_CURRENT_LIST_DIR}/CLSFirmware.c INTERFACE ${CMAKE_CURRENT_LIST_DIR}/CLS.h ${CMAKE_CURRENT_LIST_DIR}/CLSAddress.h + ${CMAKE_CURRENT_LIST_DIR}/CLSFirmware.h ) -target_include_directories(${PROJECT_NAME} INTERFACE ${CMAKE_CURRENT_LIST_DIR}) \ No newline at end of file +target_include_directories(${PROJECT_NAME} INTERFACE ${CMAKE_CURRENT_LIST_DIR}) +target_link_libraries(${PROJECT_NAME} PUBLIC Tasks) \ No newline at end of file diff --git a/Application/Tasks/CanDataTask.c b/Application/Tasks/CanDataTask.c index ddb1c43..4dcfde1 100644 --- a/Application/Tasks/CanDataTask.c +++ b/Application/Tasks/CanDataTask.c @@ -92,7 +92,6 @@ void CanDataTask_func(void *argument) { CanDataTask_HandleFifo(FDCAN_RX_FIFO0); CanDataTask_HandleFifo(FDCAN_RX_FIFO1); } - }