LINUX.ORG.RU

Событие подключения USB устройства без HAL


0

0

В программе (с++) надо получить событие того, что подключено usb устройство, с дальнейшей проверкой VID и PID.
Как лучше это сделать?
Инет говорит, что HAL хотят заменять на нечто другое, вроде DeviceKit, да и к тому-же что-то у меня не получается получить само событие.
Читал про udev, но в инете больше пишут про создание правил, а не как получить событие и т.п. В принципе можно сделать правило, чтоб запускалась другая прога, слала сообщение той которая его ждёт а потом завершалась, но как-то это коряво.
ЗЫ - у меня Lenny, если что.

Ответ на: комментарий от anonymous

Как? Хедеров и ничего подобного нет, а в правилах - только RUN (про этот вариант уже писал, но мне не нравится).

rip86oz
() автор топика
Ответ на: комментарий от vga

Я знал что тут помогут :-). Спасибо. А то ещё х3 сколько времени искать пришлось бы.

rip86oz
() автор топика
Ответ на: комментарий от rip86oz

На официальном нету

Блин, а ведь и правда, в ленни не было еще такого, а вот подойдет ли к нему новый удев - вопрос.

vga ★★
()
Ответ на: комментарий от vga

Если нужен именно ленни, то тогда наверное либо с халом играться, либо как ты написал - другая прога из правила. Еще вариант - называть устройство как-то по своему правилом удев - /dev/mysuperdevice, а в проге смотреть за его появлением/исчезанием. Еще libusb - там есть енумерейт юсб-устройств.

vga ★★
()
Ответ на: комментарий от vga

Новый удев не ставится -тянет за собой туеву кучу всего, особенно dpkg 15 версии, который предлагает снести всё, начиная от libc6 до кед. Получилось поставить от squeeze-а linudev и libudev-dev 160 версии - пока мучаюсь с ними. Под рутом вроде как получается подрубится к udev-вовскому сокету, где события раздают (через udev_monitor), но терзают смутные сомнения, что работать не будет, т.к. события не приходят, или я что не так делаю. Сам удев стоит 0.125 кажись. Возможно тут собака и зарыта.

rip86oz
() автор топика
Ответ на: комментарий от vga

>называть устройство как-то по своему правилом удев - /dev/mysuperdevice, а в проге смотреть за его появлением/исчезанием

Поподробнее можно, пжлста. :-) . Как бебе представляю. Надо получить файловый дескриптор на ЧТО-ТО, потом poll\select (про них только мельком читал) ,будут наблюдать за измененим это дескриптора. Т.е. когда устройство (сканер) вставляется, то появляется /dev/canoscanlide70... блин, оч. плохо это ещё понимаю.

ibusb уже использую. Но там мониторинга нет. Только открывать\закрывать\смотреть можно.

ЗЫ если у кого есть сканер CanoScan LiDE 70 - то мне есть что предложить потестить. :-)

rip86oz
() автор топика
Ответ на: комментарий от rip86oz

Толку нет от libudev - udev_monitor-ом можно пользоваться только из под рута, т.к. прав нет (или что-то настраивать надо), да и не получается события получать.

Решил poll-ить «/proc/bus/usb/devices». Работает и ладно, да и зависимостей меньше.

rip86oz
() автор топика
Ответ на: комментарий от rip86oz

Поподробнее можно, пжлста. :-)

Через inotify можно увидеть когда файл появляется/исчезает.

vga ★★
()
Ответ на: комментарий от rip86oz

Решил poll-ить «/proc/bus/usb/devices». Работает и ладно, да и зависимостей меньше.

Недолго ему работать, его ж похоронили в новых ядрах :-)

vga ★★
()
Ответ на: комментарий от vga

Похоронили? :-) Ммм.. не знал. Спасибо.

Тогда видимо inotify придётся. А нельзя-ли poll-ить какой-нибудь uevent в sysfs или ещё что-нибудь?

rip86oz
() автор топика
Ответ на: комментарий от rip86oz

Сделал через Udev правило и inotify. Полученный inotify дескриптор poll-илтся. Всё работает.
VGA - спасибо за помощь.

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