Template:Making-it-work:dvb-usb-dib0700

From LinuxTVWiki
Revision as of 19:00, 11 January 2009 by CityK (talk | contribs) (formatting)
Jump to navigation Jump to search

Making it Work

Firmware

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.

Drivers

It requires the dib0700 driver. Just use Mercurial by following the How to install 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.

dib3000mc
debug
Turn on debugging
Values: integer
Default: 0 (off)
buggy_sfn_workaround
Enable work-around for buggy SFNs
Values: integer
Default: 0 (disabled)
mt2060
debug
Turn on debugging
Values: integer
Default: 0 (off)
dvb_usb_dib0700
force_lna_activation
Force the activation of LNAs (Low Noise Amplifier), if applicable for the device
Values: integer
Default: 0 (automatic/off)
dvb_usb_dib0700_ir_proto
Set IR protocol
Values: integer 0=NEC, 1=RC5, 2=RC6
Default: 1
debug
Set debugging level
Values: integer (bitmap) 1=info, 2=fw, 4=fwdata, 8=data
Default: 0 (none)
dvb_usb
debug
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_rc_polling
Disable remote control polling
Values: integer
Default: 0 (enabled)
force_pid_filter_usage
Force all DVB USB devices to use a PID filter, if any
Values: integer
Default: 0 (disabled)
dvb_core
dvb_net_debug
Enable debug messages
Values: integer
Default: 0 (disabled)
frontend_debug
Turn on frontend core debugging
Values: integer
Default: 0 (off)
dvb_shutdown_timeout
Wait n seconds after close() before suspending hardware
Values: integer
Default: 0
dvb_force_auto_inversion
Set whether INVERSION_AUTO is forced on
Values: integer
Default: 0 (off)
dvb_override_tune_delay
Wait n milliseconds for lock after a tuning attempt
Values: integer
Default: 0
dvb_powerdown_on_sleep
Turn LNB power off on sleep
Values: integer
Default: 1 (enabled)
cam_debug
Enable verbose debug messages
Values: integer
Default: 0 (off)
debug
Turn on debugging
Values: integer
Default: 0
dvbdev_debug
Turn on device debugging
Values: integer
Default: 0 (off)
dibx000_common
debug
Turn on debugging
Values: integer
Default: 0 (off)

Remote Control Support

Genral LIRC 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=="input*", ATTRS{name}=="IR-receiver inside an USB DVB receiver", SYMLINK+="input/dvb-ir"

It has been mentionned that the following line works, instead of the above line (needs confirmation and deletion of the ugly line):

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

This would make the Hauppauge receiver always always be linked to /dev/input/dvb-ir.

But Linux systems runing 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 driver and specify the input event device in /etc/lirc/hardware.conf (the dev/input driver may have been renamed to devinput, you can check this with the command "lircd --device=help"):

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

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

#Try to load appropriate kernel modules
LOAD_MODULES=true

# Run "lircd --driver=help" for a list of supported drivers.
DRIVER="dev/input"
# If DEVICE is set to /dev/lirc and devfs is in use /dev/lirc/0 will be
# automatically used instead
DEVICE="/dev/input/by-path/pci-4-1--event-ir"
MODULES=""

# Default configuration files for your hardware if any
LIRCD_CONF="/etc/lirc/lircd.conf"
LIRCMD_CONF=""

Key Configurations

Snowboard remote control

Grey top, black bottom, 45 buttons, snowboard shape.

Here is a proper lircd.conf:

#
# brand:                       Hauppauge
# model no. of remote control: 45 buttons Snowboard Shape Silver over Black
#

begin remote

 name  hauppauge-45-snowboard
 bits           16
 eps            30
 aeps          100

 one             0     0
 zero            0     0
 pre_data_bits   16
 pre_data       0x1
 gap          199999
 toggle_bit      0


     begin codes
         Go                       0x0162
         Power                    0x0074
         TV                       0x0179
         Videos                   0x0189
         Music                    0x0188
         Pictures                 0x00E2
         Guide                    0x016D
         Radio                    0x0181
         ArrowUp                  0x0067
         ArrowLeft                0x0069
         OK                       0x0160
         ArrowRight               0x006A
         ArrowDown                0x006C
         BackExit                 0x009E
         Menu                     0x008B
         VolumeUp                 0x0073
         VolumeDown               0x0072
         PrevCh                   0x016B
         Mute                     0x0071
         ChannelUp                0x0192
         ChannelDown              0x0193
         Record                   0x00A7
         Rewind                   0x00A8
         SkipBack                 0x0195
         Play                     0x00CF
         Pause                    0x0077
         Stop                     0x0080
         Fwdwind                  0x00D0
         SkipFwd                  0x0197
         1                        0x0002
         2                        0x0003
         3                        0x0004
         4                        0x0005
         5                        0x0006
         6                        0x0007
         7                        0x0008
         8                        0x0009
         9                        0x000A
         *                        0x0037
         0                        0x000B
         #                        0x0029
         Red                      0x018E
         Green                    0x018F
         Yellow                   0x0190
         Blue                     0x0191
     end codes

