1 #include <stdint.h>
2 #include <stdio.h>
3 #include <log/log.h>
4 #include "fp_test.h"
5 #include <cutils/properties.h>
6
7 #define TAG "[FP_TEST] "
8 #define LOGI(format,...) ALOGI(TAG format,##__VA_ARGS__)
9 #define LOGD(format,...) ALOGD(TAG format,##__VA_ARGS__)
10 #define LOGE(format,...) ALOGE(TAG format,##__VA_ARGS__)
11 #define CLOGI(format,...) printf(TAG format,##__VA_ARGS__)
12 #define CLOGD(format,...) printf(TAG format,##__VA_ARGS__)
13 #define CLOGE(format,...) printf(TAG format,##__VA_ARGS__)
14
15 #define LOGI_BOTH(format,...) { \
16 ALOGI(TAG format,##__VA_ARGS__) \
17 prinft(TAG format, ##__VA_ARGS__) \
18 } \
19
20 #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
21 #define STRING_SIZE 32
22
23 #define FPS_SRV_PROP "fps_hal"
24 #define FPS_SRV_FULL_PROP "init.svc.fps_hal"
25 #define FPS_SRV_STATUS_PROP "vendor.fp.status"
26
27 enum ErrorType {
28 OK,
29 ERROR
30 };
31
32 static const char* const cmdUsage[] = {
33 "-------fp_test tool usage--------",
34 "fp_test -e: Enable FPS service",
35 "fp_test -d: Disable FPS service",
36 "fp_test -i: Idle Mode",
37 "fp_test -n: Navigation Mode",
38 "fp_test -a: Authentication Mode",
39 "---------------------------------",
40 };
41
toolUsage(void)42 void toolUsage(void) {
43 int numCmdUsage = ARRAY_SIZE(cmdUsage);
44 for(int i = 0; i< numCmdUsage; i++)
45 CLOGI("%s\n",cmdUsage[i]);
46 }
47
checkParameter(int num,char ** strArray)48 int checkParameter(int num, char **strArray)
49 {
50 int ret = 0;
51 char parameter[STRING_SIZE] = {0,};
52 if (num != 2 || (strlen(strArray[1]) > STRING_SIZE)) {
53 return -ERROR;
54 }
55 strcpy(parameter, strArray[1]);
56 if (!strncmp(parameter, "-a", sizeof("-a"))) {
57 CLOGI("Start Authentication Mode!\n");
58 LOGI("Start Authentication Mode!\n");
59 ret = 'a';
60 } else if (!strncmp(parameter, "-n", sizeof("-n"))) {
61 CLOGI("Start Navigation Mode!\n");
62 LOGI("Start Navigation Mode!\n");
63 ret = 'n';
64 } else if (!strncmp(parameter, "-i", sizeof("-i"))) {
65 CLOGI("Start Idle Mode!\n");
66 LOGI("Start Idle Mode!\n");
67 ret = 'n';
68 } else if (!strncmp(parameter, "-e", sizeof("-e"))) {
69 CLOGI("Start enabling FPS service!\n");
70 LOGI("Start enabling FPS service!\n");
71 ret = 'e';
72 } else if (!strncmp(parameter, "-d", sizeof("-d"))) {
73 CLOGI("Start disabling FPS service!\n");
74 LOGI("Start disabling FPS service!\n");
75 ret = 'd';
76 } else {
77 ret = -ERROR;
78 }
79 return ret;
80 }
81
enable_disable_fps(bool set)82 int enable_disable_fps(bool set)
83 {
84 int ret = 0;
85 // Set property to enable/disable fingerprint service
86 if (set == true) {
87 ret = property_set("ctl.start", FPS_SRV_PROP);
88 } else {
89 ret = property_set("ctl.stop", FPS_SRV_PROP);
90 }
91
92 if (ret != 0) {
93 CLOGE("Failed to %s FPS service\n", set? "enable" : "disable");
94 LOGE("Failed to %s FPS service\n", set? "enable" : "disable");
95 return -ERROR;
96 }
97
98 return ret;
99 }
100
run_auth_cmd()101 int run_auth_cmd() {
102 RequestStatus hidlRet;
103 uint64_t operationId = 0;
104 uint32_t gid = 0;
105 char tempbuf[PROPERTY_VALUE_MAX];
106
107 property_get(FPS_SRV_FULL_PROP, tempbuf, 0);
108 LOGE("%s : current fp service status is %s!\n",__func__, tempbuf);
109 if (!strncmp(tempbuf, "stopped", strlen("stopped"))) {
110 return -ERROR;
111 }
112
113 sp<IBiometricsFingerprint> service = IBiometricsFingerprint::getService();
114 if (service == nullptr) {
115 CLOGE("%s : Fail to get FingerprintService!\n",__func__);
116 LOGE("%s : Fail to get FingerprintService!\n",__func__);
117 return -ERROR;
118 }
119
120 hidlRet = service->authenticate(operationId, gid);
121 if (hidlRet == RequestStatus::SYS_OK) {
122 return OK;
123 } else {
124 return -ERROR;
125 }
126 }
127
run_cancel_cmd()128 int run_cancel_cmd() {
129
130 RequestStatus hidlRet;
131 char tempbuf[PROPERTY_VALUE_MAX];
132
133 property_get(FPS_SRV_FULL_PROP, tempbuf, 0);
134 LOGE("%s : current fp service status is %s!\n",__func__, tempbuf);
135 if (!strncmp(tempbuf, "stopped", strlen("stopped"))) {
136 return -ERROR;
137 }
138
139 sp<IBiometricsFingerprint> service = IBiometricsFingerprint::getService();
140 if (service == nullptr) {
141 CLOGE("%s : Fail to get FingerprintService!\n",__func__);
142 LOGE("%s : Fail to get FingerprintService!\n",__func__);
143 return -ERROR;
144 }
145
146 hidlRet = service->cancel();
147 if (hidlRet == RequestStatus::SYS_OK) {
148 return OK;
149 } else {
150 return -ERROR;
151 }
152 }
153
main(int argc,char * argv[])154 int main(int argc, char *argv[])
155 {
156 int input=0;
157 int32_t ret = 0;
158 LOGI("%s",__func__);
159 input = checkParameter(argc, argv);
160 if (input == -ERROR){
161 LOGE("Invalid Parameter\n");
162 CLOGE("Invalid Parameter\n");
163 toolUsage();
164 return -ERROR;
165 }
166
167 switch (input) {
168 case 'e':
169 CLOGI("%s: Enable fingerprint service\n",__func__);
170 LOGI("%s: Enable fingerprint service\n",__func__);
171 ret = enable_disable_fps(true);
172 break;
173 case 'd':
174 CLOGI("%s: Disable fingerprint service\n",__func__);
175 LOGI("%s: Disable fingerprint service\n",__func__);
176 ret = enable_disable_fps(false);
177 break;
178 case 'a':
179 ret = run_auth_cmd();
180 break;
181 // For the rear fingerprint module, calling cancel() will go to the
182 // navigation mode by default.
183 // For other device not enabling naivgation feature, default mode will
184 // be "Idle" by invoking cancel().
185 case 'n':
186 case 'i':
187 default:
188 ret = run_cancel_cmd();
189 break;
190 }
191
192 if (ret != OK)
193 CLOGE("FP HIDL fail to excute cmd '%c'\n", input);
194 else
195 CLOGI("FP HIDL excute cmd '%c' successfully\n", input);
196
197 return ret;
198
199 }
200
201