diff options
| author | Shlomo Hecht <shlomo@twine-s.com> | 2019-04-23 22:25:54 +0300 |
|---|---|---|
| committer | Shlomo Hecht <shlomo@twine-s.com> | 2019-04-23 22:25:54 +0300 |
| commit | ebcb9ce27131e4bbd14c96b5f897a67bc752aaeb (patch) | |
| tree | 293aee8b1751ce7fce542645722c0f1a96b73097 /Software/Embedded_SW/Embedded/Common | |
| parent | 52967e858bd52621208f6360e84f4c47ec435816 (diff) | |
| parent | 636ad730569dfef1a4ee04c8d716d510bcc47ee1 (diff) | |
| download | Tango-ebcb9ce27131e4bbd14c96b5f897a67bc752aaeb.tar.gz Tango-ebcb9ce27131e4bbd14c96b5f897a67bc752aaeb.zip | |
merge alarm handling from remote
Diffstat (limited to 'Software/Embedded_SW/Embedded/Common')
7 files changed, 150 insertions, 33 deletions
diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c index c311e9787..3357cfc06 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c @@ -55,6 +55,7 @@ int32_t FileSentLength = 0; static char g_cCwdBuf[50] = "/"; uint32_t WrittenBytes = 0; uint32_t ReadBytes = 0; +Task_Handle CommRxTaskHandle; ErrorCode getErrorCode(FRESULT Fresult) @@ -81,27 +82,34 @@ uint32_t FileUploadRequestFunc(MessageContainer* requestContainer) FileUploadResponse response = FILE_UPLOAD_RESPONSE__INIT; WrittenBytes=0; - UploadFileHandle = my_malloc(sizeof(FIL)); - if (UploadFileHandle == 0) + if (JobIsActive()) Fresult = FR_DENIED; else { - Fresult = f_open(UploadFileHandle,request->path,FA_READ | FA_WRITE | FA_OPEN_ALWAYS ); - if (Fresult == FR_OK) - { - FileLength = request->length; - response.has_maxchunklength = true; - response.maxchunklength = MAX_CHUNK_LENGTH; - strcpy(FileHandleChar, "1234"); - response.uploadid = FileHandleChar; //supporting only single file at each time. - } + UploadFileHandle = my_malloc(sizeof(FIL)); + if (UploadFileHandle == 0) + Fresult = FR_DENIED; else { - free (UploadFileHandle); - UploadFileHandle = 0; - } + Fresult = f_open(UploadFileHandle,request->path,FA_READ | FA_WRITE | FA_OPEN_ALWAYS | FA_CREATE_ALWAYS); + if (Fresult == FR_OK) + { + FileLength = request->length; + response.has_maxchunklength = true; + response.maxchunklength = MAX_CHUNK_LENGTH; + strcpy(FileHandleChar, "1234"); + response.uploadid = FileHandleChar; //supporting only single file at each time. + } + else + { + free (UploadFileHandle); + UploadFileHandle = 0; + } + } } + CommRxTaskHandle = Task_self(); + Task_setPri(CommRxTaskHandle, 4); responseContainer = createContainer(MESSAGE_TYPE__FileUploadResponse, requestContainer->token, false, &response, &file_upload_response__pack, &file_upload_response__get_packed_size); @@ -123,6 +131,7 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer) { //uint32_t status = OK; FRESULT Fresult = FR_OK; + bool FileDone = false; MessageContainer responseContainer; @@ -142,6 +151,7 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer) if(Fresult != FR_OK) { LOG_ERROR (Fresult,"f_write error"); + FileDone = true; } else { @@ -152,6 +162,7 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer) f_close(ReceivedFileHandle); free (UploadFileHandle); FileReceivedLength = 0; + FileDone = true; } else { @@ -161,6 +172,7 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer) f_close(ReceivedFileHandle); free (UploadFileHandle); FileReceivedLength = 0; + FileDone = true; } } } @@ -185,6 +197,8 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer) file_chunk_upload_request__free_unpacked(request,NULL); my_free(responseContainer.data.data); SendChars(container_buffer, container_size); + if (FileDone == true) + Task_setPri(CommRxTaskHandle, 9); return OK; } @@ -504,7 +518,7 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer) #define MAX_NUM_OF_FILES 10 DIR dir; FILINFO* fno[MAX_NUM_OF_FILES]; - char FullPath[MAX_NUM_OF_FILES][50]; + char FullPath[MAX_NUM_OF_FILES][100]; int i,NumOfFiles = 0; FRESULT Fresult = FR_OK; @@ -580,11 +594,14 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer) } responseContainer.continuous = false; uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); - size_t container_size = message_container__pack(&responseContainer, container_buffer); + if (container_buffer) + { + size_t container_size = message_container__pack(&responseContainer, container_buffer); + SendChars(container_buffer, container_size); + } my_free(responseContainer.data.data); my_free(FilesInfo); get_files_request__free_unpacked(request,NULL); - SendChars(container_buffer, container_size); for (i = 0;i < NumOfFiles;i++) { if (fno[i]) diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c index c66300b7e..01a30c21a 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c @@ -21,8 +21,63 @@ #include <Communication/PMR/FirmwareUpgrade/VersionFileDescriptor.pb-c.h> #include <Communication/PMR/FirmwareUpgrade/VersionPackageDescriptor.pb-c.h> +#include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h" #include "drivers/FPGA/Full_Vme/FPGA_Programming_Up.h" +#include "drivers/FPGA/Full_Vme/ispvme/vmopcode.h" +#include "Common/Utilities/Utils.h" + #include "Common/SWUpdate/FileSystem.h" +#include "Modules/Control/Control.h" + +int NumberOfFiles = 0,CurrentRunningFile; +int CurrentFileSize = 0; +uint32_t ActivateVersionControlId = 0xFF; +char activateString[100]; +char ActivateToken[36+1]={0}; +bool Reboot = false; + + +bool SwUpgradeActive(void) +{ + if (ActivateVersionControlId != 0xFF) + { + Reboot = false; + return true; + } + return false; +} +uint32_t ActivateVersionCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) +{ + //ActivateVersionResponse response = ACTIVATE_VERSION_RESPONSE__INIT; + //MessageContainer responseContainer; + + usnprintf(activateString, 1000, "file %d of %d bytes %d of %d",CurrentRunningFile,NumberOfFiles,vme_index,CurrentFileSize); + + Report(activateString,__FILE__,__LINE__,(int)CurrentRunningFile,RpWarning,CurrentFileSize,0); + + if (CurrentRunningFile<NumberOfFiles) + return OK; + if (SafeRemoveControlCallback(ActivateVersionControlId, ActivateVersionCallBackFunction )==OK) + ActivateVersionControlId = 0xFF; + else + LOG_ERROR(255,"ActivateVersionCallBackFunction"); + return OK; + + /* + responseContainer = createContainer(MESSAGE_TYPE__ActivateVersionResponse, ActivateToken, false, &response, &activate_version_response__pack, &activate_version_response__get_packed_size); + responseContainer.continuous = true; + 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); + SendChars(container_buffer, container_size); + + if (Reboot == true) + { + Power_Reset(); + } +*/ +} +int File_i = 0; uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer) { @@ -31,8 +86,11 @@ uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer) char SWUpgradePath[100]; char FullPath[50]; FRESULT Fresult = FR_OK; - int File_i; - bool Reboot = false; + FILINFO* fno = 0; + + fno = my_malloc(sizeof(FILINFO)); + if (fno == 0) + return ERROR; MessageContainer responseContainer; ActivateVersionRequest* request = activate_version_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); @@ -42,6 +100,7 @@ uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer) FPGA_ID FileDestinationToFPGAId[VERSION_FILE_DESTINATION__FPGA3+1] = {MAX_FPGA,FPGA1,FPGA2,FPGA3}; + ustrncpy (ActivateToken, requestContainer->token,36); strcpy (SWUpgradePath,request->path); strcat(SWUpgradePath,"/package.cfg"); @@ -50,8 +109,19 @@ uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer) if (Fresult == FR_OK) { VersionPackage = version_package_descriptor__unpack(NULL,Bytes,buffer); + NumberOfFiles = VersionPackage->n_filedescriptors; + if (NumberOfFiles) + { + CurrentRunningFile = 0; + File_i = 0; + //add control 1 second + ActivateVersionControlId = AddControlCallback( ActivateVersionCallBackFunction, eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); + } for (File_i = 0;File_i<VersionPackage->n_filedescriptors;File_i++) { + CurrentRunningFile = 0; + CurrentFileSize = -1; + vme_index = 0; switch(VersionPackage->filedescriptors[File_i]->destination) { case VERSION_FILE_DESTINATION__MCU: @@ -62,11 +132,11 @@ uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer) //validate //update usnprintf(FullPath, 50, "%s%s%s", request->path,"/", VersionPackage->filedescriptors[File_i]->filename); - if (VersionPackage->filedescriptors[File_i]->destination == VERSION_FILE_DESTINATION__FPGA3) - Reboot = true; - else - Reboot = false; - Fresult = FPGA_Programming_Request( FileDestinationToFPGAId[VersionPackage->filedescriptors[File_i]->destination], FullPath, Reboot); + Reboot = true; + memset (fno,0,sizeof(FILINFO)); + Fresult = f_stat(FullPath,fno); + CurrentFileSize = fno->fsize; + Fresult = FPGA_Programming_Request( FileDestinationToFPGAId[VersionPackage->filedescriptors[File_i]->destination], FullPath, false); break; case VERSION_FILE_DESTINATION__ConfigParams: usnprintf(FullPath, 50, "%s%s%s", request->path,"/", VersionPackage->filedescriptors[File_i]->filename); @@ -108,6 +178,10 @@ uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer) activate_version_request__free_unpacked(request,NULL); SendChars(container_buffer, container_size); + if (Reboot == true) + { + Power_Reset(); + } return OK; } diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.h b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.h index 9af76f96f..6f817fe90 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.h +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.h @@ -11,6 +11,7 @@ uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer); uint32_t ValidateVersionRequestFunc(MessageContainer* requestContainer); +bool SwUpgradeActive(void); diff --git a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c index 12d6bdeb6..8a2a071dd 100644 --- a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c +++ b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c @@ -20,7 +20,7 @@ typedef struct } TangoVersion_t; -TangoVersion_t _gTangoVersion = {1,3,7,8}; +TangoVersion_t _gTangoVersion = {1,3,9,2}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Common/Utilities/Utils.c b/Software/Embedded_SW/Embedded/Common/Utilities/Utils.c index 9cdb3c6bd..542ea659a 100644 --- a/Software/Embedded_SW/Embedded/Common/Utilities/Utils.c +++ b/Software/Embedded_SW/Embedded/Common/Utilities/Utils.c @@ -96,6 +96,8 @@ void InitWatchdog(uint32_t clock) // // Enable the watchdog interrupt. // + MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_WDOG0); + ROM_WatchdogIntClear(WATCHDOG0_BASE); ROM_IntEnable(INT_WATCHDOG); // diff --git a/Software/Embedded_SW/Embedded/Common/report/distributor.c b/Software/Embedded_SW/Embedded/Common/report/distributor.c index 0515b0472..f011653ec 100644 --- a/Software/Embedded_SW/Embedded/Common/report/distributor.c +++ b/Software/Embedded_SW/Embedded/Common/report/distributor.c @@ -242,7 +242,7 @@ Void reportService(UArg arg0, UArg arg1) ReportInitParams InitParams; InitParams.DistributorQueueMaxMsgs = 30; InitParams.DistributorTaskPriority = 6; - InitParams.MaxNumOfFilterNames = 1; + InitParams.MaxNumOfFilterNames = 30; InitParams.MaxNumberOfPrivateDistributors = 2; ReportInit (InitParams); diff --git a/Software/Embedded_SW/Embedded/Common/report/reportInit.c b/Software/Embedded_SW/Embedded/Common/report/reportInit.c index feb13504a..bc3cbe20b 100644 --- a/Software/Embedded_SW/Embedded/Common/report/reportInit.c +++ b/Software/Embedded_SW/Embedded/Common/report/reportInit.c @@ -38,6 +38,21 @@ #include "PMR/debugging/StartDebugLogResponse.pb-c.h" #include "PMR/debugging/StopDebugLogResponse.pb-c.h" +/*PackageHandle ControlFilter; +PackageHandle HeatersFilter; +PackageHandle JobFilter ; +PackageHandle WasteFilter ; +PackageHandle AlarmFilter ; +PackageHandle DiagnosticsFilter; +PackageHandle IDSFilter; +PackageHandle ThreadFilter; +PackageHandle GeneralFilter; +PackageHandle CommFilter; +PackageHandle FPGAFilter; +PackageHandle LoadFilter; +PackageHandle InitFilter; +PackageHandle MaintFilter;*/ + char protobufToken[36+1] = {0}; int ReportResponseFunc(char *message, /* The formatted message */ @@ -115,11 +130,6 @@ uint32_t ReportInitMessage(MessageContainer* requestContainer) StartDebugLogRequest* request = start_debug_log_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); ustrncpy (protobufToken, requestContainer->token,36); - /* InitParams.DistributorQueueMaxMsgs = 20; - InitParams.DistributorTaskPriority = 6; - InitParams.MaxNumOfFilterNames = 1; - InitParams.MaxNumberOfPrivateDistributors = 2; - status |= ReportInit (InitParams);*/ DistributorHandle ReportHandle = ReportAddDistributor("ProtoBuf"); if (ReportHandle == NULL) status |= 0x8; status |= ReportFunc(ReportResponseFunc , REPORT_ADD, ReportHandle); @@ -166,7 +176,6 @@ void ReportStopReporting(void) protobufToken[0] = 0; } -#define REPORT_RESERVED_NUM_OF_FILTER_PACKAGES 30 /* This reserved for swinfra packages */ /*************************************************************************** * @@ -204,10 +213,24 @@ STATUS ReportInit(ReportInitParams InitParams) //ReportMonitorFunc(REPORT_ADD, 0); MaxNumOfFilterNames = InitParams.MaxNumOfFilterNames; - MaxNumOfFilterNames += REPORT_RESERVED_NUM_OF_FILTER_PACKAGES; status = filterTableInit(MaxNumOfFilterNames); if (status == OK) initialized = true; +/* ControlFilter = ReportAddFilterPackage("Control"); + HeatersFilter = ReportAddFilterPackage("Heaters"); + JobFilter = ReportAddFilterPackage("Job"); + WasteFilter = ReportAddFilterPackage("Waste"); + AlarmFilter = ReportAddFilterPackage("Alarm"); + DiagnosticsFilter = ReportAddFilterPackage("Diagnostics"); + IDSFilter = ReportAddFilterPackage("IDS"); + ThreadFilter = ReportAddFilterPackage("Thread"); + GeneralFilter = ReportAddFilterPackage("General"); + CommFilter = ReportAddFilterPackage("Comm"); + FPGAFilter = ReportAddFilterPackage("FPGA"); + LoadFilter = ReportAddFilterPackage("Load"); + InitFilter = ReportAddFilterPackage("Init"); + MaintFilter = ReportAddFilterPackage("Maint");*/ +// Filter = ReportAddFilterPackage(""); return status; } |
