LinuxTVWiki:Sandbox

From LinuxTVWiki
Revision as of 07:27, 18 April 2013 by Andybiker (talk | contribs)
Jump to navigation Jump to search

TerraTec T6 Dual DVB-T stick

It consists of

  • Afatech AF9035B-N2 USB Interface with included AF9033 Demodulator
  • Afatech AF9033B-N2 second Demodulator
  • Fitipower FC0012 Tuner (2 off)

Yes, this is a USB stick!

This device is currently not officially supported by Linux, however it is possible to get this device working using a slightly patched version of the AF9035 driver as used in EzCap_DVB_T_Stick.

Instruction how to get the stick working

Follow the instruction to get the AF903x source code archive AF903x.tar.gz in EzCap_DVB_T_Stick.

I run kernel 3.0.1 and therefore I needed a few patched just to get the source code compiled (you may not need all of them, but they shouldn't hurt either):

--- a/src/af903x.h      2009-08-14 16:17:10.000000000 +0200
+++ b/src/af903x.h      2011-08-13 16:49:49.799506005 +0200
@@ -9,7 +9,6 @@
 #include <linux/slab.h>
 #include <linux/module.h>
 #include <linux/kref.h>
-#include <linux/smp_lock.h>
 #include <linux/usb.h>
 #include <asm/uaccess.h>
 #include "dvb-usb.h"
--- a/src/userdef.h     2009-08-14 16:17:10.000000000 +0200
+++ b/src/userdef.h     2011-08-01 22:56:02.626583791 +0200
@@ -8,7 +8,9 @@
 typedef     int             INT;       // 4 bytes
 //typedef     void *          HANDLE; 

+#ifndef NULL
 #define NULL    0
+#endif

 #ifdef IN
 #undef IN
--- a/api/type.h        2009-08-14 16:17:10.000000000 +0200
+++ b/api/type.h        2011-08-01 22:54:38.197342415 +0200
@@ -3,6 +3,15 @@

 #include "userdef.h"// for Linux

+#ifdef IN
+#undef IN
+#endif
+#ifdef OUT
+#undef OUT
+#endif
+#ifdef INOUT
+#undef INOUT
+#endif
 #define IN
 #define OUT
 #define INOUT
--- a/api/usb2impl.c    2011-02-15 11:12:59.000000000 +0100
+++ b/api/usb2impl.c    2011-08-01 21:59:17.635389432 +0200
@@ -6,7 +6,6 @@
 #include <linux/slab.h>
 #include <linux/module.h>
 #include <linux/kref.h>
-#include <linux/smp_lock.h>
 #include <linux/usb.h>
 #include <asm/uaccess.h>
 #include <linux/device.h>

Then, here are some bug fixes to prevent deadlocks of the mutexes:

--- a/src/af903x-drv.c  2009-08-14 16:17:10.000000000 +0200
+++ b/src/af903x-drv.c  2011-08-12 21:26:10.610770606 +0200
@@ -1075,7 +1075,7 @@ DWORD DL_ApCtrl (

     if(PDC->architecture != Architecture_PIP)
     {
-       if ( PDC->Demodulator.chipNumber == 2 && bOn) dwError = DL_NIMSuspend(PDC, false);
+       if ( PDC->Demodulator.chipNumber == 2 && bOn) dwError = DRV_NIMSuspend(PDC, false);

        for (i=0; i<PDC->Demodulator.chipNumber; i++)
        {
@@ -1091,7 +1091,7 @@ DWORD DL_ApCtrl (
            }
        }

-       if(PDC->Demodulator.chipNumber == 2 && !bOn) dwError = DL_NIMSuspend(PDC, true);
+       if(PDC->Demodulator.chipNumber == 2 && !bOn) dwError = DRV_NIMSuspend(PDC, true);
     }
     else
     {
@@ -1100,7 +1100,7 @@ DWORD DL_ApCtrl (
            PDC->fc[ucSlaveDemod].GraphBuilt = 1;

            if (PDC->fc[0].GraphBuilt == 0 ||  PDC->fc[1].GraphBuilt == 0)
-               dwError = DL_NIMSuspend(PDC, false);
+               dwError = DRV_NIMSuspend(PDC, false);

            dwError = DRV_ApCtrl (PDC, ucSlaveDemod, bOn);
        }
@@ -1112,7 +1112,7 @@ DWORD DL_ApCtrl (
            if (PDC->bTunerPowerOff != true) dwError = DRV_ApCtrl (PDC, ucSlaveDemod, bOn);

            if (PDC->fc[0].GraphBuilt == 0 && PDC->fc[1].GraphBuilt == 0 && PDC->bTunerPowerOff == true)
-               dwError = DL_NIMSuspend(PDC, true);
+               dwError = DRV_NIMSuspend(PDC, true);
        }
     }

And finally, the patches to support the TerraTec T6 Dual DVB-T stick:

--- a/src/af903x-devices.c      2009-08-14 16:17:10.000000000 +0200
+++ b/src/af903x-devices.c      2011-08-01 22:06:08.118919600 +0200
@@ -127,6 +127,7 @@ struct usb_device_id af903x_usb_id_table
                { USB_DEVICE(0x15A4,0x1002) },
                { USB_DEVICE(0x15A4,0x1003) },
                { USB_DEVICE(0x15A4,0x9035) },
+               { USB_DEVICE(0x0ccd,0x10b3) },  /* Terratec T6 */
                { 0},           /* Terminating entry */
 };
 MODULE_DEVICE_TABLE(usb, af903x_usb_id_table);
@@ -156,7 +157,7 @@ struct dvb_usb_device_properties af903x_
                        }
                },
 #else