end remote
Silver remote

Assuming, you have a silver remote, named A415-HPG-WE-A. The following keycodes should work with it, specify them in /etc/lirc/lircd.conf:

 begin remote
  name  Hauppauge A415-HPG-WE-A
  bits           16
  eps            30
  aeps          100
  one             0     0
  zero            0     0
  pre_data_bits   16
  pre_data       0x1
  gap          403983
  toggle_bit_mask 0x80000000
     begin codes
         TV                       0x0179
         Videos                   0x0189
         Music                    0x0188
         Pictures                 0x00E2
         Radio                    0x0181
         Guide                    0x016D
         Off                      0x0074
         Go                       0x0162
         Up                       0x0067
         Down                     0x006C
         Left                     0x0069
         Right                    0x006A
         Ok                       0x0160
         Menu                     0x008B
         Back/Exit                0x009E
         Vol+                     0x0073
         Vol-                     0x0072
         PrevCh                   0x016B
         Mute                     0x0071
         Ch+                      0x0192
         Ch-                      0x0193
         Stop                     0x0080
         Record                   0x00A7
         Rew                      0x00A8
         Play                     0x00CF
         FFW                      0x00D0
         Pause                    0x0077
         Replay                   0x0195
         Skip                     0x0197
         1                        0x0002
         2                        0x0003
         3                        0x0004
         4                        0x0005
         5                        0x0006
         6                        0x0007
         7                        0x0008
         8                        0x0009
         9                        0x000A
         Star                     0x0037
         0                        0x000B
         Char                     0x0029
         Red                      0x018E
         Green                    0x018F
         Yellow                   0x0190
         Blue                     0x0191
     end codes
 end remote
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

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

So each 2nd keypress will be suppressed.

Key Mapping

