• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2018 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 
17 #pragma once
18 
19 #include <memory>
20 #include <string>
21 #include <unordered_map>
22 #include <utility>
23 #include <vector>
24 
25 #include <android/hardware/boot/1.0/IBootControl.h>
26 #include <android/hardware/fastboot/1.0/IFastboot.h>
27 #include <android/hardware/health/2.0/IHealth.h>
28 
29 #include "commands.h"
30 #include "transport.h"
31 #include "variables.h"
32 
33 class FastbootDevice {
34   public:
35     FastbootDevice();
36     ~FastbootDevice();
37 
38     void CloseDevice();
39     void ExecuteCommands();
40     bool WriteStatus(FastbootResult result, const std::string& message);
41     bool HandleData(bool read, std::vector<char>* data);
42     std::string GetCurrentSlot();
43 
44     // Shortcuts for writing status results.
45     bool WriteOkay(const std::string& message);
46     bool WriteFail(const std::string& message);
47     bool WriteInfo(const std::string& message);
48 
download_data()49     std::vector<char>& download_data() { return download_data_; }
get_transport()50     Transport* get_transport() { return transport_.get(); }
boot_control_hal()51     android::sp<android::hardware::boot::V1_0::IBootControl> boot_control_hal() {
52         return boot_control_hal_;
53     }
fastboot_hal()54     android::sp<android::hardware::fastboot::V1_0::IFastboot> fastboot_hal() {
55         return fastboot_hal_;
56     }
health_hal()57     android::sp<android::hardware::health::V2_0::IHealth> health_hal() { return health_hal_; }
58 
set_active_slot(const std::string & active_slot)59     void set_active_slot(const std::string& active_slot) { active_slot_ = active_slot; }
60 
61   private:
62     const std::unordered_map<std::string, CommandHandler> kCommandMap;
63 
64     std::unique_ptr<Transport> transport_;
65     android::sp<android::hardware::boot::V1_0::IBootControl> boot_control_hal_;
66     android::sp<android::hardware::health::V2_0::IHealth> health_hal_;
67     android::sp<android::hardware::fastboot::V1_0::IFastboot> fastboot_hal_;
68     std::vector<char> download_data_;
69     std::string active_slot_;
70 };
71