diff options
| author | Avi Levkovich <avi@twine-s.com> | 2018-11-26 08:37:59 +0200 |
|---|---|---|
| committer | Avi Levkovich <avi@twine-s.com> | 2018-11-26 08:37:59 +0200 |
| commit | c04beae40ad2699cc1b27686cc3cb09bd04f13b3 (patch) | |
| tree | 24052137ca379f9dcaf665801da718a64c6be344 /Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c | |
| parent | 56277e1cdd3d33e5834fc886e1e236afc9afd7a3 (diff) | |
| parent | a78d877a558cc9519ece2b48f6f3281d78874c59 (diff) | |
| download | Tango-c04beae40ad2699cc1b27686cc3cb09bd04f13b3.tar.gz Tango-c04beae40ad2699cc1b27686cc3cb09bd04f13b3.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.c | 120 |
1 files changed, 82 insertions, 38 deletions
diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c index 78fba3c49..3d23f9e48 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c @@ -38,7 +38,24 @@ char ErrorMsg[100]; #define MAX_CHUNK_LENGTH 2000 int FileLength = 0; int FileReceivedLength = 0; +static char g_cCwdBuf[50] = "/"; +uint32_t WrittenBytes = 0; +/*ErrorCode FileError_to_ErrorCode[FILE_ERRORS_MAX+1] = {ERROR_CODE__NONE,ERROR_CODE__JOB_UNSPECIFIED_ERROR,ERROR_CODE__JOB_THREAD_BREAK,ERROR_CODE__JOB_WINDER_DANCER_FAIL, + ERROR_CODE__JOB_POOLER_DANCER_FAIL,ERROR_CODE__JOB_FEEDER_DANCER_FAIL,ERROR_CODE__JOB_OUT_OF_DYE,ERROR_CODE__JOB_OTHER_ALARM, + ERROR_CODE__JOB_TEMPERATURE_ALARM,ERROR_CODE__JOB_LS_ALARM,ERROR_CODE__JOB_PRESSURE_ALARM,ERROR_CODE__JOB_CURRENT_ALARM,ERROR_CODE__JOB_MOTOR_ALARM}; +*/ + +ErrorCode getErrorCode(FRESULT Fresult) +{ + switch (Fresult) + { + case FR_OK: + retrun ERROR_CODE_NONE; + default: + return ERROR_CODE__FILE_LENGTH_OUT_OF_RANGE; + } +} bool isDirectory(FileAttribute FileAtt) { if (FileAtt&&FILE_ATTRIBUTE__Directory) @@ -58,26 +75,27 @@ uint32_t FileUploadRequestFunc(MessageContainer* requestContainer) FileUploadResponse response = FILE_UPLOAD_RESPONSE__INIT; + WrittenBytes=0; + 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"; @@ -96,7 +114,6 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer) { uint32_t status = OK; FRESULT Fresult = FR_OK; - uint32_t WrittenBytes = 0; MessageContainer responseContainer; @@ -105,11 +122,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 */ @@ -121,13 +140,12 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer) } else { - int FileLength = 0; FileReceivedLength += WrittenBytes; if (FileReceivedLength == FileLength) { REPORT_MSG (FileReceivedLength,"file upload ended successfully"); f_close(ReceivedFileHandle); - FileHandle = 0; + free (FileHandle); } else { @@ -135,18 +153,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 +249,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 +263,6 @@ uint32_t CreateRequestFunc(MessageContainer* requestContainer) } } } - else - { - Fresult = FR_DENIED; - } } if (Fresult != FR_OK) { @@ -253,7 +270,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) @@ -285,6 +302,14 @@ uint32_t DeleteRequestFunc(MessageContainer* requestContainer) int NumOfFiles = 0; FRESULT Fresult = FR_OK; + Fresult |= f_opendir(&dir, g_cCwdBuf); + if(Fresult != FR_OK) + { + return(Fresult); + } + + fno = my_malloc(sizeof(FILINFO)); + memset (fno,0,sizeof(FILINFO)); Fresult = f_stat(request->path,fno); if (Fresult == FR_OK) { @@ -319,8 +344,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) @@ -332,6 +355,7 @@ uint32_t DeleteRequestFunc(MessageContainer* requestContainer) 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); + my_free(fno); delete_request__free_unpacked(request,NULL); SendChars(container_buffer, container_size); @@ -394,13 +418,22 @@ 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)); fno[0] = my_malloc(sizeof(FILINFO)); memset (fno[0],0,sizeof(FILINFO)); + Fresult = f_stat(request->path,fno[0]); if (Fresult == FR_OK) { @@ -415,7 +448,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) @@ -432,17 +465,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); @@ -458,10 +502,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; } |
