From 2fb4421e0d771ea84e744856dc56ebc7b713cd86 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Sun, 27 Jan 2019 12:34:09 +0200 Subject: Activate/Validate version support. buttons. --- .../Embedded/Common/SWUpdate/FileSystem.c | 42 ++++++++-- .../Embedded/Common/SWUpdate/FileSystem.h | 3 + .../Embedded/Common/SWUpdate/FirmwareUpgrade.c | 97 +++++++++++++++++++++- 3 files changed, 133 insertions(+), 9 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Common') diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c index 3d4404f99..49f65a764 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c @@ -36,6 +36,14 @@ #include "drivers/Flash_Memory/fatfs/ff.h" #include "third_party/fatfs/src/ffconf.h" + +ErrorCode FileError_to_ErrorCode[FR_INVALID_PARAMETER+1] = {ERROR_CODE__NONE,ERROR_CODE__FILE_REQUEST_DISK_ERR,ERROR_CODE__FILE_REQUEST_INT_ERR,ERROR_CODE__FILE_REQUEST_NOT_READY,ERROR_CODE__FILE_REQUEST_NO_FILE, + ERROR_CODE__FILE_REQUEST_NO_PATH,ERROR_CODE__FILE_REQUEST_INVALID_NAME,ERROR_CODE__FILE_REQUEST_DENIED,ERROR_CODE__FILE_REQUEST_EXIST,ERROR_CODE__FILE_REQUEST_INVALID_OBJECT, + ERROR_CODE__FILE_REQUEST_WRITE_PROTECTED,ERROR_CODE__FILE_REQUEST_INVALID_DRIVE,ERROR_CODE__FILE_REQUEST_NOT_ENABLED,ERROR_CODE__FILE_REQUEST_NO_FILESYSTEM, + ERROR_CODE__FILE_REQUEST_MKFS_ABORTED,ERROR_CODE__FILE_REQUEST_TIMEOUT,ERROR_CODE__FILE_REQUEST_LOCKED,ERROR_CODE__FILE_REQUEST_NOT_ENOUGH_CORE,ERROR_CODE__FILE_REQUEST_TOO_MANY_OPEN_FILES, + ERROR_CODE__FILE_REQUEST_INVALID_PARAMETER}; + + FIL *FileHandle = 0; //the system supports a single active file char FileHandleChar[5]; char ErrorMsg[100]; @@ -45,13 +53,6 @@ int FileReceivedLength = 0; static char g_cCwdBuf[50] = "/"; uint32_t WrittenBytes = 0; -ErrorCode FileError_to_ErrorCode[FR_INVALID_PARAMETER+1] = {ERROR_CODE__NONE,ERROR_CODE__FILE_REQUEST_DISK_ERR,ERROR_CODE__FILE_REQUEST_INT_ERR,ERROR_CODE__FILE_REQUEST_NOT_READY,ERROR_CODE__FILE_REQUEST_NO_FILE, - ERROR_CODE__FILE_REQUEST_NO_PATH,ERROR_CODE__FILE_REQUEST_INVALID_NAME,ERROR_CODE__FILE_REQUEST_DENIED,ERROR_CODE__FILE_REQUEST_EXIST,ERROR_CODE__FILE_REQUEST_INVALID_OBJECT, - ERROR_CODE__FILE_REQUEST_WRITE_PROTECTED,ERROR_CODE__FILE_REQUEST_INVALID_DRIVE,ERROR_CODE__FILE_REQUEST_NOT_ENABLED,ERROR_CODE__FILE_REQUEST_NO_FILESYSTEM, - ERROR_CODE__FILE_REQUEST_MKFS_ABORTED,ERROR_CODE__FILE_REQUEST_TIMEOUT,ERROR_CODE__FILE_REQUEST_LOCKED,ERROR_CODE__FILE_REQUEST_NOT_ENOUGH_CORE,ERROR_CODE__FILE_REQUEST_TOO_MANY_OPEN_FILES, - ERROR_CODE__FILE_REQUEST_INVALID_PARAMETER}; - - ErrorCode getErrorCode(FRESULT Fresult) { return FileError_to_ErrorCode[Fresult]; @@ -696,3 +697,30 @@ FRESULT FileRead(char *path, uint32_t *Size, void **Buffer) my_free(fno); return Fresult; } +FRESULT FileOpen(char *path, uint32_t *Size, FIL *FileHandle) +{ + FRESULT Fresult = FR_OK; + FILINFO* fno = 0; + void* buffer = NULL; + uint32_t Bytes = 0; + uint32_t status = 0; + + fno = my_malloc(sizeof(FILINFO)); + if (fno == 0) + return ERROR; + memset (fno,0,sizeof(FILINFO)); + Fresult = f_stat(path,fno); + *Size = (uint32_t)fno->fsize; + if (Fresult == FR_OK) + { + FileHandle = my_malloc(sizeof(FIL)); + if (FileHandle == 0) + Fresult = FR_DENIED; + } + else + { + LOG_ERROR (Fresult,"f_stat error"); + } + my_free(fno); + return Fresult; +} diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.h b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.h index a54b72b66..605b4a475 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.h +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.h @@ -9,6 +9,8 @@ #define COMMON_SWUPDATE_FILESYSTEM_H_ #include "drivers/Flash_Memory/fatfs/ff.h" +extern ErrorCode FileError_to_ErrorCode[FR_INVALID_PARAMETER+1]; + uint32_t FileUploadRequestFunc(MessageContainer* requestContainer); uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer); uint32_t ExecuteProcessRequestFunc(MessageContainer* requestContainer); @@ -22,5 +24,6 @@ uint32_t FileChunkDownloadRequestFunc(MessageContainer* requestContainer); FRESULT FileWrite(void * buffer, uint16_t size,char *path); FRESULT FileRead(char *path, uint32_t *Size, void **Buffer); +FRESULT FileOpen(char *path, uint32_t *Size, FIL *FileHandle); #endif /* COMMON_SWUPDATE_FILESYSTEM_H_ */ diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c index 4c18131f4..424c7f11f 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c @@ -13,10 +13,103 @@ #include #include #include +#include +#include +#include +#include #include #include #include +#include "drivers/FPGA/Full_Vme/FPGA_Programming_Up.h" +#include "Common/SWUpdate/FileSystem.h" + + +uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer) +{ + uint32_t status = OK; + void* buffer = NULL; + uint32_t Bytes = 0; + char SWINFOPath[100]; + FRESULT Fresult = FR_OK; + int File_i; + + MessageContainer responseContainer; + + ActivateVersionRequest* request = activate_version_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); + + ActivateVersionResponse response = ACTIVATE_VERSION_RESPONSE__INIT; + VersionPackageDescriptor* VersionPackage;// = VERSION_PACKAGE_DESCRIPTOR__INIT; + + + strcpy (SWINFOPath,request->path); + strcat(SWINFOPath,"//SWINFO.DAT"); + + Fresult = FileRead(SWINFOPath, &Bytes, &buffer); + + if (Fresult == FR_OK) + { + VersionPackage = version_package_descriptor__unpack(NULL,Bytes,buffer); + for (File_i = 0;File_in_filedescriptors;File_i++) + { + switch(VersionPackage->filedescriptors[File_i]->destination) + { + case VERSION_FILE_DESTINATION__MCU: + break; + case VERSION_FILE_DESTINATION__FPGA1: + case VERSION_FILE_DESTINATION__FPGA2: + case VERSION_FILE_DESTINATION__FPGA3: + //validate + //update + Fresult = FPGA_Programming_Up( VersionPackage->filedescriptors[File_i]->destination, VersionPackage->filedescriptors[File_i]->filename, false); + break; + default: + LOG_ERROR (VersionPackage->filedescriptors[File_i]->destination,"wrong fule update Destination"); + Fresult = ERROR_CODE__FILE_REQUEST_INVALID_NAME; + break; + } + } + } + responseContainer = createContainer(MESSAGE_TYPE__ActivateVersionResponse, requestContainer->token, false, &response, &activate_version_response__pack, &activate_version_response__get_packed_size); + if (status!= OK) + { + responseContainer.error = FileError_to_ErrorCode[Fresult]; + responseContainer.errormessage = "Activate Version Request error"; + } + responseContainer.continuous = false; + uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); + size_t container_size = message_container__pack(&responseContainer, container_buffer); + my_free(responseContainer.data.data); + activate_version_request__free_unpacked(request,NULL); + SendChars(container_buffer, container_size); + + return OK; +} + +uint32_t ValidateVersionRequestFunc(MessageContainer* requestContainer) +{ + uint32_t status = OK; + + MessageContainer responseContainer; + + ValidateVersionRequest* request = validate_version_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); + + ValidateVersionResponse response = VALIDATE_VERSION_RESPONSE__INIT; + + + responseContainer = createContainer(MESSAGE_TYPE__ValidateVersionResponse, requestContainer->token, false, &response, &validate_version_response__pack, &validate_version_response__get_packed_size); + if (status!= OK) + { + responseContainer.error = getErrorCode(status); + responseContainer.errormessage = "Validate Version Request error"; + } + responseContainer.continuous = false; + uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); + size_t container_size = message_container__pack(&responseContainer, container_buffer); + my_free(responseContainer.data.data); + validate_version_request__free_unpacked(request,NULL); + SendChars(container_buffer, container_size); + + return OK; +} -uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer); -uint32_t ValidateVersionRequestFunc(MessageContainer* requestContainer); -- cgit v1.3.1