sm8250-common: biometrics: Implement boosting on authentication

Change-Id: Ia9cde9f540a614ad700fb497288a2a986e924dbd
This commit is contained in:
Sebastiano Barezzi 2021-04-29 22:38:34 +02:00
parent a856c06112
commit 1b3fbae7b0
No known key found for this signature in database
GPG Key ID: 47760583F393BC44
4 changed files with 25 additions and 1 deletions

View File

@ -11,12 +11,14 @@ xiaomi_kona_biometrics_hal_binary {
], ],
shared_libs: [ shared_libs: [
"libbinder_ndk",
"libcutils", "libcutils",
"liblog", "liblog",
"libhidlbase", "libhidlbase",
"libhardware", "libhardware",
"libutils", "libutils",
"android.hardware.biometrics.fingerprint@2.1", "android.hardware.biometrics.fingerprint@2.1",
"android.hardware.power-ndk_platform",
"//hardware/xiaomi:vendor.xiaomi.hardware.fingerprintextension@1.0", "//hardware/xiaomi:vendor.xiaomi.hardware.fingerprintextension@1.0",
], ],

View File

@ -38,15 +38,24 @@ static const uint16_t kVersion = HARDWARE_MODULE_API_VERSION(2, 1);
// List of fingerprint HALs // List of fingerprint HALs
static const char *kHALClasses[HAL_CLASSES_SIZE] = {HAL_CLASSES}; static const char *kHALClasses[HAL_CLASSES_SIZE] = {HAL_CLASSES};
// Boost duration
static constexpr int kDefaultBoostDurationMs = 2000;
// Power AIDL instance name
static const std::string kPowerInstance = std::string(IPower::descriptor) + "/default";
using RequestStatus = using RequestStatus =
android::hardware::biometrics::fingerprint::V2_1::RequestStatus; android::hardware::biometrics::fingerprint::V2_1::RequestStatus;
BiometricsFingerprint *BiometricsFingerprint::sInstance = nullptr; BiometricsFingerprint *BiometricsFingerprint::sInstance = nullptr;
BiometricsFingerprint::BiometricsFingerprint() : mClientCallback(nullptr), mDevice(nullptr) { BiometricsFingerprint::BiometricsFingerprint() :
mClientCallback(nullptr), mPowerService(nullptr), mDevice(nullptr) {
int i; int i;
const char *class_name; const char *class_name;
sInstance = this; // keep track of the most recent instance sInstance = this; // keep track of the most recent instance
mPowerService = IPower::fromBinder(ndk::SpAIBinder(
AServiceManager_getService(kPowerInstance.c_str())));
for (i=0; i<HAL_CLASSES_SIZE; i++) { for (i=0; i<HAL_CLASSES_SIZE; i++) {
class_name = kHALClasses[i]; class_name = kHALClasses[i];
mDevice = openHal(class_name); mDevice = openHal(class_name);
@ -296,6 +305,7 @@ void BiometricsFingerprint::notify(const fingerprint_msg_t *msg) {
break; break;
case FINGERPRINT_ACQUIRED: { case FINGERPRINT_ACQUIRED: {
int32_t vendorCode = 0; int32_t vendorCode = 0;
sInstance->mPowerService->setBoost(Boost::INTERACTION, kDefaultBoostDurationMs);
FingerprintAcquiredInfo result = FingerprintAcquiredInfo result =
VendorAcquiredFilter(msg->data.acquired.acquired_info, &vendorCode); VendorAcquiredFilter(msg->data.acquired.acquired_info, &vendorCode);
ALOGD("onAcquired(%d)", result); ALOGD("onAcquired(%d)", result);

View File

@ -25,6 +25,9 @@
#include <hidl/Status.h> #include <hidl/Status.h>
#include <android/hardware/biometrics/fingerprint/2.1/IBiometricsFingerprint.h> #include <android/hardware/biometrics/fingerprint/2.1/IBiometricsFingerprint.h>
#include <vendor/xiaomi/hardware/fingerprintextension/1.0/IXiaomiFingerprint.h> #include <vendor/xiaomi/hardware/fingerprintextension/1.0/IXiaomiFingerprint.h>
#include <aidl/android/hardware/power/Boost.h>
#include <aidl/android/hardware/power/IPower.h>
#include <android/binder_manager.h>
namespace android { namespace android {
namespace hardware { namespace hardware {
@ -33,6 +36,8 @@ namespace fingerprint {
namespace V2_1 { namespace V2_1 {
namespace implementation { namespace implementation {
using ::aidl::android::hardware::power::Boost;
using ::aidl::android::hardware::power::IPower;
using ::android::hardware::biometrics::fingerprint::V2_1::IBiometricsFingerprint; using ::android::hardware::biometrics::fingerprint::V2_1::IBiometricsFingerprint;
using ::android::hardware::biometrics::fingerprint::V2_1::IBiometricsFingerprintClientCallback; using ::android::hardware::biometrics::fingerprint::V2_1::IBiometricsFingerprintClientCallback;
using ::android::hardware::biometrics::fingerprint::V2_1::RequestStatus; using ::android::hardware::biometrics::fingerprint::V2_1::RequestStatus;
@ -77,6 +82,7 @@ private:
std::mutex mClientCallbackMutex; std::mutex mClientCallbackMutex;
sp<IBiometricsFingerprintClientCallback> mClientCallback; sp<IBiometricsFingerprintClientCallback> mClientCallback;
std::shared_ptr<IPower> mPowerService;
xiaomi_fingerprint_device_t *mDevice; xiaomi_fingerprint_device_t *mDevice;
}; };

View File

@ -1,3 +1,9 @@
# Allow access to the HALs
hal_client_domain(hal_fingerprint_default, hal_power)
# Allow binder communication with hal_power_default
binder_call(hal_fingerprint_default, hal_power_default)
allow hal_fingerprint_default fingerprint_data_file:dir rw_dir_perms; allow hal_fingerprint_default fingerprint_data_file:dir rw_dir_perms;
allow hal_fingerprint_default fingerprint_data_file:file create_file_perms; allow hal_fingerprint_default fingerprint_data_file:file create_file_perms;