summaryrefslogtreecommitdiff
path: root/fingerprint
diff options
context:
space:
mode:
authoreddielan <eddielan@google.com>2022-08-11 11:22:30 +0800
committerEddie Lan <eddielan@google.com>2022-08-30 09:50:44 +0000
commit1044dd4a6cc70cb64b0ed3a1b36a2036a23b6d72 (patch)
tree3cf1f636855ba06f9a29f0a7398e435e65b3e2de /fingerprint
parentce2ec891bb04a1a83f66e57715d6c152fe7358a4 (diff)
downloadgs201-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.bp27
-rw-r--r--fingerprint/fpc1540/fp_tool/fp_test.cpp200
-rw-r--r--fingerprint/fpc1540/fp_tool/fp_test.h16
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