1*6777b538SAndroid Build Coastguard Worker // Copyright 2022 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef COMPONENTS_METRICS_MOTHERBOARD_H_ 6*6777b538SAndroid Build Coastguard Worker #define COMPONENTS_METRICS_MOTHERBOARD_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <optional> 9*6777b538SAndroid Build Coastguard Worker #include <string> 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Worker namespace metrics { 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker class Motherboard final { 14*6777b538SAndroid Build Coastguard Worker public: 15*6777b538SAndroid Build Coastguard Worker enum class BiosType { kLegacy, kUefi }; 16*6777b538SAndroid Build Coastguard Worker Motherboard(); 17*6777b538SAndroid Build Coastguard Worker Motherboard(Motherboard&&); 18*6777b538SAndroid Build Coastguard Worker Motherboard(const Motherboard&) = delete; 19*6777b538SAndroid Build Coastguard Worker ~Motherboard(); 20*6777b538SAndroid Build Coastguard Worker 21*6777b538SAndroid Build Coastguard Worker // The fields below provide details about Motherboard and BIOS on the system. 22*6777b538SAndroid Build Coastguard Worker // 23*6777b538SAndroid Build Coastguard Worker // A `nullopt_t` means that the property does not exist/could not be read. 24*6777b538SAndroid Build Coastguard Worker // A valid value could be an UTF-8 string with characters or an empty string. 25*6777b538SAndroid Build Coastguard Worker // 26*6777b538SAndroid Build Coastguard Worker // This `std::optional` can be mapped directly to the optional proto message 27*6777b538SAndroid Build Coastguard Worker // field, where the message field is added only if there is a valid value. manufacturer()28*6777b538SAndroid Build Coastguard Worker const std::optional<std::string>& manufacturer() const { 29*6777b538SAndroid Build Coastguard Worker return manufacturer_; 30*6777b538SAndroid Build Coastguard Worker } model()31*6777b538SAndroid Build Coastguard Worker const std::optional<std::string>& model() const { return model_; } bios_manufacturer()32*6777b538SAndroid Build Coastguard Worker const std::optional<std::string>& bios_manufacturer() const { 33*6777b538SAndroid Build Coastguard Worker return bios_manufacturer_; 34*6777b538SAndroid Build Coastguard Worker } bios_version()35*6777b538SAndroid Build Coastguard Worker const std::optional<std::string>& bios_version() const { 36*6777b538SAndroid Build Coastguard Worker return bios_version_; 37*6777b538SAndroid Build Coastguard Worker } bios_type()38*6777b538SAndroid Build Coastguard Worker std::optional<BiosType> bios_type() const { return bios_type_; } 39*6777b538SAndroid Build Coastguard Worker 40*6777b538SAndroid Build Coastguard Worker private: 41*6777b538SAndroid Build Coastguard Worker std::optional<std::string> manufacturer_; 42*6777b538SAndroid Build Coastguard Worker std::optional<std::string> model_; 43*6777b538SAndroid Build Coastguard Worker std::optional<std::string> bios_manufacturer_; 44*6777b538SAndroid Build Coastguard Worker std::optional<std::string> bios_version_; 45*6777b538SAndroid Build Coastguard Worker std::optional<BiosType> bios_type_; 46*6777b538SAndroid Build Coastguard Worker }; 47*6777b538SAndroid Build Coastguard Worker 48*6777b538SAndroid Build Coastguard Worker } // namespace metrics 49*6777b538SAndroid Build Coastguard Worker 50*6777b538SAndroid Build Coastguard Worker #endif // COMPONENTS_METRICS_MOTHERBOARD_H_ 51