Logitech C510 LED

Szereztem egy ilyen kamerát és irritált, hogy mindig világít a LED ha megy.
Az irritációt fokozta, hogy erre Windows alatt van feature.

Első ötlet, a szokásos, VirtualBox + usbmon+ Wireshark, de a kamera drivere eszköz nem indítható el hibát dob VBOX-ban.

Vegyük hát elő az USBSnoopot meg a natív Windowsunkat.
http://benoit.papillault.free.fr/usbsnoop/

Bármennyire is hihetelen, Win7 32 biten működik mint a kisangyal. Ez ám a backward compatibility :)

Screenshot sajnos nincs, installáljuk a drivert, nyomunk egy replugot az eszközön, majd töröljük a logot.
Végezzük el amit szeretnénk az eszközön, zárjuk be a naplófájlt, és mentsük el másként:

https://dl.dropbox.com/u/4295670/logitech%20C510/C510/LED%20AUTO.txt
https://dl.dropbox.com/u/4295670/logitech%20C510/C510/LED%20OFF.txt
https://dl.dropbox.com/u/4295670/logitech%20C510/C510/LED%20ON.txt

Térjünk vissza Linux alá, és toljunk egy
sudo lsusb -v -d 046d:081d | grep -B 5 -A 20 guidEx
parancsot melynek eredményeképpen ki lesznek az Extension controlok listázva:
https://dl.dropbox.com/u/4295670/logitech%20C510/usb_descriptors.txt

Olvassuk el az USB Video Class 1.1 documentation.pdf ide vonatkozó szekcióját (4.2.2.4) innen:
http://www.usb.org/developers/devclass_docs/USB_Video_Class_1_1_090711…
Vagy kérdezzük meg a linux-uvc-devel levelistán.

Mit is látunk tehát:
bRequest = 01 == SET_CUR
wValue = 900 >> 2 == 9 (selector)
wIndex = 802 >> 2 == 8 (bUnitID) esetünkben a GUID-ja {212de5ff-3080-2c4e-82d9-f587d00540bd}

Az ilyen Extension UVC controlok nem szeretnek maguktóltól létrejönni, cserébe van userspace API mivel meg lehet mondani a kernelnek, hogy erre és erre az UVC ext. controlra tapasszon egy V4L2 controlt:
http://www.kernel.org/doc/Documentation/video4linux/uvcvideo.txt UVCIOC_CTRL_MAP ioctl

Ezt általában az uvcdynctrl programmal szokás (libwebcam része). Elvetemültebbek belehardcodolják a mappelést a programnaikba lásd mjpg-streamer.

https://sourceforge.net/p/libwebcam/code/

Ez egy XMl fájlból szopkodja ki a mappeléseket.
Az XML- fájlt elnézve a controlunk GUID-ja szerepel, csak mintha keverednének a bájtok.
A kódot megnézve ez csak optikai csalódás:


#define GUID_ARGS(guid) \
        (guid)[3],  (guid)[2],  (guid)[1],  (guid)[0], \
        (guid)[5],  (guid)[4], \
        (guid)[7],  (guid)[6], \
        (guid)[8],  (guid)[9], \
        (guid)[10], (guid)[11], (guid)[12], \
        (guid)[13], (guid)[14], (guid)[15]

Meg is találom benne a controlt amit keresek: peripheral_led_control_v3, csak V4L2 mapping nincs hozzá felvive.
A map elkészítése után szomorúan konstatálom, hogy ez bizony villogni nem tud mint a QuickCam PRO for Notebook anno.

Kontrolok listázása:
uvcdynctrl -c

Importálás XML-ből:
uvcdynctrl -i ~/logitech.xml

LED állítgatása:
uvcdynctrl -s 'LED1 mode' 0
uvcdynctrl -s 'LED1 mode' 1

Öröm.

Ha valaki hasonlóra vágyik akkor:
https://sourceforge.net/u/martonmiklos/libwebcam/ci/59c631ed80f21879761…

Hozzászólások

Van már valami 64 bites windows alatt is működő megoldás, mint az usbsnoop? (amúgy grat :) )