#include #include #include #include #define PROC_FILE_NAME "mousectl" struct timer_list my_timer; struct input_dev *jerry; ssize_t move_mouse(struct file *filp,const char *buf,size_t count,loff_t *offp) { char our_copy[16]; int n; if(count < 2) return count; strncpy(our_copy, buf, 15); our_copy[(count < 16)? count:16] = 0; sscanf(our_copy+1, "%d", &n); switch(buf[0]){ case 'U': input_report_rel(jerry, REL_Y, -n); break; case 'D': input_report_rel(jerry, REL_Y, n); break; case 'R': input_report_rel(jerry, REL_X, n); break; case 'L': input_report_rel(jerry, REL_X, -n); break; case 'C': input_report_key(jerry, BTN_LEFT, n); break; } input_sync(jerry); return count; } struct file_operations proc_fops = { write: move_mouse }; static int __init mm_init(void) { jerry = input_allocate_device(); jerry->name = "jerry"; set_bit(EV_REL, jerry->evbit); set_bit(REL_X, jerry->relbit); set_bit(REL_Y, jerry->relbit); set_bit(EV_KEY, jerry->evbit); set_bit(BTN_LEFT, jerry->keybit); input_register_device(jerry); proc_create(PROC_FILE_NAME,0,NULL,&proc_fops); return 0; } static void __exit mm_remove(void) { input_unregister_device(jerry); remove_proc_entry(PROC_FILE_NAME,NULL); } module_init(mm_init); module_exit(mm_remove);