# [tarjeta TV]Problemas con el audio imput y lirc (cerrado)

## ebray187

Hace unas semanas me compré esta tarjeta y si que me a salido difícil de configurar.   :Confused:  Después de buscar y probar MUCHO encontré esta página, en la cual aparece una bastante parecida a la mía (Micro-One unknown model, "Media Wand") además de una inmensa lista de modelos.

Tras seguir probando con las configuraciones logré encontrar los parámetros correctos .

Los postearé por si algun día alguien se encuentra en las mismas:

```
# cat /etc/modules.d/bttv      

options bttv tuner=44 card=38 radio=1
```

Y con eso ahora puedo ver tele y escucharla sin problemas.  Estoy usando tvtime y me agrada bastante. 

Esta tarjeta tiene una entrada s-video y una rca (video y para el audio stereo, los 3 cablecitos). Por eso me traje el dvd y al hecharlo andar me topé con 2 cosas. La primera, que era culpa del maldito macrovision, la solucioné siguiendo las instrucciones de este link: http://septor.name/colby/bttv.htm

Sin embargo estoy colpasado con la segunda: Resulta que se ve sin problemas, pero el audio no funciona. 

Me puse a cambiar la tarjeta del modules.d/bttv y a probar con tvtime. En algunas me funcionaba el audio, pero no junto con el video; ponía la tv, sin embargo se escuchaba el audio del dvd, y cuando sintonisaba el dvd, no se escuchaba nada.   :Confused: . Asique con ninguna funciona bien. No se que hacer ni por donde buscar.

El otro asunto que no puedo hacer funcionar es el control remoto. El receptor se conecta a la tarjeta atraves de un miniplug (como el de los audifonos). Prové con la opción que trae el kernel y no me funcionó. Y ahora estoy probando suerte con Lirc. Logré que me compilara con todos sus modulos. Estuve intentando primero con los parametros por defecto y al hacer el cat me tira garabatos todo el tiempo, no solo al presionar un boton. y no se con que parametros funcione. 

Cualquier ayuda la agradeceria, si se nesecita alguna clase de información pregunten nomas. Me gustaría que funcionara con todas sus características.

Saludos

----------

## ebray187

Despues de todo este tiempo y aprovechando el tiempo libre del fin de semana largo, me puse a googlear como ivan los avances de esto. Muy grata fue mi sorpresa cuando encontré esta página. Pego las instrucciones para cooperar al foro.

----------------------

Modificando el Kernel:

Son tres los archivos que hay que modificar:

1° archivo: /usr/src/linux/drivers/media/video/bt8xx/bttv-cards.c

El siguiente contenido:

```
        .radio_addr     = ADDR_UNSET,

    },

    [BTTV_BOARD_MAGICTVIEW063] = {

        .name        = "Askey CPH06X TView99",

        .video_inputs    = 4,

        .audio_inputs    = 1,

        .tuner        = 0,

        .svhs        = 2,

        .gpiomask    = 0x551e00,

        .muxsel        = { 2, 3, 1, 0 },

        .gpiomux     = { 0x551400, 0x551200, 0, 0 },

        .gpiomute     = 0x551c00,

        .needs_tvaudio    = 1,

        .pll        = PLL_28,

        .tuner_type    = 1,

        .tuner_addr    = ADDR_UNSET,

        .radio_addr     = ADDR_UNSET,

        .has_remote     = 1,

    },

    [BTTV_BOARD_PINNACLE] = {

        .name        = "Pinnacle PCTV Studio/Rave",
```

se reemplaza por este:

```
        .radio_addr     = ADDR_UNSET,

    },

    [BTTV_BOARD_MAGICTVIEW063] = {

        .name        = "Media Wand TV Card", //Media Wand Card TV Definition

        .video_inputs    = 3,

        .audio_inputs    = 1,

        .tuner        = 0,

        .svhs        = 2,

        .gpiomask    = 0x060040,

        .muxsel        = { 2, 3, 1, 0 },

        .gpiomux     = {0x060000, 0x040000, 0x020000, 0},

        .gpiomute     = 0x060000,

        .needs_tvaudio    = 0,

        .pll        = PLL_28,

        .tuner_type    = 43,

        .tuner_addr    = ADDR_UNSET,

        .radio_addr     = ADDR_UNSET,

        .has_remote     = 1,

        .has_radio      = 1,

        .no_msp34xx    = 1,

        .no_tda9875     = 1,

        .no_tda7432     = 1,

    },

    [BTTV_BOARD_PINNACLE] = {

        .name        = "Pinnacle PCTV Studio/Rave",
```

2° archivo: /usr/src/linux/drivers/media/video/bt8xx/bttv-input.c

El siguiente contenido:

