diff options
| author | Shlomo Hecht <shlomo@twine-s.com> | 2018-11-25 18:41:28 +0200 |
|---|---|---|
| committer | Shlomo Hecht <shlomo@twine-s.com> | 2018-11-25 18:41:28 +0200 |
| commit | ab4d7232c388a10224a642fe210b30670f91e574 (patch) | |
| tree | 75b7349a23f5db0c682dcce2ba87a85a18409b42 /Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c | |
| parent | 80ed2914882d82dce0f60c09185da6a500f78d8b (diff) | |
| parent | 03180d26af65c24822cf5ffd44a347db7394d3b2 (diff) | |
| download | Tango-ab4d7232c388a10224a642fe210b30670f91e574.tar.gz Tango-ab4d7232c388a10224a642fe210b30670f91e574.zip | |
Merge branch 'master' of https://twinetfs.visualstudio.com/Tango/_git/Tango
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, 54 insertions, 37 deletions
diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c index e8178c0fd..09789670d 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c @@ -38,6 +38,7 @@ char ErrorMsg[100]; #define MAX_CHUNK_LENGTH 2000 int FileLength = 0; int FileReceivedLength = 0; +static char g_cCwdBuf[50] = "/"; bool isDirectory(FileAttribute FileAtt) { @@ -57,27 +58,26 @@ uint32_t FileUploadRequestFunc(MessageContainer* requestContainer) FileUploadRequest* request = file_upload_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); FileUploadResponse response = FILE_UPLOAD_RESPONSE__INIT; - + FileHandle = malloc(sizeof(FIL)); if (FileHandle == 0) + Fresult == FR_DENIED; + else { - Fresult = f_open(FileHandle,request->filename,FA_READ | FA_WRITE | FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW); + Fresult = f_open(FileHandle,request->filename,FA_READ | FA_WRITE | FA_OPEN_ALWAYS ); if (Fresult == FR_OK) { FileLength = request->length; response.has_maxchunklength = true; response.maxchunklength = MAX_CHUNK_LENGTH; - memcpy (FileHandleChar,FileHandle,sizeof(FileHandle)); + strcpy(FileHandleChar, "1234"); response.uploadid = FileHandleChar; //supporting only single file at each time. } - } - else - { - Fresult = FR_DENIED; + } responseContainer = createContainer(MESSAGE_TYPE__FileUploadResponse, requestContainer->token, false, &response, &file_upload_response__pack, &file_upload_response__get_packed_size); - if (status!= OK) + if (Fresult!= FR_OK) { responseContainer.error = ERROR_CODE__INVALID_PROCESS_ID; responseContainer.errormessage = "JOb Active or incorrect parameters"; @@ -105,11 +105,13 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer) FileChunkUploadResponse response = FILE_CHUNK_UPLOAD_RESPONSE__INIT; - FIL *ReceivedFileHandle = 0; //the system supports a single active file + FIL *ReceivedFileHandle; //the system supports a single active file - memcpy (ReceivedFileHandle,request->uploadid,sizeof(ReceivedFileHandle)); - if (ReceivedFileHandle == FileHandle) - { + // if (request->uploadid == 1) + ReceivedFileHandle = FileHandle; +// memcpy (&ReceivedFileHandle,request->uploadid,sizeof(ReceivedFileHandle)); + //if (ReceivedFileHandle == FileHandle) + //{ Fresult = f_write(ReceivedFileHandle,request->buffer.data,request->buffer.len,&WrittenBytes ); // FIL *fp, /* Pointer to the file object */ // const void *buff, /* Pointer to the data to be written */ @@ -127,7 +129,7 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer) { REPORT_MSG (FileReceivedLength,"file upload ended successfully"); f_close(ReceivedFileHandle); - FileHandle = 0; + free (FileHandle); } else { @@ -135,18 +137,18 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer) { REPORT_MSG (FileReceivedLength,"file upload too much data!"); f_close(ReceivedFileHandle); - FileHandle = 0; + free (FileHandle); } } } - } + /*} else { LOG_ERROR (ReceivedFileHandle,"file id error"); f_close(FileHandle); - FileHandle = 0; + free (FileHandle); status = ERROR_CODE__FILE_NOT_FOUND; - } + }*/ responseContainer = createContainer(MESSAGE_TYPE__FileChunkUploadResponse, requestContainer->token, false, &response, &file_chunk_upload_response__pack, &file_chunk_upload_response__get_packed_size); if (status!= OK) @@ -231,7 +233,10 @@ uint32_t CreateRequestFunc(MessageContainer* requestContainer) } else { + FileHandle = malloc(sizeof(FIL)); if (FileHandle == 0) + Fresult == FR_DENIED; + else { Fresult = f_open(FileHandle,request->path,FA_CREATE_NEW); if (Fresult == FR_OK) @@ -242,10 +247,6 @@ uint32_t CreateRequestFunc(MessageContainer* requestContainer) } } } - else - { - Fresult = FR_DENIED; - } } if (Fresult != FR_OK) { @@ -253,7 +254,7 @@ uint32_t CreateRequestFunc(MessageContainer* requestContainer) usnprintf(ErrorMsg, 100, "File Operation failed error code %d",Fresult); } - FileHandle = 0; + free (FileHandle); responseContainer = createContainer(MESSAGE_TYPE__CreateResponse, requestContainer->token, false, &response, &create_response__pack, &create_response__get_packed_size); if (status!= OK) @@ -319,8 +320,6 @@ uint32_t DeleteRequestFunc(MessageContainer* requestContainer) status = ERROR_CODE__FILE_NOT_FOUND; usnprintf(ErrorMsg, 100, "File Operation failed error code %d",Fresult); } - FileHandle = 0; - responseContainer = createContainer(MESSAGE_TYPE__DeleteResponse, requestContainer->token, false, &response, &delete_response__pack, &delete_response__get_packed_size); if (status!= OK) @@ -394,9 +393,16 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer) #define MAX_NUM_OF_FILES 10 DIR dir; FILINFO* fno[MAX_NUM_OF_FILES]; - int NumOfFiles = 0; + int i,NumOfFiles = 0; FRESULT Fresult = FR_OK; + Fresult |= f_opendir(&dir, g_cCwdBuf); + if(Fresult != FR_OK) + { + return(Fresult); + } + + memset (fno,0,sizeof(fno)); FileInfo **FilesInfo = (FileInfo**)my_malloc(sizeof(FileInfo *)*(MAX_NUM_OF_FILES)); FileInfo Data[MAX_NUM_OF_FILES]; memset(fno,0,sizeof(fno)); @@ -417,7 +423,7 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer) { fno[NumOfFiles] = my_malloc(sizeof(FILINFO)); memset (fno[NumOfFiles],0,sizeof(FILINFO)); - Fresult = f_readdir(&dir, &fno[NumOfFiles]); /* Read a directory item */ + Fresult = f_readdir(&dir, fno[NumOfFiles]); /* Read a directory item */ if (Fresult == FR_OK) { if(fno[NumOfFiles]->fname[0] ==0) @@ -434,17 +440,28 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer) } } - if (Fresult == FR_OK) + if ((Fresult == FR_OK)&&(NumOfFiles)) { - for (NumOfFiles = 0;NumOfFiles < MAX_NUM_OF_FILES;NumOfFiles++) + for (i = 0;i < NumOfFiles;i++) { - Data[NumOfFiles].attribute = fno[NumOfFiles]->fattrib; - Data[NumOfFiles].name = fno[NumOfFiles]->fname; - Data[NumOfFiles].length = fno[NumOfFiles]->fsize; - Data[NumOfFiles].lastmodifieddate = fno[NumOfFiles]->fdate; - Data[NumOfFiles].lastmodifiedtime = fno[NumOfFiles]->ftime; - response.items[NumOfFiles] = &Data[NumOfFiles]; + file_info__init(&Data[i]); + FilesInfo[i] = &Data[i]; + Data[i].has_attribute = true; + Data[i].attribute = fno[i]->fattrib; + Data[i].has_length = true; + Data[i].name = fno[i]->fname; + Data[i].has_length = true; + Data[i].length = fno[i]->fsize; + Data[i].lastmodifieddate = fno[i]->fdate; + Data[i].lastmodifiedtime = fno[i]->ftime; } + response.n_items = NumOfFiles; + response.items = FilesInfo; + } + else + { + response.n_items = 0; + response.items = NULL; } responseContainer = createContainer(MESSAGE_TYPE__GetFilesResponse, requestContainer->token, false, &response, &get_files_response__pack, &get_files_response__get_packed_size); @@ -460,10 +477,10 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer) my_free(FilesInfo); get_files_request__free_unpacked(request,NULL); SendChars(container_buffer, container_size); - for (NumOfFiles = 0;NumOfFiles < MAX_NUM_OF_FILES;NumOfFiles++) + for (i = 0;i < NumOfFiles;i++) { - if (fno[NumOfFiles]) - my_free (fno[NumOfFiles]); + if (fno[i]) + my_free (fno[i]); } return OK; } |
