xref: /aosp_15_r20/system/libvintf/include/vintf/SerializeFlags.h (revision 70a7ec852fcefd15a4fb57f8f183a8b1c3aacb08)
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