```
#define DEVNAME "bttv-input"

/* ---------------------------------------------------------------------- */

static void ir_handle_key(struct bttv *btv)

{

    struct bttv_ir *ir = btv->remote;

    u32 gpio,data;

    /* read gpio value */

    gpio = bttv_gpio_read(&btv->c);

    if (ir->polling) {

        if (ir->last_gpio == gpio)

            return;

        ir->last_gpio = gpio;

    }

    /* extract data */

    data = ir_extract_bits(gpio, ir->mask_keycode);

    dprintk(KERN_INFO DEVNAME ": irq gpio=0x%x code=%d | %s%s%s\n",

        gpio, data,

        ir->polling               ? "poll"  : "irq",

        (gpio & ir->mask_keydown) ? " down" : "",

        (gpio & ir->mask_keyup)   ? " up"   : "");

    if ((ir->mask_keydown  &&  (0 != (gpio & ir->mask_keydown))) ||

        (ir->mask_keyup    &&  (0 == (gpio & ir->mask_keyup)))) {

        ir_input_keydown(ir->dev,&ir->ir,data,data);

    } else {

        ir_input_nokey(ir->dev,&ir->ir);

    }

}

void bttv_input_irq(struct bttv *btv)
```

se reemplaza por este:

```
#define DEVNAME "bttv-input"

/* ---------------------------------------------------------------------- */

static void ir_handle_key(struct bttv *btv)

{

    struct bttv_ir *ir = btv->remote;

    u32 gpio,data;

    /* read gpio value */

    gpio = bttv_gpio_read(&btv->c);

    if (ir->polling) {

        if (ir->last_gpio == gpio)

            return;

        ir->last_gpio = gpio;

    }

    /* extract data*/

    data = ir_extract_bits(gpio, ir->mask_keycode);

    dprintk(KERN_INFO DEVNAME ": irq gpio=0x%x code=%d | %s%s%s\n",

        gpio, data,

        ir->polling               ? "poll"  : "irq",

        (gpio & ir->mask_keydown) ? " down" : "",

        (gpio & ir->mask_keyup)   ? " up"   : "");

    if ((ir->mask_keydown  &&  (0 != (gpio & ir->mask_keydown))) ||

        (ir->mask_keyup    &&  (0 == (gpio & ir->mask_keyup)))) {

        ir_input_keydown(ir->dev,&ir->ir,data,data);

        bttv_gpio_write(&btv->c, gpio | 0x000040);         //For Media Wand Tv Card

    } else {

        ir_input_nokey(ir->dev,&ir->ir);

        bttv_gpio_write(&btv->c, gpio & 0xffffbf);        //For Media Wand Tv Card

    }

}

void bttv_input_irq(struct bttv *btv)
```

y el siguiente contenido:

```
    case BTTV_BOARD_MAGICTVIEW061:

    case BTTV_BOARD_MAGICTVIEW063:

        ir_codes         = ir_codes_winfast;

        ir->mask_keycode = 0x0008e000;

        ir->mask_keydown = 0x00200000;

        break;

    case BTTV_BOARD_APAC_VIEWCOMP:
```

se reemplaza por este:

```
      case BTTV_BOARD_MAGICTVIEW061:

      case BTTV_BOARD_MAGICTVIEW063:////////////////Media Wand TV Card Remote Control Definition

        ir_codes         = ir_codes_avermedia_dvbt;

        ir->mask_keycode = 0x00fc00;

        ir->mask_keydown = 0x000080;

        ir->polling      = 50; // ms

        break;    

      case BTTV_BOARD_APAC_VIEWCOMP:
```

3° archivo: /usr/src/linux/drivers/media/common/ir-keymaps.c

El siguiente contenido:

```
 /* Matt Jesson <dvb@jesson.eclipse.co.uk */

IR_KEYTAB_TYPE ir_codes_avermedia_dvbt[IR_KEYTAB_SIZE] = {

    [ 0x28 ] = KEY_0,         //'0' / 'enter'

    [ 0x22 ] = KEY_1,         //'1'

    [ 0x12 ] = KEY_2,         //'2' / 'up arrow'

    [ 0x32 ] = KEY_3,         //'3'

    [ 0x24 ] = KEY_4,         //'4' / 'left arrow'

    [ 0x14 ] = KEY_5,         //'5'

    [ 0x34 ] = KEY_6,         //'6' / 'right arrow'

    [ 0x26 ] = KEY_7,         //'7'

    [ 0x16 ] = KEY_8,         //'8' / 'down arrow'

    [ 0x36 ] = KEY_9,         //'9'

    [ 0x20 ] = KEY_LIST,        // 'source'

    [ 0x10 ] = KEY_TEXT,        // 'teletext'

    [ 0x00 ] = KEY_POWER,       // 'power'

    [ 0x04 ] = KEY_AUDIO,       // 'audio'

    [ 0x06 ] = KEY_ZOOM,        // 'full screen'

    [ 0x18 ] = KEY_VIDEO,       // 'display'

    [ 0x38 ] = KEY_SEARCH,      // 'loop'

    [ 0x08 ] = KEY_INFO,        // 'preview'

    [ 0x2a ] = KEY_REWIND,      // 'backward <<'

    [ 0x1a ] = KEY_FASTFORWARD, // 'forward >>'

    [ 0x3a ] = KEY_RECORD,      // 'capture'

    [ 0x0a ] = KEY_MUTE,        // 'mute'

    [ 0x2c ] = KEY_RECORD,      // 'record'

    [ 0x1c ] = KEY_PAUSE,       // 'pause'

    [ 0x3c ] = KEY_STOP,        // 'stop'

    [ 0x0c ] = KEY_PLAY,        // 'play'

    [ 0x2e ] = KEY_RED,         // 'red'

    [ 0x01 ] = KEY_BLUE,        // 'blue' / 'cancel'

    [ 0x0e ] = KEY_YELLOW,      // 'yellow' / 'ok'

    [ 0x21 ] = KEY_GREEN,       // 'green'

    [ 0x11 ] = KEY_CHANNELDOWN, // 'channel -'

    [ 0x31 ] = KEY_CHANNELUP,   // 'channel +'

    [ 0x1e ] = KEY_VOLUMEDOWN,  // 'volume -'

    [ 0x3e ] = KEY_VOLUMEUP,    // 'volume +'

};

EXPORT_SYMBOL_GPL(ir_codes_avermedia_dvbt);

/* Attila Kondoros <attila.kondoros@chello.hu> */
```