-               .num_adapters = 1,
+               .num_adapters = 2,
                .adapter = {
                        {
                                .caps = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
@@ -198,13 +199,17 @@ struct dvb_usb_device_properties af903x_
                        },
                },
 #endif
-               .num_device_descs =1,
+               .num_device_descs =2,
                .devices =  {
                         {      "ITEtech USB2.0 DVB-T Recevier",
                                { &af903x_usb_id_table[0], &af903x_usb_id_table[1],&af903x_usb_id_table[2],
                                &af903x_usb_id_table[3], &af903x_usb_id_table[4], NULL},
                                { NULL },
                         },
+                        {      "Terratec T6",
+                               { &af903x_usb_id_table[5], NULL},
+                               { NULL },
+                        },
                        {NULL},

                }
--- a/api/Fitipower_FC0012.c    2009-08-14 16:17:10.000000000 +0200
+++ b/api/Fitipower_FC0012.c    2011-08-11 22:54:23.390763425 +0200
@@ -35,6 +35,12 @@ Dword FC0012_open (
        IN  Byte                        chip
 ) {
     Dword error = Error_NO_ERROR;
+    int i;
+    Byte reg[] = {
+       0x05, 0x10, 0x00, 0x00, 0x0a, 0x00, 0x0f, 0xff,
+       0x6e, 0xb8, 0x83, 0xfe, 0x02, 0x00, 0x00, 0x0d,
+       0x00, 0x1f, 0x90, 0x00, 0x04,
+       };

     /** Control tuner enable */
        error = Standard_writeRegisterBits (demodulator, chip, Processor_LINK, p_reg_top_gpiot2_o, reg_top_gpiot2_o_pos, reg_top_gpiot2_o_len, 1);
@@ -47,11 +53,16 @@ Dword FC0012_open (
        if (error) goto exit;

        /** Control pin diode **/
-    error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpioh8_on, 1);
+    error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpioh8_en, 1);
     if (error) goto exit;

-    error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpioh8_en, 1);
+    error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpioh8_on, 1);
     if (error) goto exit;
+
+    for (i=0; i<sizeof(reg)/sizeof(reg[0]); i++) {
+       error = Standard_writeTunerRegisters (demodulator, chip, i+1, 1, &reg[i]);
+       if (error) goto exit;
+    }
 exit:
     return (error);
 }
--- a/api/Fitipower_FC0012_Script.h     2009-08-14 16:17:10.000000000 +0200
+++ b/api/Fitipower_FC0012_Script.h     2011-08-13 16:53:41.984092888 +0200
@@ -15,7 +15,7 @@
 #define VERSION4 0


