aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Common/SWUpdate
diff options
context:
space:
mode:
authorShlomo Hecht <shlomo@twine-s.com>2020-01-27 09:19:11 +0200
committerShlomo Hecht <shlomo@twine-s.com>2020-01-27 09:19:11 +0200
commitddda6089bff56e80703c8d2dce297919edc58bf1 (patch)
tree7702c5cf169124d522eacc7f1a9e0878373baedd /Software/Embedded_SW/Embedded/Common/SWUpdate
parent1d4d327571d4c0c9f4e17411551bd4dae1e2aed0 (diff)
parentbf2f3245339b9fd9148a2ad25b5ba3320e970cc1 (diff)
downloadTango-ddda6089bff56e80703c8d2dce297919edc58bf1.tar.gz
Tango-ddda6089bff56e80703c8d2dce297919edc58bf1.zip
Merge branch 'master' of https://twinetfs.visualstudio.com/Tango/_git/Tango
Diffstat (limited to 'Software/Embedded_SW/Embedded/Common/SWUpdate')
-rw-r--r--Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c101
-rw-r--r--Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.h4
-rw-r--r--Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c7
3 files changed, 79 insertions, 33 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);
diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.h b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.h
index 0f6fd9d5d..8c0133411 100644
--- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.h
+++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.h
@@ -22,8 +22,12 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer);
uint32_t FileDownloadRequestFunc(MessageContainer* requestContainer);
uint32_t FileChunkDownloadRequestFunc(MessageContainer* requestContainer);
+void FileChunkUploadError(void);
+
FRESULT FileWrite(void * buffer, uint16_t size,char *path, uint32_t timeout);
FRESULT FileRead(char *path, uint32_t *Size, void **Buffer);
FRESULT FileOpen(char *path, uint32_t *Size, FIL *FileHandle);
+bool FileUploadGetState(void);
+
#endif /* COMMON_SWUPDATE_FILESYSTEM_H_ */
diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c
index 8818d51e5..067466f74 100644
--- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c
+++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c
@@ -130,7 +130,7 @@ uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer)
CurrentRunningFile = 0;
File_i = 0;
//add control 1 second
- ActivateVersionControlId = AddControlCallback( ActivateVersionCallBackFunction, eOneSecond, TemplateDataReadCBFunction,0,0, 0 );
+ ActivateVersionControlId = AddControlCallback(NULL, ActivateVersionCallBackFunction, eOneSecond, TemplateDataReadCBFunction,0,0, 0 );
}
for (File_i = 0;File_i<VersionPackage->n_filedescriptors;File_i++)
{
@@ -139,6 +139,7 @@ uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer)
switch(VersionPackage->filedescriptors[File_i]->destination)
{
case VERSION_FILE_DESTINATION__MCU:
+ CurrentRunningFile++;
break;
case VERSION_FILE_DESTINATION__FPGA1:
case VERSION_FILE_DESTINATION__FPGA2:
@@ -167,8 +168,8 @@ uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer)
break;
case VERSION_FILE_DESTINATION__AlarmParams:
usnprintf(FullPath, 50, "%s%s%s", request->path,"/", VersionPackage->filedescriptors[File_i]->filename);
- Fresult = f_unlink("//SYSINFO//ALARMPRM.CFG");
- Fresult |= f_rename (FullPath, "//SYSINFO//ALARMPRM.CFG");
+ Fresult = f_unlink("//SYSINFO//ALARM.CFG");
+ Fresult |= f_rename (FullPath, "//SYSINFO//ALARM.CFG");
AlarmHandlingLoadFile();
CurrentRunningFile++;
break;