aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Common
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2019-01-27 14:41:51 +0200
committerAvi Levkovich <avi@twine-s.com>2019-01-27 14:41:51 +0200
commitc64b07d93d944a294df08cee553800a09757d6ec (patch)
tree71ab5b00aa977d5848058d2ed65cfd5f0782062f /Software/Embedded_SW/Embedded/Common
parent9f678962afca4568589680a897f9f358a2b163d2 (diff)
parent2fb4421e0d771ea84e744856dc56ebc7b713cd86 (diff)
downloadTango-c64b07d93d944a294df08cee553800a09757d6ec.tar.gz
Tango-c64b07d93d944a294df08cee553800a09757d6ec.zip
Merge branch 'master' of https://twinetfs.visualstudio.com/_git/Tango
Diffstat (limited to 'Software/Embedded_SW/Embedded/Common')
-rw-r--r--Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c42
-rw-r--r--Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.h3
-rw-r--r--Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c97
3 files changed, 133 insertions, 9 deletions
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 <Communication/PMR/FirmwareUpgrade/ActivateVersionResponse.pb-c.h>
#include <Communication/PMR/FirmwareUpgrade/ActivateVersionRequest.pb-c.h>
#include <Communication/PMR/FirmwareUpgrade/ActivateVersionResponse.pb-c.h>
+#include <Communication/PMR/FirmwareUpgrade/ValidateVersionRequest.pb-c.h>
+#include <Communication/PMR/FirmwareUpgrade/ValidateVersionResponse.pb-c.h>
+#include <Communication/PMR/FirmwareUpgrade/ValidateVersionRequest.pb-c.h>
+#include <Communication/PMR/FirmwareUpgrade/ValidateVersionResponse.pb-c.h>
#include <Communication/PMR/FirmwareUpgrade/VersionFileDestination.pb-c.h>
#include <Communication/PMR/FirmwareUpgrade/VersionFileDescriptor.pb-c.h>
#include <Communication/PMR/FirmwareUpgrade/VersionPackageDescriptor.pb-c.h>
+#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_i<VersionPackage->n_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);