From: Cyril Hrubis <chrubis@suse.cz>
To: ltp@lists.linux.it
Subject: [LTP] [PATCH v3] input/input06: Fix auto-repeat key test
Date: Thu, 31 Aug 2017 14:45:47 +0200 [thread overview]
Message-ID: <20170831124546.GA1487@rei> (raw)
In-Reply-To: <20170824201207.62652-1-sspatil@google.com>
Hi!
> +static struct input_event *next_event()
^
Old style definition,
checkpatch.pl should warn about
these
> +{
> + struct input_event *ev = NULL;
^
Why do we initialize the value here if it's
not used at all?
> - rd = read(fd2, iev, sizeof(iev));
> + if (!have_events())
> + read_events();
>
> - check_size(rd);
> + ev = &events[ev_iter++];
> + return ev;
Why not just return &events[ev_iter++]; ?
> +}
>
> - if (rd > 0 && check_event(&iev[i], EV_KEY, KEY_X, 1))
> - i++;
> +static int check_sync_event(void)
> +{
> + return check_event_code(next_event(), EV_SYN, SYN_REPORT);
> +}
>
> - while (check_bound(i, rd) && !check_event(&iev[i], EV_KEY, KEY_X, 0)) {
> +static int parse_autorepeat_config(struct input_event *iev)
> +{
> + if (!check_event_code(iev, EV_REP, REP_DELAY)) {
> + tst_resm(TFAIL,
> + "Didn't get EV_REP configuration with code REP_DELAY");
> + return 0;
> + }
> +
> + if (!check_event_code(next_event(), EV_REP, REP_PERIOD)) {
> + tst_resm(TFAIL,
> + "Didn't get EV_REP configuration with code REP_PERIOD");
> + return 0;
> + }
> +
> + return 1;
> +}
> +
> +static int parse_key(struct input_event *iev)
> +{
> + int autorep_count = 0;
> +
> + if (!check_event(iev, EV_KEY, KEY_X, 1) || !check_sync_event()) {
> + tst_resm(TFAIL, "Didn't get expected key press for KEY_X");
> + return 0;
> + }
>
> - if (iev[i].type != EV_SYN
> - && !check_event(&iev[i], EV_KEY, KEY_X, 2)) {
> - tst_resm(TINFO,
> - "Didn't receive EV_KEY KEY_X with value 2");
> + iev = next_event();
> + while (check_event(iev, EV_KEY, KEY_X, 2) && check_sync_event()) {
> + autorep_count++;
> + iev = next_event();
> + }
> +
> + /* make sure we have atleast one auto-repeated key event */
> + if (!autorep_count) {
> + tst_resm(TFAIL,
> + "Didn't get autorepeat events for the key - KEY_X");
> + return 0;
> + }
> +
> + if (!check_event(iev, EV_KEY, KEY_X, 0) || !check_sync_event()) {
> + tst_resm(TFAIL,
> + "Didn't get expected key release for KEY_X");
> + return 0;
> + }
> +
> + tst_resm(TINFO,
> + "Received %d repititions for KEY_X", autorep_count);
> +
> + return 1;
> +}
> +
> +static int check_events(void)
> +{
> + struct input_event *iev;
> + int ret;
> + int rep_config_done = 0;
> + int rep_keys_done = 0;
> +
> + read_events();
> +
> + while (have_events()) {
> + iev = next_event();
> + switch (iev->type) {
> + case EV_REP:
> + ret = parse_autorepeat_config(iev);
> + if (!rep_config_done)
^
This if is useless here.
> + rep_config_done = 1;
> + break;
> + case EV_KEY:
> + ret = parse_key(iev);
> + if (!rep_keys_done)
^
Here as well.
> + rep_keys_done = 1;
> + break;
> + default:
> + tst_resm(TFAIL,
> + "Unexpected event type '0x%04x' received",
> + iev->type);
> + ret = 0;
> break;
> }
> - i++;
> - nb++;
>
> - if (i == rd / sizeof(struct input_event)) {
> - i = 0;
> - rd = read(fd2, iev, sizeof(iev));
> - check_size(rd);
> - }
> + if (!ret || (rep_config_done && rep_keys_done))
> + break;
> }
>
> - return (nb > 0 && check_bound(i, rd)
> - && check_event(&iev[i], EV_KEY, KEY_X, 0));
> + return ret;
> }
Also I would disagree that the value for sync event is undefined, it has
been 0 since the beginning and if you look into the kernel input.h
header it has:
static inline void input_sync(struct input_dev *dev)
{
input_event(dev, EV_SYN, SYN_REPORT, 0);
}
Apart from that it looks OK.
--
Cyril Hrubis
chrubis@suse.cz
next prev parent reply other threads:[~2017-08-31 12:45 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-24 20:12 [LTP] [PATCH v3] input/input06: Fix auto-repeat key test Sandeep Patil
2017-08-31 12:45 ` Cyril Hrubis [this message]
2017-09-05 21:43 ` Sandeep Patil
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170831124546.GA1487@rei \
--to=chrubis@suse.cz \
--cc=ltp@lists.linux.it \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox