Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bc01da5c authored by Daniel Zheng's avatar Daniel Zheng
Browse files

Changed FlashTask and RebootTask to take in FlashingPlan

Test: tested flash {partition} on raven and reboot {target} on raven
Change-Id: I26f4723474c3a142b086c1ac361578f8487ec3b9
Bug: 194686221
parent 7df2ab9c
Loading
Loading
Loading
Loading
+9 −8
Original line number Diff line number Diff line
@@ -2277,6 +2277,7 @@ int FastBootTool::Main(int argc, char* argv[]) {

    fastboot::FastBootDriver fastboot_driver(transport, driver_callbacks, false);
    fb = &fastboot_driver;
    fp->fb = &fastboot_driver;

    const double start = now();

@@ -2352,17 +2353,17 @@ int FastBootTool::Main(int argc, char* argv[]) {
        } else if (command == FB_CMD_REBOOT) {
            if (args.size() == 1) {
                std::string reboot_target = next_arg(&args);
                reboot_task = std::make_unique<RebootTask>(fb, reboot_target);
                reboot_task = std::make_unique<RebootTask>(fp.get(), reboot_target);
            } else {
                reboot_task = std::make_unique<RebootTask>(fb);
                reboot_task = std::make_unique<RebootTask>(fp.get());
            }
            if (!args.empty()) syntax_error("junk after reboot command");
        } else if (command == FB_CMD_REBOOT_BOOTLOADER) {
            reboot_task = std::make_unique<RebootTask>(fb, "bootloader");
            reboot_task = std::make_unique<RebootTask>(fp.get(), "bootloader");
        } else if (command == FB_CMD_REBOOT_RECOVERY) {
            reboot_task = std::make_unique<RebootTask>(fb, "recovery");
            reboot_task = std::make_unique<RebootTask>(fp.get(), "recovery");
        } else if (command == FB_CMD_REBOOT_FASTBOOT) {
            reboot_task = std::make_unique<RebootTask>(fb, "fastboot");
            reboot_task = std::make_unique<RebootTask>(fp.get(), "fastboot");
        } else if (command == FB_CMD_CONTINUE) {
            fb->Continue();
        } else if (command == FB_CMD_BOOT) {
@@ -2383,7 +2384,7 @@ int FastBootTool::Main(int argc, char* argv[]) {
                fname = find_item(pname);
            }
            if (fname.empty()) die("cannot determine image filename for '%s'", pname.c_str());
            FlashTask task(slot_override, fp->force_flash, pname, fname);
            FlashTask task(slot_override, pname, fname);
            task.Run();
        } else if (command == "flash:raw") {
            std::string partition = next_arg(&args);
@@ -2407,7 +2408,7 @@ int FastBootTool::Main(int argc, char* argv[]) {
            } else {
                do_flashall(fp.get());
            }
            reboot_task = std::make_unique<RebootTask>(fb);
            reboot_task = std::make_unique<RebootTask>(fp.get());
        } else if (command == "update") {
            bool slot_all = (slot_override == "all");
            if (slot_all) {
@@ -2419,7 +2420,7 @@ int FastBootTool::Main(int argc, char* argv[]) {
                filename = next_arg(&args);
            }
            do_update(filename.c_str(), fp.get());
            reboot_task = std::make_unique<RebootTask>(fb);
            reboot_task = std::make_unique<RebootTask>(fp.get());
        } else if (command == FB_CMD_SET_ACTIVE) {
            std::string slot = verify_slot(next_arg(&args), false);
            fb->SetActive(slot);
+15 −19
Original line number Diff line number Diff line
@@ -20,20 +20,16 @@
#include "fastboot.h"
#include "util.h"

FlashTask::FlashTask(const std::string& _slot) : slot_(_slot){};
FlashTask::FlashTask(const std::string& _slot, bool _force_flash)
    : slot_(_slot), force_flash_(_force_flash) {}
FlashTask::FlashTask(const std::string& _slot, bool _force_flash, const std::string& _pname)
    : pname_(_pname), fname_(find_item(_pname)), slot_(_slot), force_flash_(_force_flash) {
FlashTask::FlashTask(const std::string& _slot, const std::string& _pname)
    : pname_(_pname), fname_(find_item(_pname)), slot_(_slot) {
    if (fname_.empty()) die("cannot determine image filename for '%s'", pname_.c_str());
}
FlashTask::FlashTask(const std::string& _slot, bool _force_flash, const std::string& _pname,
                     const std::string& _fname)
    : pname_(_pname), fname_(_fname), slot_(_slot), force_flash_(_force_flash) {}
FlashTask::FlashTask(const std::string& _slot, const std::string& _pname, const std::string& _fname)
    : pname_(_pname), fname_(_fname), slot_(_slot) {}

void FlashTask::Run() {
    auto flash = [&](const std::string& partition) {
        if (should_flash_in_userspace(partition) && !is_userspace_fastboot() && !force_flash_) {
        if (should_flash_in_userspace(partition) && !is_userspace_fastboot()) {
            die("The partition you are trying to flash is dynamic, and "
                "should be flashed via fastbootd. Please run:\n"
                "\n"
@@ -47,25 +43,25 @@ void FlashTask::Run() {
    do_for_partitions(pname_, slot_, flash, true);
}

RebootTask::RebootTask(fastboot::FastBootDriver* _fb) : fb_(_fb){};
RebootTask::RebootTask(fastboot::FastBootDriver* _fb, std::string _reboot_target)
    : reboot_target_(std::move(_reboot_target)), fb_(_fb){};
RebootTask::RebootTask(FlashingPlan* _fp) : fp_(_fp){};
RebootTask::RebootTask(FlashingPlan* _fp, const std::string& _reboot_target)
    : reboot_target_(_reboot_target), fp_(_fp){};

void RebootTask::Run() {
    if ((reboot_target_ == "userspace" || reboot_target_ == "fastboot")) {
        if (!is_userspace_fastboot()) {
            reboot_to_userspace_fastboot();
            fb_->WaitForDisconnect();
            fp_->fb->WaitForDisconnect();
        }
    } else if (reboot_target_ == "recovery") {
        fb_->RebootTo("recovery");
        fb_->WaitForDisconnect();
        fp_->fb->RebootTo("recovery");
        fp_->fb->WaitForDisconnect();
    } else if (reboot_target_ == "bootloader") {
        fb_->RebootTo("bootloader");
        fb_->WaitForDisconnect();
        fp_->fb->RebootTo("bootloader");
        fp_->fb->WaitForDisconnect();
    } else if (reboot_target_ == "") {
        fb_->Reboot();
        fb_->WaitForDisconnect();
        fp_->fb->Reboot();
        fp_->fb->WaitForDisconnect();
    } else {
        syntax_error("unknown reboot target %s", reboot_target_.c_str());
    }
+6 −9
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@
#include <sstream>
#include <string>

#include "fastboot.h"
#include "fastboot_driver.h"

class Task {
@@ -29,11 +30,8 @@ class Task {

class FlashTask : public Task {
  public:
    FlashTask(const std::string& _slot);
    FlashTask(const std::string& _slot, bool _force_flash);
    FlashTask(const std::string& _slot, bool _force_flash, const std::string& _pname);
    FlashTask(const std::string& _slot, bool _force_flash, const std::string& _pname,
              const std::string& _fname);
    FlashTask(const std::string& _slot, const std::string& _pname);
    FlashTask(const std::string& _slot, const std::string& _pname, const std::string& _fname);

    void Run() override;
    ~FlashTask() {}
@@ -42,17 +40,16 @@ class FlashTask : public Task {
    const std::string pname_;
    const std::string fname_;
    const std::string slot_;
    bool force_flash_ = false;
};

class RebootTask : public Task {
  public:
    RebootTask(fastboot::FastBootDriver* _fb);
    RebootTask(fastboot::FastBootDriver* _fb, const std::string _reboot_target);
    RebootTask(FlashingPlan* _fp);
    RebootTask(FlashingPlan* _fp, const std::string& _reboot_target);
    void Run() override;
    ~RebootTask() {}

  private:
    const std::string reboot_target_ = "";
    fastboot::FastBootDriver* fb_;
    FlashingPlan* fp_;
};
 No newline at end of file