blob: b6704477ca38b8018186f057ed7f42e105ff7e96 [file] [log] [blame]
Alex Deymo40d86b22015-09-03 22:27:10 -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_HARDWARE_ANDROID_H_
18#define UPDATE_ENGINE_HARDWARE_ANDROID_H_
Alex Deymo40d86b22015-09-03 22:27:10 -070019
20#include <string>
Kelvin Zhangd7191032020-08-11 10:48:16 -040021#include <string_view>
Alex Deymo40d86b22015-09-03 22:27:10 -070022
23#include <base/macros.h>
24#include <base/time/time.h>
Yifan Hongfd6640f2020-08-27 19:13:17 -070025#include <gtest/gtest_prod.h>
Alex Deymo40d86b22015-09-03 22:27:10 -070026
Yifan Hong87029332020-09-01 17:20:08 -070027#include "update_engine/common/error_code.h"
Alex Deymo39910dc2015-11-09 17:04:30 -080028#include "update_engine/common/hardware.h"
29#include "update_engine/common/hardware_interface.h"
Alex Deymo40d86b22015-09-03 22:27:10 -070030
31namespace chromeos_update_engine {
32
33// Implements the real interface with the hardware in the Android platform.
Kelvin Zhangd7191032020-08-11 10:48:16 -040034class HardwareAndroid : public HardwareInterface {
Alex Deymo40d86b22015-09-03 22:27:10 -070035 public:
36 HardwareAndroid() = default;
37 ~HardwareAndroid() override = default;
38
39 // HardwareInterface methods.
40 bool IsOfficialBuild() const override;
41 bool IsNormalBootMode() const override;
Sen Jiange67bb5b2016-06-20 15:53:56 -070042 bool AreDevFeaturesEnabled() const override;
Alex Deymo46a9aae2016-05-04 20:20:11 -070043 bool IsOOBEEnabled() const override;
Alex Deymo40d86b22015-09-03 22:27:10 -070044 bool IsOOBEComplete(base::Time* out_time_of_oobe) const override;
45 std::string GetHardwareClass() const override;
46 std::string GetFirmwareVersion() const override;
47 std::string GetECVersion() const override;
Matt Ziegelbaumaa8e1a42019-05-09 21:41:58 -040048 std::string GetDeviceRequisition() const override;
Zentaro Kavanaghbaacb982018-02-20 17:48:39 -080049 int GetMinKernelKeyVersion() const override;
Marton Hunyady99ced782018-05-08 12:59:50 +020050 int GetMinFirmwareKeyVersion() const override;
Zentaro Kavanagh8f6f2432018-05-16 13:48:12 -070051 int GetMaxFirmwareKeyRollforward() const override;
52 bool SetMaxFirmwareKeyRollforward(int firmware_max_rollforward) override;
Zentaro Kavanagh5d956152018-05-15 09:40:33 -070053 bool SetMaxKernelKeyRollforward(int kernel_max_rollforward) override;
Alex Deymo40d86b22015-09-03 22:27:10 -070054 int GetPowerwashCount() const override;
Zentaro Kavanagh28def4f2019-01-15 17:15:01 -080055 bool SchedulePowerwash(bool save_rollback_data) override;
Alex Deymofb905d92016-06-03 19:26:58 -070056 bool CancelPowerwash() override;
Alex Deymodd132f32015-09-14 19:12:07 -070057 bool GetNonVolatileDirectory(base::FilePath* path) const override;
58 bool GetPowerwashSafeDirectory(base::FilePath* path) const override;
Sen Jiang5011df62017-06-28 17:13:19 -070059 int64_t GetBuildTimestamp() const override;
Tianjie Xu4ad3af62019-10-30 11:59:45 -070060 bool AllowDowngrade() const override;
Amin Hassani1677e812017-06-21 13:36:36 -070061 bool GetFirstActiveOmahaPingSent() const override;
Amin Hassani80f4d4c2018-05-16 13:34:00 -070062 bool SetFirstActiveOmahaPingSent() override;
Tianjie Xud6aa91f2019-11-14 11:55:10 -080063 void SetWarmReset(bool warm_reset) override;
Kelvin Zhangd7191032020-08-11 10:48:16 -040064 [[nodiscard]] std::string GetVersionForLogging(
65 const std::string& partition_name) const override;
Yifan Hong87029332020-09-01 17:20:08 -070066 [[nodiscard]] ErrorCode IsPartitionUpdateValid(
Kelvin Zhangd7191032020-08-11 10:48:16 -040067 const std::string& partition_name,
68 const std::string& new_version) const override;
Alex Deymo40d86b22015-09-03 22:27:10 -070069
70 private:
Yifan Hongfd6640f2020-08-27 19:13:17 -070071 FRIEND_TEST(HardwareAndroidTest, IsKernelUpdateValid);
72
73 // Helper for IsPartitionUpdateValid.
74 static ErrorCode IsKernelUpdateValid(const std::string& old_release,
75 const std::string& new_release);
76
Alex Deymo40d86b22015-09-03 22:27:10 -070077 DISALLOW_COPY_AND_ASSIGN(HardwareAndroid);
78};
79
80} // namespace chromeos_update_engine
81
Alex Deymo1b03f9f2015-12-09 00:38:36 -080082#endif // UPDATE_ENGINE_HARDWARE_ANDROID_H_