diff --git a/biometrics/fingerprint/aidl/default/Android.bp b/biometrics/fingerprint/aidl/default/Android.bp new file mode 100644 index 0000000000..f2536d4ba8 --- /dev/null +++ b/biometrics/fingerprint/aidl/default/Android.bp @@ -0,0 +1,17 @@ +cc_binary { + name: "android.hardware.biometrics.fingerprint-service.example", + relative_install_path: "hw", + init_rc: ["fingerprint-default.rc"], + vintf_fragments: ["fingerprint-default.xml"], + vendor: true, + shared_libs: [ + "libbase", + "libbinder_ndk", + "android.hardware.biometrics.fingerprint-ndk_platform", + ], + srcs: [ + "main.cpp", + "Fingerprint.cpp", + "Session.cpp", + ], +} diff --git a/biometrics/fingerprint/aidl/default/Fingerprint.cpp b/biometrics/fingerprint/aidl/default/Fingerprint.cpp new file mode 100644 index 0000000000..6f9e3a0628 --- /dev/null +++ b/biometrics/fingerprint/aidl/default/Fingerprint.cpp @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2020 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 "Fingerprint.h" +#include "Session.h" + +namespace aidl::android::hardware::biometrics::fingerprint { + +ndk::ScopedAStatus Fingerprint::getSensorProps(std::vector* /*return_val*/) { + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus Fingerprint::createSession(int32_t /*sensorId*/, int32_t /*userId*/, + const std::shared_ptr& cb, + std::shared_ptr* return_val) { + *return_val = SharedRefBase::make(cb); + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus Fingerprint::setResetLockoutCallback( + const std::shared_ptr& /*cb*/) { + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus Fingerprint::generateChallenge( + int32_t /*sensorId*/, int32_t /*userId*/, int64_t /*keystoreOperationId*/, + int32_t /*timeoutSec*/, const std::shared_ptr& /*cb*/) { + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus Fingerprint::revokeChallenge( + int32_t /*sensorId*/, int32_t /*userId*/, + const std::shared_ptr& /*cb*/) { + return ndk::ScopedAStatus::ok(); +} + +} // namespace aidl::android::hardware::biometrics::fingerprint diff --git a/biometrics/fingerprint/aidl/default/Fingerprint.h b/biometrics/fingerprint/aidl/default/Fingerprint.h new file mode 100644 index 0000000000..9f04893592 --- /dev/null +++ b/biometrics/fingerprint/aidl/default/Fingerprint.h @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2020 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. + */ + +#pragma once + +#include + +namespace aidl::android::hardware::biometrics::fingerprint { + +class Fingerprint : public BnFingerprint { + public: + ndk::ScopedAStatus getSensorProps(std::vector* _aidl_return) override; + + ndk::ScopedAStatus createSession(int32_t sensorId, int32_t userId, + const std::shared_ptr& cb, + std::shared_ptr* _aidl_return) override; + + ndk::ScopedAStatus setResetLockoutCallback( + const std::shared_ptr& cb) override; + + ndk::ScopedAStatus generateChallenge( + int32_t sensorId, int32_t userId, int64_t keystoreOperationId, int32_t timeoutSec, + const std::shared_ptr& cb) override; + + ndk::ScopedAStatus revokeChallenge( + int32_t sensorId, int32_t userId, + const std::shared_ptr& cb) override; +}; + +} // namespace aidl::android::hardware::biometrics::fingerprint diff --git a/biometrics/fingerprint/aidl/default/Session.cpp b/biometrics/fingerprint/aidl/default/Session.cpp new file mode 100644 index 0000000000..5eb3134ec1 --- /dev/null +++ b/biometrics/fingerprint/aidl/default/Session.cpp @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2020 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 "Session.h" + +namespace aidl::android::hardware::biometrics::fingerprint { + +class CancellationSignal : public BnCancellationSignal { + public: + ndk::ScopedAStatus cancel() override { return ndk::ScopedAStatus::ok(); } +}; + +Session::Session(std::shared_ptr cb) : cb_(std::move(cb)) {} + +ndk::ScopedAStatus Session::enroll(int32_t /*cookie*/, const keymaster::HardwareAuthToken& /*hat*/, + std::shared_ptr* /*return_val*/) { + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus Session::authenticate(int32_t /*cookie*/, int64_t /*keystoreOperationId*/, + std::shared_ptr* return_val) { + if (cb_) { + cb_->onStateChanged(0, SessionState::AUTHENTICATING); + } + *return_val = SharedRefBase::make(); + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus Session::detectInteraction( + int32_t /*cookie*/, std::shared_ptr* /*return_val*/) { + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus Session::enumerateEnrollments(int32_t /*cookie*/) { + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus Session::removeEnrollments(int32_t /*cookie*/, + const std::vector& /*enrollmentIds*/) { + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus Session::getAuthenticatorId(int32_t /*cookie*/) { + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus Session::resetLockout(int32_t /*cookie*/, + const keymaster::HardwareAuthToken& /*hat*/) { + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus Session::onPointerDown(int32_t /*pointerId*/, int32_t /*x*/, int32_t /*y*/, + float /*minor*/, float /*major*/) { + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus Session::onPointerUp(int32_t /*pointerId*/) { + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus Session::onUiReady() { + return ndk::ScopedAStatus::ok(); +} + +} // namespace aidl::android::hardware::biometrics::fingerprint diff --git a/biometrics/fingerprint/aidl/default/Session.h b/biometrics/fingerprint/aidl/default/Session.h new file mode 100644 index 0000000000..69950fb8d3 --- /dev/null +++ b/biometrics/fingerprint/aidl/default/Session.h @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2020 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. + */ + +#pragma once + +#include +#include + +namespace aidl::android::hardware::biometrics::fingerprint { + +namespace aidl::android::hardware::keymaster = keymaster; + +class Session : public BnSession { + public: + explicit Session(std::shared_ptr cb); + + ndk::ScopedAStatus enroll(int32_t cookie, const keymaster::HardwareAuthToken& hat, + std::shared_ptr* return_val) override; + + ndk::ScopedAStatus authenticate(int32_t cookie, int64_t keystoreOperationId, + std::shared_ptr* return_val) override; + + ndk::ScopedAStatus detectInteraction(int32_t cookie, + std::shared_ptr* return_val) override; + + ndk::ScopedAStatus enumerateEnrollments(int32_t cookie) override; + + ndk::ScopedAStatus removeEnrollments(int32_t cookie, + const std::vector& enrollmentIds) override; + + ndk::ScopedAStatus getAuthenticatorId(int32_t cookie) override; + + ndk::ScopedAStatus resetLockout(int32_t cookie, + const keymaster::HardwareAuthToken& hat) override; + + ndk::ScopedAStatus onPointerDown(int32_t pointerId, int32_t x, int32_t y, float minor, + float major) override; + + ndk::ScopedAStatus onPointerUp(int32_t pointerId) override; + + ndk::ScopedAStatus onUiReady() override; + + private: + std::shared_ptr cb_; +}; + +} // namespace aidl::android::hardware::biometrics::fingerprint diff --git a/biometrics/fingerprint/aidl/default/fingerprint-default.rc b/biometrics/fingerprint/aidl/default/fingerprint-default.rc new file mode 100644 index 0000000000..eb62c567fd --- /dev/null +++ b/biometrics/fingerprint/aidl/default/fingerprint-default.rc @@ -0,0 +1,5 @@ +service vendor.fingerprint-default /vendor/bin/hw/android.hardware.biometrics.fingerprint-service.example + class hal + user nobody + group nobody + diff --git a/biometrics/fingerprint/aidl/default/fingerprint-default.xml b/biometrics/fingerprint/aidl/default/fingerprint-default.xml new file mode 100644 index 0000000000..89da765616 --- /dev/null +++ b/biometrics/fingerprint/aidl/default/fingerprint-default.xml @@ -0,0 +1,6 @@ + + + android.hardware.biometrics.fingerprint + IFingerprint/default + + diff --git a/biometrics/fingerprint/aidl/default/main.cpp b/biometrics/fingerprint/aidl/default/main.cpp new file mode 100644 index 0000000000..058a008370 --- /dev/null +++ b/biometrics/fingerprint/aidl/default/main.cpp @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2020 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 "Fingerprint.h" + +#include +#include +#include + +using aidl::android::hardware::biometrics::fingerprint::Fingerprint; + +int main() { + ABinderProcess_setThreadPoolMaxThreadCount(0); + std::shared_ptr hal = ndk::SharedRefBase::make(); + + const std::string instance = std::string(Fingerprint::descriptor) + "/default"; + binder_status_t status = AServiceManager_addService(hal->asBinder().get(), instance.c_str()); + CHECK(status == STATUS_OK); + + ABinderProcess_joinThreadPool(); + return EXIT_FAILURE; // should not reach +}