diff options
Diffstat (limited to 'Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c')
| -rw-r--r-- | Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c | 101 |
1 files changed, 71 insertions, 30 deletions
diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c index 018e83ce0..35f336627 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c @@ -31,14 +31,10 @@ #include <Communication/PMR/IO/GetFilesResponse.pb-c.h> #include <Communication/PMR/IO/FileAttribute.pb-c.h> -#include "third_party/fatfs/src/ffconf.h" -#include "third_party/fatfs/src/diskio.h" #include "drivers/Flash_Memory/Flash_Memory.h" #include "drivers/Flash_Memory/fatfs/ff.h" #include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h" -#include "third_party/fatfs/src/ffconf.h" - #include "StateMachines/Printing/PrintingSTM.h" @@ -53,7 +49,7 @@ 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 3500 +#define MAX_CHUNK_LENGTH 5500 int32_t FileLength = 0; int32_t FileReceivedLength = 0; int32_t FileSentLength = 0; @@ -74,8 +70,11 @@ bool isDirectory(FileAttribute FileAtt) return true; return false; } -bool FileDone = false; - +bool FileDone = true; +bool FileUploadGetState(void) +{ + return FileDone; +} uint32_t FileUploadRequestFunc(MessageContainer* requestContainer) { //uint32_t status = OK; @@ -98,32 +97,39 @@ uint32_t FileUploadRequestFunc(MessageContainer* requestContainer) Fresult = FR_DENIED; else { - Semaphore_pend(FFS_Sem, BIOS_WAIT_FOREVER); - Fresult = f_open(UploadFileHandle,request->path,FA_READ | FA_WRITE | FA_OPEN_ALWAYS | FA_CREATE_ALWAYS); - if (Fresult == FR_OK) + if (Semaphore_pend(FFS_Sem, BIOS_NO_WAIT)) { - FileLength = request->length; - FileReceivedLength = 0; - REPORT_MSG (FileLength,"file upload request"); - response.has_maxchunklength = true; - response.maxchunklength = MAX_CHUNK_LENGTH; - strcpy(FileHandleChar, "1234"); - response.uploadid = FileHandleChar; //supporting only single file at each time. - FileDone = false; + CommRxTaskHandle = Task_self(); + Task_setPri(CommRxTaskHandle, 3); + // Report("Task_setPri", __FILE__, __LINE__, 4, RpWarning, (int)CommRxTaskHandle, 0); + Report("FileUploadRequestFunc 2", __FILE__, __LINE__, msec_millisecondCounter, RpWarning, (int)0, 0); + Fresult = f_open(UploadFileHandle,request->path,FA_READ | FA_WRITE | FA_OPEN_ALWAYS | FA_CREATE_ALWAYS); + if (Fresult == FR_OK) + { + Report("FileUploadRequestFunc 3", __FILE__, __LINE__, msec_millisecondCounter, RpWarning, (int)0, 0); + FileLength = request->length; + FileReceivedLength = 0; + REPORT_MSG (FileLength,"file upload request"); + response.has_maxchunklength = true; + response.maxchunklength = MAX_CHUNK_LENGTH; + strcpy(FileHandleChar, "1234"); + response.uploadid = FileHandleChar; //supporting only single file at each time. + FileDone = false; + } + else + { + my_free (UploadFileHandle); + UploadFileHandle = 0; + Semaphore_post(FFS_Sem); + } } else { - my_free (UploadFileHandle); - UploadFileHandle = 0; - Semaphore_post(FFS_Sem); + Fresult = FR_DENIED; + Report("Semaphore_pend failed", __FILE__, __LINE__, 4, RpWarning, (int)0, 0); } - } } - CommRxTaskHandle = Task_self(); - Task_setPri(CommRxTaskHandle, 4); - // Report("Task_setPri", __FILE__, __LINE__, 4, RpWarning, (int)CommRxTaskHandle, 0); - responseContainer = createContainer(MESSAGE_TYPE__FileUploadResponse, requestContainer->token, false, &response, &file_upload_response__pack, &file_upload_response__get_packed_size); if (Fresult!= FR_OK) @@ -155,14 +161,16 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer) FIL *ReceivedFileHandle; //the system supports a single active file + uint32_t save_milisec = 0; // if (request->uploadid == 1) ReceivedFileHandle = UploadFileHandle; // memcpy (&ReceivedFileHandle,request->uploadid,sizeof(ReceivedFileHandle)); //if (ReceivedFileHandle == FileHandle) //{ - Control_WD(ENABLE,55); //activate heaters/dispenser watchdog, 0.5 seconds - GeneralHwReady = false; + //Control_WD(ENABLE,55); //activate heaters/dispenser watchdog, 0.5 seconds + //GeneralHwReady = false; KeepAliveOneSecondCounter = 0; + save_milisec = msec_millisecondCounter; Fresult = f_write(ReceivedFileHandle,request->buffer.data,request->buffer.len,&WrittenBytes ); lFresult = Fresult; if(Fresult != FR_OK) @@ -173,6 +181,8 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer) else { FileReceivedLength += WrittenBytes; + ReportWithPackageFilter(CommFilter,"Chunk received", __FILE__,WrittenBytes,FileReceivedLength, RpMessage,msec_millisecondCounter-save_milisec, 0); + //REPORT_MSG (FileReceivedLength,"file upload chunk"); if (FileReceivedLength == FileLength) { @@ -221,12 +231,25 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer) if (FileDone == true) { Task_setPri(CommRxTaskHandle, 9); - GeneralHwReady = true; Semaphore_post(FFS_Sem); //Report("Task_setPri", __FILE__, __LINE__, 9, RpWarning, (int)CommRxTaskHandle, 0); } return OK; } +void FileChunkUploadError(void) +{ + if (FileDone == false) + { + REPORT_MSG (FileReceivedLength,"file upload too much data!"); + f_close(UploadFileHandle); + my_free (UploadFileHandle); + UploadFileHandle = 0; + FileReceivedLength = 0; + FileDone = true; + Task_setPri(CommRxTaskHandle, 9); + Semaphore_post(FFS_Sem); + } +} uint32_t FileDownloadRequestFunc(MessageContainer* requestContainer) { //uint32_t status = OK; @@ -537,6 +560,8 @@ uint32_t GetStorageInfoRequestFunc(MessageContainer* requestContainer) return OK; } +//char Datestr[100]; + uint32_t GetFilesRequestFunc(MessageContainer* requestContainer) { //uint32_t status = OK; @@ -553,6 +578,15 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer) char FullPath[MAX_NUM_OF_FILES][60]; int i,NumOfFiles = 0; FRESULT Fresult = FR_OK; + /* + time_t t; + struct tm *ltm; + char *curTime; + t = time(NULL); + ltm = localtime(&t); + curTime = asctime(ltm); + 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); @@ -604,7 +638,14 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer) Data[i].lastmodifieddate = fno[i]->fdate; Data[i].has_lastmodifiedtime = true; Data[i].lastmodifiedtime = fno[i]->ftime; - //Report(Data[i].name, __FILE__, __LINE__, Data[i].lastmodifieddate, RpWarning, (int)Data[i].lastmodifiedtime, 0); + /* + t = (fno[i]->fdate<<16)+fno[i]->ftime; + ltm = localtime(&t); + curTime = asctime(ltm); + usnprintf(&Datestr, 100, "File info %s %s",fno[i]->fname, curTime); + Report(Datestr, __FILE__, __LINE__, t, RpWarning, (int)Data[i].lastmodifiedtime, 0); + Task_sleep(50); + */ if (i==0) usnprintf(&FullPath[i], 50, "%s", request->path); |
