fpv-wtf / voc-poc

A PoC for USB video out from the DJI FPV Goggles, inspired by The Video Out Club
MIT License
431 stars 80 forks source link

Goggles 2 and Goggles 2 Integra #20

Closed socalengineer closed 1 year ago

socalengineer commented 1 year ago

Hi,

Is there any way to update this code base to work with Goggles 2 and Goggles 2 Integra? Thank you

j005u commented 1 year ago

They use a new, unknown streaming method. That would need to get reverse engineered first.

Cosmostreamer already has support if you need it.

SuZeKi commented 1 year ago

Hi i bought goggles ingtegra and i want to put OSD of betaflight. I cant root goggles WTFOS dont detect device. What u mean Cosmostream have suppot to root it, or what? Thanks a lot fo your work its inredible.

socalengineer commented 1 year ago

Hi,

I ended up getting it to work well with the DJI Fly App on Android. Now I just need an Android system that can do HDMI out, but it works well on my Lenovo P11 Gen2 Pro tablet with a great screen for the interim.

Here are the steps to get it to work on the DJI Fly App:

  1. Need DJI Fly App 1.9.9 for Goggles 2 Integra or higher
  2. Make sure OTG cable was connected to the goggles side not the android side
    1. Had to connect goggles to drone before connecting goggles to android.

Any cheap android box should work as long as it has HDMI, compatible USB, and can install the DJI Fly App

Works really well better than Goggles V2 because you get the on screen display also! Which is cool for spectators.

j005u commented 1 year ago

Hi i bought goggles ingtegra and i want to put OSD of betaflight. I cant root goggles WTFOS dont detect device. What u mean Cosmostream have suppot to root it, or what? Thanks a lot fo your work its inredible.

Cosmostreamer supports doing video out of Goggles 2/Integra.

There is no root method for the new gear yet, wtfos only works with Goggles V1/V2, Air Unit and Air Unit Lite. Adding support for the new goggles/O3 will require a completely new root method, therefor I can't promise if/when we may be able to add support.

j005u commented 1 year ago

Hi,

I ended up getting it to work well with the DJI Fly App on Android. Now I just need an Android system that can do HDMI out, but it works well on my Lenovo P11 Gen2 Pro tablet with a great screen for the interim.

Here are the steps to get it to work on the DJI Fly App:

  1. Need DJI Fly App 1.9.9 for Goggles 2 Integra or higher
  2. Make sure OTG cable was connected to the goggles side not the android side
    1. Had to connect goggles to drone before connecting goggles to android.

Any cheap android box should work as long as it has HDMI, compatible USB, and can install the DJI Fly App

Works really well better than Goggles V2 because you get the on screen display also! Which is cool for spectators.

Glad you got it sorted. If you happen to find an android phone/tablet with a dedicated HDMI out or 2 proper USB ports (one of which can do DP over USB) then definitely please let me know. This keeps coming up.

Otherwise yeah, an Android TV box is probably the best bet. Although at that point I'd also consider getting a raspi and Cosmostreamer license...

socalengineer commented 1 year ago

I found a post that says it works with a USB-C hub, but you have to enable developer options and USB debugging. I will post back with results.

"Just to update everyone who come across my post, I ended up purchasing the Asus ROG 5 Gaming Phone with Global Rom. By enabling Developer Options and USB Debugging I was able to change the USB Default to Transfer Files. Works great with my DJI Mini 2!"

j005u commented 1 year ago

I found a post that says it works with a USB-C hub, but you have to enable developer options and USB debugging. I will post back with results.

"Just to update everyone who come across my post, I ended up purchasing the Asus ROG 5 Gaming Phone with Global Rom. By enabling Developer Options and USB Debugging I was able to change the USB Default to Transfer Files. Works great with my DJI Mini 2!"

This may or may not work depending on how the new goggles handle the USB connection exactly.

On V2s for DJI Fly app streaming it's a funny setup where the goggles actually become the usb "host" (like your PC) and the phone becomes the "gadget" using something called AOA on the Android side. What this means is that the USB connection is reversed and you'd need to plug the USB-C hub into the goggles rather than the phone. Therefor no HDMI.

