/* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include #include #include #ifndef ANDROID_HIDL_LEGACY_SUPPORT_H #define ANDROID_HIDL_LEGACY_SUPPORT_H namespace android { namespace hardware { /** * Registers passthrough service implementation. */ template __attribute__((warn_unused_result)) status_t registerPassthroughServiceImplementation( std::string name = "default") { sp service = Interface::getService(name, true /* getStub */); if (service == nullptr) { ALOGE("Could not get passthrough implementation for %s/%s.", Interface::descriptor, name.c_str()); return EXIT_FAILURE; } LOG_FATAL_IF(service->isRemote(), "Implementation of %s/%s is remote!", Interface::descriptor, name.c_str()); status_t status = service->registerAsService(name); if (status == OK) { ALOGI("Registration complete for %s/%s.", Interface::descriptor, name.c_str()); } else { ALOGE("Could not register service %s/%s (%d).", Interface::descriptor, name.c_str(), status); } return status; } /** * Creates default passthrough service implementation. This method never returns. * * Return value is exit status. */ template __attribute__((warn_unused_result)) status_t defaultPassthroughServiceImplementation(std::string name, size_t maxThreads = 1) { configureRpcThreadpool(maxThreads, true); status_t result = registerPassthroughServiceImplementation(name); if (result != OK) { return result; } joinRpcThreadpool(); return UNKNOWN_ERROR; } template __attribute__((warn_unused_result)) status_t defaultPassthroughServiceImplementation(size_t maxThreads = 1) { return defaultPassthroughServiceImplementation("default", maxThreads); } } // namespace hardware } // namespace android #endif // ANDROID_HIDL_LEGACY_SUPPORT_H