/* * Copyright (C) 2017 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 ANDROID_VINTF_MANIFEST_HAL_H #define ANDROID_VINTF_MANIFEST_HAL_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace android { namespace vintf { // A component of HalManifest. struct ManifestHal : public WithFileName { using InstanceType = ManifestInstance; ManifestHal() = default; bool operator==(const ManifestHal &other) const; HalFormat format = HalFormat::HIDL; std::string name; std::vector versions; TransportArch transportArch; // If this is set to something other than EMPTY, the service is only // accessible by specific means like through a Trusty VM, and not // available on the host device. ExclusiveTo exclusiveTo = ExclusiveTo::EMPTY; inline Transport transport() const { return transportArch.transport; } inline Arch arch() const { return transportArch.arch; } inline std::optional ip() const { return transportArch.ip; } inline std::optional port() const { return transportArch.port; } ExclusiveTo getExclusiveTo() const { return exclusiveTo; } inline const std::string& getName() const { return name; } inline bool updatableViaSystem() const { return mUpdatableViaSystem; } // Assume isValid(). bool forEachInstance(const std::function& func) const; bool isOverride() const { return mIsOverride; } const std::optional& updatableViaApex() const { return mUpdatableViaApex; } // Returns the name of the accessor interface for this HAL. // If not set, no accessor will be used. const std::optional& accessor() const { return mAccessor; } // When true, the existence of this tag means the component does NOT // exist on the device. This is useful for ODM manifests to specify that // a HAL is disabled on certain products. bool isDisabledHal() const; Level getMaxLevel() const { return mMaxLevel; } Level getMinLevel() const { return mMinLevel; } private: friend struct LibVintfTest; friend struct ManifestHalConverter; friend struct HalManifest; friend bool parse(const std::string &s, ManifestHal *hal); // Whether this hal is a valid one. Note that an empty ManifestHal // (constructed via ManifestHal()) is valid. bool isValid(std::string* error = nullptr) const; // Return all versions mentioned by s and s. void appendAllVersions(std::set* ret) const; // insert instances to mManifestInstances. // Existing instances will be ignored. // Pre: all instances to be inserted must satisfy // !hasPackage() && hasVersion() && hasInterface() && hasInstance() bool insertInstance(const FqInstance& fqInstance, bool allowDupMajorVersion, std::string* error = nullptr); bool insertInstances(const std::set& fqInstances, bool allowDupMajorVersion, std::string* error = nullptr); // Verify instance before inserting. bool verifyInstance(const FqInstance& fqInstance, std::string* error = nullptr) const; bool mIsOverride = false; std::optional mAccessor; std::optional mUpdatableViaApex; bool mUpdatableViaSystem = false; // All instances specified with and x x std::set mManifestInstances; // Max level of this HAL (inclusive). Only valid for framework manifest HALs. // If set, HALs with max-level < target FCM version in device manifest is // disabled. Level mMaxLevel = Level::UNSPECIFIED; // Min level of this HAL (inclusive). Only valid for framework manifest HALs. // If set, HALs with max-level > target FCM version in device manifest is // disabled. Level mMinLevel = Level::UNSPECIFIED; }; } // namespace vintf } // namespace android #endif // ANDROID_VINTF_MANIFEST_HAL_H