#include //#include #include #include /* For fg_console, MAX_NR_CONSOLES */ #include /* For KDSETLED */ #include #include #include /* For vc_cons */ #include #include #include MODULE_LICENSE("class"); int state = 0; struct input_dev *ex3_dev; struct timer_list my_timer; void my_timer_func(struct timer_list *unused) { /* move in a small square */ if (state<30) input_report_rel(ex3_dev, REL_X, 5); else if (state < 60) input_report_rel(ex3_dev, REL_Y, 5); else if (state < 90) input_report_rel(ex3_dev, REL_X, -5); else input_report_rel(ex3_dev, REL_Y, -5); if ((state++) >= 120){ state = 0; } /* input_report_key(ex3_dev, BTN_LEFT, 1); input_sync(ex3_dev); input_report_key(ex3_dev, BTN_LEFT, 0); */ input_sync(ex3_dev); /* set timer for 0.02 seconds */ mod_timer(&my_timer, jiffies+HZ/125); } static int __init ex3_init(void) { /* extra safe initialization */ ex3_dev = input_allocate_device(); /* set up descriptive labels */ ex3_dev->name = "Example 3 device"; /* phys is unique on a running system */ ex3_dev->phys = "A/Fake/Path"; ex3_dev->id.bustype = BUS_HOST; ex3_dev->id.vendor = 0x0001; ex3_dev->id.product = 0x0003; ex3_dev->id.version = 0x0100; /* this device has two relative axes */ set_bit(EV_REL, ex3_dev->evbit); set_bit(REL_X, ex3_dev->relbit); set_bit(REL_Y, ex3_dev->relbit); /* it needs a button to look like a mouse */ set_bit(EV_KEY, ex3_dev->evbit); set_bit(BTN_LEFT, ex3_dev->keybit); /* and finally register with the input core */ input_register_device(ex3_dev); /* set up a repeating timer */ timer_setup(&my_timer, my_timer_func, 0); my_timer.expires = jiffies + HZ/10; add_timer(&my_timer); return 0; } static void __exit ex3_exit(void) { del_timer(&my_timer); input_unregister_device(ex3_dev); } module_init(ex3_init); module_exit(ex3_exit);