• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 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 
17 #include "CompatibilityMatrix.h"
18 
19 #include "parse_string.h"
20 #include "utils.h"
21 
22 namespace android {
23 namespace vintf {
24 
25 constexpr Version CompatibilityMatrix::kVersion;
26 
add(MatrixHal && hal)27 bool CompatibilityMatrix::add(MatrixHal &&hal) {
28     return HalGroup<MatrixHal>::add(std::move(hal));
29 }
30 
add(MatrixKernel && kernel)31 bool CompatibilityMatrix::add(MatrixKernel &&kernel) {
32     if (mType != SchemaType::FRAMEWORK) {
33         return false;
34     }
35     framework.mKernels.push_back(std::move(kernel));
36     return true;
37 }
38 
type() const39 SchemaType CompatibilityMatrix::type() const {
40     return mType;
41 }
42 
43 
fetchAllInformation(const std::string & path)44 status_t CompatibilityMatrix::fetchAllInformation(const std::string &path) {
45     return details::fetchAllInformation(path, gCompatibilityMatrixConverter, this);
46 }
47 
getXmlSchemaPath(const std::string & xmlFileName,const Version & version) const48 std::string CompatibilityMatrix::getXmlSchemaPath(const std::string& xmlFileName,
49                                                   const Version& version) const {
50     using std::literals::string_literals::operator""s;
51     auto range = getXmlFiles(xmlFileName);
52     for (auto it = range.first; it != range.second; ++it) {
53         const MatrixXmlFile& matrixXmlFile = it->second;
54         if (matrixXmlFile.versionRange().contains(version)) {
55             if (!matrixXmlFile.overriddenPath().empty()) {
56                 return matrixXmlFile.overriddenPath();
57             }
58             return "/"s + (type() == SchemaType::DEVICE ? "vendor" : "system") + "/etc/" +
59                    xmlFileName + "_V" + std::to_string(matrixXmlFile.versionRange().majorVer) +
60                    "_" + std::to_string(matrixXmlFile.versionRange().maxMinor) + "." +
61                    to_string(matrixXmlFile.format());
62         }
63     }
64     return "";
65 }
66 
operator ==(const CompatibilityMatrix & lft,const CompatibilityMatrix & rgt)67 bool operator==(const CompatibilityMatrix &lft, const CompatibilityMatrix &rgt) {
68     return lft.mType == rgt.mType && lft.mHals == rgt.mHals && lft.mXmlFiles == rgt.mXmlFiles &&
69            (lft.mType != SchemaType::DEVICE || (lft.device.mVndk == rgt.device.mVndk)) &&
70            (lft.mType != SchemaType::FRAMEWORK ||
71             (lft.framework.mKernels == rgt.framework.mKernels &&
72              lft.framework.mSepolicy == rgt.framework.mSepolicy &&
73              lft.framework.mAvbMetaVersion == rgt.framework.mAvbMetaVersion));
74 }
75 
76 } // namespace vintf
77 } // namespace android
78