firmware.h
Go to the documentation of this file.
1 
6 #pragma once
7 
8 #include <boost/system/error_code.hpp>
9 #include <rapidjson/document.h>
10 #include <string>
11 #include "files.h"
12 #include "systemConfiguration.h"
13 
14 #ifdef TESTING
15 #include "gtest/gtest.h"
16 #include "command.h"
17 #endif
18 
19 namespace dpyFirmware {
20 
23  std::string full_path;
24  std::string version;
25  std::string configuration;
26 };
27 
28 
31 {
32  std::string version;
33  std::string product;
34  std::string vendor;
35  std::string protocol;
36  std::string bootloader;
37 };
38 
40 enum Device
41 {
42  MCU = 0,
43  UX410 = 1,
44  EM7455 = 2,
45  RC7620 = 3,
46  EC25 = 4,
47  PN7412 = 5,
48  WP7607 = 6,
49  RC7611 = 7,
50  BK3_2 = 8,
51  EG25 = 9,
52  RG255C = 10,
53  UX412 = 11
54 };
56 
58 enum Rfs
59 {
60  CURRENT = 0,
62 };
63 
64 }
65 
71 class Firmware {
72 
73 static const std::string version_file;
74 
75 public:
76  static boost::system::error_code requestFirmware(dpyFirmware::FirmwareVersionPath& image, enum dpyFirmware::Device device, enum dpyFirmware::Rfs rfs);
77  static boost::system::error_code parseVersionFile(std::string path, dpyFirmware::FirmwareVersionPath& image);
78  static std::string deviceToString(enum dpyFirmware::Device device);
79 private:
80  static std::string rfsToString(enum dpyFirmware::Rfs rfs);
81 
82 #ifdef TESTING
83 public:
84  FRIEND_TEST(Firmware_test, directoryError);
85  FRIEND_TEST(Firmware_test, fileError);
86  FRIEND_TEST(Firmware_test, fileError2);
87  FRIEND_TEST(Firmware_test, nameError);
88  FRIEND_TEST(Firmware_test, nameContentError);
89  FRIEND_TEST(Firmware_test, versionError);
90  FRIEND_TEST(Firmware_test, versionContentError);
91 
92  //Methods used in tests
93  static bool write_release_txt(const enum dpyFirmware::Device device, const std::string version_to_write){
94  std::string path = SystemConfiguration::getInstance()->getConfigurationValue("DEVICE_UPDATES_PATH") + deviceToString(device) + "/";
95  std::string command = "mkdir -p " + path;
96  Command::executeCommand(command);
97  std::string str_json = "{\"name\":\"firmware_name\",\"version\": \"" +version_to_write+"\" }";
98  Files file;
99  boost::system::error_code ec;
100  std::cout << "[write_release_txt_to_tmp] creating dir at " << path << std::endl;
101  bool result = file.createAndWrite(ec, path + "release.txt",str_json);
102  return result;
103  }
104 
105 
106  static void remove_release_txt(const enum dpyFirmware::Device device){
107  std::string path = SystemConfiguration::getInstance()->getConfigurationValue("DEVICE_UPDATES_PATH") + deviceToString(device) + "/";
108  std::string command = "rm -rf " + path;
109  Command::executeCommand(command);
110  }
111 
112 
113 #endif
114 };
std::string protocol
protocol
Definition: firmware.h:35
@ EC25
EC25.
Definition: firmware.h:46
Struct which contains all fields needed to can upgrade devices firmware.
Definition: firmware.h:22
@ RC7620
RC7620.
Definition: firmware.h:45
@ UX412
Definition: firmware.h:53
@ RC7611
RC7611.
Definition: firmware.h:49
std::string configuration
Firmware configuration.
Definition: firmware.h:25
std::string vendor
vendor
Definition: firmware.h:34
std::string product
product
Definition: firmware.h:33
std::string version
Firmware version.
Definition: firmware.h:24
Class to request upgrading firmware by device in case any is availability.
Definition: firmware.h:71
@ BK3_2
BK3-2.
Definition: firmware.h:50
@ WP7607
WP7607.
Definition: firmware.h:48
static SystemConfiguration * getInstance()
@ CURRENT
CURRENT.
Definition: firmware.h:60
std::string version
firmware version
Definition: firmware.h:32
Defines a class for executing commands and getting output.
@ EG25
EG25.
Definition: firmware.h:51
@ EM7455
EM7455.
Definition: firmware.h:44
std::string bootloader
bootloader
Definition: firmware.h:36
@ UX410
UX410.
Definition: firmware.h:43
A structure use to store firmware info.
Definition: firmware.h:30
Device
Defines the possible devices whose firmware can be upgraded.
Definition: firmware.h:40
@ RG255C
RG255.
Definition: firmware.h:52
@ PN7412
PN7412.
Definition: firmware.h:47
This class implementes the read/write operations to work with text files stored in the file sytem.
Definition: files.h:52
@ MCU
MCU.
Definition: firmware.h:42
@ ALTERNATIVE
ALTERNATIVE.
Definition: firmware.h:61
std::string getConfigurationValue(const std::string &parameter)
A common files library.
Rfs
Defines the possible root file systems where binaries are located.
Definition: firmware.h:58
std::string full_path
Path and name of the firmware.
Definition: firmware.h:23