Using a composite device with kernel drivers and libusb at the same time

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I hope this is an acceptable place to ask this question. I've spend a bit of time reverse-engineering the USB protocol for a subset of Blackmagic Design video mixers and I have made a userspace implementation to make these devices usable in Linux with libusb. This is working great but the roadblock I have that I can't find a reasonable solution for is that these devices also expose an UVC webcam.

While my control software is active it's not possible to use the UVC webcam functionality of the device because with libusb I have to detach the kernel from the interfaces to make my userspace access work. As far as I can find documented online there's no way to have half a composite device handled by kernel drivers and half with userspace drivers in Linux. It seems to me the only solution is to make a kernel driver to bind to the control interface and have that kernel driver pass-through to userspace somehow with a custom protocol? If that is the case would such a driver even be supported in Linux?

For reference the device I'm working has these looks like this:

USB 1-4  [1edb:be55] Blackmagic design Blackmagic Design [serial]
   Class EF SubClass 02 Protocol 01
      Interface 0 FF/03/00 Unknown <- Blackmagic USB configuration protocol
      Interface 1 FF/02/00 Unknown <- Blackmagic USB control protocol (I'm using this with libusb)
      Interface 2 FF/04/00 Unknown <- Unknown
      Interface 3 FE/01/01 Unknown <- DFU
      Interface 4 0E/01/01 Blackmagic Design <- UVC camera
      Interface 5 0E/02/01 Unknown <- UVC camera
      Interface 6 01/01/00 Blackmagic Design <- ALSA
      Interface 7 01/02/00 Unknown <- ALSA

If this is not the right place for this question, then where would the right place be?

Greetings,
Martijn Braam





[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux