diff options
| author | Shlomo Hecht <shlomo@twine-s.com> | 2020-03-05 18:14:05 +0200 |
|---|---|---|
| committer | Shlomo Hecht <shlomo@twine-s.com> | 2020-03-05 18:14:05 +0200 |
| commit | 42d9e4ee8951e337046428e332099ba16047856b (patch) | |
| tree | 40a4415fbd3c585a2237bc758a3f6ae7f777b36b /Software/Embedded_SW/Embedded/Common/SWUpdate | |
| parent | 937b2a545fc7405f4673377b209caf22f00375b7 (diff) | |
| download | Tango-42d9e4ee8951e337046428e332099ba16047856b.tar.gz Tango-42d9e4ee8951e337046428e332099ba16047856b.zip | |
Version 1.4.6.16 handle rockers PPC homing request, fix FFS semaphore issue
Diffstat (limited to 'Software/Embedded_SW/Embedded/Common/SWUpdate')
| -rw-r--r-- | Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c | 178 |
1 files changed, 112 insertions, 66 deletions
diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c index 3b5ba176d..e14727f4b 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c @@ -296,6 +296,11 @@ uint32_t FileDownloadRequestFunc(MessageContainer* requestContainer) Semaphore_post(FFS_Sem); } } + else + { + Fresult = FR_DENIED; + Report("Semaphore_pend failed", __FILE__, __LINE__, 4, RpWarning, (int)0, 0); + } } } @@ -453,16 +458,23 @@ uint32_t CreateRequestFunc(MessageContainer* requestContainer) Fresult = FR_DENIED; else { - Semaphore_pend(FFS_Sem, BIOS_WAIT_FOREVER); - Fresult = f_open(UploadFileHandle,request->path,FA_CREATE_NEW); - if (Fresult == FR_OK) + if (Semaphore_pend(FFS_Sem, BIOS_NO_WAIT)) { - if (f_close (UploadFileHandle)!= FR_OK) + Fresult = f_open(UploadFileHandle,request->path,FA_CREATE_NEW); + if (Fresult == FR_OK) { - Fresult = FR_LOCKED; + if (f_close (UploadFileHandle)!= FR_OK) + { + Fresult = FR_LOCKED; + } } + Semaphore_post(FFS_Sem); + } + else + { + Fresult = FR_DENIED; + Report("Semaphore_pend failed", __FILE__, __LINE__, 4, RpWarning, (int)0, 0); } - Semaphore_post(FFS_Sem); } } if (Fresult != FR_OK) @@ -502,9 +514,16 @@ uint32_t DeleteRequestFunc(MessageContainer* requestContainer) //int NumOfFiles = 0; FRESULT Fresult = FR_OK; - Semaphore_pend(FFS_Sem, BIOS_WAIT_FOREVER); - Fresult = f_unlink(request->path); - Semaphore_post(FFS_Sem); + if (Semaphore_pend(FFS_Sem, BIOS_NO_WAIT)) + { + Fresult = f_unlink(request->path); + Semaphore_post(FFS_Sem); + } + else + { + Fresult = FR_DENIED; + Report("Semaphore_pend failed", __FILE__, __LINE__, 4, RpWarning, (int)0, 0); + } REPORT_MSG(Fresult, "File Delete"); responseContainer = createContainer(MESSAGE_TYPE__DeleteResponse, requestContainer->token, false, &response, &delete_response__pack, &delete_response__get_packed_size); @@ -587,6 +606,8 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer) char FullPath[MAX_NUM_OF_FILES][60]; int i,NumOfFiles = 0; FRESULT Fresult = FR_OK; + FileInfo **FilesInfo = (FileInfo**)my_malloc(sizeof(FileInfo *)*(MAX_NUM_OF_FILES)); + FileInfo Data[MAX_NUM_OF_FILES]; /* time_t t; struct tm *ltm; @@ -597,40 +618,45 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer) Report(curTime, __FILE__, ltm->tm_hour,ltm->tm_min , RpWarning, ltm->tm_sec, 0); */ - Semaphore_pend(FFS_Sem, BIOS_WAIT_FOREVER); - Fresult |= f_opendir(&dir, g_cCwdBuf); - if(Fresult != FR_OK) + if (Semaphore_pend(FFS_Sem, BIOS_NO_WAIT)) { - Semaphore_post(FFS_Sem); - return(Fresult); - } + Fresult |= f_opendir(&dir, g_cCwdBuf); + if(Fresult != FR_OK) + { + Semaphore_post(FFS_Sem); + 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)); + memset (fno,0,sizeof(fno)); + memset(fno,0,sizeof(fno)); + fno[0] = my_malloc(sizeof(FILINFO)); + memset (fno[0],0,sizeof(FILINFO)); - //============================ - Fresult = f_opendir(&dir, request->path); /* Open the directory */ - if (Fresult == FR_OK) - { - for (NumOfFiles = 1;NumOfFiles < MAX_NUM_OF_FILES;NumOfFiles++) + //============================ + Fresult = f_opendir(&dir, request->path); /* Open the directory */ + if (Fresult == FR_OK) { - fno[NumOfFiles] = my_malloc(sizeof(FILINFO)); - memset (fno[NumOfFiles],0,sizeof(FILINFO)); - Fresult = f_readdir(&dir, fno[NumOfFiles]); /* Read a directory item */ - if (Fresult == FR_OK) + for (NumOfFiles = 1;NumOfFiles < MAX_NUM_OF_FILES;NumOfFiles++) { - if(fno[NumOfFiles]->fname[0] ==0) + fno[NumOfFiles] = my_malloc(sizeof(FILINFO)); + memset (fno[NumOfFiles],0,sizeof(FILINFO)); + Fresult = f_readdir(&dir, fno[NumOfFiles]); /* Read a directory item */ + if (Fresult == FR_OK) { - break; + if(fno[NumOfFiles]->fname[0] ==0) + { + break; + } } } } - } - Semaphore_post(FFS_Sem); + Semaphore_post(FFS_Sem); + } + else + { + Fresult = FR_DENIED; + Report("Semaphore_pend failed", __FILE__, __LINE__, 4, RpWarning, (int)0, 0); + } if ((Fresult == FR_OK)&&(NumOfFiles)) { @@ -688,8 +714,10 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer) size_t container_size = message_container__pack(&responseContainer, container_buffer); SendChars(container_buffer, container_size); } - my_free(responseContainer.data.data); - my_free(FilesInfo); + if (responseContainer.data.data) + my_free(responseContainer.data.data); + if (FilesInfo) + my_free(FilesInfo); get_files_request__free_unpacked(request,NULL); for (i = 0;i < NumOfFiles;i++) { @@ -711,29 +739,32 @@ FRESULT FileWrite(void * buffer, uint16_t size,char *path, uint32_t timeout) Fresult = FR_DENIED; else { - if (Semaphore_pend(FFS_Sem, timeout) == false) - { - LOG_ERROR (false,"file system busy error"); - return FR_TIMEOUT; - } - - Fresult = f_open(FileHandle,path,FA_WRITE | FA_OPEN_ALWAYS|FA_CREATE_ALWAYS); - if (Fresult == FR_OK) + if (Semaphore_pend(FFS_Sem, BIOS_NO_WAIT)) { - Fresult = f_write(FileHandle,buffer,size,&Bytes ); - if(Fresult != FR_OK) + Fresult = f_open(FileHandle,path,FA_WRITE | FA_OPEN_ALWAYS|FA_CREATE_ALWAYS); + if (Fresult == FR_OK) { - LOG_ERROR (Fresult,"fwrite error"); + Fresult = f_write(FileHandle,buffer,size,&Bytes ); + if(Fresult != FR_OK) + { + LOG_ERROR (Fresult,"fwrite error"); + } + //LOG_ERROR (Bytes,"f_write ok no of bytes"); + Report("f_write ok no of bytes", __FILE__, __LINE__, Bytes, RpWarning, (int)size, 0); + f_close(FileHandle); } - //LOG_ERROR (Bytes,"f_write ok no of bytes"); - Report("f_write ok no of bytes", __FILE__, __LINE__, Bytes, RpWarning, (int)size, 0); - f_close(FileHandle); + else + { + LOG_ERROR (Fresult,"fopen error"); + } + Semaphore_post(FFS_Sem); } else { - LOG_ERROR (Fresult,"fopen error"); + Fresult = FR_DENIED; + Report("Semaphore_pend failed", __FILE__, __LINE__, 4, RpWarning, (int)0, 0); } - Semaphore_post(FFS_Sem); + my_free(FileHandle); } } @@ -763,29 +794,36 @@ FRESULT FileRead(char *path, uint32_t *Size, void **Buffer) Fresult = FR_DENIED; else { - Semaphore_pend(FFS_Sem, BIOS_WAIT_FOREVER); - Fresult = f_open(FileHandle,path,FA_READ); - if (Fresult == FR_OK) + if (Semaphore_pend(FFS_Sem, BIOS_NO_WAIT)) { - Fresult = f_read(FileHandle,buffer,fno->fsize,&Bytes ); - if(Fresult == FR_OK) + Fresult = f_open(FileHandle,path,FA_READ); + if (Fresult == FR_OK) { - *Buffer = buffer; - *Size = (uint32_t)fno->fsize; - Report("f_read ok no of bytes", __FILE__, __LINE__, Bytes, RpWarning, (int)fno->fsize, 0); + Fresult = f_read(FileHandle,buffer,fno->fsize,&Bytes ); + if(Fresult == FR_OK) + { + *Buffer = buffer; + *Size = (uint32_t)fno->fsize; + Report("f_read ok no of bytes", __FILE__, __LINE__, Bytes, RpWarning, (int)fno->fsize, 0); + } + else + { + LOG_ERROR (Fresult,"fread error"); + my_free (buffer); + } + f_close(FileHandle); } else { - LOG_ERROR (Fresult,"fread error"); + LOG_ERROR (Fresult,"fopen error"); my_free (buffer); } - f_close(FileHandle); Semaphore_post(FFS_Sem); } else { - LOG_ERROR (Fresult,"fopen error"); - my_free (buffer); + Fresult = FR_DENIED; + Report("Semaphore_pend failed", __FILE__, __LINE__, 4, RpWarning, (int)0, 0); } my_free(FileHandle); } @@ -819,8 +857,16 @@ FRESULT FileOpen(char *path, uint32_t *Size, FIL *FileHandle) if (FileHandle == 0) Fresult = FR_DENIED; else - Semaphore_pend(FFS_Sem, BIOS_WAIT_FOREVER); - Fresult = f_open(FileHandle,path,FA_READ); + if (Semaphore_pend(FFS_Sem, BIOS_NO_WAIT)) + { + Fresult = f_open(FileHandle,path,FA_READ); + Semaphore_post(FFS_Sem); //will be closed with the f_close, in the job + } + else + { + Fresult = FR_DENIED; + Report("Semaphore_pend failed", __FILE__, __LINE__, 4, RpWarning, (int)0, 0); + } } else { |