se reemplaza por este:

```
/* Matt Jesson <dvb@jesson.eclipse.co.uk */

IR_KEYTAB_TYPE ir_codes_avermedia_dvbt[IR_KEYTAB_SIZE] = {  //  Key map definition for Madia Wand TV Card Remote Control.

    [ 0x31 ] = KEY_0,         //'0'

    [ 0x24 ] = KEY_1,         //'1'

    [ 0x34 ] = KEY_2,         //'2'

    [ 0x2c ] = KEY_3,         //'3'

    [ 0x22 ] = KEY_4,         //'4'

    [ 0x32 ] = KEY_5,         //'5'

    [ 0x2a ] = KEY_6,         //'6'

    [ 0x26 ] = KEY_7,         //'7'

    [ 0x36 ] = KEY_8,         //'8'

    [ 0x2e ] = KEY_9,         //'9'

                                    // N° Tecla

    [ 0x20 ] = KEY_A,        // 1

    [ 0x30 ] = KEY_B,        // 2

    [ 0x28 ] = KEY_C,       // 3

    [ 0x38 ] = KEY_D,       // 4

    [ 0x3c ] = KEY_E,        // 8

    [ 0x3a ] = KEY_F,       // 12

    [ 0x3e ] = KEY_G,      // 16

    [ 0x21 ] = KEY_H,        // 17

    [ 0x39 ] = KEY_I,      // 19

    [ 0x25 ] = KEY_J, // 20

    [ 0x35 ] = KEY_K,      // 21

    [ 0x2d ] = KEY_L,        // 22

    [ 0x3d ] = KEY_M,      // 23

    [ 0x23 ] = KEY_N,       // 24

    [ 0x33 ] = KEY_O,        // 25

    [ 0x2b ] = KEY_P,        // 26

    [ 0x3b ] = KEY_Q,         // 27

    [ 0x27 ] = KEY_R,        // 28

    [ 0x37 ] = KEY_S,      // 29

    [ 0x2f ] = KEY_T,       // 30

    [ 0x3f ] = KEY_U, // 31

};

EXPORT_SYMBOL_GPL(ir_codes_avermedia_dvbt);

/* Attila Kondoros <attila.kondoros@chello.hu> */
```

Notas para algunas de las modificaciones:

En el archivo bttv-driver.c el valor de .gpiomute debería de ser 0X000000, pero se producen unos chasquidos al momento de sintonizar la radio o la TV. El inconveniente que trae al asignarle el valor 0X060000 a .gpiomute, es que una vez apagada la aplicación para ver tv o escuchar radio, el sonido proveniente de la capturadora se sigue escuchando. Para solucionar este problema, hay que configurar la aplicación para que maneje la entrada "line" de la tarjeta de sonido.

En el archivo ir-keymaps.c es donde se define que accion que se le dará a cada tecla del control remoto. La modificación que se presenta aquí, habilita al control remoto para que "escriba en la pantalla" del 0 a 1 y de al a hasta la u.

En el archivo /usr/src/linux/include/linux/input.h, se describen todas las acciones habilitadas en el kernel de Linux. Utilizando este archivo como referencia, se puede perzonalizar el control remoto a "gusto del cliente".

Compilando e instalando los módulos:

En /usr/src/linux/ y ejecutar:

```
make SUBDIRS=drivers/media/video/bt8xx

make SUBDIRS=drivers/media/common
```

Make esta con el parámetro SUBDIRS para no tener que compilar el kernel completo. Así solo se compilan los módulos previamente modificados.

Una vez compilado se copia bttv.ko en /lib/modules/(versión de Kernel)/kernel/drivers/media/video/bt8xx y ir-common.ko en /lib/modules/(versión de Kernel)/kernel/drivers/media/common.

-----------------------------------------

Y así me funcionó todo mágicamente (y sin necesidad de lirc)   :Very Happy: 

----------