However the Goggles 2 / Integra changed the USB comms up significantly, so there's some chance this might still work.

tl;dr; don't spend money on a USB-C hub for just this without checking if it works first.

socalengineer commented 1 year ago

Too late, I already bought them. Will reply back if it works or not.

jonlil commented 11 months ago

Some details that might help others getting longer

I'm on ArchLinux and had to connect the goggles via USB C -> USB A cable. I was able to open the device but it seems like the goggles does not react on the Magic byte (which is already knowned).

Let me know if I can provide more details or writing some test code :)

➜  voc-poc git:(master) ✗ sudo lsusb -v | grep -A500 DJI 
Bus 001 Device 088: ID 2ca3:0020 DJI Technology Co., Ltd. e3t
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.10
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x2ca3 DJI Technology Co., Ltd.
  idProduct          0x0020 
  bcdDevice            4.09
  iManufacturer           1 DJI
  iProduct                2 e3t
  iSerial                 3 987654321ABCDEF
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x00d5
    bNumInterfaces          8
    bConfigurationValue     1
    iConfiguration          4 rndis,mass_storage,bulk,acm
    bmAttributes         0x80
      (Bus Powered)
    MaxPower                2mA
    Interface Association:
      bLength                 8
      bDescriptorType        11
      bFirstInterface         0
      bInterfaceCount         2
      bFunctionClass        224 Wireless
      bFunctionSubClass       1 Radio Frequency
      bFunctionProtocol       3 RNDIS
      iFunction               7 RNDIS
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass       224 Wireless
      bInterfaceSubClass      1 Radio Frequency
      bInterfaceProtocol      3 RNDIS
      iInterface              5 RNDIS Communications Control
      ** UNRECOGNIZED:  05 24 00 10 01
      ** UNRECOGNIZED:  05 24 01 00 01
      ** UNRECOGNIZED:  04 24 02 00
      ** UNRECOGNIZED:  05 24 06 00 01
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval               9
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass        10 CDC Data
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              6 RNDIS Ethernet Data
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         8 Mass Storage
      bInterfaceSubClass      6 SCSI
      bInterfaceProtocol     80 Bulk-Only
      iInterface              9 Mass Storage
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        3
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass     67 
      bInterfaceProtocol      1 
      iInterface             11 BULK Interface
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x03  EP 3 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x84  EP 4 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        4
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass     67 
      bInterfaceProtocol      1 
      iInterface             12 BULK Interface
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x04  EP 4 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x85  EP 5 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        5
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass     67 
      bInterfaceProtocol      1 
      iInterface             13 BULK Interface
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x05  EP 5 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x86  EP 6 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        6
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass     67 
      bInterfaceProtocol      1 
      iInterface             14 BULK Interface
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x06  EP 6 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x87  EP 7 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        7
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass     67 
      bInterfaceProtocol      1 
      iInterface             15 BULK Interface
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x07  EP 7 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x88  EP 8 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
Binary Object Store Descriptor:
  bLength                 5
  bDescriptorType        15
  wTotalLength       0x0016
  bNumDeviceCaps          2
  USB 2.0 Extension Device Capability:
    bLength                 7
    bDescriptorType        16
    bDevCapabilityType      2
    bmAttributes   0x00000006
      BESL Link Power Management (LPM) Supported
  SuperSpeed USB Device Capability:
    bLength                10
    bDescriptorType        16
    bDevCapabilityType      3
    bmAttributes         0x00
    wSpeedsSupported   0x000f
      Device can operate at Low Speed (1Mbps)
      Device can operate at Full Speed (12Mbps)
      Device can operate at High Speed (480Mbps)
      Device can operate at SuperSpeed (5Gbps)
    bFunctionalitySupport   1
      Lowest fully-functional device speed is Full Speed (12Mbps)
    bU1DevExitLat           1 micro seconds
    bU2DevExitLat         500 micro seconds
Device Status:     0x0001
  Self Powered