Ver Mensaje Individual
  #11  
Viejo 18/03/13, 21:36:26
Array

[xs_avatar]
pelicano33 pelicano33 no está en línea
Miembro del foro
 
Fecha de registro: jul 2011
Mensajes: 141
Modelo de smartphone: Xiaomi redmi 3S
Tu operador: Jazztel
Ya he conseguido encontrar el fallo y que me funcione, el problema era que el programa scan usa el API 3 mientras que el kernel del linux de mygica sólo entiende el API 5. Para hacer el scan puede emplearse w_scan, que sólo entiende el API 5 y para sintonizar hay que modificar levemente el tzap, cambiando la función setup_frontend por la siguiente:
Código:
#include <linux/dvb/version.h>
#define DVB_API ( 10 * DVB_API_VERSION + DVB_API_VERSION_MINOR )

// valores para bandwidth (Hz)
int bw[]={8000000,7000000,6000000,5000000};

static
int setup_frontend (int fe_fd, struct dvb_frontend_parameters *frontend)
{
    struct dvb_frontend_info fe_info;
#if DVB_API>=50 
        int sequence_len = 0;
        struct dtv_property cmds[13];
        struct dtv_properties cmdseq = {0, cmds};
#define set_cmd_sequence(_cmd, _data)   cmds[sequence_len].cmd = _cmd; \
                                        cmds[sequence_len].u.data = _data; \
                                        cmdseq.num = ++sequence_len
#endif
    if (ioctl(fe_fd, FE_GET_INFO, &fe_info) < 0) {
        PERROR("ioctl FE_GET_INFO failed");
        return -1;
    }

    if (fe_info.type != FE_OFDM) {
        ERROR ("frontend device is not a OFDM (DVB-T) device");
        return -1;
    }

    if (silent < 2)
        fprintf (stderr,"tuning to %i Hz\n", frontend->frequency);
#if DVB_API<50 
    if (ioctl(fe_fd, FE_SET_FRONTEND, frontend) < 0) {
        PERROR("ioctl FE_SET_FRONTEND failed");
        return -1;
    }
#else
        if(frontend->u.ofdm.bandwidth>3) frontend->u.ofdm.bandwidth=0;
        set_cmd_sequence(DTV_CLEAR, DTV_UNDEFINED);
        set_cmd_sequence(DTV_DELIVERY_SYSTEM,   SYS_DVBT);
        set_cmd_sequence(DTV_FREQUENCY,         frontend->frequency);
        set_cmd_sequence(DTV_INVERSION,         frontend->inversion);
        set_cmd_sequence(DTV_BANDWIDTH_HZ,      bw[frontend->u.ofdm.bandwidth]);
        set_cmd_sequence(DTV_CODE_RATE_HP,      frontend->u.ofdm.code_rate_HP);
        set_cmd_sequence(DTV_CODE_RATE_LP,      frontend->u.ofdm.code_rate_LP);
        set_cmd_sequence(DTV_MODULATION,        frontend->u.ofdm.constellation);
        set_cmd_sequence(DTV_TRANSMISSION_MODE, frontend->u.ofdm.transmission_mode);
        set_cmd_sequence(DTV_GUARD_INTERVAL,    frontend->u.ofdm.guard_interval);
        set_cmd_sequence(DTV_HIERARCHY,         frontend->u.ofdm.hierarchy_information);
        set_cmd_sequence(DTV_TUNE, DTV_UNDEFINED);
        if (ioctl(fe_fd, FE_SET_PROPERTY, &cmdseq) < 0) {
                PERROR("Setting frontend parameters failed (API v5.x)\n");
                return -1;
        }
#endif
    return 0;
}
Responder Con Cita
Los siguientes 2 usuarios han agradecido a pelicano33 su comentario: