aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2019-01-24 13:29:36 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2019-01-24 13:29:36 +0200
commit9e7d86a4b8a67d4b94d33600a34f617b51abc426 (patch)
tree2ab2cc9c9d1eafcead62131faddcf9fe90d0ba0a /Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c
parent7fff53b4e158212572dd0d83b5628e799e05ba01 (diff)
parent91d4a6eceb00882a0898016e743130d62156e33b (diff)
downloadTango-9e7d86a4b8a67d4b94d33600a34f617b51abc426.tar.gz
Tango-9e7d86a4b8a67d4b94d33600a34f617b51abc426.zip
Merge branch 'master' of https://twinetfs.visualstudio.com/_git/Tango
Diffstat (limited to 'Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c')
-rw-r--r--Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c100
1 files changed, 96 insertions, 4 deletions
diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c
index 0b19f2454..3d4404f99 100644
--- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c
+++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c
@@ -76,7 +76,7 @@ uint32_t FileUploadRequestFunc(MessageContainer* requestContainer)
FileUploadResponse response = FILE_UPLOAD_RESPONSE__INIT;
WrittenBytes=0;
- FileHandle = malloc(sizeof(FIL));
+ FileHandle = my_malloc(sizeof(FIL));
if (FileHandle == 0)
Fresult = FR_DENIED;
else
@@ -245,7 +245,7 @@ uint32_t CreateRequestFunc(MessageContainer* requestContainer)
}
else
{
- FileHandle = malloc(sizeof(FIL));
+ FileHandle = my_malloc(sizeof(FIL));
if (FileHandle == 0)
Fresult = FR_DENIED;
else
@@ -516,7 +516,7 @@ uint32_t FileDownloadRequestFunc(MessageContainer* requestContainer)
FileDownloadResponse response = FILE_DOWNLOAD_RESPONSE__INIT;
WrittenBytes=0;
- FileHandle = malloc(sizeof(FIL));
+ FileHandle = my_malloc(sizeof(FIL));
if (FileHandle == 0)
Fresult = FR_DENIED;
else
@@ -558,7 +558,7 @@ uint32_t FileChunkDownloadRequestFunc(MessageContainer* requestContainer)
ReceivedFileHandle = FileHandle;
char *Buffer = 0;
- Buffer = malloc (2000);
+ Buffer = my_malloc (2000);
if (Buffer != NULL)
{
Fresult = f_read(ReceivedFileHandle,response.buffer.data,2000,&WrittenBytes );
@@ -604,3 +604,95 @@ uint32_t FileChunkDownloadRequestFunc(MessageContainer* requestContainer)
return OK;
}
+FRESULT FileWrite(void * buffer, uint16_t size,char *path)
+{
+ FRESULT Fresult = FR_OK;
+ FIL *FileHandle = 0; //the system supports a single active file
+ uint32_t Bytes = 0;
+
+ if (buffer)
+ {
+ FileHandle = my_malloc(sizeof(FIL));
+ if (FileHandle == 0)
+ Fresult = FR_DENIED;
+ else
+ {
+ Fresult = f_open(FileHandle,path,FA_WRITE | FA_OPEN_ALWAYS);
+ if (Fresult == FR_OK)
+ {
+ Fresult = f_write(FileHandle,buffer,size,&Bytes );
+ if(Fresult != FR_OK)
+ {
+ LOG_ERROR (Fresult,"fread error");
+ }
+ f_close(FileHandle);
+ }
+ else
+ {
+ LOG_ERROR (Fresult,"fopen error");
+ }
+ my_free(FileHandle);
+ }
+ }
+ return Fresult;
+}
+FRESULT FileRead(char *path, uint32_t *Size, void **Buffer)
+{
+ FRESULT Fresult = FR_OK;
+ FIL *FileHandle = 0; //the system supports a single active file
+ 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);
+ if (Fresult == FR_OK)
+ {
+ buffer = my_malloc (fno->fsize);
+ if (buffer)
+ {
+ FileHandle = my_malloc(sizeof(FIL));
+ if (FileHandle == 0)
+ Fresult = FR_DENIED;
+ else
+ {
+ Fresult = f_open(FileHandle,path,FA_READ);
+ if (Fresult == FR_OK)
+ {
+ Fresult = f_read(FileHandle,buffer,fno->fsize,&Bytes );
+ if(Fresult == FR_OK)
+ {
+ *Buffer = buffer;
+ *Size = (uint32_t)fno->fsize;
+ }
+ else
+ {
+ LOG_ERROR (Fresult,"fread error");
+ my_free (buffer);
+ }
+ f_close(FileHandle);
+ }
+ else
+ {
+ LOG_ERROR (Fresult,"fopen error");
+ my_free (buffer);
+ }
+ my_free(FileHandle);
+ }
+ }
+ else
+ {
+ LOG_ERROR (Fresult,"malloc error");
+ }
+ }
+ else
+ {
+ LOG_ERROR (Fresult,"f_stat error");
+ }
+ my_free(fno);
+ return Fresult;
+}