ronnie
2022-10-23 5a83b14855e763445ac36672c35ddb68300e4b42
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
//
// Copyright (C) 2013 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
 
#ifndef UPDATE_ENGINE_COMMON_HARDWARE_INTERFACE_H_
#define UPDATE_ENGINE_COMMON_HARDWARE_INTERFACE_H_
 
#include <stdint.h>
 
#include <string>
#include <vector>
 
#include <base/files/file_path.h>
#include <base/time/time.h>
 
namespace chromeos_update_engine {
 
// The hardware interface allows access to the crossystem exposed properties,
// such as the firmware version, hwid, verified boot mode.
// These stateless functions are tied together in this interface to facilitate
// unit testing.
class HardwareInterface {
 public:
  virtual ~HardwareInterface() {}
 
  // Returns whether this is an official build. Official build means that the
  // server maintains and updates the build, so update_engine should run and
  // periodically check for updates.
  virtual bool IsOfficialBuild() const = 0;
 
  // Returns true if the boot mode is normal or if it's unable to
  // determine the boot mode. Returns false if the boot mode is
  // developer. A dev-mode boot will allow the user to access developer-only
  // features.
  virtual bool IsNormalBootMode() const = 0;
 
  // Returns whether the developer features are enabled.
  virtual bool AreDevFeaturesEnabled() const = 0;
 
  // Returns whether the device has an OOBE flow that the user must go through
  // before getting non-critical updates. Use IsOOBEComplete() to determine if
  // that flow is complete.
  virtual bool IsOOBEEnabled() const = 0;
 
  // Returns true if the OOBE process has been completed and EULA accepted,
  // False otherwise. If True is returned, and |out_time_of_oobe| isn't null,
  // the time-stamp of when OOBE happened is stored at |out_time_of_oobe|.
  virtual bool IsOOBEComplete(base::Time* out_time_of_oobe) const = 0;
 
  // Returns the HWID or an empty string on error.
  virtual std::string GetHardwareClass() const = 0;
 
  // Returns the firmware version or an empty string if the system is
  // not running chrome os firmware.
  virtual std::string GetFirmwareVersion() const = 0;
 
  // Returns the ec version or an empty string if the system is not
  // running a custom chrome os ec.
  virtual std::string GetECVersion() const = 0;
 
  // Returns the minimum kernel key version that verified boot on Chrome OS
  // will allow to boot. This is the value of crossystem tpm_kernver. Returns
  // -1 on error, or if not running on Chrome OS.
  virtual int GetMinKernelKeyVersion() const = 0;
 
  // Returns the minimum firmware key version that verified boot on Chrome OS
  // will allow to boot. This is the value of crossystem tpm_fwver. Returns
  // -1 on error, or if not running on Chrome OS.
  virtual int GetMinFirmwareKeyVersion() const = 0;
 
  // Returns the maximum firmware key version that verified boot should roll
  // forward to. This is the value of crossystem firmware_max_rollforward.
  // Returns -1 on error, if this board does not yet support this value, or
  // if not running on Chrome OS.
  virtual int GetMaxFirmwareKeyRollforward() const = 0;
 
  // Sets the maximum firmware key version that verified boot should roll
  // forward to. This is the value of crossystem firmware_max_rollforward.
  // This value is not available on all Chrome OS devices.
  virtual bool SetMaxFirmwareKeyRollforward(int firmware_max_rollforward) = 0;
 
  // Sets the maximum kernel key version that verified boot should roll
  // forward to. This is the value of crossystem kernel_max_rollforward.
  // Returns false if the value cannot be set, or if not running on Chrome OS.
  virtual bool SetMaxKernelKeyRollforward(int kernel_max_rollforward) = 0;
 
  // Returns the powerwash_count from the stateful. If the file is not found
  // or is invalid, returns -1. Brand new machines out of the factory or after
  // recovery don't have this value set.
  virtual int GetPowerwashCount() const = 0;
 
  // Signals that a powerwash (stateful partition wipe) should be performed
  // after reboot. If |is_rollback| is true additional state is preserved
  // during shutdown that can be restored after the powerwash.
  virtual bool SchedulePowerwash(bool is_rollback) = 0;
 
  // Cancel the powerwash operation scheduled to be performed on next boot.
  virtual bool CancelPowerwash() = 0;
 
  // Store in |path| the path to a non-volatile directory (persisted across
  // reboots) available for this daemon. In case of an error, such as no
  // directory available, returns false.
  virtual bool GetNonVolatileDirectory(base::FilePath* path) const = 0;
 
  // Store in |path| the path to a non-volatile directory persisted across
  // powerwash cycles. In case of an error, such as no directory available,
  // returns false.
  virtual bool GetPowerwashSafeDirectory(base::FilePath* path) const = 0;
 
  // Returns the timestamp of the current OS build.
  virtual int64_t GetBuildTimestamp() const = 0;
 
  // Returns whether the first active ping was sent to Omaha at some point, and
  // that the value is persisted across recovery (and powerwash) once set with
  // |SetFirstActiveOmahaPingSent()|.
  virtual bool GetFirstActiveOmahaPingSent() const = 0;
 
  // Persist the fact that first active ping was sent to omaha and returns false
  // if failed to persist it.
  virtual bool SetFirstActiveOmahaPingSent() = 0;
};
 
}  // namespace chromeos_update_engine
 
#endif  // UPDATE_ENGINE_COMMON_HARDWARE_INTERFACE_H_