# grab with Pinnacle Systems MovieBox (510-USB)

## DeIM

Hi,

I have Pinnacle Systems MovieBox (510-USB).

lsusb:

```
ID 2304:0223 Pinnacle Systems, Inc. DazzleTV Sat BDA Device
```

I can't manage it to run on windows 10. Tried VLC (directshow), GStreamer (ksvideosrc), VirtualDub (directshow).

It seems there is no Linux driver in kernel for this, but found, there is this:

https://sourceforge.net/projects/pinnaclembusb/

It's a C code and firmware for device but seems nothing more - no help, no doc.

Is there any chance to grab video over this device?

Thanks in advance!

----------

## NeddySeagoon

DeIM,

I've had a good poke around the internet to try to find a driver and eventually downloaded your link and played with that.

When you untar it, it contains  

```
$ ls -l

total 1352

-rw-r--r-- 1 roy roy 446472 Dec  9  2006 2880fw.bin

-rw-r--r-- 1 roy roy 364552 Dec  9  2006 2880ntscfw.bin

-rw-r--r-- 1 roy roy  71292 Dec 11  2006 libpmb.c

-rw-r--r-- 1 roy roy    566 Dec 10  2006 libpmb.h

-rw-r--r-- 1 roy roy 163244 Dec 11  2006 libpmb.o

-rw-r--r-- 1 roy roy    344 Dec  9  2006 Makefile

-rwxr-xr-x 1 roy roy 137632 Dec 11  2006 pmbpipe

-rw-r--r-- 1 roy roy  19670 Dec 10  2006 pmbpipe.c

-rw-r--r-- 1 roy roy  12488 Dec 10  2006 pmbpipe.o

-rwxr-xr-x 1 roy roy 127980 Dec 11  2006 pmbplay

-rw-r--r-- 1 roy roy    740 Dec 10  2006 pmbplay.c

-rw-r--r-- 1 roy roy   1412 Dec 11  2006 pmbplay.o

drwxr-xr-x 2 roy roy   4096 Dec  9  2006 __ref
```

Notice the .o files from 2006

If I try to run it on a /no-multilib/ system, it says 

```
$ ./pmbplay 

bash: ./pmbplay: cannot execute binary file: Exec format error
```

so as shipped its a 32 bit only binary.

No matter, 

```
make clean

make
```

throws away the output files and rebuilds it.  It builds with warnings using gcc-7.2.0.

As I don't have one of these devices, it should have run

```
         if (PinnacleMovieBoxInit() < 0) {

                fprintf(stderr,"Cannot initialize Pinnacle MovieBox device\n");

                return 1;

        }
```

but it didn't 

```
roy@NeddySeagoon_Static ~/downloads/pinnacle/pmb $ ./pmbplay

roy@NeddySeagoon_Static ~/downloads/pinnacle/pmb $ 
```

So it didn't work as I expected.  

Very long shot ...

The firmware files are called 2880fw.bin and 2880ntscfw.bin.  There used to be a lot of cards using the em28xx driver.

I wonder if its one of those and the 'right' driver only needs the USB ID added to work.

On the downside, I don't see any existing driver trying to load a 2880fw.bin file.

----------

## Jaglover

Actually, a search finds this post, which is about modifying existing driver. Worth a try, methinks.

----------

## NeddySeagoon

Jaglover,

That's the sort of mod I had in mind ... but to which driver?

----------

## Jaglover

Neddy,

I didn't dig deep, I assumed there is a similar driver in the kernel?

Edit: grepping kernel source for 400e

```
media/usb/dvb-usb/ttusb2.c: * (e.g. Pinnacle 400e DVB-S USB2.0).

media/usb/dvb-usb/ttusb2.c: * The Pinnacle 400e uses the same protocol as the Technotrend USB1.1 boxes.

media/usb/dvb-usb/ttusb2.c:     .firmware = "dvb-usb-pctv-400e-01.fw",

media/usb/dvb-usb/ttusb2.c:             {   "Pinnacle 400e DVB-S USB2.0",

media/usb/dvb-usb/ttusb2.c:MODULE_DESCRIPTION("Driver for Pinnacle PCTV 400e DVB-S USB2.0");

media/usb/dvb-usb/ttusb2.h: * (e.g. Pinnacle 400e DVB-S USB2.0).

```

----------

## DeIM

Thank all for replies.

Trying kernel way:

```
$ diff /usr/src/linux/drivers/media/dvb-core/dvb-usb-ids.h dvb-usb-ids.h 

307d306

< #define USB_PID_PCTV_510            0x0223
```

```
$ diff /usr/src/linux/drivers/media/usb/dvb-usb/ttusb2.c ttusb2.c 

638d637

<    { USB_DEVICE(USB_VID_PINNACLE, USB_PID_PCTV_510) },

691c690

<    .num_device_descs = 3,

---

>    .num_device_descs = 2,

701,704d699

<                 {   "Pinnacle 510 DVB-S USB2.0",

<                         { &ttusb2_table[2], NULL },

<                         { NULL },

<                 },
```

got progress - dmesg:

https://paste.pound-python.org/show/dLUwdNRT04k61TDPM6QP/

relevant parts:

```
[    0.777732] usb 3-2: new high-speed USB device number 2 using xhci_hcd

[    0.954800] usb 3-2: New USB device found, idVendor=2304, idProduct=0223

[    0.954803] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0

[    0.954804] usb 3-2: Product: Pinnacle High Speed USB Device

[    0.954805] usb 3-2: Manufacturer: Pinnacle Systems, Inc.

[    4.320028] dvb-usb: recv bulk message failed: -110

[    4.320030] ttusb2: there might have been an error during control message transfer. (rlen = 0, was 0)

[    6.368006] dvb-usb: recv bulk message failed: -110

[    6.368008] ttusb2: there might have been an error during control message transfer. (rlen = 0, was 0)

[    6.368051] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.

[    6.368123] dvbdev: DVB: registering new adapter (Pinnacle 510 DVB-S USB2.0)

[    8.416049] dvb-usb: recv bulk message failed: -110

[    8.416054] ttusb2: there might have been an error during control message transfer. (rlen = 4, was 0)

[    8.416056] ttusb2: i2c transfer failed.

[    8.416066] dvb-usb: no frontend was attached by 'Pinnacle 510 DVB-S USB2.0'

[   10.464023] dvb-usb: recv bulk message failed: -110

[   10.464027] ttusb2: there might have been an error during control message transfer. (rlen = 0, was 0)

[   12.512017] dvb-usb: recv bulk message failed: -110

[   12.512021] ttusb2: there might have been an error during control message transfer. (rlen = 0, was 0)

[   12.512026] dvb-usb: Pinnacle 510 DVB-S USB2.0 successfully initialized and connected.

[   12.512082] usbcore: registered new interface driver dvb_usb_ttusb2
```

```
# ls -l /dev/dvb/adapter0/

celkem 0

crw-rw----+ 1 root video 212, 4 16. říj 10.52 demux0

crw-rw----+ 1 root video 212, 5 16. říj 10.52 dvr0

crw-rw----+ 1 root video 212, 7 16. říj 10.52 net0
```

