AVerMedia AVerTV DVB-T 777 (A16AR): Difference between revisions

From LinuxTVWiki
Jump to navigation Jump to search
No edit summary
Line 161: Line 161:


VDR with xineliboutput plugin works with channels.conf in VDR format.
VDR with xineliboutput plugin works with channels.conf in VDR format.

== REMOTE CONTROL ==

'''This is just a draft'''. I'll try complete it as soon as I can. Contributions are welcome. It worked in my case Ubuntu 6.10 + MythTv 0.20, it should be fine for other distros.

First of all install '''mercurial''' package.

Copy the following to your text editor and save it as aver777remote.diff

diff -r 38162695285b linux/drivers/media/video/saa7134/saa7134-cards.c
--- a/linux/drivers/media/video/saa7134/saa7134-cards.c Tue May 09 10:15:42 2006 -0300
+++ b/linux/drivers/media/video/saa7134/saa7134-cards.c Thu May 11 12:33:43 2006 +0200
@@ -3554,6 +3554,7 @@ int saa7134_board_init1(struct saa7134_d
case SAA7134_BOARD_AVERMEDIA_STUDIO_307:
case SAA7134_BOARD_AVERMEDIA_307:
case SAA7134_BOARD_AVERMEDIA_GO_007_FM:
+ case SAA7134_BOARD_AVERMEDIA_777:
/* case SAA7134_BOARD_SABRENT_SBTTVFM: */ /* not finished yet */
case SAA7134_BOARD_VIDEOMATE_TV_PVR:
case SAA7134_BOARD_VIDEOMATE_GOLD_PLUS:
diff -r 38162695285b linux/drivers/media/video/saa7134/saa7134-input.c
--- a/linux/drivers/media/video/saa7134/saa7134-input.c Tue May 09 10:15:42 2006 -0300
+++ b/linux/drivers/media/video/saa7134/saa7134-input.c Thu May 11 12:33:43 2006 +0200
@@ -56,9 +56,9 @@ static int build_key(struct saa7134_dev
gpio = saa_readl(SAA7134_GPIO_GPSTATUS0 >> 2);
if (ir->polling) {
- if (ir->last_gpio == gpio)
+ if (ir->last_gpio == (gpio & (ir->mask_keycode | ir->mask_keydown | ir->mask_keyup)))
return 0;
- ir->last_gpio = gpio;
+ ir->last_gpio = gpio & (ir->mask_keycode | ir->mask_keydown | ir->mask_keyup);
}
data = ir_extract_bits(gpio, ir->mask_keycode);
@@ -189,6 +189,14 @@ int saa7134_input_init1(struct saa7134_d
/* Set GPIO pin2 to high to enable the IR controller */
saa_setb(SAA7134_GPIO_GPMODE0, 0x4);
saa_setb(SAA7134_GPIO_GPSTATUS0, 0x4);
+ break;
+ case SAA7134_BOARD_AVERMEDIA_777:
+ ir_codes = ir_codes_avermedia;
+ mask_keycode = 0x02F200;
+ mask_keydown = 0x000400;
+ polling = 50; // ms
+ saa_setl(SAA7134_GPIO_GPMODE0 >> 2, 0x100);
+ saa_setl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x100);
break;
case SAA7134_BOARD_KWORLD_TERMINATOR:
ir_codes = ir_codes_pixelview;

then do the following:

hg clone http://linuxtv.org/hg/v4l-dvb
cd v4l-dvb
patch -p1 </root/aver777remote.diff
make
make install
reboot

after that, open a terminal window and press some keys on the RC, you should see them on the console, if not, sth went wrong :(

next steps should be configuring lircd.conf, hardware.conf and lircrc

I followed this tutorial for mythtv: http://parker1.co.uk/mythtv_ubuntu.php


== Notes ==
== Notes ==

Revision as of 16:15, 21 November 2006

PREFACE

The Avermedia 777 is a quite good budget pci DVB-T Card. You can get one for about 65 euros.
You must know that Avermedia777 features a Philips saa7134 and Zarlink MT352 demodulator. Acording to the documentation, the avermedia 777 is the card=85 for the saa7134

For make this card work, you need at last a vanilla kernel 2.6.17rc2. First we will see how to configure our kernel for the avermedia 777:

KERNEL CONFIGURATION

DEVICE DRIVERS -> I2C ->

select:

 [*] I2C Support
 [*] I2C Device Interface


DEVICE DRIVERS -> I2C -> I2C Algorithms

 [*] I2C bit-banging interfaces





DEVICE DRIVERS -> MULTIMEDIA DEVICES ->

select:

 [*] Video For Linux


DEVICE DRIVERS -> MULTIMEDIA DEVICES -> VIDEO FOR LINUX ->

select ONLY these that are marked with the asterisk:

 [*] Philips SAA7134 support
 [*]   Philips SAA7134 DMA audio support
 [*]   DVB/ATSC Support for saa7134 based TV cards
 [ ]      Build all supported frontends for saa7134 based TV cards
 [*]        Zarlink MT352 DVB-T Support
 [ ]        Philips TDA10045H/TDA10046H DVB-T Support
 [ ]        NXT2002/NXT2004 ATSC Support





DEVICE DRIVERS -> MULTIMEDIA DEVICES -> DIGITAL VIDEO BROADCASTING DEVICES ->

select:

 [*] DVB for linux
 [*] DVB Core support


You must select these components in the kernel configuration if you want your avermedia777 to work. You can compile-in kernel (marked as asterisk) or as Modules (typing M). Some people may think that if they compile in-kernel these components, in particular the saa7134, they won't be able to specify parameters. That's wrong.
And we are done with kernel configuration. Now compile and install.

Note A: If you compiled these options into the kernel (marked with asterisk) you must use some kernel parameters for choosing the correct Dvb-t card:

(taken from grub.conf)
 kernel /boot/mykernel ro i2c-scan=1 saa7134.card=85

Note B: If you compiled these options as modules (marked with capital M) don't forget the make modules and make modules_install. Then, you must load the module like this:

 modprobe saa7134 card=85
 lsmod

SYSTEM

After reboot we're done. Check /var/log/dmesg and see if kernel said something about your card, i am sure it did.

The first problem i encountered is the device node wasn't being created using udev at boot time. Most modern linux distros use udev, so let's check if we have /dev/dvb/adapter0/ populated. If not, we need to create the device manually. I found this script in the official avermedia page (now is included in dvb-apps tarball), in the previous model (avermedia dvb-t 771) section. After running it, devices ware successfully created and we can continue scanning our channels.

If you don't have /dev/dvb/adapter0/frontend0 and friends, you need to run this script. Copy and paste it

 #!/bin/sh
 # Create device nodes for the Linux DVB API with DVB_API_VERSION 2.
 # The devices created are suitable for most current PC DVB cards,
 # i.e. cards having one frontend, one demux and optionally one MPEG decoder.
 # The script creates devices for four cards by default.
 #
 if [ -e /dev/.devfsd ]; then
       echo "It seems you are using devfs. Good!"
       exit 0
 fi
 #
 # get rid of old DVB API devices; do it twice for good measure...
 rm -rf /dev/ost
 rm -rf /dev/ost
 rm -rf /dev/dvb
 rm -rf /dev/dvb
 #
 mkdir /dev/dvb
 chmod 755 /dev/dvb
 for i in `seq 0 3`; do
       echo "Creating DVB devices in /dev/dvb/adapter$i"
       mkdir /dev/dvb/adapter$i
       chmod 755 /dev/dvb/adapter$i
       mknod -m 0660 /dev/dvb/adapter$i/video0    c 212   `expr 64 \* $i + 0`
       mknod -m 0660 /dev/dvb/adapter$i/audio0    c 212   `expr 64 \* $i + 1`
       mknod -m 0660 /dev/dvb/adapter$i/frontend0 c 212   `expr 64 \* $i + 3`
       mknod -m 0660 /dev/dvb/adapter$i/demux0    c 212   `expr 64 \* $i + 4`
       mknod -m 0660 /dev/dvb/adapter$i/dvr0      c 212   `expr 64 \* $i + 5`
       mknod -m 0660 /dev/dvb/adapter$i/ca0       c 212   `expr 64 \* $i + 6`
       mknod -m 0660 /dev/dvb/adapter$i/net0      c 212   `expr 64 \* $i + 7`
       mknod -m 0660 /dev/dvb/adapter$i/osd0      c 212   `expr 64 \* $i + 8`
       chown root.video /dev/dvb/adapter$i/*
 done


Scanning channels

We need the dvb-apps from http://linuxtv.org/hg/dvb-apps click tree and then bz2 for download the latest. Bunzip and untar the package.

 % bunzip2 hg-dvb-apps.tar.bz2
 % tar -xvf hg-dvb-apps.tar
 % cd hg-dvb-apps/util/scan
 % make

Good! now we compiled the scan tool, now we'll see how easy it works.
In the scan/dvb-t directory we have some files with presets for certain locations around the world, for example let's imagine we are in uk-Oxford so, we type:

 % ./scan dvb-t/uk-Oxford | tee channels.conf

Wait until it ends scanning, you will have a working channels.conf. This file is very important!


WHAT IF THERE ISN'T A PRESET FILE FOR MY LOCATION?

On the other hand, what if there isn't a preset file for your location? that's a problem, because you won't be able to scan channels with the scan tool. I wrote my own preset file, it's not hard but you will need some data, like frequency or bandwidth. You can get all the information from the official AverTV software for WindowsXP, take pencil and paper and write frequencies and bandwidths used by your scanned channels, Then edit any preset file and see how it is. It's not hard.

Example of a dvb-t preset file for the dvb-scan tool: (es-Lugo in the following example)

 # DVB-T Lugo (Centro emisor Paramo) - Rev. 1.2 - 11.12.05
 # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy
 #
 T 778000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE     # TVE 1, TVE 2, 24H TVE, CLAN/50 TVE, RNE1, RNE CLASICA, RNE3
 T 858000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE     # ANTENA 3, ANTENA.NEOX, ANTENA.NOVA, LA SEXTA 2


You see? the first it's the letter T (from dvb-t) then goes the frequency in Hz (not in MHz!) and then the bandwidh (seen also in the AverTV software in windows XP) probably you won't need to edit the other parameters. I recommend to pick the "nearest" preset file for editing. Hope it helps.

VIEWING TV

Using XINE http://www.xinehq.de
Now copy the channels.conf file into your /home/user/.xine/ directory and launch xine. Click on DVB and after buffering you will be watching TV. With the mouse wheel you wrap around the channels list, then click for change channel.

Using Kaffeine http://kaffeine.sourceforge.net/
Kaffeine implements it´s own scan tool and has a great qt interface, so you can skip the previous scan part. Remember that Kaffeine has it´s own pack of preset files for frequencies, like the scan tool. So, if needed, put your own preset file in the same directory as the other presets that Kaffeine installs in the hard disk. This directory varies between distributions. After that, your preset file will be avaliable in Kaffeine´s DVB scan interface. Then click SCAN.

I'm almost sure that VLC also plays dvb-t well using your 'channels.conf' but I haven't tested them.

MPlayer works fine with the channels.conf.

MythTV 0.20 works fine, using it to scan channels itself, and EPG data works fine

VDR with xineliboutput plugin works with channels.conf in VDR format.

REMOTE CONTROL

This is just a draft. I'll try complete it as soon as I can. Contributions are welcome. It worked in my case Ubuntu 6.10 + MythTv 0.20, it should be fine for other distros.

First of all install mercurial package.

Copy the following to your text editor and save it as aver777remote.diff

 diff -r 38162695285b linux/drivers/media/video/saa7134/saa7134-cards.c
 --- a/linux/drivers/media/video/saa7134/saa7134-cards.c	Tue May 09 10:15:42 2006 -0300
 +++ b/linux/drivers/media/video/saa7134/saa7134-cards.c	Thu May 11 12:33:43 2006 +0200
 @@ -3554,6 +3554,7 @@ int saa7134_board_init1(struct saa7134_d
	case SAA7134_BOARD_AVERMEDIA_STUDIO_307:
	case SAA7134_BOARD_AVERMEDIA_307:
	case SAA7134_BOARD_AVERMEDIA_GO_007_FM:
 +	case SAA7134_BOARD_AVERMEDIA_777:
  /*      case SAA7134_BOARD_SABRENT_SBTTVFM:  */ /* not finished yet */
	case SAA7134_BOARD_VIDEOMATE_TV_PVR:
	case SAA7134_BOARD_VIDEOMATE_GOLD_PLUS:
 diff -r 38162695285b linux/drivers/media/video/saa7134/saa7134-input.c
 --- a/linux/drivers/media/video/saa7134/saa7134-input.c	Tue May 09 10:15:42 2006 -0300
 +++ b/linux/drivers/media/video/saa7134/saa7134-input.c	Thu May 11 12:33:43 2006 +0200
 @@ -56,9 +56,9 @@ static int build_key(struct saa7134_dev 
  
	gpio = saa_readl(SAA7134_GPIO_GPSTATUS0 >> 2);
	if (ir->polling) {
 -		if (ir->last_gpio == gpio)
 +		if (ir->last_gpio == (gpio & (ir->mask_keycode | ir->mask_keydown | ir->mask_keyup)))
  			return 0;
 -		ir->last_gpio = gpio;
 +		ir->last_gpio = gpio & (ir->mask_keycode | ir->mask_keydown | ir->mask_keyup);
	}

	data = ir_extract_bits(gpio, ir->mask_keycode);
 @@ -189,6 +189,14 @@ int saa7134_input_init1(struct saa7134_d
		/* Set GPIO pin2 to high to enable the IR controller */
		saa_setb(SAA7134_GPIO_GPMODE0, 0x4);
		saa_setb(SAA7134_GPIO_GPSTATUS0, 0x4);
 +		break;
 +	case SAA7134_BOARD_AVERMEDIA_777:
 +		ir_codes     = ir_codes_avermedia;
 +		mask_keycode = 0x02F200;
 +		mask_keydown = 0x000400;
 +		polling      = 50; // ms
 +		saa_setl(SAA7134_GPIO_GPMODE0 >> 2, 0x100);
 +		saa_setl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x100);
		break;
	case SAA7134_BOARD_KWORLD_TERMINATOR:
		ir_codes     = ir_codes_pixelview;

then do the following:

 hg clone http://linuxtv.org/hg/v4l-dvb
 cd v4l-dvb
 patch -p1 </root/aver777remote.diff
 make
 make install
 reboot

after that, open a terminal window and press some keys on the RC, you should see them on the console, if not, sth went wrong :(

next steps should be configuring lircd.conf, hardware.conf and lircrc

I followed this tutorial for mythtv: http://parker1.co.uk/mythtv_ubuntu.php

Notes

· Kernel support of Avermedia 777 began in the version 2.6.17rc2. Probably the card won't work with older kernels unless you apply patches.
· Saa7134 can be compiled in-kernel or as module. Both must have the parameter card=85
· If the dvb-scan fails because it can't open /dev/dvb/adapter0/frontend0 or similar, recheck the step 3: did the script did his job? are you root?
· If the dvb-scan still fails try modprobe saa7134-dvb
· The dvb-scan app doesn't do frequency scans, so you need a correct dvb-t preset file. You can expect very weird results scanning with a wrong preset file.
· This screenshot shows how options should be selected in kernel for the avermedia777
· In this wiki it's missing the how-to LIRC for making the remote work.
· This wiki have not been corrected for proper grammar and/or spelling. After it's reviewed please delete this advice. (Klez)