|
From: <ni...@us...> - 2004-12-29 19:19:44
|
Update of /cvsroot/dvbtools/dvbtune In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5229 Modified Files: tune.c dvbtune.c Log Message: replaced call of FE_GET_EVENT with FE_READ_STATUS; added workaround for frontends that lack FE_TIMEOUTD; restored freq*1000 for DVB-S Index: tune.c =================================================================== RCS file: /cvsroot/dvbtools/dvbtune/tune.c,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** tune.c 4 Apr 2004 08:41:03 -0000 1.26 --- tune.c 29 Dec 2004 19:19:32 -0000 1.27 *************** *** 29,32 **** --- 29,33 ---- #include <error.h> #include <errno.h> + #include <time.h> #include <linux/dvb/dmx.h> *************** *** 126,139 **** int check_status(int fd_frontend,int type, struct dvb_frontend_parameters* feparams,int hi_lo) { int32_t strength; - fe_status_t festatus; - struct dvb_frontend_event event; struct pollfd pfd[1]; ! int status; - while(1) { - if (ioctl(fd_frontend, FE_GET_EVENT, &event) < 0) //EMPTY THE EVENT QUEUE - break; - } - if (ioctl(fd_frontend,FE_SET_FRONTEND,feparams) < 0) { perror("ERROR tuning channel\n"); --- 127,134 ---- int check_status(int fd_frontend,int type, struct dvb_frontend_parameters* feparams,int hi_lo) { int32_t strength; struct pollfd pfd[1]; ! int festatus, locks=0, ok=0; ! time_t tm1, tm2; if (ioctl(fd_frontend,FE_SET_FRONTEND,feparams) < 0) { perror("ERROR tuning channel\n"); *************** *** 143,201 **** pfd[0].fd = fd_frontend; pfd[0].events = POLLPRI; ! ! event.status=0; ! while (((event.status & FE_TIMEDOUT)==0) && ((event.status & FE_HAS_LOCK)==0)) { ! fprintf(stderr,"polling....\n"); ! if (poll(pfd,1,10000) > 0){ if (pfd[0].revents & POLLPRI){ ! fprintf(stderr,"Getting frontend event\n"); ! if ((status = ioctl(fd_frontend, FE_GET_EVENT, &event)) < 0){ ! if (errno != EOVERFLOW) { ! perror("FE_GET_EVENT"); ! fprintf(stderr,"status = %d\n", status); ! fprintf(stderr,"errno = %d\n", errno); ! return -1; ! } ! else fprintf(stderr,"Overflow error, trying again (status = %d, errno = %d)", status, errno); ! } } - print_status(stderr,event.status); } } ! ! if (event.status & FE_HAS_LOCK) { ! switch(type) { case FE_OFDM: ! fprintf(stderr,"Event: Frequency: %d\n",event.parameters.frequency); break; case FE_QPSK: ! fprintf(stderr,"Event: Frequency: %d\n",(unsigned int)((event.parameters.frequency)+(hi_lo ? LOF2 : LOF1))); ! fprintf(stderr," SymbolRate: %d\n",event.parameters.u.qpsk.symbol_rate); ! fprintf(stderr," FEC_inner: %d\n",event.parameters.u.qpsk.fec_inner); fprintf(stderr,"\n"); break; case FE_QAM: ! fprintf(stderr,"Event: Frequency: %d\n",event.parameters.frequency); ! fprintf(stderr," SymbolRate: %d\n",event.parameters.u.qpsk.symbol_rate); ! fprintf(stderr," FEC_inner: %d\n",event.parameters.u.qpsk.fec_inner); break; default: break; } - strength=0; if(ioctl(fd_frontend,FE_READ_BER,&strength) >= 0) ! fprintf(stderr,"Bit error rate: %d\n",strength); strength=0; if(ioctl(fd_frontend,FE_READ_SIGNAL_STRENGTH,&strength) >= 0) ! fprintf(stderr,"Signal strength: %d\n",strength); strength=0; if(ioctl(fd_frontend,FE_READ_SNR,&strength) >= 0) ! fprintf(stderr,"SNR: %d\n",strength); festatus=0; ! if(ioctl(fd_frontend,FE_READ_STATUS,&festatus) >= 0) print_status(stderr,festatus); } else { --- 138,196 ---- pfd[0].fd = fd_frontend; pfd[0].events = POLLPRI; ! ! tm1 = tm2 = time((time_t*) NULL); ! fprintf(stderr,"Getting frontend status\n"); ! while (!ok) { ! festatus = 0; ! if (poll(pfd,1,3000) > 0){ if (pfd[0].revents & POLLPRI){ ! if(ioctl(fd_frontend,FE_READ_STATUS,&festatus) >= 0) ! if(festatus & FE_HAS_LOCK) ! locks++; } } + usleep(10000); + tm2 = time((time_t*) NULL); + if((festatus & FE_TIMEDOUT) || (locks >= 2) || (tm2 - tm1 >= 3)) + ok = 1; } ! ! if (festatus & FE_HAS_LOCK) { ! if(ioctl(fd_frontend,FE_GET_FRONTEND,feparams) >= 0) { ! switch(type) { case FE_OFDM: ! fprintf(stderr,"Event: Frequency: %d\n",feparams->frequency); break; case FE_QPSK: ! fprintf(stderr,"Event: Frequency: %d\n",(unsigned int)((feparams->frequency)+(hi_lo ? LOF2 : LOF1))); ! fprintf(stderr," SymbolRate: %d\n",feparams->u.qpsk.symbol_rate); ! fprintf(stderr," FEC_inner: %d\n",feparams->u.qpsk.fec_inner); fprintf(stderr,"\n"); break; case FE_QAM: ! fprintf(stderr,"Event: Frequency: %d\n",feparams->frequency); ! fprintf(stderr," SymbolRate: %d\n",feparams->u.qpsk.symbol_rate); ! fprintf(stderr," FEC_inner: %d\n",feparams->u.qpsk.fec_inner); break; default: break; + } } strength=0; if(ioctl(fd_frontend,FE_READ_BER,&strength) >= 0) ! fprintf(stderr,"Bit error rate: %d\n",strength); strength=0; if(ioctl(fd_frontend,FE_READ_SIGNAL_STRENGTH,&strength) >= 0) ! fprintf(stderr,"Signal strength: %d\n",strength); strength=0; if(ioctl(fd_frontend,FE_READ_SNR,&strength) >= 0) ! fprintf(stderr,"SNR: %d\n",strength); festatus=0; ! if(ioctl(fd_frontend,FE_READ_UNCORRECTED_BLOCKS,&strength) >= 0) ! fprintf(stderr,"SNR: %d\n",strength); ! print_status(stderr,festatus); } else { *************** *** 218,224 **** fprintf(stderr,"Using DVB card \"%s\"\n",fe_info.name); switch(fe_info.type) { case FE_OFDM: - if (freq < 1000000) freq*=1000UL; feparams.frequency=freq; feparams.inversion=INVERSION_OFF; --- 213,219 ---- fprintf(stderr,"Using DVB card \"%s\"\n",fe_info.name); + if (freq < 1000000) freq*=1000UL; switch(fe_info.type) { case FE_OFDM: feparams.frequency=freq; feparams.inversion=INVERSION_OFF; *************** *** 243,247 **** } ! fprintf(stderr,"tuning DVB-S to Freq: %u, Pol:%c Srate=%d, 22kHz tone=%s, LNB: %d\n",feparams.frequency,pol,srate,tone == SEC_TONE_ON ? "on" : "off", diseqc); feparams.inversion=specInv; feparams.u.qpsk.symbol_rate=srate; --- 238,242 ---- } ! fprintf(stderr,"tuning DVB-S to Freq: %u, Pol:%c Srate=%d, 22kHz tone=%s, LNB: %d\n",feparams.frequency,pol,srate,tone == SEC_TONE_ON ? "on" : "off", diseqc); feparams.inversion=specInv; feparams.u.qpsk.symbol_rate=srate; Index: dvbtune.c =================================================================== RCS file: /cvsroot/dvbtools/dvbtune/dvbtune.c,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -d -r1.30 -r1.31 *** dvbtune.c 1 Apr 2004 19:39:29 -0000 1.30 --- dvbtune.c 29 Dec 2004 19:19:33 -0000 1.31 *************** *** 1009,1013 **** if (festatus & FE_HAS_CARRIER) fprintf(stderr,"C|"); if (festatus & FE_HAS_VITERBI) fprintf(stderr,"V|"); ! if (festatus & FE_HAS_SYNC) fprintf(stderr,"SY|"); fprintf(stderr,")\n"); sleep(1); --- 1009,1013 ---- if (festatus & FE_HAS_CARRIER) fprintf(stderr,"C|"); if (festatus & FE_HAS_VITERBI) fprintf(stderr,"V|"); ! if (festatus & FE_HAS_SYNC) fprintf(stderr,"SY"); fprintf(stderr,")\n"); sleep(1); |