Heres an example .lircrc file to map button presses to key presses, copy it into your home directory and run irxevent to control any app with the remote (if you have irkick running, quit it before starting irxevent, maybe also su, /etc/init.d/lirc restart).

 ################## irxevent Control ######################
 #
 # irxevent info
 # http://linux.die.net/man/1/irxevent
 #
 # keycode info
 # /usr/include/X11/keysymdef.h
 # http://crpppc19.epfl.ch/cgi-bin/dwww/usr/share/doc/lirc/irxevent.keys
 #
 
 #	Remote Button
 ##	Key Press
 
 
 #	Go
 ##	F1
 begin
 prog = irxevent
 button = Go
 config = Key F1 CurrentWindow
 end
 
 #	Power
 ##	F2
 begin
 prog = irexec
 button = Power
 config = Key F2 CurrentWindow
 #	Turns monitor in Standby
 #config = sudo vbetool dpms on ; sudo vbetool dpms off
 end
 
 #	TV
 ##	F3
 begin
 prog = irxevent
 button = TV
 config = Key F3 CurrentWindow
 end
 
 #	Videos
 ##	F4
 begin
 prog = irxevent
 button = Videos
 config = Key F4 CurrentWindow
 end
 
 #	Music
 ##	F5
 begin
 prog = irxevent
 button = Music
 config = Key F5 CurrentWindow
 end
 
 #	Pictures
 ##	F6
 begin
 prog = irxevent
 button = Pictures
 config = Key F6 CurrentWindow
 end
 
 #	Guide
 ##	F7
 begin
 prog = irxevent
 button = Guide
 config = Key F7 CurrentWindow
 end
 
 #	Radio
 ##	F8
 begin
 prog = irxevent
 button = Radio
 config = Key F8 CurrentWindow
 end
 
 #	ArrowUp
 ##	Up
 begin
 prog = irxevent
 button = ArrowUp
 config = Key Up CurrentWindow
 end
 
 #	ArrowLeft
 ##	Left
 begin
 prog = irxevent
 button = ArrowLeft
 config = Key Left CurrentWindow
 end
 
 #	OK
 ##	Return
 begin
 prog = irxevent
 button = OK
 config = Key Return CurrentWindow
 #config = Key Select CurrentWindow
 end
 
 #	ArrowRight
 ##	Right
 begin
 prog = irxevent
 button = ArrowRight
 config = Key Right CurrentWindow
 end
 
 #	ArrowDown
 ##	Down
 begin
 prog = irxevent
 button = ArrowDown
 config = Key Down CurrentWindow
 end
 
 #	BackExit
 ##	Escape
 begin
 prog = irxevent
 button = BackExit
 config = Key Escape CurrentWindow
 #config = Key Cancel CurrentWindow
 end
 
 #	Menu
 ##	Menu (ie. right-click)
 begin
 prog = irxevent
 button = Menu
 config = Key Menu CurrentWindow
 end
 
 #	VolumeUp
 ##	+
 begin
 prog = irxevent
 button = VolumeUp
 config = Key plus CurrentWindow
 #config = Key KP_Add CurrentWindow
 end
 
 #	VolumeDown
 ##	-
 begin
 prog = irxevent
 button = VolumeDown
 config = Key minus CurrentWindow
 #config = Key KP_Subtract CurrentWindow
 end
 
 #	PrevCh
 ##	Backspace
 begin
 prog = irxevent
 button = PrevCh
 config = Key BackSpace CurrentWindow
 #config = Key Prior CurrentWindow
 end
 
 #	Mute
 ##	Enter (chosen as its below keypad-, keypad+)
 begin
 prog = irxevent
 button = Mute
 config = Key Enter CurrentWindow
 end
 
 #	ChannelUp
 ##	PageUp
 begin
 prog = irxevent
 button = ChannelUp
 config = Key Page_Up CurrentWindow
 end
 
 #	ChannelDown
 ##	PageDown
 begin
 prog = irxevent
 button = ChannelDown
 config = Key Page_Down CurrentWindow
 end
 
 #	Record
 ##	R
 begin
 prog = irxevent
 button = Record
 config = Key R CurrentWindow
 end
 
 #	Rewind
 ##	B
 begin
 prog = irxevent
 button = Rewind
 config = Key B CurrentWindow
 end
 
 #	SkipBack
 ##	Home
 begin
 prog = irxevent
 button = SkipBack
 config = Key Home CurrentWindow
 end
 
 #	Play
 ##	P
 begin
 prog = irxevent
 button = Play
 config = Key P CurrentWindow
 end
 
 #	Pause
 ##	U
 begin
 prog = irxevent
 button = Pause
 config = Key U CurrentWindow
 #config = Key Pause CurrentWindow
 end
 
 #	Stop
 ##	S
 begin
 prog = irxevent
 button = Stop
 config = Key S CurrentWindow
 end
 
 #	Fwdwind
 ##	F
 begin
 prog = irxevent
 button = Fwdwind
 config = Key F CurrentWindow
 end
 
 #	SkipFwd
 ##	End
 begin
 prog = irxevent
 button = SkipFwd
 config = Key End CurrentWindow
 end
 
 #	1
 begin
 prog = irxevent
 button = 1
 config = Key 1 CurrentWindow
 end
 
 #	2
 begin
 prog = irxevent
 button = 2
 config = Key 2 CurrentWindow
 end
 
 #	3
 begin
 prog = irxevent
 button = 3
 config = Key 3 CurrentWindow
 end
 
 #	4
 begin
 prog = irxevent
 button = 4
 config = Key 4 CurrentWindow
 end
 
 #	5
 begin
 prog = irxevent
 button = 5
 config = Key 5 CurrentWindow
 end
 
 #	6
 begin
 prog = irxevent
 button = 6
 config = Key 6 CurrentWindow
 end
 
 #	7
 begin
 prog = irxevent
 button = 7
 config = Key 7 CurrentWindow
 end
 
 #	8
 begin
 prog = irxevent
 button = 8
 config = Key 8 CurrentWindow
 end
 
 #	9
 begin
 prog = irxevent
 button = 9
 config = Key 9 CurrentWindow
 end
 
 #	Star
 ##	Asterisk
 begin
 prog = irxevent
 button = Star
 config = Key asterisk CurrentWindow
 ## asterisk doesnt work for me... anybody else getting 8 instead of *??
 #config = Key multiply CurrentWindow
 end
 
 #	0
 begin
 prog = irxevent
 button = 0
 config = Key 0 CurrentWindow
 end
 
 #	#
 ##	NumberSign (Hash)
 begin
 prog = irxevent
 button = #
 config = Key numbersign CurrentWindow
 end
 
 #	Red
 ##	F9
 begin
 prog = irxevent
 button = Red
 config = Key F9 CurrentWindow
 end
 
 #	Green
 #	F10
 begin
 prog = irxevent
 button = Green
 config = Key F10 CurrentWindow
 end
 
 #	Yellow
 ##	F11
 begin
 prog = irxevent
 button = Yellow
 config = Key F11 CurrentWindow
 end
 
 #	Blue
 ##	F12
 begin
 prog = irxevent
 button = Blue
 config = Key F12 CurrentWindow
 end