| HOWTO: Get An Avermedia DVB-T working under Linux | 
 | 	   ______________________________________________ | 
 |  | 
 |    Table of Contents | 
 |    Assumptions and Introduction | 
 |    The Avermedia DVB-T | 
 |    Getting the card going | 
 |    Receiving DVB-T in Australia | 
 |    Known Limitations | 
 |    Further Update | 
 |  | 
 | Assumptions and Introduction | 
 |  | 
 |    It  is assumed that the reader understands the basic structure | 
 |    of  the Linux Kernel DVB drivers and the general principles of | 
 |    Digital TV. | 
 |  | 
 |    One  significant difference between Digital TV and Analogue TV | 
 |    that  the  unwary  (like  myself)  should  consider  is  that, | 
 |    although  the  component  structure  of budget DVB-T cards are | 
 |    substantially  similar  to Analogue TV cards, they function in | 
 |    substantially different ways. | 
 |  | 
 |    The  purpose  of  an  Analogue TV is to receive and display an | 
 |    Analogue  Television  signal. An Analogue TV signal (otherwise | 
 |    known  as  composite  video)  is  an  analogue  encoding  of a | 
 |    sequence  of  image frames (25 per second) rasterised using an | 
 |    interlacing   technique.   Interlacing  takes  two  fields  to | 
 |    represent  one  frame.  Computers today are at their best when | 
 |    dealing  with  digital  signals,  not  analogue  signals and a | 
 |    composite  video signal is about as far removed from a digital | 
 |    data stream as you can get. Therefore, an Analogue TV card for | 
 |    a PC has the following purpose: | 
 |  | 
 |      * Tune the receiver to receive a broadcast signal | 
 |      * demodulate the broadcast signal | 
 |      * demultiplex  the  analogue video signal and analogue audio | 
 |        signal  (note some countries employ a digital audio signal | 
 |        embedded  within the modulated composite analogue signal - | 
 |        NICAM.) | 
 |      * digitize  the analogue video signal and make the resulting | 
 |        datastream available to the data bus. | 
 |  | 
 |    The  digital  datastream from an Analogue TV card is generated | 
 |    by  circuitry on the card and is often presented uncompressed. | 
 |    For  a PAL TV signal encoded at a resolution of 768x576 24-bit | 
 |    color pixels over 25 frames per second - a fair amount of data | 
 |    is  generated and must be processed by the PC before it can be | 
 |    displayed  on the video monitor screen. Some Analogue TV cards | 
 |    for  PCs  have  onboard  MPEG2  encoders  which permit the raw | 
 |    digital  data  stream  to be presented to the PC in an encoded | 
 |    and  compressed  form  -  similar  to the form that is used in | 
 |    Digital TV. | 
 |  | 
 |    The  purpose of a simple budget digital TV card (DVB-T,C or S) | 
 |    is to simply: | 
 |  | 
 |      * Tune the received to receive a broadcast signal. | 
 |      * Extract  the encoded digital datastream from the broadcast | 
 |        signal. | 
 |      * Make  the  encoded digital datastream (MPEG2) available to | 
 |        the data bus. | 
 |  | 
 |    The  significant  difference between the two is that the tuner | 
 |    on  the analogue TV card spits out an Analogue signal, whereas | 
 |    the  tuner  on  the  digital  TV  card  spits out a compressed | 
 |    encoded   digital   datastream.   As  the  signal  is  already | 
 |    digitised,  it  is  trivial  to pass this datastream to the PC | 
 |    databus  with  minimal  additional processing and then extract | 
 |    the  digital  video  and audio datastreams passing them to the | 
 |    appropriate software or hardware for decoding and viewing. | 
 |      _________________________________________________________ | 
 |  | 
 | The Avermedia DVB-T | 
 |  | 
 |    The Avermedia DVB-T is a budget PCI DVB card. It has 3 inputs: | 
 |  | 
 |      * RF Tuner Input | 
 |      * Composite Video Input (RCA Jack) | 
 |      * SVIDEO Input (Mini-DIN) | 
 |  | 
 |    The  RF  Tuner  Input  is the input to the tuner module of the | 
 |    card.  The  Tuner  is  otherwise known as the "Frontend" . The | 
 |    Frontend of the Avermedia DVB-T is a Microtune 7202D. A timely | 
 |    post  to  the  linux-dvb  mailing  list  ascertained  that the | 
 |    Microtune  7202D  is  supported  by the sp887x driver which is | 
 |    found in the dvb-hw CVS module. | 
 |  | 
 |    The  DVB-T card is based around the BT878 chip which is a very | 
 |    common multimedia bridge and often found on Analogue TV cards. | 
 |    There is no on-board MPEG2 decoder, which means that all MPEG2 | 
 |    decoding  must  be done in software, or if you have one, on an | 
 |    MPEG2 hardware decoding card or chipset. | 
 |      _________________________________________________________ | 
 |  | 
 | Getting the card going | 
 |  | 
 |    In order to fire up the card, it is necessary to load a number | 
 |    of modules from the DVB driver set. Prior to this it will have | 
 |    been  necessary to download these drivers from the linuxtv CVS | 
 |    server and compile them successfully. | 
 |  | 
 |    Depending on the card's feature set, the Device Driver API for | 
 |    DVB under Linux will expose some of the following device files | 
 |    in the /dev tree: | 
 |  | 
 |      * /dev/dvb/adapter0/audio0 | 
 |      * /dev/dvb/adapter0/ca0 | 
 |      * /dev/dvb/adapter0/demux0 | 
 |      * /dev/dvb/adapter0/dvr0 | 
 |      * /dev/dvb/adapter0/frontend0 | 
 |      * /dev/dvb/adapter0/net0 | 
 |      * /dev/dvb/adapter0/osd0 | 
 |      * /dev/dvb/adapter0/video0 | 
 |  | 
 |    The  primary  device  nodes that we are interested in (at this | 
 |    stage) for the Avermedia DVB-T are: | 
 |  | 
 |      * /dev/dvb/adapter0/dvr0 | 
 |      * /dev/dvb/adapter0/frontend0 | 
 |  | 
 |    The dvr0 device node is used to read the MPEG2 Data Stream and | 
 |    the frontend0 node is used to tune the frontend tuner module. | 
 |  | 
 |    At  this  stage,  it  has  not  been  able  to  ascertain  the | 
 |    functionality  of the remaining device nodes in respect of the | 
 |    Avermedia  DVBT.  However,  full  functionality  in respect of | 
 |    tuning,  receiving  and  supplying  the  MPEG2  data stream is | 
 |    possible  with the currently available versions of the driver. | 
 |    It  may be possible that additional functionality is available | 
 |    from  the  card  (i.e.  viewing the additional analogue inputs | 
 |    that  the card presents), but this has not been tested yet. If | 
 |    I get around to this, I'll update the document with whatever I | 
 |    find. | 
 |  | 
 |    To  power  up  the  card,  load  the  following modules in the | 
 |    following order: | 
 |  | 
 |      * modprobe bttv (normally loaded automatically) | 
 |      * modprobe dvb-bt8xx (or place dvb-bt8xx in /etc/modules) | 
 |  | 
 |    Insertion  of  these  modules  into  the  running  kernel will | 
 |    activate the appropriate DVB device nodes. It is then possible | 
 |    to start accessing the card with utilities such as scan, tzap, | 
 |    dvbstream etc. | 
 |  | 
 |    The frontend module sp887x.o, requires an external   firmware. | 
 |    Please use  the  command "get_dvb_firmware sp887x" to download | 
 |    it. Then copy it to /usr/lib/hotplug/firmware or /lib/firmware/ | 
 |    (depending on configuration of firmware hotplug). | 
 |  | 
 | Receiving DVB-T in Australia | 
 |  | 
 |    I  have  no  experience of DVB-T in other countries other than | 
 |    Australia,  so  I will attempt to explain how it works here in | 
 |    Melbourne  and how this affects the configuration of the DVB-T | 
 |    card. | 
 |  | 
 |    The  Digital  Broadcasting  Australia  website has a Reception | 
 |    locatortool which provides information on transponder channels | 
 |    and  frequencies.  My  local  transmitter  happens to be Mount | 
 |    Dandenong. | 
 |  | 
 |    The frequencies broadcast by Mount Dandenong are: | 
 |  | 
 |    Table 1. Transponder Frequencies Mount Dandenong, Vic, Aus. | 
 |    Broadcaster Channel Frequency | 
 |    ABC         VHF 12  226.5 MHz | 
 |    TEN         VHF 11  219.5 MHz | 
 |    NINE        VHF 8   191.625 MHz | 
 |    SEVEN       VHF 6   177.5 MHz | 
 |    SBS         UHF 29  536.5 MHz | 
 |  | 
 |    The Scan utility has a set of compiled-in defaults for various | 
 |    countries and regions, but if they do not suit, or if you have | 
 |    a pre-compiled scan binary, you can specify a data file on the | 
 |    command  line which contains the transponder frequencies. Here | 
 |    is a sample file for the above channel transponders: | 
 | # Data file for DVB scan program | 
 | # | 
 | # C Frequency SymbolRate FEC QAM | 
 | # S Frequency Polarisation SymbolRate FEC | 
 | # T Frequency Bandwidth FEC FEC2 QAM Mode Guard Hier | 
 | T 226500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE | 
 | T 191625000 7MHz 2/3 NONE QAM64 8k 1/8 NONE | 
 | T 219500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE | 
 | T 177500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE | 
 | T 536500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE | 
 |  | 
 |    The   defaults   for   the  transponder  frequency  and  other | 
 |    modulation parameters were obtained from www.dba.org.au. | 
 |  | 
 |    When  Scan  runs, it will output channels.conf information for | 
 |    any  channel's transponders which the card's frontend can lock | 
 |    onto.  (i.e.  any  whose  signal  is  strong  enough  at  your | 
 |    antenna). | 
 |  | 
 |    Here's my channels.conf file for anyone who's interested: | 
 | ABC HDTV:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64 | 
 | :TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:2307:0:560 | 
 | ABC TV Melbourne:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_ | 
 | 4:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:65 | 
 | 0:561 | 
 | ABC TV 2:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64 | 
 | :TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:562 | 
 | ABC TV 3:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64 | 
 | :TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:563 | 
 | ABC TV 4:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64 | 
 | :TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:564 | 
 | ABC DiG Radio:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:Q | 
 | AM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:0:2311:56 | 
 | 6 | 
 | TEN Digital:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM | 
 | _64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:158 | 
 | 5 | 
 | TEN Digital 1:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:Q | 
 | AM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1 | 
 | 586 | 
 | TEN Digital 2:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:Q | 
 | AM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1 | 
 | 587 | 
 | TEN Digital 3:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:Q | 
 | AM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1 | 
 | 588 | 
 | TEN Digital:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM | 
 | _64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:158 | 
 | 9 | 
 | TEN Digital 4:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:Q | 
 | AM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1 | 
 | 590 | 
 | TEN Digital:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM | 
 | _64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:159 | 
 | 1 | 
 | TEN HD:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:T | 
 | RANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:514:0:1592 | 
 | TEN Digital:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM | 
 | _64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:159 | 
 | 3 | 
 | Nine Digital:191625000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QA | 
 | M_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:513:660:10 | 
 | 72 | 
 | Nine Digital HD:191625000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2 | 
 | :QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:0:1 | 
 | 073 | 
 | Nine Guide:191625000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_ | 
 | 64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:514:670:1074 | 
 | 7 Digital:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_6 | 
 | 4:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:769:770:1328 | 
 | 7 Digital 1:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM | 
 | _64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:769:770:1329 | 
 | 7 Digital 2:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM | 
 | _64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:769:770:1330 | 
 | 7 Digital 3:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM | 
 | _64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:769:770:1331 | 
 | 7 HD Digital:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QA | 
 | M_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:833:834:133 | 
 | 2 | 
 | 7 Program Guide:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3 | 
 | :QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:865:866: | 
 | 1334 | 
 | SBS HD:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:T | 
 | RANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:102:103:784 | 
 | SBS DIGITAL 1:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:Q | 
 | AM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:161:81:785 | 
 | SBS DIGITAL 2:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:Q | 
 | AM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:162:83:786 | 
 | SBS EPG:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64: | 
 | TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:163:85:787 | 
 | SBS RADIO 1:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM | 
 | _64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:0:201:798 | 
 | SBS RADIO 2:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM | 
 | _64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:0:202:799 | 
 |      _________________________________________________________ | 
 |  | 
 | Known Limitations | 
 |  | 
 |    At  present  I can say with confidence that the frontend tunes | 
 |    via /dev/dvb/adapter{x}/frontend0 and supplies an MPEG2 stream | 
 |    via   /dev/dvb/adapter{x}/dvr0.   I   have   not   tested  the | 
 |    functionality  of any other part of the card yet. I will do so | 
 |    over time and update this document. | 
 |  | 
 |    There  are some limitations in the i2c layer due to a returned | 
 |    error message inconsistency. Although this generates errors in | 
 |    dmesg  and  the  system logs, it does not appear to affect the | 
 |    ability of the frontend to function correctly. | 
 |      _________________________________________________________ | 
 |  | 
 | Further Update | 
 |  | 
 |    dvbstream  and  VideoLAN  Client on windows works a treat with | 
 |    DVB,  in  fact  this  is  currently  serving as my main way of | 
 |    viewing  DVB-T  at  the  moment.  Additionally, VLC is happily | 
 |    decoding  HDTV  signals,  although  the PC is dropping the odd | 
 |    frame here and there - I assume due to processing capability - | 
 |    as all the decoding is being done under windows in software. | 
 |  | 
 |    Many  thanks to Nigel Pearson for the updates to this document | 
 |    since the recent revision of the driver. | 
 |  | 
 |    February 14th 2006 |