xref: /OK3568_Linux_fs/external/rk_pcba_test/echo_touchpad_test.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright (c) 2017 Rockchip Electronics Co. Ltd.
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * SPDX-License-Identifier:	GPL-2.0+
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #include <stdio.h>
8*4882a593Smuzhiyun #include <stdlib.h>
9*4882a593Smuzhiyun #include <string.h>
10*4882a593Smuzhiyun #include <errno.h>
11*4882a593Smuzhiyun #include <fcntl.h>
12*4882a593Smuzhiyun #include <linux/input.h>
13*4882a593Smuzhiyun #include <signal.h>
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun #define LOG_TAG "echo_touchpad_test"
16*4882a593Smuzhiyun #include "common.h"
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #define TOUCHPAD_NODE "sys/devices/11050000.i2c/i2c-0/0-0020/cy8ctouchread"
19*4882a593Smuzhiyun 
char_to_value(char * ch)20*4882a593Smuzhiyun int char_to_value(char *ch)
21*4882a593Smuzhiyun {
22*4882a593Smuzhiyun 	if ((*ch >= 'A') && (*ch <= 'F'))
23*4882a593Smuzhiyun 		return 10 + *ch - 'A';
24*4882a593Smuzhiyun 	else if ((*ch >= 'a') && (*ch <= 'f'))
25*4882a593Smuzhiyun 		return 10 + *ch - 'a';
26*4882a593Smuzhiyun 	else if ((*ch >= '0') && (*ch <= '9'))
27*4882a593Smuzhiyun 		return *ch - '0';
28*4882a593Smuzhiyun 	else
29*4882a593Smuzhiyun 		return 0;
30*4882a593Smuzhiyun }
31*4882a593Smuzhiyun 
main()32*4882a593Smuzhiyun int main()
33*4882a593Smuzhiyun {
34*4882a593Smuzhiyun 	int delay_t = 0,err_code = 0;
35*4882a593Smuzhiyun 	struct timeval t1, t2;
36*4882a593Smuzhiyun 	char buf[COMMAND_VALUESIZE] = "touchpad_test";
37*4882a593Smuzhiyun     char result[COMMAND_VALUESIZE] = RESULT_VERIFY;
38*4882a593Smuzhiyun 	int fd = 0, ret = 0, key = 0;
39*4882a593Smuzhiyun 	char buff[40], *start = NULL;
40*4882a593Smuzhiyun 	int flag_pre = 0, flag_play = 0, flag_nxt = 0;
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun 	fd = open(TOUCHPAD_NODE, O_RDONLY);
43*4882a593Smuzhiyun 	if (fd <= 0) {
44*4882a593Smuzhiyun 		log_err("open touchpad node file failed(%s).\n",
45*4882a593Smuzhiyun 				strerror(errno));
46*4882a593Smuzhiyun 		err_code = -ENODEV;
47*4882a593Smuzhiyun 		goto OUT;
48*4882a593Smuzhiyun 	}
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun 	gettimeofday(&t1, NULL);
51*4882a593Smuzhiyun     while(1) {
52*4882a593Smuzhiyun 		lseek(fd, 0, SEEK_SET);
53*4882a593Smuzhiyun 		ret = read(fd, buff, sizeof(buff));
54*4882a593Smuzhiyun 		if (ret < 0) {
55*4882a593Smuzhiyun 			log_err("read touchpad node file failed(%s).\n",
56*4882a593Smuzhiyun 					strerror(errno));
57*4882a593Smuzhiyun 			err_code = -ENODEV;
58*4882a593Smuzhiyun 			break;
59*4882a593Smuzhiyun 		}
60*4882a593Smuzhiyun 		start = strstr(buff, "0x");
61*4882a593Smuzhiyun 		key = char_to_value(start + 2)*16 + char_to_value(start + 3);
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun 		if ((key >= 0x40) && (key <= 0x44)) {
64*4882a593Smuzhiyun 			log_info("--> <pause/play> key pressed!\n");
65*4882a593Smuzhiyun 			flag_play = 1;
66*4882a593Smuzhiyun 		} else if ((key >= 0x59) && (key <= 0x5d)) {
67*4882a593Smuzhiyun 			log_info("--> <previous> key pressed!\n");
68*4882a593Smuzhiyun 			flag_pre = 1;
69*4882a593Smuzhiyun 		} else if ((key >= 0x28) && (key <= 0x2c)) {
70*4882a593Smuzhiyun 			log_info("--> <next> key pressed!\n");
71*4882a593Smuzhiyun 			flag_nxt = 1;
72*4882a593Smuzhiyun 		}
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun 		if (flag_nxt && flag_play && flag_pre)
75*4882a593Smuzhiyun 			break;
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun         gettimeofday(&t2, NULL);
78*4882a593Smuzhiyun 		delay_t = (t2.tv_sec - t1.tv_sec) * 1000000 + (t2.tv_usec - t1.tv_usec);
79*4882a593Smuzhiyun 		if (delay_t > MANUAL_TEST_TIMEOUT) {
80*4882a593Smuzhiyun 			log_warn("timeout(60s)\n");
81*4882a593Smuzhiyun 			err_code = -ETIME;
82*4882a593Smuzhiyun 			break;
83*4882a593Smuzhiyun 		}
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun 		usleep(2000);
86*4882a593Smuzhiyun     }
87*4882a593Smuzhiyun 
88*4882a593Smuzhiyun OUT:
89*4882a593Smuzhiyun     if (err_code)
90*4882a593Smuzhiyun 		strcpy(result, RESULT_FAIL);
91*4882a593Smuzhiyun     send_msg_to_server(buf, result, err_code);
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun     return 0;
94*4882a593Smuzhiyun }
95