TerraTec Cinergy T USB XXS

From LinuxTVWiki
Revision as of 07:40, 17 September 2009 by Hlangos (Talk | contribs)

Jump to: navigation, search

A DVB-T USB device from TerraTec.

It is supported under Linux.


Very tiny device. Very big remote. (The remote feels slightly cheap though. Due to rubbery buttons and light weight.)

Components Used

This Device has an DiB7070P Chipset, which consists of an DiB7000PC as a demodulator an a DiB0070 for tuning.


There are two vendor/product ids for this card:

USB ID: 0ccd:0078

USB ID: 0ccd:00ab

listed here http://linux.terratec.de/tv_en.html

Making it Work (generic for all dib0700)


August 21, 2008 - New firmware file fixing the last cause for i2c errors and disconnects and providing a new, more modular i2c request formatting.

You will need the dvb-usb-dib0700-1.20.fw firmware file in /lib/firmware or the relevant place for your distribution.

You may need to change the name of the file to dvb-usb-dib0700-1.10.fw or create a link until the driver code reflects that change.

For archival purposes: dvb-usb-dib0700-1.10.fw firmware file

August 29,2008 - Issues with Firmware 1.20. Some issues have been found with the latest version of the firmware. Users may wish to continue to use 1.10 unless they have patched their v4l-dvb code with dib0700_new_i2c_api.patch.

November 15,2008 - Issues with Firmware 1.20.

  • The above mentioned dib0700_new_12c_api.patch is not available discretely but is now rolled into the mercurial drivers
  • dvb-usb-dib0700-1.20.fw firmware file is now stable for reception, but remote control functionality is broken; any key press is repeated until the next key is pressed. The only way to get remote control functionality presently is to roll back to 1.10 firmware and suffer the occasional disconnect.
  • The mercurial drivers have been changed so they now load 1.20 firmware. To revert to 1.10 firmware you need to rename your firmware file to dvb-usb-dib0700-1.20.fw or provide a link of that name.
  • To avoid spurious remote control signals with 1.20 firmware, you need to edit /etc/modprobe.d/options or from Ubuntu onwards /etc/modprobe.d/options.confand add:
options dvb_usb disable-rc-polling=1

November 28,2008 - i2c errors. Changes were made to the remote control drivers on November 16,2008 to correct the repeat key problem. The card is generally stable for dual tuner reception and remote control function with Firmware 1.20.

November 10,2009 - mt2060 I2C write failed. Possible regression of a driver bug raised against Ubuntu running 2.6.27-14 and 2.6.31-2.17 causing mt2060 I2C errors in MythTV useage with firmware 1.20. https://bugs.launchpad.net/ubuntu/+source/linux/+bug/397696 Recommend check the kernel extensions listed here for Low Noise Activation and rc_polling are loaded with correct config file name for your distribution, EIT listings information is turned off until a suitable delay (500ms-1000ms)is added to a single card (not both) and the card has correctly been added to the database as two tuners (no additional NULL entries) in the mythtv recordcard table.


It requires the dib0700 driver. Just use Mercurial by following the How to Obtain, Build and Install V4L-DVB Device Drivers instructions.

Forcing the activation of LNAs (Low Noise Amplifier)

You may have to force LNA to get this card working:

In /etc/modprobe.d/options add:

options dvb_usb_dib0700 force_lna_activation=1

Disabling the remote control sensor

You may want to disable the remote control sensor if you are using another one and want to avoid error messages in the logs:

In /etc/modprobe.d/options add:

options dvb_usb disable_rc_polling=1

All relevant kernel modules options

In /etc/modprobe.d/options add:

options [module name] [option name]=[setting]

Get the parameters list using

modinfo [name of kernel module]

The debug values are bit fields, with each bit representing a different category. Add values to turn on multiple debugging categories.

Turn on debugging
Values: integer
Default: 0 (off)
Enable work-around for buggy SFNs
Values: integer
Default: 0 (disabled)
Turn on debugging
Values: integer
Default: 0 (off)
Force the activation of LNAs (Low Noise Amplifier), if applicable for the device
Values: integer
Default: 0 (automatic/off)
Set IR protocol
Values: integer 0=NEC, 1=RC5, 2=RC6
Default: 1
Set debugging level
Values: integer (bitmap) 1=info, 2=fw, 4=fwdata, 8=data
Default: 0 (none)
Set debugging level
Values: integer (bitmap) 1=info, 2=xfer, 4=pll, 8=ts, 16=err, 32=rc, 64=fw, 128=mem, 256=uxfer
Default: 0 (none)
Disable remote control polling
Values: integer
Default: 0 (enabled)
Force all DVB USB devices to use a PID filter, if any
Values: integer
Default: 0 (disabled)
Enable debug messages
Values: integer
Default: 0 (disabled)
Turn on frontend core debugging
Values: integer
Default: 0 (off)
Wait n seconds after close() before suspending hardware
Values: integer
Default: 0
Set whether INVERSION_AUTO is forced on
Values: integer
Default: 0 (off)
Wait n milliseconds for lock after a tuning attempt
Values: integer
Default: 0
Turn LNB power off on sleep
Values: integer
Default: 1 (enabled)
Enable verbose debug messages
Values: integer
Default: 0 (off)
Turn on debugging
Values: integer
Default: 0
Turn on device debugging
Values: integer
Default: 0 (off)
Turn on debugging
Values: integer
Default: 0 (off)

