diff options
Diffstat (limited to 'Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c')
| -rw-r--r-- | Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c | 91 |
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; } } } |
