
18/03/13, 21:36:26
|
|
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;
}
|