LINUX.ORG.RU

Вопрос по linux HID


0

0

Есть HID девайс (USB-телефон).
Загружаю прошивку (через hotplug).
devfs (Mandrake10) создает /dev/usb/hid/hiddev0.
Коды кнопочек известны. Хочу написать простенькую прогу,
которая будет отслеживать нажатие кнопочек и обрабатывать их...
Делаю следующее (пишу упрощенно):

struct hiddev_event ev;
if ((fd = open("/dev/usb/hid/hiddev0", O_RDONLY)) < 0)
{
   perror("evdev open");
   exit (1);
}
// Далее в бесконечном цикле читаю с hiddev_event
while (1)
{
   read(fd, &ev, sizeof(ev));
// И далее, в зависимости от значения ev.hid (для разных кнопок известны)
// хочу выполнять какие-то действия...
}

Однако, пока не происходит никаких событий (т.е. не нажимаются никакие кнопочки),
read стоит и ждет (т.е. ничего не возвращает пока не будет нажата какая-либо кнопка).
В это время проц загружается на 100% (это неприемлемо...)
По нажатии какой-либо кнопки read удачно читает и в ev.hid получаю код кнопки.
Как избежать "замораживания" read пока нет событий?
Может быть нужно использовать какие-либо вызовы ioctl? (Пока не разобрался...)
Или в принципе надо делать не так?
Буду очень благодарен за совет или пример...

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.