Remote control support

Using evdev

As long as the evdev module is loaded, a remote that is recogniced as hid device will be treated as a usb keyboard and this means that you can avoid using lirc.

However, many of the keys on your remote may generate keycodes which are not mapped to anything, by default.

In X you can use xev to find the keycodes and xmodmap to map them to useful symbols. Unfortunately, some keys may generate keycodes that X doesn't recognize at all and the device does not support keymaps, or this would be easy to fix.

Using LIRC

Usually remote controls in linux are managed by the lirc software collection.

To get lirc up and running you need to configure some things.

  • Settings for the hardware
    • Where does lirc get its input from? aka. the DEVICE. E.g. /dev/input/event3
    • How to handle the input? aka. the DRIVER. E.g. devinput
  • Settings for mapping driver output generated by your remote (a bunch of hex numbers) to key names (something like 0..9, Volume+, Next, Record)
  • Settings for mapping key presses to actions (usually located in your .lircrc)
Mythubuntu case

On mythubuntu 10.10, you just have to add this line in /etc/udev/rules.d/65-persistent-hauppauge.rules

SUBSYSTEM=="input", KERNEL=="event*", ATTRS{idVendor}=="2040", ATTRS{idProduct}=="8400", SYMLINK+="lirc0"
Device/driver settings

Find the IR receiver's device by looking in the dmesg output for a line similar to:

input: IR-receiver inside an USB DVB receiver as /class/input/input4

Additionally, the IR receiver will be listed if you execute the command:

cat /proc/bus/input/devices

For example:

I: Bus=0003 Vendor=2040 Product=9950 Version=0100
N: Name="IR-receiver inside an USB DVB receiver"
P: Phys=usb-0000:07:01.2-1/ir0
S: Sysfs=/class/input/input4
U: Uniq=
H: Handlers=kbd event4 
B: EV=3
B: KEY=14afc336 284284d00000000 0 480058000 219040000801 9e96c000000000 90020000000ffd

In this example, the remote control gives output into /dev/input/event4.

The event number depends on your particular system and can vary.

Eventually this event number can even vary at every reboot.

You could create a new udev rule in /etc/udev/rules.d/65-persistent-hauppauge.rules.

KERNEL=="event*", ATTRS{name}=="IR-receiver inside an USB DVB receiver", SYMLINK+="input/dvb-ir"

This would make IR receivers handled by the usb_dvb framework always always be linked to /dev/input/dvb-ir.

But Linux systems running recent udev will automatically create non-varying names, a nicer and automatic way of providing a stable input event name:

$ ls -la /dev/input/by-path/
total 0
drwxr-xr-x 2 root root 140 2008-02-07 20:31 .
drwxr-xr-x 4 root root 280 2008-02-07 20:31 ..
lrwxrwxrwx 1 root root   9 2008-02-07 20:31 pci-0000:00:1a.1-usb-0:2:1.0-event-kbd -> ../event1
lrwxrwxrwx 1 root root   9 2008-02-07 20:31 pci-0000:00:1a.1-usb-0:2:1.1-event-mouse -> ../event2
lrwxrwxrwx 1 root root   9 2008-02-07 20:31 pci-0000:00:1a.1-usb-0:2:1.1-mouse -> ../mouse1
lrwxrwxrwx 1 root root   9 2008-02-07 20:31 pci-4-1--event-ir -> ../event4
lrwxrwxrwx 1 root root   9 2008-02-07 20:31 platform-pcspkr-event-spkr -> ../event3

LIRC will use it without needing a special kernel module. use the dev/input (or devinput. Check this with the command "lircd --device=help".) driver and specify the input event device in /etc/lirc/hardware.conf

# /etc/lirc/hardware.conf
# Arguments which will be used when launching lircd

#Don't start lircmd even if there seems to be a good config file

#Try to load appropriate kernel modules

