blob: 1de0e413e8986d800d9c5656dcf241c2412163fe [file] [log] [blame]
Alex Deymob17327c2015-09-04 10:29:00 -07001//
2// Copyright (C) 2015 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
Alex Deymo1b03f9f2015-12-09 00:38:36 -080017#ifndef UPDATE_ENGINE_BOOT_CONTROL_ANDROID_H_
18#define UPDATE_ENGINE_BOOT_CONTROL_ANDROID_H_
Alex Deymob17327c2015-09-04 10:29:00 -070019
20#include <string>
21
Connor O'Briencee6ad92016-11-21 13:53:52 -080022#include <android/hardware/boot/1.0/IBootControl.h>
Alex Deymob17327c2015-09-04 10:29:00 -070023
Alex Deymo39910dc2015-11-09 17:04:30 -080024#include "update_engine/common/boot_control.h"
Alex Deymob17327c2015-09-04 10:29:00 -070025
26namespace chromeos_update_engine {
27
28// The Android implementation of the BootControlInterface. This implementation
29// uses the libhardware's boot_control HAL to access the bootloader.
30class BootControlAndroid : public BootControlInterface {
31 public:
32 BootControlAndroid() = default;
33 ~BootControlAndroid() = default;
34
David Zeuthen753fadc2015-09-15 16:34:09 -040035 // Load boot_control HAL implementation using libhardware and
36 // initializes it. Returns false if an error occurred.
37 bool Init();
38
Alex Deymob17327c2015-09-04 10:29:00 -070039 // BootControlInterface overrides.
40 unsigned int GetNumSlots() const override;
41 BootControlInterface::Slot GetCurrentSlot() const override;
42 bool GetPartitionDevice(const std::string& partition_name,
43 BootControlInterface::Slot slot,
44 std::string* device) const override;
45 bool IsSlotBootable(BootControlInterface::Slot slot) const override;
46 bool MarkSlotUnbootable(BootControlInterface::Slot slot) override;
Alex Deymo31d95ac2015-09-17 11:56:18 -070047 bool SetActiveBootSlot(BootControlInterface::Slot slot) override;
Alex Deymoaa26f622015-09-16 18:21:27 -070048 bool MarkBootSuccessfulAsync(base::Callback<void(bool)> callback) override;
Alex Deymob17327c2015-09-04 10:29:00 -070049
50 private:
Connor O'Briencee6ad92016-11-21 13:53:52 -080051 ::android::sp<::android::hardware::boot::V1_0::IBootControl> module_;
David Zeuthen753fadc2015-09-15 16:34:09 -040052
Alex Deymob17327c2015-09-04 10:29:00 -070053 DISALLOW_COPY_AND_ASSIGN(BootControlAndroid);
54};
55
56} // namespace chromeos_update_engine
57
Alex Deymo1b03f9f2015-12-09 00:38:36 -080058#endif // UPDATE_ENGINE_BOOT_CONTROL_ANDROID_H_