forked from donjohanliebert/hardware_xiaomi
hidl: biometrics: fingerprint: Add multiple HAL loading support
* Support for sm8450, sm8350, sm6375, sm7325, sm7350, sm8250, sm7250, sm8150, sm6250, sm6150, sdm845, sdm710, msm8998, sdm660 Change-Id: I114640c8520c73213390ad35fa29d218e1852757
This commit is contained in:
parent
c3f110d5f8
commit
39bd52cad5
@ -15,6 +15,20 @@
|
||||
#include <inttypes.h>
|
||||
#include <unistd.h>
|
||||
|
||||
namespace {
|
||||
|
||||
typedef struct fingerprint_hal {
|
||||
const char* class_name;
|
||||
const bool is_udfps;
|
||||
} fingerprint_hal_t;
|
||||
|
||||
static const fingerprint_hal_t kModules[] = {
|
||||
{"fpc", false}, {"fpc_fod", true}, {"goodix", false}, {"goodix_fod", true},
|
||||
{"goodix_fod6", true}, {"silead", false}, {"syna", true},
|
||||
};
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
namespace android {
|
||||
namespace hardware {
|
||||
namespace biometrics {
|
||||
@ -31,9 +45,19 @@ BiometricsFingerprint* BiometricsFingerprint::sInstance = nullptr;
|
||||
|
||||
BiometricsFingerprint::BiometricsFingerprint() : mClientCallback(nullptr), mDevice(nullptr) {
|
||||
sInstance = this; // keep track of the most recent instance
|
||||
mDevice = openHal();
|
||||
for (auto& [class_name, is_udfps] : kModules) {
|
||||
mDevice = openHal(class_name);
|
||||
if (!mDevice) {
|
||||
ALOGE("Can't open HAL module, class %s", class_name);
|
||||
continue;
|
||||
}
|
||||
|
||||
ALOGI("Opened fingerprint HAL, class %s", class_name);
|
||||
mIsUdfps = is_udfps;
|
||||
break;
|
||||
}
|
||||
if (!mDevice) {
|
||||
ALOGE("Can't open HAL module");
|
||||
ALOGE("Can't open any HAL module");
|
||||
}
|
||||
}
|
||||
|
||||
@ -201,7 +225,7 @@ Return<RequestStatus> BiometricsFingerprint::authenticate(uint64_t operationId,
|
||||
}
|
||||
|
||||
Return<bool> BiometricsFingerprint::isUdfps(uint32_t /*sensorId*/) {
|
||||
return false;
|
||||
return mIsUdfps;
|
||||
}
|
||||
|
||||
Return<void> BiometricsFingerprint::onFingerDown(uint32_t /*x*/, uint32_t /*y*/, float /*minor*/,
|
||||
@ -220,11 +244,11 @@ IBiometricsFingerprint* BiometricsFingerprint::getInstance() {
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
fingerprint_device_t* BiometricsFingerprint::openHal() {
|
||||
fingerprint_device_t* BiometricsFingerprint::openHal(const char* class_name) {
|
||||
int err;
|
||||
const hw_module_t* hw_mdl = nullptr;
|
||||
ALOGD("Opening fingerprint hal library...");
|
||||
if (0 != (err = hw_get_module(FINGERPRINT_HARDWARE_MODULE_ID, &hw_mdl))) {
|
||||
if (0 != (err = hw_get_module_by_class(FINGERPRINT_HARDWARE_MODULE_ID, class_name, &hw_mdl))) {
|
||||
ALOGE("Can't open fingerprint HW Module, error: %d", err);
|
||||
return nullptr;
|
||||
}
|
||||
|
@ -63,7 +63,7 @@ struct BiometricsFingerprint : public IBiometricsFingerprint {
|
||||
Return<void> onFingerUp() override;
|
||||
|
||||
private:
|
||||
static fingerprint_device_t* openHal();
|
||||
static fingerprint_device_t* openHal(const char* class_name);
|
||||
static void notify(
|
||||
const fingerprint_msg_t* msg); /* Static callback for legacy HAL implementation */
|
||||
static Return<RequestStatus> ErrorFilter(int32_t error);
|
||||
@ -74,6 +74,7 @@ struct BiometricsFingerprint : public IBiometricsFingerprint {
|
||||
std::mutex mClientCallbackMutex;
|
||||
sp<IBiometricsFingerprintClientCallback> mClientCallback;
|
||||
fingerprint_device_t* mDevice;
|
||||
bool mIsUdfps;
|
||||
};
|
||||
|
||||
} // namespace implementation
|
||||
|
Loading…
Reference in New Issue
Block a user