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 };
55 
57 enum Rfs
58 {
59  CURRENT = 0,
61 };
62 
63 }
64 
70 class Firmware {
71 
72 static const std::string version_file;
73 
74 public:
75  static boost::system::error_code requestFirmware(dpyFirmware::FirmwareVersionPath& image, enum dpyFirmware::Device device, enum dpyFirmware::Rfs rfs);
76  static boost::system::error_code parseVersionFile(std::string path, dpyFirmware::FirmwareVersionPath& image);
77  static std::string deviceToString(enum dpyFirmware::Device device);
78 private:
79  static std::string rfsToString(enum dpyFirmware::Rfs rfs);
80 
81 #ifdef TESTING
82 public:
83  FRIEND_TEST(Firmware_test, directoryError);
84  FRIEND_TEST(Firmware_test, fileError);
85  FRIEND_TEST(Firmware_test, fileError2);
86  FRIEND_TEST(Firmware_test, nameError);
87  FRIEND_TEST(Firmware_test, nameContentError);
88  FRIEND_TEST(Firmware_test, versionError);
89  FRIEND_TEST(Firmware_test, versionContentError);
90 
91  //Methods used in tests
92  static bool write_release_txt(const enum dpyFirmware::Device device, const std::string version_to_write){
93  std::string path = SystemConfiguration::getInstance()->getConfigurationValue("DEVICE_UPDATES_PATH") + deviceToString(device) + "/";
94  std::string command = "mkdir -p " + path;
95  Command::executeCommand(command);
96  std::string str_json = "{\"name\":\"firmware_name\",\"version\": \"" +version_to_write+"\" }";
97  Files file;
98  boost::system::error_code ec;
99  std::cout << "[write_release_txt_to_tmp] creating dir at " << path << std::endl;
100  bool result = file.createAndWrite(ec, path + "release.txt",str_json);
101  return result;
102  }
103 
104 
105  static void remove_release_txt(const enum dpyFirmware::Device device){
106  std::string path = SystemConfiguration::getInstance()->getConfigurationValue("DEVICE_UPDATES_PATH") + deviceToString(device) + "/";
107  std::string command = "rm -rf " + path;
108  Command::executeCommand(command);
109  }
110 
111 
112 #endif
113 };
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
@ 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:70
@ BK3_2
BK3-2.
Definition: firmware.h:50
@ WP7607
WP7607.
Definition: firmware.h:48
static SystemConfiguration * getInstance()
@ CURRENT
CURRENT.
Definition: firmware.h:59
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
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:60
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:57
std::string full_path
Path and name of the firmware.
Definition: firmware.h:23