У меня есть веб-камера Logitech PTZ Pro 2, я хочу использовать ее в качестве веб-камеры на Raspberry Pi, но я также хочу использовать ее элементы управления панорамированием, наклоном и масштабированием.
К сожалению, uvcdynctrl не поддерживает мою камеру должным образом, и я не смог найти ничего, кроме официального приложения Logitech для Windows для ее правильного управления и Logitech SRK (Software Reference Kit). SRK - это демонстрационная версия C ++, позволяющая отлично управлять функциями PTZ в Linux, но я не являюсь разработчиком C ++ (или C) и очень не в себе.
Я запустил демонстрацию SRK, использовал ее, чтобы переместить камеру влево на один «блок», и запечатлел ее в Wireshark, что дает мне это.
![Wireshark USB capture](https://i.stack.imgur.com/jBmHM.png)
Из некоторых возни с lsusb
у камеры нет конечных точек USB OUT, а конечной точки 0x00
(0), которая показана на снимке, нет. Я знаю, что конечная точка 0 является особенной и используется для описания устройства или чего-то в этом роде, но я действительно запутался тогда, почему Wireshark ясно показывает, что мне нужно выполнить передачу управления в конечную точку 0 с этой 32-байтовой строкой, которая также была перехвачена - которая должна двигаться камера ушла.
Я пробовал это
import usb.core
import usb.util
dev = usb.core.find(idVendor=0x046d, idProduct=0x085f)
cfg = dev.get_active_configuration()
ep = usb.util.find_descriptor(cfg, bInterfaceClass=0x03)
buf = bytes([0x0b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])
dev.write(0x00, buf)
Но я просто получаю
ValueError: Invalid endpoint address 0x0
Я тоже попробовал это, взяв значения из захвата Wireshark
dev.ctrl_transfer(0x21, 9, 0x020b, 2, buf)
Но это встречается с
USBError: [Errno 16] Resource busy
Я понимаю, что не выгружал драйвер ядра для него (с dev.detach_kernel_driver(interface)
), но если я это сделаю, он не сможет быть использован как веб-камера.
Я могу только предположить, что неправильно переводю запрос из Wireshark в PyUSB, потому что вижу, что он работает в Wireshark с программным обеспечением Logitech, и камера движется.
На случай, если это поможет, полный lsusb -v
для устройства доступен здесь: https://pastebin.com/QbTTgwK0