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