-#define FC0012_ADDRESS 0xC0
+#define FC0012_ADDRESS 0xC6
 #define FC0012_SCRIPTSETLENGTH 0x00000001

 Word FC0012_scriptSets[] = {
--- a/api/user.h        2009-08-14 16:17:10.000000000 +0200
+++ b/api/user.h        2011-08-10 22:21:31.192856393 +0200
@@ -22,7 +22,7 @@
 #define User_I2C_SPEED              0x07

 /** Define I2C address of secondary chip when Diversity mode or PIP mode is active. */
-#define User_I2C_ADDRESS            0x38
+#define User_I2C_ADDRESS            0x3a

 /** Define USB frame size */
 #define User_USB20_MAX_PACKET_SIZE      512

After that, continue with the instructions in EzCap_DVB_T_Stick.

CAPTURES USB VC-211A AND TERRATEC CINERGY 200

The devices USB Model VC-211A, which can be found with the logos of ACTionMaster, Digitus or LinXcel, were added as card = 74 in cardlist of the em28xx driver at November 26, 2009, by the developer Mauro Chehab. These devices are erroneously recognized by the command "lsusb" as:

Bus 001 Device 002: ID eb1a:2800 eMPIA Technology, Inc. Terratec Cinergy 200

But they are simpler.Besides not having audio processor, are devoid of tuner and EEPROM. And why not have EEPROM, the driver v4l2 needs editing a file *. conf to recognize it and set it up correctly as CARD = 74 (VC-211A - ACTionMaster, or LinXcel Digitus). This can be done in the console as follows:

$ sudo gedit /etc/modprobe.d/captura.conf $ Sudo gedit / etc / modprobe.d / captura.conf

In this file, you must edit and save with the following parameters:

options em28xx card=6 core_debug=1 options em28xx card = 6 core_debug = 1

Obviously, until that amendment to em28xx kernel is integrated into the various Linux distributions that use v4l2, the user that have a VC-211A should download the tree v4l2 and compile the driver as guides on page How_to_Obtain, _Build_and_Install_V4L-DVB_Device_Drivers.

Before this change, the resolution of 720x480 required by v4l2 version 0.1.2 was not compatible with the captors VC-211A and older ones, since they only work with 640x480. This error generated a loss of data causing the captured image does not exceed the maximum of 360x240. This whole problem has been corrected by the master Mauro Chehab, which is worthy of respect and gratitude of the entire Linux community and especially the fans for the video capture.

We take this opportunity to give our thanks to all those who have worked directly or indirectly in the developed project video4linux.

This is a linux supported dvb t2 dual stick.

By Raymond Eduvirgens


File:Terratec Cinergy T USB RC HD front
Front of the Terratec Cinergy TStick RC HD

A Terratec DVB-T USB stick.

Overview/Features

  • USB 2 interface
  • Inputs: Antenna (Composite), Remote (untested)

Components Used

List the hardware ICs and modules used by the device here. For example:

Other Images

Use the included code to insert other images if necessary. Add as many high resolution pictures as you can i.e the card, the original box, the remote and, when uploading the files to the wiki, give them detailed specific names. Note: only use images taken by yourself or those 3rd party images for which you have received express written consent (such as from a vendor) that permits their usage. For example:

File:Uusi.jpg

Identification

  1. lsusb -v

[...] Bus 002 Device 002: ID 0ccd:00d3 TerraTec Electronic GmbH Device Descriptor:

 bLength                18
 bDescriptorType         1
 bcdUSB               2.00
 bDeviceClass            0 (Defined at Interface level)
 bDeviceSubClass         0
 bDeviceProtocol         0
 bMaxPacketSize0        64
 idVendor           0x0ccd TerraTec Electronic GmbH
 idProduct          0x00d3
 bcdDevice            1.00
 iManufacturer           1 Realtek
 iProduct                2 RTL2838UHIDIR
 iSerial                 3 00000001
 bNumConfigurations      1
 Configuration Descriptor:
   bLength                 9
   bDescriptorType         2
   wTotalLength           34
   bNumInterfaces          2
   bConfigurationValue     1
   iConfiguration          4 USB2.0-Bulk&Iso
   bmAttributes         0x80
     (Bus Powered)
   MaxPower              500mA
   Interface Descriptor:
     bLength                 9
     bDescriptorType         4
     bInterfaceNumber        0
     bAlternateSetting       0
     bNumEndpoints           1
     bInterfaceClass       255 Vendor Specific Class
     bInterfaceSubClass    255 Vendor Specific Subclass
     bInterfaceProtocol    255 Vendor Specific Protocol
     iInterface              5 Bulk-In, Interface
     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
   Interface Descriptor:
     bLength                 9
     bDescriptorType         4
     bInterfaceNumber        1
     bAlternateSetting       0
     bNumEndpoints           0
     bInterfaceClass       255 Vendor Specific Class
     bInterfaceSubClass    255 Vendor Specific Subclass
     bInterfaceProtocol    255 Vendor Specific Protocol
     iInterface              5 Bulk-In, Interface

Device Qualifier (for other device speed):

 bLength                10
 bDescriptorType         6
 bcdUSB               2.00
 bDeviceClass            0 (Defined at Interface level)
 bDeviceSubClass         0
 bDeviceProtocol         0
 bMaxPacketSize0        64
 bNumConfigurations      2

Device Status: 0x0000

 (Bus Powered)

[...]

Making it Work

The Terratec Cinergy TStick RC HD works with [Ambosa's RTL2832U driver|https://github.com/ambrosa/DVB-Realtek-RTL2832U-2.2.2-10tuner-mod_kernel-3.0.0/] It won't find any channel with the included antenna, but when connected to the aerial outlet (building antenna) it works fine with occassional square noise or very short cuts (maybe more often in HD channels ???).

Can't test very often, because it's at a friend's, not mine.

I haven't found an email address to tell Ambrosa and I don't have a GitHub account, maybe someone who has can send a link to the GitHub forum?

The system I tested is a Debian squeeze, with a custom compiled linux-libre 3.2.1.

I followed

[1]

(except I used KBUILD_SRC=/home/[...]/linux-3.2.1 make instead of make ) and applied the following patch (simply add the vendor and device ids )

diff --git a/RTL2832-2.2.2_kernel-3.0.0/Makefile b/RTL2832-2.2.2_kernel-3.0.0/Makefile index b4fec9a..4816f69 100644 --- a/RTL2832-2.2.2_kernel-3.0.0/Makefile +++ b/RTL2832-2.2.2_kernel-3.0.0/Makefile @@ -4,10 +4,10 @@

# Choose here wich include file to use: from kernel 3.0.0 (good for 3.1.0) or from kernel 3.2.0

# kernel 3.0.0 / 3.1.0

-INCLUDE_EXTRA_DVB := include-300 +#INCLUDE_EXTRA_DVB := include-300

# kernel 3.2.0

-#INCLUDE_EXTRA_DVB := include-320 +INCLUDE_EXTRA_DVB := include-320

# ----------------------------------------

diff --git a/RTL2832-2.2.2_kernel-3.0.0/rtl2832u.c b/RTL2832-2.2.2_kernel-3.0.0/rtl2832u.c index 6e7eac0..1ed364c 100644 --- a/RTL2832-2.2.2_kernel-3.0.0/rtl2832u.c +++ b/RTL2832-2.2.2_kernel-3.0.0/rtl2832u.c @@ -785,6 +785,7 @@ static struct usb_device_id rtl2832u_usb_table [] = {

       { USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_00A9)}, // 29
       { USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_00B3)}, // 30

+ { USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_00D3)}, // 30

       { USB_DEVICE(USB_VID_AZUREWAVE_2, USB_PID_AZUREWAVE_3234) },    // 31
       { USB_DEVICE(USB_VID_AZUREWAVE_2, USB_PID_AZUREWAVE_3274) },    // 32

