blob: 0af771e97c3e6efdf696b3a01fde2f584cb50e42 [file] [log] [blame]
Daniel Zheng1a01a1c2023-01-30 23:29:50 +00001//
2// Copyright (C) 2020 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15//
16#pragma once
17
18#include <sstream>
19#include <string>
20
Daniel Zhengbc01da52023-02-23 03:25:52 +000021#include "fastboot.h"
Daniel Zheng1a01a1c2023-01-30 23:29:50 +000022#include "fastboot_driver.h"
Daniel Zheng47d70a52023-02-14 17:44:40 +000023#include "super_flash_helper.h"
24#include "util.h"
Daniel Zheng1a01a1c2023-01-30 23:29:50 +000025
26class Task {
27 public:
28 Task() = default;
29 virtual void Run() = 0;
Daniel Zheng1a01a1c2023-01-30 23:29:50 +000030 virtual ~Task() = default;
31};
Daniel Zheng0d307182023-01-31 21:07:53 +000032
33class FlashTask : public Task {
34 public:
Daniel Zheng43987c92023-03-07 18:20:53 +000035 FlashTask(const std::string& slot, const std::string& pname);
36 FlashTask(const std::string& slot, const std::string& pname, const std::string& fname);
Daniel Zheng0d307182023-01-31 21:07:53 +000037
38 void Run() override;
Daniel Zheng0d307182023-01-31 21:07:53 +000039
40 private:
41 const std::string pname_;
42 const std::string fname_;
43 const std::string slot_;
Daniel Zheng0d307182023-01-31 21:07:53 +000044};
Daniel Zheng71b3b432023-01-30 17:43:00 +000045
46class RebootTask : public Task {
47 public:
Daniel Zheng43987c92023-03-07 18:20:53 +000048 RebootTask(FlashingPlan* fp);
49 RebootTask(FlashingPlan* fp, const std::string& reboot_target);
Daniel Zheng71b3b432023-01-30 17:43:00 +000050 void Run() override;
Daniel Zheng71b3b432023-01-30 17:43:00 +000051
52 private:
53 const std::string reboot_target_ = "";
Daniel Zheng43987c92023-03-07 18:20:53 +000054 const FlashingPlan* fp_;
Daniel Zheng47d70a52023-02-14 17:44:40 +000055};
56
57class FlashSuperLayoutTask : public Task {
58 public:
59 FlashSuperLayoutTask(const std::string& super_name, std::unique_ptr<SuperFlashHelper> helper,
60 SparsePtr sparse_layout);
61 static std::unique_ptr<FlashSuperLayoutTask> Initialize(FlashingPlan* fp,
62 std::vector<ImageEntry>& os_images);
63 using ImageEntry = std::pair<const Image*, std::string>;
64 void Run() override;
65
66 private:
67 const std::string super_name_;
68 std::unique_ptr<SuperFlashHelper> helper_;
69 SparsePtr sparse_layout_;
70};
Daniel Zheng6bb8baa2023-03-03 07:14:23 +000071
72class UpdateSuperTask : public Task {
73 public:
74 UpdateSuperTask(FlashingPlan* fp);
75 void Run() override;
76
77 private:
Daniel Zheng43987c92023-03-07 18:20:53 +000078 const FlashingPlan* fp_;
Daniel Zheng6bb8baa2023-03-03 07:14:23 +000079};
Daniel Zheng9f7bf7e2023-03-03 07:16:46 +000080
81class ResizeTask : public Task {
82 public:
83 ResizeTask(FlashingPlan* fp, const std::string& pname, const std::string& size,
84 const std::string& slot);
85 void Run() override;
86
87 private:
Daniel Zheng43987c92023-03-07 18:20:53 +000088 const FlashingPlan* fp_;
Daniel Zheng9f7bf7e2023-03-03 07:16:46 +000089 const std::string pname_;
90 const std::string size_;
91 const std::string slot_;
92};
Daniel Zhengaa70f4c2023-03-07 18:59:51 +000093
94class DeleteTask : public Task {
95 public:
96 DeleteTask(FlashingPlan* _fp, const std::string& _pname);
97 void Run() override;
98
99 private:
Daniel Zheng43987c92023-03-07 18:20:53 +0000100 const FlashingPlan* fp_;
Daniel Zhengaa70f4c2023-03-07 18:59:51 +0000101 const std::string pname_;
102};