1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
/*
* FirmwareUpgrade.c
*
* Created on: Dec 24, 2018
* Author: shlomo
*/
#include "include.h"
#include "Communication/CommunicationTask.h"
#include <DataDef.h>
#include <Communication/PMR/FirmwareUpgrade/ActivateVersionRequest.pb-c.h>
#include <Communication/PMR/FirmwareUpgrade/ActivateVersionResponse.pb-c.h>
#include <Communication/PMR/FirmwareUpgrade/ActivateVersionRequest.pb-c.h>
#include <Communication/PMR/FirmwareUpgrade/ActivateVersionResponse.pb-c.h>
#include <Communication/PMR/FirmwareUpgrade/ValidateVersionRequest.pb-c.h>
#include <Communication/PMR/FirmwareUpgrade/ValidateVersionResponse.pb-c.h>
#include <Communication/PMR/FirmwareUpgrade/ValidateVersionRequest.pb-c.h>
#include <Communication/PMR/FirmwareUpgrade/ValidateVersionResponse.pb-c.h>
#include <Communication/PMR/FirmwareUpgrade/VersionFileDestination.pb-c.h>
#include <Communication/PMR/FirmwareUpgrade/VersionFileDescriptor.pb-c.h>
#include <Communication/PMR/FirmwareUpgrade/VersionPackageDescriptor.pb-c.h>
#include "drivers/FPGA/Full_Vme/FPGA_Programming_Up.h"
#include "Common/SWUpdate/FileSystem.h"
uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer)
{
void* buffer = NULL;
uint32_t Bytes = 0;
char SWUpgradePath[100];
char FullPath[50];
FRESULT Fresult = FR_OK;
int File_i;
bool Reboot = false;
MessageContainer responseContainer;
ActivateVersionRequest* request = activate_version_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data);
ActivateVersionResponse response = ACTIVATE_VERSION_RESPONSE__INIT;
VersionPackageDescriptor* VersionPackage;// = VERSION_PACKAGE_DESCRIPTOR__INIT;
FPGA_ID FileDestinationToFPGAId[VERSION_FILE_DESTINATION__FPGA3+1] = {MAX_FPGA,FPGA1,FPGA2,FPGA3};
strcpy (SWUpgradePath,request->path);
strcat(SWUpgradePath,"/package.cfg");
Fresult = FileRead(SWUpgradePath, &Bytes, &buffer);
if (Fresult == FR_OK)
{
VersionPackage = version_package_descriptor__unpack(NULL,Bytes,buffer);
for (File_i = 0;File_i<VersionPackage->n_filedescriptors;File_i++)
{
switch(VersionPackage->filedescriptors[File_i]->destination)
{
case VERSION_FILE_DESTINATION__MCU:
break;
case VERSION_FILE_DESTINATION__FPGA1:
case VERSION_FILE_DESTINATION__FPGA2:
case VERSION_FILE_DESTINATION__FPGA3:
//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);
break;
case VERSION_FILE_DESTINATION__ConfigParams:
usnprintf(FullPath, 50, "%s%s%s", request->path,"/", VersionPackage->filedescriptors[File_i]->filename);
Fresult = f_unlink("//SYSINFO//EMBPARAM.CFG");
Fresult |= f_rename (FullPath, "//SYSINFO//EMBPARAM.CFG");
break;
case VERSION_FILE_DESTINATION__ProcessParams:
usnprintf(FullPath, 50, "%s%s%s", request->path,"/", VersionPackage->filedescriptors[File_i]->filename);
Fresult = f_unlink("//SYSINFO//PROCESSP.CFG");
Fresult |= f_rename (FullPath, "//SYSINFO//PROCESSP.CFG");
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");
break;
case VERSION_FILE_DESTINATION__GeneralHWConfigParams:
usnprintf(FullPath, 50, "%s%s%s", request->path,"/", VersionPackage->filedescriptors[File_i]->filename);
Fresult = f_unlink("//SYSINFO//GENHWCFG.CFG");
Fresult |= f_rename (FullPath, "//SYSINFO//GENHWCFG.CFG");
break;
default:
LOG_ERROR (VersionPackage->filedescriptors[File_i]->destination,"wrong file update Destination");
Fresult = FR_INVALID_NAME;
break;
}
}
}
responseContainer = createContainer(MESSAGE_TYPE__ActivateVersionResponse, requestContainer->token, false, &response, &activate_version_response__pack, &activate_version_response__get_packed_size);
if (Fresult!= OK)
{
responseContainer.error = FileError_to_ErrorCode[Fresult];
responseContainer.errormessage = "Activate Version Request error";
}
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);
my_free(responseContainer.data.data);
activate_version_request__free_unpacked(request,NULL);
SendChars(container_buffer, container_size);
return OK;
}
uint32_t ValidateVersionRequestFunc(MessageContainer* requestContainer)
{
uint32_t status = OK;
MessageContainer responseContainer;
ValidateVersionRequest* request = validate_version_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data);
ValidateVersionResponse response = VALIDATE_VERSION_RESPONSE__INIT;
responseContainer = createContainer(MESSAGE_TYPE__ValidateVersionResponse, requestContainer->token, false, &response, &validate_version_response__pack, &validate_version_response__get_packed_size);
if (status!= OK)
{
responseContainer.error = ERROR_CODE__INVALID_UPLOAD_ID;
responseContainer.errormessage = "Validate Version Request error";
}
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);
my_free(responseContainer.data.data);
validate_version_request__free_unpacked(request,NULL);
SendChars(container_buffer, container_size);
return OK;
}
|