1 #include "bootloader.h" 2 #include "utilities/config_utils.h" 3 #include "utilities/exceptions.h" 4 #include "utilities/utils.h" 6 std::ostream& operator<<(std::ostream& os,
const RollbackMode mode) {
9 case RollbackMode::kUbootGeneric:
10 mode_s =
"uboot_generic";
12 case RollbackMode::kUbootMasked:
13 mode_s =
"uboot_masked";
19 os <<
'"' << mode_s <<
'"';
24 inline void CopyFromConfig(RollbackMode& dest,
const std::string& option_name,
const boost::property_tree::ptree& pt) {
25 boost::optional<std::string> value = pt.get_optional<std::string>(option_name);
26 if (value.is_initialized()) {
27 std::string mode{StripQuotesFromStrings(value.get())};
28 if (mode ==
"uboot_generic") {
29 dest = RollbackMode::kUbootGeneric;
30 }
else if (mode ==
"uboot_masked") {
31 dest = RollbackMode::kUbootMasked;
33 dest = RollbackMode::kBootloaderNone;
38 void BootloaderConfig::updateFromPropertyTree(
const boost::property_tree::ptree& pt) {
39 CopyFromConfig(rollback_mode,
"rollback_mode", pt);
42 void BootloaderConfig::writeToStream(std::ostream& out_stream)
const {
43 writeOption(out_stream, rollback_mode,
"rollback_mode");
46 void Bootloader::setBootOK()
const {
48 switch (config_.rollback_mode) {
49 case RollbackMode::kBootloaderNone:
51 case RollbackMode::kUbootGeneric:
52 if (Utils::shell(
"fw_setenv bootcount 0", &sink) != 0) {
53 LOG_WARNING <<
"Failed resetting bootcount";
56 case RollbackMode::kUbootMasked:
57 if (Utils::shell(
"fw_setenv bootcount 0", &sink) != 0) {
58 LOG_WARNING <<
"Failed resetting bootcount";
60 if (Utils::shell(
"fw_setenv upgrade_available 0", &sink) != 0) {
61 LOG_WARNING <<
"Failed resetting upgrade_available for u-boot";
69 void Bootloader::updateNotify()
const {
71 switch (config_.rollback_mode) {
72 case RollbackMode::kBootloaderNone:
74 case RollbackMode::kUbootGeneric:
75 if (Utils::shell(
"fw_setenv bootcount 0", &sink) != 0) {
76 LOG_WARNING <<
"Failed resetting bootcount";
78 if (Utils::shell(
"fw_setenv rollback 0", &sink) != 0) {
79 LOG_WARNING <<
"Failed resetting rollback flag";
82 case RollbackMode::kUbootMasked:
83 if (Utils::shell(
"fw_setenv bootcount 0", &sink) != 0) {
84 LOG_WARNING <<
"Failed resetting bootcount";
86 if (Utils::shell(
"fw_setenv upgrade_available 1", &sink) != 0) {
87 LOG_WARNING <<
"Failed setting upgrade_available for u-boot";
89 if (Utils::shell(
"fw_setenv rollback 0", &sink) != 0) {
90 LOG_WARNING <<
"Failed resetting rollback flag";