[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

mousepad driver for 2.4



Привет, All!

Подарили мне новый красивый коврик для мышки с надписью Verbatim, я было
обрадовалась, но оказалось, что у меня нет для него драйверов.  Как ни
странно, в ядре 2.4.27 (а также 2.4.21, 2.4.18 и, по-видимому, всех 2.4)
нужного драйвера не нашлось.  Полезла искать в интернет -- тоже ничего
не нашла, в лучшем случае то, что находилось по словам "mouse pad linux
driver", оказывалось драйвером для TouchPad'а. На сайте Вербатима про
драйвера для ковриков вообще ничего не нашлось. Поискала ещё на разных
сайтах, где бывают драйвера, но нашла только драйвер под MS Windows 98,
и не для моего Verbatim-а, а вообще для ковриков. Как раз рядом стоит
комп с MS Windows 98, я проинсталлировала туда драйвер, подложила под
мышку свой коврик -- всё работало! Воодушевленная этим, я решила, что,
даже не зная Verbatim-овских спецификаций, можно написать generic
драйвер для коврика и под Linux, и он будет работать. Ниже представлено
то, что у меня получилось после нескольких часов напряжённого
кодирования. Тестировалось с ковриком Verbatim и двумя Noname.
Тестировала только под 2.4.27, но по идее должно работать и под другими
2.4. Думаю, несложно переписать и под 2.6.  Если кто-то поделится
даташитами конкретных моделей ковриков, можно будет добавить их
поддержку. Неплохо бы добавить автораспознавание, но я пока не видела
ковриков, поддерживающих plug-n-play; единственное, что приходит в
голову -- снимать изображение коврика веб-камерой и распознавать с
помощью gocr.  Ещё, наверное, надо бы добавить возможность поменять
модель коврика в /proc на лету без перезагрузки модуля, если
пользователь захочет сменить коврик (пока что модель задаётся при
загрузке модуля параметром model).  Пишите ваши замечания
и предложения, следующую версию модуля планируется выпустить через год.
Замеченные баги: при загрузке insmod выдаёт предупреждение, что 
моё ядро будет заражено кодом с не-GPL лицензией. Не уверена, это баг в
моём модуле или в ядре. Как побороть -- не знаю.


==== start of file mpad.c ====

/* mpad.c 
 * generic linux mousepad driver
 */

#include <linux/module.h> 
#include <linux/proc_fs.h>

#define DRV_VERSION     "0.0.1"
#define MODEL_GENERIC "Generic"

char *model; 
int size[2];
MODULE_PARM (model, "s");
MODULE_PARM_DESC (model, "Mouse Pad model (default Generic)");
MODULE_PARM (size, "2i");
MODULE_PARM_DESC (size, "Mouse Pad width and height in mm (default 0)");

int  mpad_read_proc (char *buf, char **start, off_t offset,
                   int count, int *eof, void *data)
{
  int len = 0;
  len += sprintf(buf+len,"model:\t%.80s\n", model);
  len += sprintf(buf+len,"width:\t%d\n", size[0]);
  len += sprintf(buf+len,"height:\t%d\n", size[1]);
  *eof = 1;
  return len;
}

static int __init mpad_init(void)
{
	if (!model) model=MODEL_GENERIC;
	create_proc_read_entry ("driver/mousepad", 0, NULL, mpad_read_proc, NULL);
        printk(KERN_INFO "Mouse Pad Driver v" DRV_VERSION "\n");
        return 0;

}

static void __exit mpad_exit (void)
{
  remove_proc_entry ("driver/mousepad", NULL);
  printk(KERN_INFO "Mouse Pad Driver unloaded\n");

}

module_init(mpad_init);
module_exit(mpad_exit);
EXPORT_NO_SYMBOLS;

MODULE_AUTHOR("Olya <bolya@ukrpost.net>");
MODULE_DESCRIPTION("Generic driver for mouse pad");
MODULE_LICENSE("Public Domain");

==== end of file mpad.c ====

==== start of file Makefile ====
CC=gcc
MODCFLAGS := -Wall -I/usr/src/linux/include -DMODULE -D__KERNEL__ -DLINUX

mpad.o:        mpad.c
#/usr/src/linux/include/linux/version.h
	$(CC) $(MODCFLAGS) -c mpad.c
==== end of file Makefile ====

-- 
Оля



Reply to: