1*be431cd8SAndroid Build Coastguard Worker /*
2*be431cd8SAndroid Build Coastguard Worker * Copyright (C) 2020 The Android Open Source Project
3*be431cd8SAndroid Build Coastguard Worker *
4*be431cd8SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*be431cd8SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*be431cd8SAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*be431cd8SAndroid Build Coastguard Worker *
8*be431cd8SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*be431cd8SAndroid Build Coastguard Worker *
10*be431cd8SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*be431cd8SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*be431cd8SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*be431cd8SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*be431cd8SAndroid Build Coastguard Worker * limitations under the License.
15*be431cd8SAndroid Build Coastguard Worker */
16*be431cd8SAndroid Build Coastguard Worker #pragma once
17*be431cd8SAndroid Build Coastguard Worker #include <cutils/native_handle.h>
18*be431cd8SAndroid Build Coastguard Worker #include <limits>
19*be431cd8SAndroid Build Coastguard Worker #include <type_traits>
20*be431cd8SAndroid Build Coastguard Worker
21*be431cd8SAndroid Build Coastguard Worker #include <android/hardware/common/fmq/MQDescriptor.h>
22*be431cd8SAndroid Build Coastguard Worker #include <fmq/MQDescriptorBase.h>
23*be431cd8SAndroid Build Coastguard Worker
24*be431cd8SAndroid Build Coastguard Worker #include "AidlMQDescriptorShimBase.h"
25*be431cd8SAndroid Build Coastguard Worker
26*be431cd8SAndroid Build Coastguard Worker namespace android {
27*be431cd8SAndroid Build Coastguard Worker namespace details {
28*be431cd8SAndroid Build Coastguard Worker
29*be431cd8SAndroid Build Coastguard Worker using ::android::hardware::MQFlavor;
30*be431cd8SAndroid Build Coastguard Worker
31*be431cd8SAndroid Build Coastguard Worker struct BackendTypesStoreCpp {
32*be431cd8SAndroid Build Coastguard Worker template <typename T, typename flavor>
33*be431cd8SAndroid Build Coastguard Worker using MQDescriptorType = android::hardware::common::fmq::MQDescriptor<T, flavor>;
34*be431cd8SAndroid Build Coastguard Worker using SynchronizedReadWriteType = android::hardware::common::fmq::SynchronizedReadWrite;
35*be431cd8SAndroid Build Coastguard Worker using UnsynchronizedWriteType = android::hardware::common::fmq::UnsynchronizedWrite;
36*be431cd8SAndroid Build Coastguard Worker };
37*be431cd8SAndroid Build Coastguard Worker
38*be431cd8SAndroid Build Coastguard Worker template <typename T, MQFlavor flavor>
39*be431cd8SAndroid Build Coastguard Worker struct AidlMQDescriptorShimCpp : public AidlMQDescriptorShimBase<T, flavor, BackendTypesStoreCpp> {
40*be431cd8SAndroid Build Coastguard Worker // Takes ownership of handle
41*be431cd8SAndroid Build Coastguard Worker AidlMQDescriptorShimCpp(const std::vector<android::hardware::GrantorDescriptor>& grantors,
42*be431cd8SAndroid Build Coastguard Worker native_handle_t* nHandle, size_t size);
43*be431cd8SAndroid Build Coastguard Worker
44*be431cd8SAndroid Build Coastguard Worker // Takes ownership of handle
45*be431cd8SAndroid Build Coastguard Worker AidlMQDescriptorShimCpp(
46*be431cd8SAndroid Build Coastguard Worker const android::hardware::common::fmq::MQDescriptor<
47*be431cd8SAndroid Build Coastguard Worker T, typename std::conditional<
48*be431cd8SAndroid Build Coastguard Worker flavor == hardware::kSynchronizedReadWrite,
49*be431cd8SAndroid Build Coastguard Worker android::hardware::common::fmq::SynchronizedReadWrite,
50*be431cd8SAndroid Build Coastguard Worker android::hardware::common::fmq::UnsynchronizedWrite>::type>& desc);
51*be431cd8SAndroid Build Coastguard Worker
52*be431cd8SAndroid Build Coastguard Worker // Takes ownership of handle
53*be431cd8SAndroid Build Coastguard Worker AidlMQDescriptorShimCpp(size_t bufferSize, native_handle_t* nHandle, size_t messageSize,
54*be431cd8SAndroid Build Coastguard Worker bool configureEventFlag = false);
55*be431cd8SAndroid Build Coastguard Worker
AidlMQDescriptorShimCppAidlMQDescriptorShimCpp56*be431cd8SAndroid Build Coastguard Worker explicit AidlMQDescriptorShimCpp(const AidlMQDescriptorShimCpp& other)
57*be431cd8SAndroid Build Coastguard Worker : AidlMQDescriptorShimCpp(0, nullptr, 0) {
58*be431cd8SAndroid Build Coastguard Worker *this = other;
59*be431cd8SAndroid Build Coastguard Worker }
60*be431cd8SAndroid Build Coastguard Worker };
61*be431cd8SAndroid Build Coastguard Worker
62*be431cd8SAndroid Build Coastguard Worker template <typename T, MQFlavor flavor>
AidlMQDescriptorShimCpp(const android::hardware::common::fmq::MQDescriptor<T,typename std::conditional<flavor==hardware::kSynchronizedReadWrite,android::hardware::common::fmq::SynchronizedReadWrite,android::hardware::common::fmq::UnsynchronizedWrite>::type> & desc)63*be431cd8SAndroid Build Coastguard Worker AidlMQDescriptorShimCpp<T, flavor>::AidlMQDescriptorShimCpp(
64*be431cd8SAndroid Build Coastguard Worker const android::hardware::common::fmq::MQDescriptor<
65*be431cd8SAndroid Build Coastguard Worker T, typename std::conditional<
66*be431cd8SAndroid Build Coastguard Worker flavor == hardware::kSynchronizedReadWrite,
67*be431cd8SAndroid Build Coastguard Worker android::hardware::common::fmq::SynchronizedReadWrite,
68*be431cd8SAndroid Build Coastguard Worker android::hardware::common::fmq::UnsynchronizedWrite>::type>& desc)
69*be431cd8SAndroid Build Coastguard Worker : AidlMQDescriptorShimBase<T, flavor, BackendTypesStoreCpp>(desc) {}
70*be431cd8SAndroid Build Coastguard Worker
71*be431cd8SAndroid Build Coastguard Worker template <typename T, MQFlavor flavor>
AidlMQDescriptorShimCpp(const std::vector<android::hardware::GrantorDescriptor> & grantors,native_handle_t * nhandle,size_t size)72*be431cd8SAndroid Build Coastguard Worker AidlMQDescriptorShimCpp<T, flavor>::AidlMQDescriptorShimCpp(
73*be431cd8SAndroid Build Coastguard Worker const std::vector<android::hardware::GrantorDescriptor>& grantors, native_handle_t* nhandle,
74*be431cd8SAndroid Build Coastguard Worker size_t size)
75*be431cd8SAndroid Build Coastguard Worker : AidlMQDescriptorShimBase<T, flavor, BackendTypesStoreCpp>(grantors, nhandle, size) {}
76*be431cd8SAndroid Build Coastguard Worker
77*be431cd8SAndroid Build Coastguard Worker template <typename T, MQFlavor flavor>
AidlMQDescriptorShimCpp(size_t bufferSize,native_handle_t * nHandle,size_t messageSize,bool configureEventFlag)78*be431cd8SAndroid Build Coastguard Worker AidlMQDescriptorShimCpp<T, flavor>::AidlMQDescriptorShimCpp(size_t bufferSize,
79*be431cd8SAndroid Build Coastguard Worker native_handle_t* nHandle,
80*be431cd8SAndroid Build Coastguard Worker size_t messageSize,
81*be431cd8SAndroid Build Coastguard Worker bool configureEventFlag)
82*be431cd8SAndroid Build Coastguard Worker : AidlMQDescriptorShimBase<T, flavor, BackendTypesStoreCpp>(bufferSize, nHandle, messageSize,
83*be431cd8SAndroid Build Coastguard Worker configureEventFlag) {}
84*be431cd8SAndroid Build Coastguard Worker
85*be431cd8SAndroid Build Coastguard Worker } // namespace details
86*be431cd8SAndroid Build Coastguard Worker } // namespace android
87