Master is now using the same FW_Update Methode as the Slaves

This commit is contained in:
2024-05-24 01:58:53 +02:00
parent 66e04c6e06
commit d0544576a3
10 changed files with 198 additions and 89 deletions

View File

@@ -22,4 +22,4 @@ target_sources(${PROJECT_NAME}
target_include_directories(${PROJECT_NAME} INTERFACE ${CMAKE_CURRENT_LIST_DIR})
target_link_libraries(${PROJECT_NAME} PUBLIC PROTOS CLS)
target_link_libraries(${PROJECT_NAME} PRIVATE Revision CLS_BSP BSP ulog)
target_link_libraries(${PROJECT_NAME} PRIVATE Revision CLS_BSP BSP ulog ram_loader)

View File

@@ -10,6 +10,9 @@
#include "crc.h"
#include "FirmwareUpdate.h"
#include "stdbool.h"
#include "CLS.h"
#include "stdbool.h"
#include "ram_loader.h"
// static memory only for decoding messages
static cls_firmware_Start msg_cls_firmware_Start;
@@ -58,19 +61,15 @@ void DataSend_FirmwareFileCheck(uint32_t crc, uint32_t device_id, bool ready_for
#define CHUNK_SIZE 256 // Change this to the size of chunks you want to read
static uint8_t crc_buffer[CHUNK_SIZE];
void DataClbk_cls_firmware_Start(void *msg, uint32_t length) {
DATA_CLBK_SETUP(cls_firmware_Start);
fwStartTime = osKernelGetSysTimerCount();
fwPackageCounter = 0;
void fw_Start_Slave( cls_firmware_Start * msg) {
uint32_t crc = 0;
UINT totalRead = 0;
UINT bytesRead = 0;
if(FileOpen) {
f_close(&FwFile);
}
// Check if file already exists
if(f_open(&FwFile, msg_cls_firmware_Start.name, FA_READ) == FR_OK) {
if(f_open(&FwFile, msg->name, FA_READ) == FR_OK) {
__HAL_CRC_DR_RESET(&hcrc);
do {
@@ -80,16 +79,38 @@ void DataClbk_cls_firmware_Start(void *msg, uint32_t length) {
} while(bytesRead == CHUNK_SIZE);
f_close(&FwFile);
if(crc == msg_cls_firmware_Start.crc_fw) {
if(crc == msg->crc_fw) {
// CRC matches, no need for transfer
DataSend_FirmwareFileCheck(crc, msg_cls_firmware_Start.device_id, false, totalRead, msg_cls_firmware_Start.name);
DataSend_FirmwareFileCheck(crc, msg->device_id, false, totalRead, msg->name);
return;
}
}
fresult_open = f_open(&FwFile, msg_cls_firmware_Start.name, FA_CREATE_ALWAYS | FA_WRITE);
fresult_open = f_open(&FwFile, msg->name, FA_CREATE_ALWAYS | FA_WRITE);
FileOpen=true;
DataSend_FirmwareFileCheck(crc, msg_cls_firmware_Start.device_id, fresult_open==FR_OK, totalRead, msg_cls_firmware_Start.name);
DataSend_FirmwareFileCheck(crc, msg->device_id, fresult_open==FR_OK, totalRead, msg->name);
}
void fw_Start_Master( cls_firmware_Start * msg) {
fresult_open = f_open(&FwFile, "firm.bin", FA_CREATE_ALWAYS | FA_WRITE);
FileOpen=true;
DataSend_FirmwareFileCheck(0, msg->device_id, fresult_open==FR_OK, 0, msg->name);
}
void DataClbk_cls_firmware_Start(void *msg, uint32_t length) {
DATA_CLBK_SETUP(cls_firmware_Start);
fwStartTime = osKernelGetSysTimerCount();
fwPackageCounter = 0;
if(FileOpen) {
f_close(&FwFile);
}
if(msg_cls_firmware_Start.device_id == gCLS_DEVICE_ADDRESS) {
fw_Start_Master(&msg_cls_firmware_Start);
} else {
fw_Start_Slave(&msg_cls_firmware_Start);
}
}
@@ -133,10 +154,14 @@ void DataClbk_cls_firmware_Done(void *msg, uint32_t length) {
fresult_open = 0xFF;
FileOpen=false;
FirmwareUpdateArgs args;
args.device = msg_cls_firmware_Done.device_id;
memcpy(args.name, msg_cls_firmware_Start.name, sizeof(args.name));
if(msg_cls_firmware_Done.device_id == gCLS_DEVICE_ADDRESS) {
RamLoader_LoadApplication();
} else {
FirmwareUpdateTask_start(args);
FirmwareUpdateArgs args;
args.device = msg_cls_firmware_Done.device_id;
memcpy(args.name, msg_cls_firmware_Start.name, sizeof(args.name));
FirmwareUpdateTask_start(args);
}
}

View File

@@ -160,7 +160,6 @@ void FirmwareUpdateTask_start(FirmwareUpdateArgs args) {
}
}
UsbDataPacket buffer;
void CLSFirmwareUpdateTask_func(void *argument) {
FirmwareUpdateArgs args;
osStatus_t status;