aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c')
-rw-r--r--Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c91
1 files changed, 57 insertions, 34 deletions
diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c
index ce36f57e6..6c7ee97a4 100644
--- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c
+++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c
@@ -44,7 +44,8 @@ ErrorCode FileError_to_ErrorCode[FR_INVALID_PARAMETER+1] = {ERROR_CODE__NONE,ERR
ERROR_CODE__FILE_REQUEST_INVALID_PARAMETER};
-FIL *FileHandle = 0; //the system supports a single active file
+FIL *UploadFileHandle = 0; //the system supports a single active file
+FIL *DownloadFileHandle = 0; //the system supports a single active file
char FileHandleChar[5];
char ErrorMsg[100];
#define MAX_CHUNK_LENGTH 2000
@@ -77,12 +78,12 @@ uint32_t FileUploadRequestFunc(MessageContainer* requestContainer)
FileUploadResponse response = FILE_UPLOAD_RESPONSE__INIT;
WrittenBytes=0;
- FileHandle = my_malloc(sizeof(FIL));
- if (FileHandle == 0)
+ UploadFileHandle = my_malloc(sizeof(FIL));
+ if (UploadFileHandle == 0)
Fresult = FR_DENIED;
else
{
- Fresult = f_open(FileHandle,request->path,FA_READ | FA_WRITE | FA_OPEN_ALWAYS );
+ Fresult = f_open(UploadFileHandle,request->path,FA_READ | FA_WRITE | FA_OPEN_ALWAYS );
if (Fresult == FR_OK)
{
FileLength = request->length;
@@ -93,8 +94,8 @@ uint32_t FileUploadRequestFunc(MessageContainer* requestContainer)
}
else
{
- free (FileHandle);
- FileHandle = 0;
+ free (UploadFileHandle);
+ UploadFileHandle = 0;
}
}
@@ -131,7 +132,7 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer)
FIL *ReceivedFileHandle; //the system supports a single active file
// if (request->uploadid == 1)
- ReceivedFileHandle = FileHandle;
+ ReceivedFileHandle = UploadFileHandle;
// memcpy (&ReceivedFileHandle,request->uploadid,sizeof(ReceivedFileHandle));
//if (ReceivedFileHandle == FileHandle)
//{
@@ -147,7 +148,8 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer)
{
REPORT_MSG (FileReceivedLength,"file upload ended successfully");
f_close(ReceivedFileHandle);
- free (FileHandle);
+ free (UploadFileHandle);
+ FileReceivedLength = 0;
}
else
{
@@ -155,7 +157,8 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer)
{
REPORT_MSG (FileReceivedLength,"file upload too much data!");
f_close(ReceivedFileHandle);
- free (FileHandle);
+ free (UploadFileHandle);
+ FileReceivedLength = 0;
}
}
}
@@ -251,15 +254,15 @@ uint32_t CreateRequestFunc(MessageContainer* requestContainer)
}
else
{
- FileHandle = my_malloc(sizeof(FIL));
- if (FileHandle == 0)
+ UploadFileHandle = my_malloc(sizeof(FIL));
+ if (UploadFileHandle == 0)
Fresult = FR_DENIED;
else
{
- Fresult = f_open(FileHandle,request->path,FA_CREATE_NEW);
+ Fresult = f_open(UploadFileHandle,request->path,FA_CREATE_NEW);
if (Fresult == FR_OK)
{
- if (f_close (FileHandle)!= FR_OK)
+ if (f_close (UploadFileHandle)!= FR_OK)
{
Fresult = FR_LOCKED;
}
@@ -272,7 +275,7 @@ uint32_t CreateRequestFunc(MessageContainer* requestContainer)
usnprintf(ErrorMsg, 100, "File Operation failed error code %d",Fresult);
}
- free (FileHandle);
+ free (UploadFileHandle);
responseContainer = createContainer(MESSAGE_TYPE__CreateResponse, requestContainer->token, false, &response, &create_response__pack, &create_response__get_packed_size);
if (Fresult!= OK)
@@ -304,7 +307,7 @@ uint32_t DeleteRequestFunc(MessageContainer* requestContainer)
//int NumOfFiles = 0;
FRESULT Fresult = FR_OK;
- Fresult |= f_opendir(&dir, g_cCwdBuf);
+ /*Fresult |= f_opendir(&dir, g_cCwdBuf);
if(Fresult != FR_OK)
{
LOG_ERROR (Fresult,"f_write error");
@@ -320,10 +323,10 @@ uint32_t DeleteRequestFunc(MessageContainer* requestContainer)
if (isDirectory(fno->fattrib))
{
//============================
- Fresult = f_opendir(&dir, request->path); /* Open the directory */
+ Fresult = f_opendir(&dir, request->path);
if (Fresult == FR_OK)
{
- Fresult = f_readdir(&dir, &fno); /* Read a directory item */
+ Fresult = f_readdir(&dir, &fno);
if (Fresult == FR_OK)
{
if(fno->fname[0] ==0)
@@ -343,7 +346,9 @@ uint32_t DeleteRequestFunc(MessageContainer* requestContainer)
Fresult = f_unlink(request->path);
}
}
- }
+ }*/
+ Fresult = f_unlink(request->path);
+
responseContainer = createContainer(MESSAGE_TYPE__DeleteResponse, requestContainer->token, false, &response, &delete_response__pack, &delete_response__get_packed_size);
if (Fresult!= OK)
{
@@ -387,7 +392,7 @@ uint32_t GetStorageInfoRequestFunc(MessageContainer* requestContainer)
response.capacity = tot_sect/2;
response.has_freespace = true;
response.freespace = fre_sect/2;
- response.root = "0:";
+ response.root = "/";
}
@@ -476,7 +481,10 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer)
if (i==0)
usnprintf(&FullPath[i], 50, "%s", request->path);
else
- usnprintf(&FullPath[i], 50, "%s%c%c%s", request->path,'\\','\\'/*"/"*/, fno[i]->fname);
+ if (strlen(request->path)==1) //info under the root
+ usnprintf(&FullPath[i], 50, "%s%s", request->path, fno[i]->fname);
+ else
+ usnprintf(&FullPath[i], 50, "%s%s%s", request->path,"/", fno[i]->fname);
Data[i].fullpath = &FullPath[i];
}
@@ -514,6 +522,7 @@ uint32_t FileDownloadRequestFunc(MessageContainer* requestContainer)
//uint32_t status = OK;
FRESULT Fresult = FR_OK;
+ FILINFO* fno;
MessageContainer responseContainer;
@@ -522,20 +531,31 @@ uint32_t FileDownloadRequestFunc(MessageContainer* requestContainer)
FileDownloadResponse response = FILE_DOWNLOAD_RESPONSE__INIT;
WrittenBytes=0;
- FileHandle = my_malloc(sizeof(FIL));
- if (FileHandle == 0)
+ FileReceivedLength = 0;
+
+ fno = my_malloc(sizeof(FILINFO));
+ if (fno == 0)
Fresult = FR_DENIED;
else
{
- Fresult = f_open(FileHandle,request->filename,FA_READ );
- if (Fresult == FR_OK)
+ memset (fno,0,sizeof(FILINFO));
+ Fresult = f_stat(request->filename,fno);
+ FileLength = fno->fsize;
+ DownloadFileHandle = my_malloc(sizeof(FIL));
+ if (DownloadFileHandle == 0)
+ Fresult = FR_DENIED;
+ else
{
- response.has_maxchunklength = true;
- response.maxchunklength = MAX_CHUNK_LENGTH;
- strcpy(FileHandleChar, "1234");
- response.downloadid = FileHandleChar; //supporting only single file at each time.
- }
+ Fresult = f_open(DownloadFileHandle,request->filename,FA_READ );
+ if (Fresult == FR_OK)
+ {
+ response.has_maxchunklength = true;
+ response.maxchunklength = MAX_CHUNK_LENGTH;
+ strcpy(FileHandleChar, "1234");
+ response.downloadid = FileHandleChar; //supporting only single file at each time.
+ }
+ }
}
@@ -562,12 +582,12 @@ uint32_t FileChunkDownloadRequestFunc(MessageContainer* requestContainer)
FRESULT Fresult = FR_OK;
FIL *ReceivedFileHandle; //the system supports a single active file
- ReceivedFileHandle = FileHandle;
+ ReceivedFileHandle = DownloadFileHandle;
char *Buffer = 0;
- Buffer = my_malloc (2000);
+ Buffer = my_malloc (MAX_CHUNK_LENGTH);
if (Buffer != NULL)
{
- Fresult = f_read(ReceivedFileHandle,response.buffer.data,2000,&WrittenBytes );
+ Fresult = f_read(ReceivedFileHandle,Buffer,2000,&WrittenBytes );
if(Fresult != FR_OK)
{
LOG_ERROR (Fresult,"f_write error");
@@ -575,12 +595,14 @@ uint32_t FileChunkDownloadRequestFunc(MessageContainer* requestContainer)
else
{
response.buffer.len = WrittenBytes;
+ response.buffer.data = Buffer;
FileReceivedLength += WrittenBytes;
if (FileReceivedLength == FileLength)
{
REPORT_MSG (FileReceivedLength,"file download ended successfully");
f_close(ReceivedFileHandle);
- free (FileHandle);
+ free (DownloadFileHandle);
+ FileReceivedLength = 0;
}
else
{
@@ -588,7 +610,8 @@ uint32_t FileChunkDownloadRequestFunc(MessageContainer* requestContainer)
{
REPORT_MSG (FileReceivedLength,"file download too much data!");
f_close(ReceivedFileHandle);
- free (FileHandle);
+ free (DownloadFileHandle);
+ FileReceivedLength = 0;
}
}
}