RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Задача - подключить камеру к freebsd. Для начала нам необходимо просто подключить камеру к freebsd и заставить ее работать.
Итак, на сервере используется freebsd 7.0. После подключения камеры:
# usbdevs -v Controller /dev/usb4: addr 1: full speed, self powered, config 1, UHCI root hub(0x0000), Intel(0x0000), rev 1.00 port 1 addr 2: full speed, power 100 mA, config 1, product 0x08d7(0x08d7), vendor 0x046d(0x046d), rev 1.00
# dmesg | grep 0x046d ugen0: <vendor 0x046d product 0x08d7, class 0/0, rev 1.10/1.00, addr 2> on uhub4
vendor 0x046d - говорит о производителе камеры(Logitech) product 0x08d7 - это модель камеры
Поиск в сети решения для работы с камерой дало следующие результаты, * существует порт graphics/spcaview, который позволяет без лишних наворотов и зависимостей снимать с камеры jpeg изображения, а так же работать с mjpeg форматом(потоковый jpgeg) * graphics/qcamview - не подошел по причине отсутствия драйвера для конкретной модели и привязки к X11 * multimedia/pwcbsd - требует video4linux и совместимости с linux'ом
Из-за того, что qcamview и pwcbsd требую слишком много стороннего софта(в частности X11 и/или поддержки linux на бинарном уровне) для всего-лишь снятия изображения с камеры, решено было использовать graphics/spcawiew
Устанавливаем порт, но не через
# pkg_add -r graphics/spcawiew
т.к. как выяснилось в последствии, поддержки текущей камеры нет в программе, а компилируем порт из исходников:
# cd /usr/ports/graphics/spcawiew # make && make install && rehash
При работе freebsd с камерами создается специальное устройство ugenX(например, /dev/ugen0) Проверяем поддержку камеры
# spca5shot -d /dev/ugen0 -i Not found SPCA50x based usb camera, or Permission denied
Поддержки камеры нет, увы. Но мы ее добавим! Находим файл с данными о камерах и просматриваем его на предмет наличия поддержки камеры производителя 0x046d:
Как можно заметить, поддержки нашей камеры нет в файле Поиск в сети по 0x08d7 модели камеры показал, что такая поддержка имеется в драйвере Logitech видеокамер gspcav1(http://freebsd.3dn.ru/введите_адрес). gspcav1 - это общий файл поддержки видеокамер для *nix систем, однако в скомпилированном виде он требует бинарной совместимости с linux, что нам не подходит.
Т.к. порт graphics/spcawiew основан именно на этом драйвере, скачиваем исходники драйвера для анализа http://freebsd.3dn.ru/введите_адрес. Нас интересует файлы gspca_core.c и gspca.h
Анализ исходника gspca_core.c дает следующий код по модели 0x08d7:
Осталось добавить эти данные в драйвер spca5xx.c из нашего порта graphics/spcawiew и, возможно, появиться поддержка камеры. Но прежде, нужно не забыть стереть уже скомпилированные данные:
# cd /usr/ports/graphics/spcawiew # make clean
Теперь наша задача внести изменения в исходник драйвера и откомпилировать его. Применяем патчи но не компилируем исходник
# make patch
Далее редактируем /usr/ports/graphics/spcaview/work/spca5xx-20060402/drivers/usb/spca5xx.c любимым редактором и вносим следующие изменения: Добавляем в секцию устройства 0x046d
Но это еще не все. Исходный текст spca5xx.c показывает, что для freebsd используются более расширенные настройки! Для добавления необходимой информации ищем какую-нибудь запись с сенсором SENSOR_HV7131C, например:
Ура! Работает! Теперь можно делать снимки с камеры используя команду spca5shot, так же можно настроить доступ к устройству /dev/ugen0 не из-под рута и модифицировать программу онлайн-просмотра камеры, но об этом в другой раз. PS Так же можно подключить отдельные камеры, которых нет в исходниках, однако, возможно, потребуется эксперементировать с настройками. PPS Моя первая статья, просьба указать на недостатки! )