Listing 3. aaaabbbb.c
struct input_dev ex2_dev;
void ex2_timeout(unsigned long unused/*UNUSED*/)
{
int x;
for (x=0;x<4;x++) {
/* letter a or A */
input_report_key(&ex2_dev, KEY_A, 1);
input_sync(&ex2_dev);
input_report_key(&ex2_dev, KEY_A, 0);
input_sync(&ex2_dev);
}
for (x=0;x<4;x++) {
/* letter b or B */
input_report_key(&ex2_dev, KEY_B, 1);
input_sync(&ex2_dev);
input_report_key(&ex2_dev, KEY_B, 0);
input_sync(&ex2_dev);
}
/* set timer for four seconds */
mod_timer(&ex2_dev.timer,jiffies+4*HZ );
}
static int __init ex2_init(void)
{
... do initialization ...
/* set up a repeating timer */
init_timer(&ex2_dev.timer);
ex2_dev.timer.function = ex2_timeout;
ex2_dev.timer.expires = jiffies + HZ;
add_timer(&ex2_dev.timer);
return 0;
}
static void __exit ex2_exit(void)
{
del_timer_sync(&ex2_dev.timer);
input_unregister_device(&ex2_dev);
}
Copyright © 1994 - 2018 Linux Journal. All rights reserved.