Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 5 Nov 1997 18:01:54 +0100 (MET)
From:      Luigi Rizzo <luigi@labinfo.iet.unipi.it>
To:        multimedia@freebsd.org
Subject:   Teletext decoding with the Hauppauge...
Message-ID:  <199711051701.SAA23167@labinfo.iet.unipi.it>

next in thread | raw e-mail | index | archive | help
Enclosed is a very primitive program, which, together with the Bt848
patches that I submitted a few days ago allow you to capture teletext
data.

The program is very raw since it was meant as a command-line tool to
control tuner parameters (channel, brightness, etc.) and was later
extended to access the I2C peripherals and then further extended to
capture txt pages.

As it is now, you can run it and then issue commands like

	txt 120

to capture page 120, etc. -- when a page is done it is displayed on
stdout. Fancy user interfaces will come next year...

I am not sure if the card can only capture teletext, or also
close-captioning or other "extended" services available around the
world.  As an example, it _might_ be able to capture Intercast data
(but decoding them is a completely different issue...) in the
locations where this service is available.

The patch for the Bt848 driver for those who have lost it is the
following:

in /sys/pci/brooktree848.c, as one of the switches in tuner_ioctl(),
add the following:

    static int
    tuner_ioctl( bktr_ptr_t bktr, int unit, int cmd, caddr_t arg, struct
    proc* pr )
    {

        ...
        case BT848_I2CWR: /* XXX */
            { u_long par = *(u_long *)arg;
              u_char write = (par >> 24) & 0xff ;
              int i2c_addr = (par >> 16) & 0xff ;
              int i2c_port = (par >> 8) & 0xff ;
              u_long data = (par) & 0xff ;
  
              if (write) { 
                  i2cWrite( bktr, i2c_addr, i2c_port, data);
              } else {
                  data = i2cRead( bktr, i2c_addr);
              }
              *(u_long *)arg = (par & 0xffffff00) | ( data & 0xff );
            }   
            break;

in /sys/i386/include/ioctl_bt848.h add the following (near the definition of
other ioctl()s :

    /* 
     * b7-b0:    data (read/write)
     * b15-b8:   internal peripheral register (write)   
     * b23-b16:  i2c addr (write)
     * b31-b24:  1 = write, 0 = read 
     */
    #define BT848_I2CWR     _IOWR('x', 57, u_long)    /* i2c read-write */

	Cheers
	Luigi

begin 664 txt.c.gz
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
7&))/LL2D]D6B!T7MK?$_%1(H)WL:``!]
`
end



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199711051701.SAA23167>