Index: dvbtune.c =================================================================== RCS file: /cvsroot/dvbtools/dvbtune/dvbtune.c,v retrieving revision 1.16 diff -u -r1.16 dvbtune.c --- dvbtune.c 22 Oct 2002 17:32:39 -0000 1.16 +++ dvbtune.c 4 Jan 2003 01:32:22 -0000 @@ -1020,7 +1020,6 @@ return 0; } -#if 0 int FEReadAFC(int fd, int32_t *snr) { int ans; @@ -1031,7 +1030,6 @@ } return 0; } -#endif int FEReadUncorrectedBlocks(int fd, uint32_t *ucb) @@ -1236,38 +1234,6 @@ } } - if (do_monitor) { - int32_t strength, ber, snr, uncorr; - fe_status_t festatus; - - if((fd_frontend = open(frontenddev[card],O_RDONLY)) < 0){ - fprintf(stderr,"frontend: %d",i); - perror("FRONTEND DEVICE: "); - return -1; - } - - // Check the signal strength and the BER - while (1) { - festatus = 0; strength = 0; ber = 0; snr = 0; uncorr = 0; - FEReadBER(fd_frontend, &ber); - FEReadSignalStrength(fd_frontend, &strength); - FEReadSNR(fd_frontend, &snr); - FEReadUncorrectedBlocks(fd_frontend, &uncorr); - ioctl(fd_frontend,FE_READ_STATUS,&festatus); - fprintf(stderr,"Signal=%d, Verror=%d, SNR=%ddB, BlockErrors=%d, (", strength, ber, snr, uncorr); -#ifndef NEWSTRUCT - if (festatus & FE_HAS_POWER) fprintf(stderr,"P|"); - if (festatus & FE_SPECTRUM_INV) fprintf(stderr,"I|"); -#endif - if (festatus & FE_HAS_SIGNAL) fprintf(stderr,"S|"); - if (festatus & FE_HAS_LOCK) fprintf(stderr,"L|"); - 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); - } - } #if 0 @@ -1344,6 +1310,58 @@ if (tune_it(fd_frontend,fd_sec,freq,srate,pol,tone,specInv,diseqc,modulation,HP_CodeRate,TransmissionMode,guardInterval,bandWidth) < 0) { return -1; } + } + + if (do_monitor) { + int32_t strength, ber, snr, uncorr, count, afc; + struct dvb_qam_setting q = { QAM_128, 128, 84, 48, 46, 154 }; + fe_status_t festatus; + + // Check the signal strength and the BER + count = 0; + while (1) { + festatus = 0; strength = 0; ber = 0; snr = 0; uncorr = 0; afc = 0; + FEReadBER(fd_frontend, &ber); + FEReadSignalStrength(fd_frontend, &strength); + FEReadSNR(fd_frontend, &snr); + FEReadAFC(fd_frontend, &afc); + FEReadUncorrectedBlocks(fd_frontend, &uncorr); + ioctl(fd_frontend,FE_READ_STATUS,&festatus); + fprintf(stderr,"Signal=%d, Verror=%d, SNR=%ddB, AFC=%f, BlockErrors=%d, (", strength, ber, snr, -(double)afc*srate/1000000000.0, uncorr); +#ifndef NEWSTRUCT + if (festatus & FE_HAS_POWER) fprintf(stderr,"P|"); + if (festatus & FE_SPECTRUM_INV) fprintf(stderr,"I|"); +#endif + if (festatus & FE_HAS_SIGNAL) fprintf(stderr,"S|"); + if (festatus & FE_HAS_LOCK) fprintf(stderr,"L|"); + 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"); +#if 0 + count++; + if (count > 8 && !(count % 5)) { + int ans; + if (q.Reg9 <= 105) + q.Reg9 = 210; + else if (q.Reg9 == 180) + q.Reg9 = 120; + else + q.Reg9 -=1; + fprintf (stderr, "QAM: %u, %u, %u, %u\n", + q.Reg1, q.Reg5, q.Reg8, q.Reg9); + if ((ans = ioctl(fd_frontend,FE_SET_QAM, &q) < 0)){ + perror("FE SET_QAM: "); + exit (1); + } + if ((ans = ioctl(fd_frontend,FE_RESET) < 0)){ + perror("FE RESET: "); + exit (1); + } + } +#endif + sleep(1); + } } if (do_scan) { Index: tune.c =================================================================== RCS file: /cvsroot/dvbtools/dvbtune/tune.c,v retrieving revision 1.14 diff -u -r1.14 tune.c --- tune.c 12 Oct 2002 11:59:31 -0000 1.14 +++ tune.c 4 Jan 2003 01:32:23 -0000 @@ -26,6 +26,7 @@ #include #include #include +#include #ifdef NEWSTRUCT #include @@ -186,10 +187,14 @@ event.status=0; while (((event.status & FE_TIMEDOUT)==0) && ((event.status & FE_HAS_LOCK)==0)) { fprintf(stderr,"polling....\n"); - if (poll(pfd,1,10000)){ + if (poll(pfd,1,2000)){ if (pfd[0].revents & POLLIN){ fprintf(stderr,"Getting frontend event\n"); if ( ioctl(fd_frontend, FE_GET_EVENT, &event) < 0){ + if (EOVERFLOW == errno) { + fprintf (stderr, "Some events were lost\n"); + continue; + } perror("FE_GET_EVENT"); return -1; } @@ -233,7 +238,7 @@ festatus=0; ioctl(fd_frontend,FE_READ_STATUS,&festatus); print_status(stderr,festatus); - } else { + } else { fprintf(stderr,"Not able to lock to the signal on the given frequency\n"); return -1; } @@ -513,19 +518,19 @@ #endif break; case FE_QAM: - fprintf(stderr,"tuning DVB-C to %d, srate=%d\n",freq,srate); + fprintf(stderr,"tuning DVB-C to %f MHz, srate=%f Msym/s\n",freq/1e6,srate/1e6); #ifdef NEWSTRUCT feparams.frequency=freq; - feparams.inversion=INVERSION_OFF; + feparams.inversion=specInv; feparams.u.qam.symbol_rate = srate; - feparams.u.qam.fec_inner = FEC_AUTO; - feparams.u.qam.modulation = QAM_64; + feparams.u.qam.fec_inner = FEC_NONE; + feparams.u.qam.modulation = modulation; #else feparams.Frequency=freq; - feparams.Inversion=INVERSION_OFF; + feparams.Inversion=specInv; feparams.u.qam.SymbolRate = srate; feparams.u.qam.FEC_inner = FEC_AUTO; - feparams.u.qam.QAM = QAM_64; + feparams.u.qam.QAM = modulation; #endif break; default: