summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBintian Wang <bintian.wang@linaro.org>2013-07-20 00:13:40 +0800
committerBintian Wang <bintian.wang@linaro.org>2013-07-20 00:15:34 +0800
commit77ab966ca8b50e01128779e94f3cc0f1bceacdfa (patch)
tree911253e7efdc253924d6f6977a71b58c71fb2982
parent72bf6749681b9c94eea959b88eb7b57a34a44075 (diff)
downloadlinaro-android-kernel-test-77ab966ca8b50e01128779e94f3cc0f1bceacdfa.tar.gz
Update juice_evtest.c after John's code review
Signed-off-by: Bintian Wang <bintian.wang@linaro.org>
-rw-r--r--evdevtest/juice_evtest.c411
1 files changed, 177 insertions, 234 deletions
diff --git a/evdevtest/juice_evtest.c b/evdevtest/juice_evtest.c
index 0d4dac2..e2e0ccc 100644
--- a/evdevtest/juice_evtest.c
+++ b/evdevtest/juice_evtest.c
@@ -8,128 +8,104 @@
#include <getopt.h>
#include <errno.h>
#include <time.h>
+#include <signal.h>
+
+#define debug 0
+#define JUICE_DEBUG() if (debug) \
+ do \
+ printf("##Juice debug in %s and line ##\n", __FUNCTION__, __LINE__); \
+ while(0)
+
+#define JUICE_ERROR(X) \
+ do \
+ printf("##Juice error: %s in %s at line %d ##\n", X, __FUNCTION__, __LINE__); \
+ while(0)
#define DELAY 10
#define CLOCK_REALTIME_ALARM 8
#define CLOCK_BOOTTIME_ALARM 9
-static int suspend_resume_test(int seconds)
+void sigalarm(int signumber)
+{
+ /*We just want to test the suspend and resuem
+ * nothing need to be done here!
+ */
+}
+
+static int suspend_resume_test(const int seconds)
{
-// struct timespec now, target, latest;
int ret;
- int pm_state_fd;
- int len, n;
- char buf[32];
timer_t timerid;
struct itimerspec its;
struct timespec t1, t2;
+ struct sigevent se;
+ struct sigaction act;
+ sigset_t sigmask;
+ int signum = SIGRTMAX;
+
+ /* Set up signal handler */
+ sigfillset(&act.sa_mask);
+ act.sa_flags = 0;
+ act.sa_handler = sigalarm;
+ sigaction(signum, &act, NULL);
+
+ /* Set up timer */
+ memset(&se, 0, sizeof(se));
+ se.sigev_notify = SIGEV_SIGNAL;
+ se.sigev_signo = signum;
+ se.sigev_value.sival_int = 0;
if (seconds < 6) {
- printf("Please input suspend time more than 4 seconds!\n");
+ JUICE_ERROR("Input suspend time less than 6 seconds");
return -1;
}
- ret = timer_create(CLOCK_REALTIME_ALARM, NULL, &timerid);
+ ret = timer_create(CLOCK_REALTIME_ALARM, &se, &timerid);
if (-1 == ret) {
-// printf("Create alarm timer failed!\n");
+ JUICE_ERROR("Create alarm timer failed");
return -1;
}
- if(clock_gettime(CLOCK_REALTIME_ALARM, &its.it_value))
+ memset(&its, 0, sizeof(struct itimerspec));
+ ret = clock_gettime(CLOCK_REALTIME_ALARM, &its.it_value);
+ if (-1 == ret) {
+ JUICE_ERROR("Get time failed");
return -1;
+ }
its.it_value.tv_sec += seconds;
-
+
ret = timer_settime(timerid, TIMER_ABSTIME, &its, NULL);
if (-1 == ret) {
-// perror("Set alarm timer failed!\n");
+ JUICE_ERROR("Set alarm timer failed");
return -1;
}
-
+
+ /*record the suspend start time*/
ret = clock_gettime(CLOCK_REALTIME, &t1);
if (-1 == ret) {
-// perror("Get the suspend start time failed\n");
+ JUICE_ERROR("Get start time of suspend failed");
return -1;
}
-#if 0
- fd = open("/dev/alarm", O_RDWR);
- if (fd < 0) {
- printf("Open /dev/alarm failed!\n");
- return -1;
- }
-
- ret = ioctl(fd, ANDROID_ALARM_GET_TIME(ANDROID_ALARM_RTC_WAKEUP), &now);
- if (ret < 0) {
- printf("Get time failed!\n");
- close(fd);
- return -1;
- }
-
- target = now;
- target.tv_sec += seconds;
-
- ret = ioctl(fd, ANDROID_ALARM_SET(ANDROID_ALARM_RTC_WAKEUP), &target);
- if (ret < 0) {
- printf("Set time failed:");
- if (errno == EBUSY)
- printf("Android using this alarm ANDROID_ALARM_RTC_WAKEUP!\n");
- close(fd);
- return -1;
- }
-#endif
-
/*start suspend the system now*/
- pm_state_fd = open("/sys/power/state", O_WRONLY);
- if (pm_state_fd < 0) {
-// printf("Open /sys/power/state failed!\n");
- return -1;
- }
- sprintf(buf, "%s\n", "mem");
- len = strlen(buf);
- n = write(pm_state_fd, buf, len);
- if (n < 0 || n != len) {
-// printf("Write /sys/power/state failed!\n");
- close(pm_state_fd);
- return -1;
- }
-#if 0
- /*Get the time after the system resume*/
- ret = ioctl(fd, ANDROID_ALARM_GET_TIME(ANDROID_ALARM_RTC_WAKEUP), &latest);
- if (ret < 0) {
- printf("Get time again failed!\n");
- close(fd);
- close(pm_state_fd);
+ ret = system("echo mem > /sys/power/state");
+ if (-1 == ret) {
+ JUICE_ERROR("echo mem to power state failed");
return -1;
}
- /*judge if the system suspend/resume works well */
- if (latest.tv_sec - now.tv_sec >= seconds) {
- close(fd);
- close(pm_state_fd);
- return 0;
- } else {
- close(fd);
- close(pm_state_fd);
- return 1;
- }
-#endif
- close(pm_state_fd);
- /*Maybe need sleep here for several seconds to wait system to suspend itself!!!!*/
- /*
- *
- *
- */
+ /*record the system resume time*/
ret = clock_gettime(CLOCK_REALTIME, &t2);
if (-1 == ret) {
-// printf("Get the suspend start time failed\n");
+ JUICE_ERROR("Get the suspend end time failed");
return -1;
}
- if (t2.tv_sec - t1.tv_sec >= seconds)
+ if (t2.tv_sec - t1.tv_sec >= seconds)
return 0;
- else
- return 1;
+ else
+ return 1;
}
int main (int argc, char **argv)
@@ -139,76 +115,71 @@ int main (int argc, char **argv)
{ "help", no_argument, NULL, 'h' },
{ NULL, 0, NULL, 0 },
};
-
- char parameter1=0;
- int parameter2=0;
- long long parameter3=0;
-
- char * shopt = "p:h";
- char *evdevice = NULL;
- long enable_lock=1, disable_lock=0, lockvalue = -1;
- int fd, fd_evdev_run;
- int c, opti = 0;
- int ret, len, n;
- char buf[32];
+
+ char parameter1 = 0;
+ int parameter2 = 0;
+ long long parameter3 = 0;
+
+ char * shopt = "p:h";
+ char *evdevice = NULL;
+ long enable_lock = 1, disable_lock = 0, lockvalue = -1;
+ int fd, c, opti = 0, ret;
unsigned int clk;
- struct input_event ev[64];
+ struct input_event ev[64];
struct timespec tp1, tp2;
if(getuid()) {
- perror("Need run this test as root!\n");
+ JUICE_ERROR("Not run this test as root");
return -1;
}
- while ((c = getopt_long(argc, argv, shopt, lopt, &opti)) != -1 ) {
- switch (c) {
- case 'h':
- fprintf(stdout, "Userage:\n" "juice_evtest -p /dev/input/eventX \n");
- break;
- case 'p':
- evdevice = strdup(optarg);
- break;
- default:
- perror("Warning, unknown option!\n");
- break;
- }
- }
-
- if (!evdevice) {
- perror("You need to input the event input device!\n");
+ while ((c = getopt_long(argc, argv, shopt, lopt, &opti)) != -1 ) {
+ switch (c) {
+ case 'h':
+ fprintf(stdout, "Userage:\n" "juice_evtest -p /dev/input/eventX \n");
+ break;
+ case 'p':
+ evdevice = strdup(optarg);
+ break;
+ default:
+ JUICE_ERROR("Warning, unknown option!");
+ break;
+ }
+ }
+
+ if (!evdevice) {
+ JUICE_ERROR("No input device");
return -1;
}
/*Open the evdev input device*/
if ((fd = open(evdevice, O_RDONLY)) < 0) {
- perror("Open input device failed, please check it!\n");
+ JUICE_ERROR("Open input device failed");
return -1;
}
-
+
printf("===========================\n");
- printf("Starting evdev ioctl cmd EVIOCGSUSPENDBLOCK/EVIOCCSUSPENDBLOCK test:\n");
+ printf("Starting input ioctl cmd EVIOCGSUSPENDBLOCK/EVIOCCSUSPENDBLOCK test:\n");
/* Read lock command */
- if (ioctl(fd, EVIOCGSUSPENDBLOCK, &lockvalue))
+ if (ioctl(fd, EVIOCGSUSPENDBLOCK, &lockvalue))
printf("[EVDEV_EVIOCGSUSPENDBLOCK_READ_TEST1]: test failed\n");
- else
+ else
printf("[EVDEV_EVIOCGSUSPENDBLOCK_READ_TEST1]: test passed\n");
if (0 == lockvalue) /*default lock value*/
printf("[EVDEV_TEST2]: test passed\n");
- else
+ else
printf("[EVDEV_TEST2]: test failed\n");
/*Set user_wake_lock*/
- if (ioctl(fd, EVIOCSSUSPENDBLOCK, enable_lock))
+ if (ioctl(fd, EVIOCSSUSPENDBLOCK, enable_lock))
printf("[EVDEV_EVIOCSSUSPENDBLOCK_SET_TEST3]: test failed\n");
- else
+ else
printf("[EVDEV_EVIOCSSUSPENDBLOCK_SET_TEST3]: test passed\n");
-
- /*Verfify the lock value equals what we set before*/
- if (ioctl(fd, EVIOCGSUSPENDBLOCK, &lockvalue))
- perror("[EVDEV_READ_user_wake_lock_value]: test failed\n");
-
+
+ /*Verfify the lock value equals what we set*/
+ ioctl(fd, EVIOCGSUSPENDBLOCK, &lockvalue);
if (enable_lock == lockvalue)
printf("[EVDEV_TEST4]: test passed\n");
else {
@@ -216,243 +187,215 @@ int main (int argc, char **argv)
goto para_test;
}
- if ((fd_evdev_run = open("/sys/juice_input/run", O_WRONLY)) < 0) {
- perror("[EVDEV_OPEN_SYS_RUN]: test failed\n");
- perror("Please check input kernel test module!\n");
+ /*Start generating input event*/
+ ret = system("echo 1 > /sys/juice_input/run");
+ if (-1 == ret) {
+ JUICE_ERROR("Enable generate input event failed");
goto para_test;
- } else {
- sprintf(buf, "%d\n", 1);
- len = strlen(buf);
- n = write(fd_evdev_run, buf, len);
- if (n < 0 || n != len)
- perror("Write /sys/juice_input/run failed!\n");
-
- close(fd_evdev_run);
}
- /*Judge the system can not be suspend*/
+
+ /*Judge the system can not suspend*/
ret = suspend_resume_test(DELAY);
if (1 == ret)
printf("[EVDEV_CMD_DISABLE_SUSPEND_TEST5]: test passed\n");
else
printf("[EVDEV_CMD_DISABLE_SUSPEND_TEST5]: test failed\n");
-
+
/*Disable evdev usr_wake_lock*/
ioctl(fd, EVIOCSSUSPENDBLOCK, disable_lock);
ioctl(fd, EVIOCGSUSPENDBLOCK, &lockvalue);
- if ( disable_lock == lockvalue)
+ if ( disable_lock == lockvalue )
printf("[EVDEV_TEST6]: test passed\n");
- else
+ else
printf("[EVDEV_TEST6]: test failed\n");
/*Judge the system can be suspend resume*/
ret = suspend_resume_test(DELAY);
if (0 == ret)
printf("[EVDEV_ENABLE_SUSPEND_RESUME_TEST7]: test passed\n");
- else
+ else
printf("[EVDEV_ENABLE_SUSPEND_RESUME_TEST7]: test failed\n");
- if ((fd_evdev_run = open("/sys/juice_input/run", O_WRONLY)) < 0) {
- perror("[EVDEV_OPEN_SYS_RUN]: test failed\n");
+ /*Stop generateing input event*/
+ ret = system("echo 0 > /sys/juice_input/run");
+ if (-1 == ret) {
+ JUICE_ERROR("Disable generate input event failed");
goto para_test;
- } else {
- sprintf(buf, "%d\n", 0);
- len = strlen(buf);
- n = write(fd_evdev_run, buf, len);
- if (n < 0 || n != len)
- perror("Write /sys/juice_input/run failed!\n");
-
- close(fd_evdev_run);
}
-para_test:
- /*The following is the test cases for verifying different parameters*/
+
+ /*The followings are the test cases for verifying different parameters*/
+para_test:
/* Null parameters test!*/
printf("Starting test EVIOCGSUSPENDBLOCK/EVIOCSSUSPENDBLOCK with different parameters:\n");
ret = ioctl(fd, EVIOCGSUSPENDBLOCK);
- if (ret == -1)
+ if (-1 == ret)
printf("[EVDEV_TEST8]: test passed\n");
- else
+ else
printf("[EVDEV_TEST8]: test failed\n");
-
+
ret = ioctl(fd, EVIOCSSUSPENDBLOCK);
if (!ret)
printf("[EVDEV_TEST9]: test passed\n");
- else
+ else
printf("[EVDEV_TEST9]: test failed\n");
/* byte parameters test*/
ret = ioctl(fd, EVIOCGSUSPENDBLOCK, &parameter1);
- if (!ret)
+ if (!ret)
printf("[EVDEV_TEST10]: test passed\n");
- else
+ else
printf("[EVDEV_TEST10]: test failed\n");
ret = ioctl(fd, EVIOCSSUSPENDBLOCK, parameter1);
- if (!ret)
+ if (!ret)
printf("[EVDEV_TEST11]: test passed\n");
- else
+ else
printf("[EVDEV_TEST11]: test failed\n");
/* int parameters test*/
ret = ioctl(fd, EVIOCGSUSPENDBLOCK, &parameter2);
- if (!ret)
+ if (!ret)
printf("[EVDEV_TEST12]: test passed\n");
- else
+ else
printf("[EVDEV_TEST12]: test failed\n");
-
+
ret = ioctl(fd, EVIOCSSUSPENDBLOCK, parameter2);
- if (!ret)
+ if (!ret)
printf("[EVDEV_TEST13]: test passed\n");
- else
+ else
printf("[EVDEV_TEST13]: test failed\n");
/* 64bit parameters test*/
ret = ioctl(fd, EVIOCGSUSPENDBLOCK, &parameter3);
- if (!ret)
+ if (!ret)
printf("[EVDEV_TEST14]: test passed\n");
- else
+ else
printf("[EVDEV_TEST14]: test failed\n");
ret = ioctl(fd, EVIOCSSUSPENDBLOCK, parameter3);
- if (!ret)
+ if (!ret)
printf("[EVDEV_TEST15]: test passed\n");
- else
+ else
printf("[EVDEV_TEST15]: test failed\n");
-/*EVIOCSCLOCKID test*/
+
+/*The followings are testcases for ioctl cmd EVIOCSCLOCKID*/
printf("Starting EVIOCSCLOCKID test:\n");
+
clk = CLOCK_REALTIME_ALARM;
ret = ioctl(fd, EVIOCSCLOCKID, &clk);
- if (ret < 0)
+ if (-1 == ret)
printf("[EVDEV_TEST16]: test passed\n");
- else
+ else
printf("[EVDEV_TEST16]: test failed\n");
+
clk = CLOCK_BOOTTIME;
ret = ioctl(fd, EVIOCSCLOCKID, &clk);
if (ret < 0)
printf("[EVDEV_TEST17]: test passed\n");
- else
+ else
printf("[EVDEV_TEST17]: test failed\n");
ret = ioctl(fd, EVIOCSCLOCKID);
if (ret < 0)
printf("[EVDEV_TEST18]: test passed\n");
- else
+ else
printf("[EVDEV_TEST18]: test failed\n");
-/*EVIOCSCLOCKID & CLOCK_REALTIME test*/
+
+ /*EVIOCSCLOCKID with CLOCK_REALTIME test start*/
clk = CLOCK_REALTIME;
ret = ioctl(fd, EVIOCSCLOCKID, &clk);
if (ret < 0)
printf("[EVDEV_TEST19]: test failed\n");
- else
+ else
printf("[EVDEV_TEST19]: test passed\n");
- /*Start generate event here!*/
- if ((fd_evdev_run = open("/sys/juice_input/run", O_WRONLY)) < 0) {
- perror("[EVDEV_OPEN_SYS_RUN]: test failed\n");
+ /*Start generate event*/
+ ret = system("echo 1 > /sys/juice_input/run");
+ if (-1 == ret) {
+ JUICE_ERROR("Enable generating input event failed");
goto finish;
- } else {
- sprintf(buf, "%d\n", 1);
- len = strlen(buf);
- n = write(fd_evdev_run, buf, len);
- if (n < 0 || n != len)
- perror("Write /sys/juice_input/run failed!\n");
-
- close(fd_evdev_run);
}
ret = clock_gettime(CLOCK_REALTIME, &tp1);
if (ret < 0)
- perror("Clock MONOTONIC gettime1 FAILED\n");
-
+ JUICE_ERROR("Get time with clock id REALTIME failed");
+
/*Get event here!*/
ret = read(fd, ev, sizeof(struct input_event));
if (ret < (int) sizeof(struct input_event))
- perror("evtest: error reading\n");
+ JUICE_ERROR("Reading input event failed");
ret = clock_gettime(CLOCK_REALTIME, &tp2);
if (ret < 0)
- perror("Clock MONOTONIC gettime2 FAILED\n");
-
+ JUICE_ERROR("Get time with clock id REALTIME failed");
+
if (tp1.tv_sec <= ev[0].time.tv_sec && ev[0].time.tv_sec <= tp2.tv_sec)
printf("[EVDEV_TEST20]: test passed\n");
- else
+ else
printf("[EVDEV_TEST20]: test failed\n");
- if ((fd_evdev_run = open("/sys/juice_input/run", O_WRONLY)) < 0) {
- perror("[EVDEV_OPEN_SYS_RUN]: test failed\n");
+ /*Stop generate input event*/
+ ret = system("echo 0 > /sys/juice_input/run");
+ if (-1 == ret) {
+ JUICE_ERROR("Disable generating input event failed");
goto finish;
- } else {
- sprintf(buf, "%d\n", 0);
- len = strlen(buf);
- n = write(fd_evdev_run, buf, len);
- if (n < 0 || n != len)
- perror("Write /sys/juice_input/run failed!\n");
- close(fd_evdev_run);
}
+ /*EVIOCSCLOCKID with CLOCK_REALTIME test end*/
+
-/*EVIOCSCLOCKID & CLOCK_MONOTONIC test*/
+ /*EVIOCSCLOCKID with CLOCK_MONOTONIC test start*/
close(fd);
if ((fd = open(evdevice, O_RDONLY)) < 0) {
- perror("Test is not finished but exit!\n");
+ JUICE_ERROR("Open input device failed");
return -1;
- }
+ }
clk = CLOCK_MONOTONIC;
ret = ioctl(fd, EVIOCSCLOCKID, &clk);
- if (ret < 0)
+ if (ret < 0)
printf("[EVDEV_TEST21]: test failed\n");
- else
+ else
printf("[EVDEV_TEST21]: test passed\n");
- if ((fd_evdev_run = open("/sys/juice_input/run", O_WRONLY)) < 0) {
- perror("[EVDEV_OPEN_SYS_RUN]: test failed\n");
+ ret = system("echo 1 > /sys/juice_input/run");
+ if (-1 == ret) {
+ JUICE_ERROR("Enable generating input event failed");
goto finish;
- } else {
- sprintf(buf, "%d\n", 1);
- len = strlen(buf);
- n = write(fd_evdev_run, buf, len);
- if (n < 0 || n != len)
- perror("Write /sys/juice_input/run failed!\n");
- close(fd_evdev_run);
}
ret = clock_gettime(CLOCK_MONOTONIC, &tp1);
if (ret < 0)
- perror("Clock MONOTONIC gettime1 FAIL\n");
+ JUICE_ERROR("Get time with clock id MONOTONIC failed");
/*Get event here!*/
ret = read(fd, ev, sizeof(struct input_event));
- if (ret < (int) sizeof(struct input_event))
- perror("evtest: error reading\n");
-
+ if (ret < (int) sizeof(struct input_event))
+ JUICE_ERROR("Reading input event failed");
+
ret = clock_gettime(CLOCK_MONOTONIC, &tp2);
if (ret < 0)
- perror("Clock MONOTONIC gettime2 FAILED\n");
-
+ JUICE_ERROR("Get time with clock id MONOTONIC failed");
+
if (tp1.tv_sec <= ev[0].time.tv_sec && ev[0].time.tv_sec<= tp2.tv_sec)
printf("[EVDEV_TEST22]: test passed\n");
- else
+ else
printf("[EVDEV_TEST22]: test failed\n");
- /*Stop generate input dev event here!*/
- if ((fd_evdev_run = open("/sys/juice_input/run", O_WRONLY)) < 0) {
- perror("[EVDEV_OPEN_SYS_RUN]: test failed\n");
+ /*Stop generate input event*/
+ ret = system("echo 0 > /sys/juice_input/run");
+ if (-1 == ret) {
+ JUICE_ERROR("Disable generating input event failed");
goto finish;
- } else {
- sprintf(buf, "%d\n", 0);
- len = strlen(buf);
- n = write(fd_evdev_run, buf, len);
- if (n < 0 || n != len)
- perror("Write /sys/juice_input/run failed!\n");
- close(fd_evdev_run);
}
+ /*EVIOCSCLOCKID with CLOCK_MONOTONIC test end*/
finish:
close(fd);
printf("===========================\n");
- return -1;
+ return 0;
}