[linux-dvb] How to find which command generates error in FE_SET_PROPERTY
Michel Verbraak
michel at verbraak.org
Sat Nov 8 18:02:00 CET 2008
I'm trying to modify one of my applications to use the new S2API. With
this application I control my dvb-t and dvb-s/s2 receivers.
I'm using szap-s2 as an example but I run into a problem that the ioctl
FE_SET_PROPERTY always returns -1 and variable errno is set to 14.
My question is. How do I determine which of the commands in the command
queue given to FE_SET_PROPERTY is producing this error. I did not try
yet to devide my command queue up into one command queue per command.
Regards,
Michel.
Part of source code for dvb-s/s2:
#ifdef S2API
int TDVBDevice::SetProperty(struct dtv_property *cmdseq)
{
int err;
err = ioctl(vfrontendfd, FE_SET_PROPERTY, cmdseq);
if (err < 0)
{
syslog(LOG_ERR, "ioctl FE_SET_PROPERTY failed (errno=%d,
%d).",errno, err);
return -1;
}
syslog(LOG_INFO, "ioctl FE_SET_PROPERTY ok.");
return 0;
}
#else
int TDVBDevice::SetFrontend(struct dvb_frontend_parameters *frontend)
{
if (ioctl(vfrontendfd, FE_SET_FRONTEND, frontend) < 0)
{
syslog(LOG_ERR, "ioctl FE_SET_FRONTEND failed (errno=%d).",errno);
return -1;
}
return 0;
}
#endif
//calling part
#ifdef S2API
struct dtv_property p[DTV_IOCTL_MAX_MSGS];
p[0].cmd = DTV_CLEAR;
p[1].cmd = DTV_DELIVERY_SYSTEM; p[1].u.data = atoi(channel->Item(2));
p[2].cmd = DTV_FREQUENCY; p[2].u.data = (__u32)(ifreq * 1000);
p[3].cmd = DTV_MODULATION; p[3].u.data = QPSK;
p[4].cmd = DTV_SYMBOL_RATE; p[4].u.data = (__u32)(sr * 1000);
p[5].cmd = DTV_INNER_FEC; p[5].u.data = FEC_AUTO;
p[6].cmd = DTV_INVERSION; p[6].u.data = INVERSION_AUTO;
// { .cmd = DTV_ROLLOFF, .u.data = rolloff },
p[7].cmd = DTV_PILOT; p[7].u.data = PILOT_AUTO;
p[8].cmd = DTV_TUNE;
struct dtv_properties cmdseq;
cmdseq.num = 9;
cmdseq.props = p;
#else
frontend.frequency = (unsigned int)(ifreq * 1000);
frontend.inversion = INVERSION_AUTO;
frontend.u.qpsk.symbol_rate = (unsigned int)(sr * 1000);
frontend.u.qpsk.fec_inner = FEC_AUTO;
#endif
#ifdef S2API
if (SetProperty(&p[0]) == 0)
#else
if (SetFrontend(&frontend) == 0)
#endif
More information about the linux-dvb
mailing list