diff options
author | eddielan <eddielan@google.com> | 2022-08-11 11:22:30 +0800 |
---|---|---|
committer | Eddie Lan <eddielan@google.com> | 2022-08-30 09:50:44 +0000 |
commit | 1044dd4a6cc70cb64b0ed3a1b36a2036a23b6d72 (patch) | |
tree | 3cf1f636855ba06f9a29f0a7398e435e65b3e2de /fingerprint | |
parent | ce2ec891bb04a1a83f66e57715d6c152fe7358a4 (diff) | |
download | gs201-1044dd4a6cc70cb64b0ed3a1b36a2036a23b6d72.tar.gz |
fp_test: add command binary for fp test
(Cherry-pick from cdb78894f0909d58568d0063c48e1a0a1e7f4132)
Bug: 203016894
Test: Build pass, verify on device
Change-Id: Ib9a3f1d5642ec4c88e752d05529e2e429dbbc95c
Diffstat (limited to 'fingerprint')
-rw-r--r-- | fingerprint/fpc1540/fp_tool/Android.bp | 27 | ||||
-rw-r--r-- | fingerprint/fpc1540/fp_tool/fp_test.cpp | 200 | ||||
-rw-r--r-- | fingerprint/fpc1540/fp_tool/fp_test.h | 16 |
3 files changed, 243 insertions, 0 deletions
diff --git a/fingerprint/fpc1540/fp_tool/Android.bp b/fingerprint/fpc1540/fp_tool/Android.bp new file mode 100644 index 0000000..56477d4 --- /dev/null +++ b/fingerprint/fpc1540/fp_tool/Android.bp @@ -0,0 +1,27 @@ +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "device_google_gs101_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: ["device_google_gs201_license"], +} + +cc_binary { + srcs: [ + "fp_test.cpp" + ], + local_include_dirs: ["."], + + name: "fp_test", + shared_libs: [ + "liblog", + "libdl", + "libutils", + "libcutils", + "libhidlbase", + "android.hardware.biometrics.fingerprint@2.1" + ], + proprietary:true, + +} diff --git a/fingerprint/fpc1540/fp_tool/fp_test.cpp b/fingerprint/fpc1540/fp_tool/fp_test.cpp new file mode 100644 index 0000000..f7e7677 --- /dev/null +++ b/fingerprint/fpc1540/fp_tool/fp_test.cpp @@ -0,0 +1,200 @@ +#include <stdint.h> +#include <stdio.h> +#include <log/log.h> +#include "fp_test.h" +#include <cutils/properties.h> + +#define TAG "[FP_TEST] " +#define LOGI(format,...) ALOGI(TAG format,##__VA_ARGS__) +#define LOGD(format,...) ALOGD(TAG format,##__VA_ARGS__) +#define LOGE(format,...) ALOGE(TAG format,##__VA_ARGS__) +#define CLOGI(format,...) printf(TAG format,##__VA_ARGS__) +#define CLOGD(format,...) printf(TAG format,##__VA_ARGS__) +#define CLOGE(format,...) printf(TAG format,##__VA_ARGS__) + +#define LOGI_BOTH(format,...) { \ + ALOGI(TAG format,##__VA_ARGS__) \ + prinft(TAG format, ##__VA_ARGS__) \ +} \ + +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0])) +#define STRING_SIZE 32 + +#define FPS_SRV_PROP "fps_hal" +#define FPS_SRV_FULL_PROP "init.svc.fps_hal" +#define FPS_SRV_STATUS_PROP "vendor.fp.status" + +enum ErrorType { + OK, + ERROR +}; + +static const char* const cmdUsage[] = { + "-------fp_test tool usage--------", + "fp_test -e: Enable FPS service", + "fp_test -d: Disable FPS service", + "fp_test -i: Idle Mode", + "fp_test -n: Navigation Mode", + "fp_test -a: Authentication Mode", + "---------------------------------", +}; + +void toolUsage(void) { + int numCmdUsage = ARRAY_SIZE(cmdUsage); + for(int i = 0; i< numCmdUsage; i++) + CLOGI("%s\n",cmdUsage[i]); +} + +int checkParameter(int num, char **strArray) +{ + int ret = 0; + char parameter[STRING_SIZE] = {0,}; + if (num != 2 || (strlen(strArray[1]) > STRING_SIZE)) { + return -ERROR; + } + strcpy(parameter, strArray[1]); + if (!strncmp(parameter, "-a", sizeof("-a"))) { + CLOGI("Start Authentication Mode!\n"); + LOGI("Start Authentication Mode!\n"); + ret = 'a'; + } else if (!strncmp(parameter, "-n", sizeof("-n"))) { + CLOGI("Start Navigation Mode!\n"); + LOGI("Start Navigation Mode!\n"); + ret = 'n'; + } else if (!strncmp(parameter, "-i", sizeof("-i"))) { + CLOGI("Start Idle Mode!\n"); + LOGI("Start Idle Mode!\n"); + ret = 'n'; + } else if (!strncmp(parameter, "-e", sizeof("-e"))) { + CLOGI("Start enabling FPS service!\n"); + LOGI("Start enabling FPS service!\n"); + ret = 'e'; + } else if (!strncmp(parameter, "-d", sizeof("-d"))) { + CLOGI("Start disabling FPS service!\n"); + LOGI("Start disabling FPS service!\n"); + ret = 'd'; + } else { + ret = -ERROR; + } + return ret; +} + +int enable_disable_fps(bool set) +{ + int ret = 0; + // Set property to enable/disable fingerprint service + if (set == true) { + ret = property_set("ctl.start", FPS_SRV_PROP); + } else { + ret = property_set("ctl.stop", FPS_SRV_PROP); + } + + if (ret != 0) { + CLOGE("Failed to %s FPS service\n", set? "enable" : "disable"); + LOGE("Failed to %s FPS service\n", set? "enable" : "disable"); + return -ERROR; + } + + return ret; +} + +int run_auth_cmd() { + RequestStatus hidlRet; + uint64_t operationId = 0; + uint32_t gid = 0; + char tempbuf[PROPERTY_VALUE_MAX]; + + property_get(FPS_SRV_FULL_PROP, tempbuf, 0); + LOGE("%s : current fp service status is %s!\n",__func__, tempbuf); + if (!strncmp(tempbuf, "stopped", strlen("stopped"))) { + return -ERROR; + } + + sp<IBiometricsFingerprint> service = IBiometricsFingerprint::getService(); + if (service == nullptr) { + CLOGE("%s : Fail to get FingerprintService!\n",__func__); + LOGE("%s : Fail to get FingerprintService!\n",__func__); + return -ERROR; + } + + hidlRet = service->authenticate(operationId, gid); + if (hidlRet == RequestStatus::SYS_OK) { + return OK; + } else { + return -ERROR; + } +} + +int run_cancel_cmd() { + + RequestStatus hidlRet; + char tempbuf[PROPERTY_VALUE_MAX]; + + property_get(FPS_SRV_FULL_PROP, tempbuf, 0); + LOGE("%s : current fp service status is %s!\n",__func__, tempbuf); + if (!strncmp(tempbuf, "stopped", strlen("stopped"))) { + return -ERROR; + } + + sp<IBiometricsFingerprint> service = IBiometricsFingerprint::getService(); + if (service == nullptr) { + CLOGE("%s : Fail to get FingerprintService!\n",__func__); + LOGE("%s : Fail to get FingerprintService!\n",__func__); + return -ERROR; + } + + hidlRet = service->cancel(); + if (hidlRet == RequestStatus::SYS_OK) { + return OK; + } else { + return -ERROR; + } +} + +int main(int argc, char *argv[]) +{ + int input=0; + int32_t ret = 0; + LOGI("%s",__func__); + input = checkParameter(argc, argv); + if (input == -ERROR){ + LOGE("Invalid Parameter\n"); + CLOGE("Invalid Parameter\n"); + toolUsage(); + return -ERROR; + } + + switch (input) { + case 'e': + CLOGI("%s: Enable fingerprint service\n",__func__); + LOGI("%s: Enable fingerprint service\n",__func__); + ret = enable_disable_fps(true); + break; + case 'd': + CLOGI("%s: Disable fingerprint service\n",__func__); + LOGI("%s: Disable fingerprint service\n",__func__); + ret = enable_disable_fps(false); + break; + case 'a': + ret = run_auth_cmd(); + break; + // For the rear fingerprint module, calling cancel() will go to the + // navigation mode by default. + // For other device not enabling naivgation feature, default mode will + // be "Idle" by invoking cancel(). + case 'n': + case 'i': + default: + ret = run_cancel_cmd(); + break; + } + + if (ret != OK) + CLOGE("FP HIDL fail to excute cmd '%c'\n", input); + else + CLOGI("FP HIDL excute cmd '%c' successfully\n", input); + + return ret; + +} + diff --git a/fingerprint/fpc1540/fp_tool/fp_test.h b/fingerprint/fpc1540/fp_tool/fp_test.h new file mode 100644 index 0000000..15b3311 --- /dev/null +++ b/fingerprint/fpc1540/fp_tool/fp_test.h @@ -0,0 +1,16 @@ +#ifndef FP_TEST +#define FP_TEST + +#include <android/hardware/biometrics/fingerprint/2.1/IBiometricsFingerprint.h> +#include <android/hardware/biometrics/fingerprint/2.1/IBiometricsFingerprintClientCallback.h> + +using android::hardware::biometrics::fingerprint::V2_1::IBiometricsFingerprint; +using android::hardware::biometrics::fingerprint::V2_1::IBiometricsFingerprintClientCallback; +using android::hardware::biometrics::fingerprint::V2_1::RequestStatus; +using android::sp; + + +int main(int argc, char *argv[]); +void toolUsage(void); + +#endif //FP_TEST |