#include #include #include #include "fp_test.h" #include #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 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 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; }