# Run "lircd --driver=help" for a list of supported drivers.
# If DEVICE is set to /dev/lirc and devfs is in use /dev/lirc/0 will be
# automatically used instead

# Default configuration files for your hardware if any

If you have REMOTE and TRANSMITTER sections in your hardware.conf file, they should look like this:

#Chosen Remote Control
REMOTE="Terratec Cinergy DT USB XS Diversity"
#Chosen IR Transmitter
Remote key setup

See device specific section below or try [1].

Sample .lircrc

A sample .lircrc can be found LircrcExample here.

Keys repeated twice

But there is still the problem of the key repeats for it, so that each keypress will be repeated twice. The patches, as mentioned above, may not work, but a workaround is possilbe. It is described in http://ubuntuforums.org/showthread.php?p=4253678

Simply add config = echo " > /dev/null before the main config in .mythtv/lircrc or .lircrc

  prog = mythtv
  button = Mute
  config = echo " > /dev/null
  config = |

So each 2nd keypress will be suppressed. This works in some application but not others (e.g. vlc).

Alternatively there is a patch for the kernel driver that solves it, it can be found here.

Finally if that doesn't work and you have the silver remote (A415-HPG-WE-A ) then changing the lircd.conf line as follows can prevent the duplicate key presses. This has the side-effect of disabling key repeats for the remote entirely. Change toggle_bit_mask 0x80000000 to toggle_bit_mask 0x00000000