diff --git a/RTL2832-2.2.2_kernel-3.0.0/rtl2832u.h b/RTL2832-2.2.2_kernel-3.0.0/rtl2832u.h index a6b5d77..3a09485 100644 --- a/RTL2832-2.2.2_kernel-3.0.0/rtl2832u.h +++ b/RTL2832-2.2.2_kernel-3.0.0/rtl2832u.h @@ -47,6 +47,7 @@

#endif
#define        USB_PID_TERRATEC_00A9                                   0x00A9
#define        USB_PID_TERRATEC_00B3                                   0x00B3

+#define USB_PID_TERRATEC_00D3 0x00D3

#ifndef USB_VID_AZUREWAVE_2
#define USB_VID_AZUREWAVE_2                                     0x13D3


Firmware

I haven't copied any firmware and I doubt linux-libre would have loaded it. I think it works without any firmware file. Didn't check if there is any firmware somehow embedded in the source I compiled or it's simply shipped already on the usb stick.

Drivers

[Ambosa's RTL2832U driver|https://github.com/ambrosa/DVB-Realtek-RTL2832U-2.2.2-10tuner-mod_kernel-3.0.0/] modified with the vendor and device Id.

It says GPL but I haven't researched the source, authorship attributions or changelog.

Sample Kernel Output

  1. dmesg

[...] [ 5.465403] USB Video Class driver (1.1.1) [ 5.604042] usb 2-3: new high-speed USB device number 2 using ehci_hcd [ 5.748596] usb 2-3: New USB device found, idVendor=0ccd, idProduct=00d3 [ 5.748599] usb 2-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 5.748602] usb 2-3: Product: RTL2838UHIDIR [ 5.748603] usb 2-3: Manufacturer: Realtek [ 5.748605] usb 2-3: SerialNumber: 00000001 [ 5.760898] IR NEC protocol handler initialized [ 5.762107] IR RC5(x) protocol handler initialized [ 5.763207] IR RC6 protocol handler initialized [ 5.765032] Disabling lock debugging due to kernel taint [ 5.765306] IR JVC protocol handler initialized [ 5.766439] dvb-usb: found a 'USB DVB-T Device' in warm state. [ 5.766446] dvb-usb: will pass the complete MPEG2 transport stream to the sof tware demuxer. [ 5.767470] IR Sony protocol handler initialized [ 5.768708] IR MCE Keyboard/mouse protocol handler initialized [ 5.768847] DVB: registering new adapter (USB DVB-T Device) [ 5.770281] lirc_dev: IR Remote Control driver registered, major 252 [ 5.770635] IR LIRC bridge handler initialized [ 5.783837] RTL2832U usb_init_bulk_setting : USB2.0 HIGH SPEED (480Mb/s) [ 6.024032] usb 3-3: new low-speed USB device number 2 using ohci_hcd [ 6.024058] RTL2832U check_tuner_type : E4000 tuner on board... [...]

Remote Control Support

Untested.

External Links