AVerMedia AVerTV DVB-T 777 (A16AR)

From LinuxTVWiki
Jump to navigation Jump to search

The AVerMedia AVerTV DVB-T 777 (A16AR) is a so-called budget, or software decoding, PCI DVB-T card from AVerMedia. These cards work well with the latest kernels.

This is the third in a succession of AVerTV DVB-T cards; succeeding the prior A771 and A761 models.

Overview/features

Interface: PCI Formats: DVB-T Inputs: RF, S-Video, composite, infrared

Components used

The AVerMedia 777 features:

  • A Philips saa7134 bridge IC ... the AVerMedia 777 is card=85 for saa7134 based devices
  • A MT352 demodulator ... The first few versions of the MT352 driver didn't work so well, so try upgrading if you have problems with tuning.

Making it work

(mt352)

 features: Card is capable of delivering the full unmodified TS stream to userspace. Card has A/V inputs.
 card driver: saa7134
 interface: PCI
 PCI device id: 1131:7134
 PCI subsystem id: 1461:2c05
 Bridge: saa7134
 frontend 1:
   tin box: ??
   frontend driver: mt352
   demodulator location: ??
   demodulator: mt352
   PLL: ??
 Notes:

To make this card work, you need at least 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 AVerMedia 777 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 to 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 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 Oxford, UK.

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 Windows XP, 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 bandwidth (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

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

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.

Other players

I'm almost sure that VLC media player also plays DVB-T well using your channels.conf but I haven't tested.

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

--Mcuerdo 13:53, 29 June 2007 (CEST) Using newer kernels you DON'T NEED TO PATCH anything, just setup your lircd.conf, hardware.conf and lircrc

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 it using file create previously (pointing wherever you have saved it)

 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, something went wrong :(

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

I followed this how-to for MythTV: http://parker1.co.uk/mythtv_ubuntu.php

Notes

Suggested kernel options
  • 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.
  • The screenshot to the right shows how options should be selected in kernel for the AVerMedia 777
  • This wiki have not been corrected for proper grammar and/or spelling. After it's reviewed please delete this advice. (Klez)
  • Remote Control HowTo is in an early stage, I'll upload configuration files as examples. Thanks to Jose Alberto who provided the patch (http://www.mail-archive.com/linux-dvb@linuxtv.org/msg18947.html) and put me on the right track.