1*70a7ec85SAndroid Build Coastguard Worker /* 2*70a7ec85SAndroid Build Coastguard Worker * Copyright (C) 2017 The Android Open Source Project 3*70a7ec85SAndroid Build Coastguard Worker * 4*70a7ec85SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*70a7ec85SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*70a7ec85SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*70a7ec85SAndroid Build Coastguard Worker * 8*70a7ec85SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*70a7ec85SAndroid Build Coastguard Worker * 10*70a7ec85SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*70a7ec85SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*70a7ec85SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*70a7ec85SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*70a7ec85SAndroid Build Coastguard Worker * limitations under the License. 15*70a7ec85SAndroid Build Coastguard Worker */ 16*70a7ec85SAndroid Build Coastguard Worker 17*70a7ec85SAndroid Build Coastguard Worker #ifndef ANDROID_VINTF_SERIALIZE_FLAGS_H 18*70a7ec85SAndroid Build Coastguard Worker #define ANDROID_VINTF_SERIALIZE_FLAGS_H 19*70a7ec85SAndroid Build Coastguard Worker 20*70a7ec85SAndroid Build Coastguard Worker #include <stdint.h> 21*70a7ec85SAndroid Build Coastguard Worker 22*70a7ec85SAndroid Build Coastguard Worker namespace android { 23*70a7ec85SAndroid Build Coastguard Worker namespace vintf { 24*70a7ec85SAndroid Build Coastguard Worker 25*70a7ec85SAndroid Build Coastguard Worker namespace SerializeFlags { 26*70a7ec85SAndroid Build Coastguard Worker 27*70a7ec85SAndroid Build Coastguard Worker class Type { 28*70a7ec85SAndroid Build Coastguard Worker public: Type(uint32_t value)29*70a7ec85SAndroid Build Coastguard Worker explicit constexpr Type(uint32_t value) : mValue(value) {} 30*70a7ec85SAndroid Build Coastguard Worker 31*70a7ec85SAndroid Build Coastguard Worker #define VINTF_SERIALIZE_FLAGS_FIELD(name, bit) \ 32*70a7ec85SAndroid Build Coastguard Worker constexpr Type enable##name() const { return Type(mValue | (1 << bit)); } \ 33*70a7ec85SAndroid Build Coastguard Worker constexpr Type disable##name() const { return Type(mValue & ~(1 << bit)); } \ 34*70a7ec85SAndroid Build Coastguard Worker constexpr bool is##name##Enabled() const { return mValue & (1 << bit); } 35*70a7ec85SAndroid Build Coastguard Worker 36*70a7ec85SAndroid Build Coastguard Worker VINTF_SERIALIZE_FLAGS_FIELD(Hals, 0) 37*70a7ec85SAndroid Build Coastguard Worker VINTF_SERIALIZE_FLAGS_FIELD(Avb, 1) 38*70a7ec85SAndroid Build Coastguard Worker VINTF_SERIALIZE_FLAGS_FIELD(Sepolicy, 2) 39*70a7ec85SAndroid Build Coastguard Worker VINTF_SERIALIZE_FLAGS_FIELD(Vndk, 3) 40*70a7ec85SAndroid Build Coastguard Worker VINTF_SERIALIZE_FLAGS_FIELD(Kernel, 4) 41*70a7ec85SAndroid Build Coastguard Worker VINTF_SERIALIZE_FLAGS_FIELD(XmlFiles, 5) 42*70a7ec85SAndroid Build Coastguard Worker VINTF_SERIALIZE_FLAGS_FIELD(Ssdk, 6) 43*70a7ec85SAndroid Build Coastguard Worker VINTF_SERIALIZE_FLAGS_FIELD(Fqname, 7) 44*70a7ec85SAndroid Build Coastguard Worker VINTF_SERIALIZE_FLAGS_FIELD(KernelConfigs, 8) 45*70a7ec85SAndroid Build Coastguard Worker VINTF_SERIALIZE_FLAGS_FIELD(KernelMinorRevision, 9) 46*70a7ec85SAndroid Build Coastguard Worker VINTF_SERIALIZE_FLAGS_FIELD(MetaVersion, 10) 47*70a7ec85SAndroid Build Coastguard Worker VINTF_SERIALIZE_FLAGS_FIELD(SchemaType, 11) 48*70a7ec85SAndroid Build Coastguard Worker 49*70a7ec85SAndroid Build Coastguard Worker #undef VINTF_SERIALIZE_FLAGS_FIELD 50*70a7ec85SAndroid Build Coastguard Worker 51*70a7ec85SAndroid Build Coastguard Worker private: 52*70a7ec85SAndroid Build Coastguard Worker uint32_t mValue; 53*70a7ec85SAndroid Build Coastguard Worker }; 54*70a7ec85SAndroid Build Coastguard Worker 55*70a7ec85SAndroid Build Coastguard Worker constexpr Type EVERYTHING = Type(~0); 56*70a7ec85SAndroid Build Coastguard Worker constexpr Type NO_HALS = EVERYTHING.disableHals(); 57*70a7ec85SAndroid Build Coastguard Worker constexpr Type NO_AVB = EVERYTHING.disableAvb(); 58*70a7ec85SAndroid Build Coastguard Worker constexpr Type NO_SEPOLICY = EVERYTHING.disableSepolicy(); 59*70a7ec85SAndroid Build Coastguard Worker constexpr Type NO_VNDK = EVERYTHING.disableVndk(); 60*70a7ec85SAndroid Build Coastguard Worker constexpr Type NO_KERNEL = EVERYTHING.disableKernel(); 61*70a7ec85SAndroid Build Coastguard Worker constexpr Type NO_XMLFILES = EVERYTHING.disableXmlFiles(); 62*70a7ec85SAndroid Build Coastguard Worker constexpr Type NO_SSDK = EVERYTHING.disableSsdk(); 63*70a7ec85SAndroid Build Coastguard Worker constexpr Type NO_FQNAME = EVERYTHING.disableFqname(); 64*70a7ec85SAndroid Build Coastguard Worker constexpr Type NO_KERNEL_CONFIGS = EVERYTHING.disableKernelConfigs(); 65*70a7ec85SAndroid Build Coastguard Worker constexpr Type NO_KERNEL_MINOR_REVISION = EVERYTHING.disableKernelMinorRevision(); 66*70a7ec85SAndroid Build Coastguard Worker 67*70a7ec85SAndroid Build Coastguard Worker constexpr Type NO_TAGS = Type(0).enableMetaVersion().enableSchemaType(); 68*70a7ec85SAndroid Build Coastguard Worker constexpr Type HALS_ONLY = NO_TAGS.enableHals().enableFqname(); // <hal> with <fqname> 69*70a7ec85SAndroid Build Coastguard Worker constexpr Type XMLFILES_ONLY = NO_TAGS.enableXmlFiles(); 70*70a7ec85SAndroid Build Coastguard Worker constexpr Type SEPOLICY_ONLY = NO_TAGS.enableSepolicy(); 71*70a7ec85SAndroid Build Coastguard Worker constexpr Type VNDK_ONLY = NO_TAGS.enableVndk(); 72*70a7ec85SAndroid Build Coastguard Worker constexpr Type HALS_NO_FQNAME = NO_TAGS.enableHals(); // <hal> without <fqname> 73*70a7ec85SAndroid Build Coastguard Worker constexpr Type SSDK_ONLY = NO_TAGS.enableSsdk(); 74*70a7ec85SAndroid Build Coastguard Worker 75*70a7ec85SAndroid Build Coastguard Worker // tests 76*70a7ec85SAndroid Build Coastguard Worker static_assert(EVERYTHING.isHalsEnabled(), ""); 77*70a7ec85SAndroid Build Coastguard Worker static_assert(EVERYTHING.isMetaVersionEnabled(), ""); 78*70a7ec85SAndroid Build Coastguard Worker static_assert(!NO_HALS.isHalsEnabled(), ""); 79*70a7ec85SAndroid Build Coastguard Worker static_assert(NO_HALS.isAvbEnabled(), ""); 80*70a7ec85SAndroid Build Coastguard Worker static_assert(NO_HALS.isMetaVersionEnabled(), ""); 81*70a7ec85SAndroid Build Coastguard Worker static_assert(!NO_TAGS.isHalsEnabled(), ""); 82*70a7ec85SAndroid Build Coastguard Worker static_assert(NO_TAGS.isMetaVersionEnabled(), ""); 83*70a7ec85SAndroid Build Coastguard Worker static_assert(HALS_ONLY.isHalsEnabled(), ""); 84*70a7ec85SAndroid Build Coastguard Worker static_assert(!HALS_ONLY.isAvbEnabled(), ""); 85*70a7ec85SAndroid Build Coastguard Worker static_assert(HALS_ONLY.isMetaVersionEnabled(), ""); 86*70a7ec85SAndroid Build Coastguard Worker 87*70a7ec85SAndroid Build Coastguard Worker } // namespace SerializeFlags 88*70a7ec85SAndroid Build Coastguard Worker } // namespace vintf 89*70a7ec85SAndroid Build Coastguard Worker } // namespace android 90*70a7ec85SAndroid Build Coastguard Worker 91*70a7ec85SAndroid Build Coastguard Worker #endif // ANDROID_VINTF_SERIALIZE_FLAGS_H 92