diff options
| author | Shlomo Hecht <shlomo@twine-s.com> | 2019-07-28 06:22:27 +0300 |
|---|---|---|
| committer | Shlomo Hecht <shlomo@twine-s.com> | 2019-07-28 06:22:27 +0300 |
| commit | 1e964f0c250a3b101d3612bbf5860628b4e42d1b (patch) | |
| tree | 1efacd4f121ec4d72012476b1bda118b90cebb64 /Software/Embedded_SW/Embedded | |
| parent | b16d046f263c164e1ec5b89d15d62cf9d3fa3c0c (diff) | |
| download | Tango-1e964f0c250a3b101d3612bbf5860628b4e42d1b.tar.gz Tango-1e964f0c250a3b101d3612bbf5860628b4e42d1b.zip | |
try mutual exclusion on files, need to handle timeouts yet
Diffstat (limited to 'Software/Embedded_SW/Embedded')
7 files changed, 33 insertions, 3 deletions
diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c index 1e02283e0..f4c52f000 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c @@ -62,6 +62,7 @@ uint32_t WrittenBytes = 0; uint32_t ReadBytes = 0; Task_Handle CommRxTaskHandle; +extern Semaphore_Handle FFS_Sem; ErrorCode getErrorCode(FRESULT Fresult) { @@ -97,6 +98,7 @@ 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) { @@ -113,6 +115,7 @@ uint32_t FileUploadRequestFunc(MessageContainer* requestContainer) { my_free (UploadFileHandle); UploadFileHandle = 0; + Semaphore_post(FFS_Sem); } } @@ -219,6 +222,7 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer) { Task_setPri(CommRxTaskHandle, 9); GeneralHwReady = true; + Semaphore_post(FFS_Sem); //Report("Task_setPri", __FILE__, __LINE__, 9, RpWarning, (int)CommRxTaskHandle, 0); } return OK; @@ -252,6 +256,7 @@ uint32_t FileDownloadRequestFunc(MessageContainer* requestContainer) Fresult = FR_DENIED; else { + Semaphore_pend(FFS_Sem, BIOS_WAIT_FOREVER); Fresult = f_open(DownloadFileHandle,request->filename,FA_READ ); if (Fresult == FR_OK) { @@ -309,6 +314,7 @@ uint32_t FileChunkDownloadRequestFunc(MessageContainer* requestContainer) { REPORT_MSG (FileSentLength,"file download ended successfully"); f_close(SentFileHandle); + Semaphore_post(FFS_Sem); my_free (DownloadFileHandle); FileSentLength = 0; } @@ -318,6 +324,7 @@ uint32_t FileChunkDownloadRequestFunc(MessageContainer* requestContainer) { REPORT_MSG (FileSentLength,"file download too much data!"); f_close(SentFileHandle); + Semaphore_post(FFS_Sem); my_free (DownloadFileHandle); FileSentLength = 0; } @@ -414,6 +421,7 @@ 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) { @@ -422,6 +430,7 @@ uint32_t CreateRequestFunc(MessageContainer* requestContainer) Fresult = FR_LOCKED; } } + Semaphore_post(FFS_Sem); } } if (Fresult != FR_OK) @@ -461,7 +470,9 @@ 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); REPORT_MSG(Fresult, "File Delete"); responseContainer = createContainer(MESSAGE_TYPE__DeleteResponse, requestContainer->token, false, &response, &delete_response__pack, &delete_response__get_packed_size); @@ -543,9 +554,11 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer) int i,NumOfFiles = 0; FRESULT Fresult = FR_OK; + Semaphore_pend(FFS_Sem, BIOS_WAIT_FOREVER); Fresult |= f_opendir(&dir, g_cCwdBuf); if(Fresult != FR_OK) { + Semaphore_post(FFS_Sem); return(Fresult); } @@ -574,6 +587,7 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer) } } } + Semaphore_post(FFS_Sem); if ((Fresult == FR_OK)&&(NumOfFiles)) { @@ -643,6 +657,8 @@ FRESULT FileWrite(void * buffer, uint16_t size,char *path) Fresult = FR_DENIED; else { + Semaphore_pend(FFS_Sem, BIOS_WAIT_FOREVER); + Fresult = f_open(FileHandle,path,FA_WRITE | FA_OPEN_ALWAYS); if (Fresult == FR_OK) { @@ -657,6 +673,7 @@ FRESULT FileWrite(void * buffer, uint16_t size,char *path) { LOG_ERROR (Fresult,"fopen error"); } + Semaphore_post(FFS_Sem); my_free(FileHandle); } } @@ -686,6 +703,7 @@ 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) { @@ -701,6 +719,7 @@ FRESULT FileRead(char *path, uint32_t *Size, void **Buffer) my_free (buffer); } f_close(FileHandle); + Semaphore_post(FFS_Sem); } else { @@ -739,6 +758,7 @@ 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); } else diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c index 139b452dc..7c6b4d4ef 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c @@ -30,6 +30,8 @@ #include "Modules/Control/Control.h" #include "Modules/AlarmHandling/AlarmHandling.h" +extern Semaphore_Handle FFS_Sem; + int NumberOfFiles = 0,CurrentRunningFile; int CurrentFileSize = 0; uint32_t ActivateVersionControlId = 0xFF; diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c index a38b0a06c..a8bdaf95c 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c @@ -691,7 +691,7 @@ bool Get_COVER_1_State(COVERS_ENUM CoverId) case FrontDoor3_DH_DRYER: return F3_GPI_01_Reg.bits.F3_GPI_PANSW3; //break; - case FrontDoor4_MIDTHANK: + case FrontDoor4_MIDTANKS: return F3_GPI_01_Reg.bits.F3_GPI_PANSW4; //break; case CartridgesDoor: diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h index d77e9931c..9767837f1 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h @@ -221,7 +221,7 @@ typedef enum FrontDoor1_EC, FrontDoor2_PPC, FrontDoor3_DH_DRYER, - FrontDoor4_MIDTHANK, + FrontDoor4_MIDTANKS, CartridgesDoor, RearDoor, DryerDoor, diff --git a/Software/Embedded_SW/Embedded/Embedded.cfg b/Software/Embedded_SW/Embedded/Embedded.cfg index a0b853ec8..8dc53256b 100644 --- a/Software/Embedded_SW/Embedded/Embedded.cfg +++ b/Software/Embedded_SW/Embedded/Embedded.cfg @@ -72,6 +72,11 @@ semaphore3Params.instance.name = "updateSem"; semaphore3Params.mode = Semaphore.Mode_BINARY; Program.global.updateSem = Semaphore.create(null, semaphore3Params); +var semaphore4Params = new Semaphore.Params(); +semaphore4Params.instance.name = "FFS_Sem"; +semaphore4Params.mode = Semaphore.Mode_BINARY; +Program.global.FFS_Sem = Semaphore.create(null, semaphore4Params); + var semaphore7Params = new Semaphore.Params(); semaphore7Params.instance.name = "ReconnectSem"; semaphore7Params.mode = Semaphore.Mode_BINARY; diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index 4504c74f5..c4fcfaf8e 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -252,7 +252,7 @@ const AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,FrontDoor1_EC ,1,false,true,DEBUG_LOG_CATEGORY__Error, 0xFF,5,EVENT_TYPE__FRONT_COVER_1_OPEN}, {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,FrontDoor2_PPC ,1,false,true,DEBUG_LOG_CATEGORY__Error, 0xFF,5,EVENT_TYPE__FRONT_COVER_2_OPEN}, {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,FrontDoor3_DH_DRYER ,1,false,true,DEBUG_LOG_CATEGORY__Error, 0xFF,5,EVENT_TYPE__FRONT_COVER_3_OPEN}, - {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,FrontDoor4_MIDTHANK ,1,false,true,DEBUG_LOG_CATEGORY__Error, 0xFF,5,EVENT_TYPE__FRONT_COVER_4_OPEN}, + {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,FrontDoor4_MIDTANKS ,1,false,true,DEBUG_LOG_CATEGORY__Error, 0xFF,5,EVENT_TYPE__FRONT_COVER_4_OPEN}, {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,RearDoor ,1,false,true,DEBUG_LOG_CATEGORY__Error, 0xFF,5,EVENT_TYPE__REAR_COVER_OPEN }, {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,CartridgesDoor,1,false,true,DEBUG_LOG_CATEGORY__Warning,0xFF,5,EVENT_TYPE__CARTRIDGES_COVER_OPEN}, diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c index 729e3ab8e..2959a688b 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c @@ -128,9 +128,12 @@ FRESULT RewindJobFile() } return Fresult; } +extern Semaphore_Handle FFS_Sem; FRESULT CloseJobFile() { Fresult = f_close(JobRequestFileHandle); + Semaphore_post(FFS_Sem); + readbBytes = 0; ImmediateRead = 0; SegmentSize = 0; |