Note: do not try to comment out (using #) any line in this file, or lirc won't work anymore.

Do NOT do this:

 #toggle_bit_mask 0x80000000
 toggle_bit_mask 0x00000000

Replace the original line instead.

Specific Remote control support

The remote is supported at least in the Mercurial repository (see Drivers section above).

TerraTec gray-orange remote
TerraTec Cinergy DT USB XS Diversity-remote.jpg

Apparently this remote is sold with (at least) the TerraTec Cinergy DT USB XS Diversity, TerraTec Cinergy 2400i DT, and TerraTec Cinergy T USB XXS.

The dvb-usb-dib0700 module needs to be loaded with the option dvb_usb_dib0700_ir_proto=0 to set the IR protocol to NEC (which is used by this device).

The following keycodes should work with it, specify them in /etc/lirc/lircd.conf:

# Please make this file available to others
# by sending it to <lirc@bartelmus.de>
# this config file was automatically generated
# using lirc-0.8.2-CVS(dev/input) on Tue May  8 23:40:09 2007
# contributed by Heinrich Schwietering
# brand:Terratec_
# model no. of remote control:
# devices being controlled by this remote: Cinergy_Hybrid_t_USB_XS

begin remote

  name  Cinergy_Hybrid_t_USB_XS
  bits           16
  eps            30
  aeps          100

  one             0     0
  zero            0     0
  pre_data_bits   16
  pre_data       0x1
  gap          135987
  toggle_bit_mask 0x80000000

      begin codes
          onoff                    0x0074
          home                     0x0066
          dvdmenu                  0x008B
          subtitles                0x0172
          teletext                 0x0184
          delete                   0x006F
          1                        0x0002
          2                        0x0003
          3                        0x0004
          4                        0x0005
          5                        0x0006
          6                        0x0007
          7                        0x0008
          8                        0x0009
          9                        0x000A
          0                        0x000B
          av                       0x0182
          ab                       0x00A5
          tv                       0x0179
          dvd                      0x0185
          video                    0x0189
          music                    0x0188
          pic                      0x019A
          up                       0x0067
          down                     0x006C
          left                     0x0069
          right                    0x006A
          ok                       0x0160
          epg                      0x016D
          info                     0x0166
          back                     0x009E
          vol+                     0x0073
          vol-                     0x0072
          play                     0x00CF
          mute                     0x0071
          ch+                      0x0192
          ch-                      0x0193
          red                      0x018E
          green                    0x018F
          yellow                   0x0190
          blue                     0x0191
          rec                      0x00A7
          stop                     0x0080
          pause                    0x0077
          last                     0x0195
          fr                       0x00A8
          ff                       0x009F
          next                     0x0197
      end codes

end remote

Note: the most recent model of this remote requires four different codes (replace them in above list).

          ab                       0x00AD
          ff                       0x00D0
          last                     0x019C
          pic                      0x0177

Should you need to quickly test all possible keycodes, just use this script to generate a list, which you can copy/paste to your lircd.conf file:

 for (( i = 1; i < 512; i++ )); do x=`printf %#06X $i`; echo code$x $x; done

The result looks like this:

 code0X0001 0X0001
 code0X0002 0X0002
 code0X0003 0X0003
 code0X0004 0X0004
 code0X01FC 0X01FC
 code0X01FD 0X01FD
 code0X01FE 0X01FE
 code0X01FF 0X01FF

Copy these keycodes just after the begin statement of your lircd.conf file. You can leave the original keycodes, duplicated values are not a problem. Once lircd is restarted, run the irw program and press your remote keys to show the missing codes:

 # irw
 00000000000100ad 00 code0X00AD Cinergy_Hybrid_t_USB_XS
 00000000000100d0 00 code0X00D0 Cinergy_Hybrid_t_USB_XS
 000000000001019c 00 code0X019C Cinergy_Hybrid_t_USB_XS
 0000000000010177 00 code0X0177 Cinergy_Hybrid_t_USB_XS

Specific to the model

Cinergy T USB XXS (0ccd:0078)

Sample kernel output for 0ccd:0078

[85245.988187] usb 5-1: new high speed USB device using ehci_hcd and address 6
[85246.122356] usb 5-1: configuration #1 chosen from 1 choice
[85246.126921] usb 5-1: New USB device found, idVendor=0ccd, idProduct=0078
[85246.127175] usb 5-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[85246.127397] usb 5-1: Product: CinergyTUSB XXS
[85246.127597] usb 5-1: Manufacturer: TerraTec GmbH
[85246.127795] usb 5-1: SerialNumber: 0000000001
[85247.961835] dib0700: loaded with support for 9 different device-types
[85247.973138] dvb-usb: found a 'Terratec Cinergy T USB XXS' in cold state, will try to load a firmware
[85247.973589] firmware: requesting dvb-usb-dib0700-1.20.fw
[85248.096781] dvb-usb: downloading firmware from file 'dvb-usb-dib0700-1.20.fw'
[85248.297242] dib0700: firmware started successfully.
[85248.800059] dvb-usb: found a 'Terratec Cinergy T USB XXS' in warm state.
[85248.800250] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
[85248.800769] DVB: registering new adapter (Terratec Cinergy T USB XXS)
[85249.004422] DVB: registering adapter 0 frontend 0 (DiBcom 7000PC)...
[85249.188910] DiB0070: successfully identified
[85249.189440] input: IR-receiver inside an USB DVB receiver as /class/input/input9
[85249.191319] dvb-usb: schedule remote query interval to 50 msecs.
[85249.191516] dvb-usb: Terratec Cinergy T USB XXS successfully initialized and connected.
[85249.192412] usbcore: registered new interface driver dvb_usb_dib0700

Cinergy T USB XXS (HD) (0ccd:00ab)

(Date: 13.09.2009)

This seems to be a Cinergy T USB XXS (HD) according Terratec (http://linux.terratec.de/tv_en.html). I understand, it is a HD clone of the card.

It works just as 0x0078 when usb id changed in dvb-usb-ids.h from 0x0078 to 0x00ab.


#define USB_PID_TERRATEC_CINERGY_T_XXS                  0x0078


#define USB_PID_TERRATEC_CINERGY_T_XXS                  0x00ab

- Tested in kernel 2.6.31 and v4l-dvb from cvs ( per 14.09.2009 )

- Analog TV not tested yet.

- The remote control is working with dvb_usb_dib0700_ir_proto 0=NEC as described above,

options dvb_usb_dib0700 dvb_usb_dib0700_ir_proto=0

- udev instructions for ir device handling can be applied also as pointed above.

- what is still missing is how to create a link for teletext device

kernel/usb message (0ccd:00ab)

New USB device found, idVendor=0ccd, idProduct=00ab
New USB device strings: Mfr=1, Product=2, SerialNumber=3
Product: Cinergy T XXS
Manufacturer: TerraTec GmbH
SerialNumber: 0000000001
configuration #1 chosen from 1 choice

- in following output 'Terratec Cinergy T USB XXS/ T3' is comming from the 0x0078 code

dib0700: loaded with support for 9 different device-types
dvb-usb: found a 'Terratec Cinergy T USB XXS/ T3' in warm state.
dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
DVB: registering new adapter (Terratec Cinergy T USB XXS/ T3)
Linux video capture interface: v2.00

- this '/devices/pci0000:00/0000:00:1d.7/usb5/5-4/input/input12' possibly changes dinamically

DVB: registering adapter 0 frontend 0 (DiBcom 7000PC)...
DiB0070: successfully identified
input: IR-receiver inside an USB DVB receiver as /devices/pci0000:00/0000:00:1d.7/usb5/5-4/input/input12
dvb-usb: schedule remote query interval to 50 msecs.
dvb-usb: Terratec Cinergy T USB XXS/ T3 successfully initialized and connected.
usbcore: registered new interface driver dvb_usb_dib0700