201 lines
5.6 KiB
C++
201 lines
5.6 KiB
C++
#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;
|
|
|
|
}
|
|
|