I did nothing with firmware (don't know what directory in /lib/firmware it should be placed), is there a need for it? As there is no fail reading firmware in dmesg.

Please help with next step.

Thanks in advance.

----------

## NeddySeagoon

DeIM,

If the device needs firmware and the driver does not try to load it, because its the wrong driver, the device won't work.

Keep that in mind. 

```
# ls -l /dev/dvb/adapter0/

celkem 0

crw-rw----+ 1 root video 212, 4 16. říj 10.52 demux0

crw-rw----+ 1 root video 212, 5 16. říj 10.52 dvr0

crw-rw----+ 1 root video 212, 7 16. říj 10.52 net0
```

looks promising.

Root on a member of the video group will be able to run a scanner/player ... whatever, to control the device and play received content.

```
[    8.416066] dvb-usb: no frontend was attached by 'Pinnacle 510 DVB-S USB2.0'
```

probably means no tuner.

```
[    8.416056] ttusb2: i2c transfer failed. 
```

Do you have i2c support in your kernel.

I don't expect it to work. The next step is adding printf statements to the kernel module to see what fails.

----------

## DeIM

 *NeddySeagoon wrote:*   

> 
> 
> ```
> [    8.416056] ttusb2: i2c transfer failed. 
> ```
> ...

 

```
# grep I2C .config

CONFIG_REGMAP_I2C=y

# CONFIG_SENSORS_LIS3_I2C is not set

# CONFIG_MOUSE_ELAN_I2C is not set

# CONFIG_MOUSE_SYNAPTICS_I2C is not set

# CONFIG_TOUCHSCREEN_WACOM_I2C is not set

# CONFIG_TOUCHSCREEN_WDT87XX_I2C is not set

# I2C support

CONFIG_I2C=y

CONFIG_ACPI_I2C_OPREGION=y

CONFIG_I2C_BOARDINFO=y

CONFIG_I2C_COMPAT=y

# CONFIG_I2C_CHARDEV is not set

CONFIG_I2C_MUX=m

# Multiplexer I2C Chip support

# CONFIG_I2C_MUX_LTC4306 is not set

# CONFIG_I2C_MUX_PCA9541 is not set

# CONFIG_I2C_MUX_REG is not set

# CONFIG_I2C_MUX_MLXCPLD is not set

CONFIG_I2C_HELPER_AUTO=y

CONFIG_I2C_SMBUS=y

CONFIG_I2C_ALGOBIT=y

# I2C Hardware Bus support

# CONFIG_I2C_ALI1535 is not set

# CONFIG_I2C_ALI1563 is not set

# CONFIG_I2C_ALI15X3 is not set

# CONFIG_I2C_AMD756 is not set

# CONFIG_I2C_AMD8111 is not set

CONFIG_I2C_I801=y

# CONFIG_I2C_ISCH is not set

# CONFIG_I2C_ISMT is not set

# CONFIG_I2C_PIIX4 is not set

# CONFIG_I2C_NFORCE2 is not set

# CONFIG_I2C_SIS5595 is not set

# CONFIG_I2C_SIS630 is not set

# CONFIG_I2C_SIS96X is not set

# CONFIG_I2C_VIA is not set

# CONFIG_I2C_VIAPRO is not set

# CONFIG_I2C_SCMI is not set

# I2C system bus drivers (mostly embedded / system-on-chip)

# CONFIG_I2C_DESIGNWARE_PLATFORM is not set

# CONFIG_I2C_DESIGNWARE_PCI is not set

# CONFIG_I2C_EMEV2 is not set

# CONFIG_I2C_OCORES is not set

# CONFIG_I2C_PCA_PLATFORM is not set

# CONFIG_I2C_PXA_PCI is not set

# CONFIG_I2C_SIMTEC is not set

# CONFIG_I2C_XILINX is not set

# External I2C/SMBus adapter drivers

# CONFIG_I2C_DIOLAN_U2C is not set

# CONFIG_I2C_PARPORT_LIGHT is not set

# CONFIG_I2C_ROBOTFUZZ_OSIF is not set

# CONFIG_I2C_TAOS_EVM is not set

# CONFIG_I2C_TINY_USB is not set

# Other I2C/SMBus bus drivers

# CONFIG_I2C_MLXCPLD is not set

# CONFIG_I2C_STUB is not set

# CONFIG_I2C_SLAVE is not set

# CONFIG_I2C_DEBUG_CORE is not set

# CONFIG_I2C_DEBUG_ALGO is not set

# CONFIG_I2C_DEBUG_BUS is not set

# CONFIG_MFD_AXP20X_I2C is not set

# CONFIG_MFD_DA9052_I2C is not set

# CONFIG_MFD_MC13XXX_I2C is not set

# CONFIG_MFD_INTEL_QUARK_I2C_GPIO is not set

# CONFIG_MFD_TPS65912_I2C is not set

# CONFIG_MFD_ARIZONA_I2C is not set

# CONFIG_MFD_WM831X_I2C is not set

# CONFIG_MFD_WM8350_I2C is not set

CONFIG_VIDEO_IR_I2C=m

# I2C encoder or helper chips

# CONFIG_DRM_I2C_CH7006 is not set

# CONFIG_DRM_I2C_SIL164 is not set

# CONFIG_DRM_I2C_NXP_TDA998X is not set

# I2C HID support

# CONFIG_I2C_HID is not set

# I2C RTC drivers

CONFIG_RTC_I2C_AND_SPI=y

# SPI and I2C RTC drivers
```

----------

## NeddySeagoon

DeIM,

A long time ago that old userspace driver used to work.

Does it work for you if you build it?

If so, its easy :)

There are a lot more   I2C drivers in the kernel than are shown by grep I2C .config. 

Go to the 

```
I2C Hardware Bus support
```

menu in menuconfig and press 'z' to see the hidden ones.

In this case the I2C bus we want is inside the device, so it may be something provided by the driver rather than the kernel.

----------

