|
From: <ni...@us...> - 2004-12-29 19:22:02
|
Update of /cvsroot/dvbtools/dvbstream In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5899 Modified Files: tune.c dvbstream.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/dvbstream/tune.c,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** tune.c 26 Aug 2004 20:12:22 -0000 1.19 --- tune.c 29 Dec 2004 19:21:53 -0000 1.20 *************** *** 28,31 **** --- 28,32 ---- #include <unistd.h> #include <error.h> + #include <time.h> #include <errno.h> *************** *** 127,139 **** 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"); --- 128,135 ---- int32_t strength; fe_status_t festatus; struct pollfd pfd[1]; ! int status, locks=0, ok=0; ! time_t tm1, tm2; if (ioctl(fd_frontend,FE_SET_FRONTEND,feparams) < 0) { perror("ERROR tuning channel\n"); *************** *** 144,201 **** 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 { --- 140,198 ---- 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); ! ! strength=0; ! if(ioctl(fd_frontend,FE_READ_UNCORRECTED_BLOCKS,&strength) >= 0) ! fprintf(stderr,"UNC: %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; --- 215,221 ---- 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; --- 240,244 ---- } ! 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: dvbstream.c =================================================================== RCS file: /cvsroot/dvbtools/dvbstream/dvbstream.c,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** dvbstream.c 6 Dec 2004 21:26:10 -0000 1.24 --- dvbstream.c 29 Dec 2004 19:21:53 -0000 1.25 *************** *** 271,275 **** } ! if((fd[npids] = open(demuxdev[card],O_RDWR)) < 0){ fprintf(stderr,"FD %i: ",i); perror("DEMUX DEVICE: "); --- 271,275 ---- } ! if((fd[npids] = open(demuxdev[card],O_RDWR|O_NONBLOCK)) < 0){ fprintf(stderr,"FD %i: ",i); perror("DEMUX DEVICE: "); *************** *** 301,305 **** i=4; while (cmd[i]==' ') i++; ! freq=atoi(&cmd[i])*1000UL; while ((cmd[i]!=' ') && (cmd[i]!=0)) i++; if (cmd[i]!=0) { --- 301,305 ---- i=4; while (cmd[i]==' ') i++; ! freq=atoi(&cmd[i]); while ((cmd[i]!=' ') && (cmd[i]!=0)) i++; if (cmd[i]!=0) { *************** *** 562,566 **** } else if (strcmp(argv[i],"-f")==0) { i++; ! freq=atoi(argv[i])*1000UL; } else if (strcmp(argv[i],"-p")==0) { i++; --- 562,566 ---- } else if (strcmp(argv[i],"-f")==0) { i++; ! freq=atoi(argv[i]); } else if (strcmp(argv[i],"-p")==0) { i++; *************** *** 819,827 **** alarm(ALARM_TIME); ! if ( (freq>100000000)) { ! if (open_fe(&fd_frontend)) { ! i=tune_it(fd_frontend,freq,srate,0,tone,specInv,diseqc,modulation,HP_CodeRate,TransmissionMode,guardInterval,bandWidth, LP_CodeRate, hier); ! } ! } else if ((freq!=0) && (pol!=0) && (srate!=0)) { if (open_fe(&fd_frontend)) { fprintf(stderr,"Tuning to %ld Hz\n",freq); --- 819,823 ---- alarm(ALARM_TIME); ! if (freq!=0) { if (open_fe(&fd_frontend)) { fprintf(stderr,"Tuning to %ld Hz\n",freq); *************** *** 847,851 **** for (i=0;i<npids;i++) { ! if((fd[i] = open(demuxdev[card],O_RDWR)) < 0){ fprintf(stderr,"FD %i: ",i); perror("DEMUX DEVICE: "); --- 843,847 ---- for (i=0;i<npids;i++) { ! if((fd[i] = open(demuxdev[card],O_RDWR|O_NONBLOCK)) < 0){ fprintf(stderr,"FD %i: ",i); perror("DEMUX DEVICE: "); |