1 /*
2  * Copyright (C) 2020 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 #include "Fingerprint.h"
18 #include "VirtualHal.h"
19 
20 #include <android-base/logging.h>
21 #include <android/binder_manager.h>
22 #include <android/binder_process.h>
23 
24 using aidl::android::hardware::biometrics::fingerprint::Fingerprint;
25 using aidl::android::hardware::biometrics::fingerprint::VirtualHal;
26 
main()27 int main() {
28     LOG(INFO) << "Fingerprint HAL started";
29     ABinderProcess_setThreadPoolMaxThreadCount(0);
30     std::shared_ptr<Fingerprint> hal = ndk::SharedRefBase::make<Fingerprint>();
31     auto binder = hal->asBinder();
32 
33     std::shared_ptr<VirtualHal> hal_ext = ndk::SharedRefBase::make<VirtualHal>(hal.get());
34     auto binder_ext = hal_ext->asBinder();
35 
36     if (hal->connected()) {
37         CHECK(STATUS_OK == AIBinder_setExtension(binder.get(), binder_ext.get()));
38         const std::string instance = std::string(Fingerprint::descriptor) + "/virtual";
39         binder_status_t status =
40                 AServiceManager_registerLazyService(binder.get(), instance.c_str());
41         CHECK_EQ(status, STATUS_OK);
42         AServiceManager_forceLazyServicesPersist(true);
43     } else {
44         LOG(ERROR) << "Fingerprint HAL is not connected";
45     }
46 
47     ABinderProcess_joinThreadPool();
48     return EXIT_FAILURE;  // should not reach
49 }
50