Home | History | Annotate | Download | only in hidl
      1 /*
      2  * Copyright (C) 2016 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 #ifndef ANDROID_HIDL_PASSTHROUGH_SUPPORT_H
     18 #define ANDROID_HIDL_PASSTHROUGH_SUPPORT_H
     19 
     20 #include <android/hidl/base/1.0/IBase.h>
     21 
     22 namespace android {
     23 namespace hardware {
     24 namespace details {
     25 
     26 /*
     27  * Wrap the given interface with the lowest BsChild possible. Will return the
     28  * argument directly if nullptr or isRemote().
     29  *
     30  * Note that 'static_cast<IFoo*>(wrapPassthrough(foo).get()) is guaranteed to work'
     31  * assuming that foo is an instance of IFoo.
     32  *
     33  * TODO(b/33754152): calling this method multiple times should not re-wrap.
     34  */
     35 sp<::android::hidl::base::V1_0::IBase> wrapPassthroughInternal(
     36     sp<::android::hidl::base::V1_0::IBase> iface);
     37 
     38 /**
     39  * Helper method which provides reasonable code to wrapPassthroughInternal
     40  * which can be used to call wrapPassthrough.
     41  */
     42 template <typename IType,
     43           typename = std::enable_if_t<std::is_same<i_tag, typename IType::_hidl_tag>::value>>
     44 sp<IType> wrapPassthrough(sp<IType> iface) {
     45     return static_cast<IType*>(wrapPassthroughInternal(iface).get());
     46 }
     47 
     48 }  // namespace details
     49 }  // namespace hardware
     50 }  // namespace android
     51 
     52 
     53 #endif  // ANDROID_HIDL_PASSTHROUGH_SUPPORT_H
     54