service.cpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /*
  2. * Copyright (C) 2021 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. #include <android/binder_manager.h>
  17. #include <android/binder_process.h>
  18. #include <binder/IServiceManager.h>
  19. #include <binder/ProcessState.h>
  20. #include <log/log.h>
  21. #include "Hardware.h"
  22. #include "Vibrator.h"
  23. using ::aidl::android::hardware::vibrator::HwApi;
  24. using ::aidl::android::hardware::vibrator::HwCal;
  25. using ::aidl::android::hardware::vibrator::Vibrator;
  26. using ::android::defaultServiceManager;
  27. using ::android::ProcessState;
  28. using ::android::sp;
  29. using ::android::String16;
  30. #if !defined(VIBRATOR_NAME)
  31. #define VIBRATOR_NAME "default"
  32. #endif
  33. int main() {
  34. auto svc = ndk::SharedRefBase::make<Vibrator>(std::make_unique<HwApi>(),
  35. std::make_unique<HwCal>());
  36. const auto svcName = std::string() + svc->descriptor + "/" + VIBRATOR_NAME;
  37. ProcessState::initWithDriver("/dev/vndbinder");
  38. auto svcBinder = svc->asBinder();
  39. binder_status_t status = AServiceManager_addService(svcBinder.get(), svcName.c_str());
  40. LOG_ALWAYS_FATAL_IF(status != STATUS_OK);
  41. ProcessState::self()->setThreadPoolMaxThreadCount(1);
  42. ProcessState::self()->startThreadPool();
  43. ABinderProcess_setThreadPoolMaxThreadCount(0);
  44. ABinderProcess_joinThreadPool();
  45. return EXIT_FAILURE; // should not reach
  46. }