aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Common
diff options
context:
space:
mode:
authorShlomo Hecht <shlomo@twine-s.com>2019-04-23 22:25:54 +0300
committerShlomo Hecht <shlomo@twine-s.com>2019-04-23 22:25:54 +0300
commitebcb9ce27131e4bbd14c96b5f897a67bc752aaeb (patch)
tree293aee8b1751ce7fce542645722c0f1a96b73097 /Software/Embedded_SW/Embedded/Common
parent52967e858bd52621208f6360e84f4c47ec435816 (diff)
parent636ad730569dfef1a4ee04c8d716d510bcc47ee1 (diff)
downloadTango-ebcb9ce27131e4bbd14c96b5f897a67bc752aaeb.tar.gz
Tango-ebcb9ce27131e4bbd14c96b5f897a67bc752aaeb.zip
merge alarm handling from remote
Diffstat (limited to 'Software/Embedded_SW/Embedded/Common')
-rw-r--r--Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c51
-rw-r--r--Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c88
-rw-r--r--Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.h1
-rw-r--r--Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c2
-rw-r--r--Software/Embedded_SW/Embedded/Common/Utilities/Utils.c2
-rw-r--r--Software/Embedded_SW/Embedded/Common/report/distributor.c2
-rw-r--r--Software/Embedded_SW/Embedded/Common/report/reportInit.c37
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;
}