⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tune.c

📁 DVBstream is based on the ts-rtp package available at http://www.linuxtv.org. It broadcasts a (subs
💻 C
📖 第 1 页 / 共 2 页
字号:
  i = 0; res = -1;  while ((i < 3) && (res < 0)) {    if (ioctl(fd_frontend,FE_SET_FRONTEND,feparams) < 0) {      perror("ERROR tuning channel\n");      return -1;    }    pfd[0].fd = fd_frontend;    pfd[0].events = POLLIN;    if (poll(pfd,1,10000)){      if (pfd[0].revents & POLLIN){        fprintf(stderr,"Getting frontend event\n");        if ( ioctl(fd_frontend, FE_GET_EVENT, &event) < 0) {          perror("FE_GET_EVENT");          return -1;        }        fprintf(stderr,"Received ");        switch(event.type){          case FE_UNEXPECTED_EV:            fprintf(stderr,"unexpected event\n");            res = -1;            break;          case FE_FAILURE_EV:            fprintf(stderr,"failure event\n");            res = -1;            break;          case FE_COMPLETION_EV:            fprintf(stderr,"completion event\n");            res = 0;          break;        }      }      i++;    }  }  if (res > 0)    switch (event.type) {       case FE_UNEXPECTED_EV: fprintf(stderr,"FE_UNEXPECTED_EV\n");                                break;       case FE_COMPLETION_EV: fprintf(stderr,"FE_COMPLETION_EV\n");                                break;       case FE_FAILURE_EV: fprintf(stderr,"FE_FAILURE_EV\n");                                break;    }    if (event.type == FE_COMPLETION_EV) {      switch(fe_info.type) {         case FE_OFDM:           fprintf(stderr,"Event:  Frequency: %d\n",event.u.completionEvent.Frequency);           break;         case FE_QPSK:           fprintf(stderr,"Event:  Frequency: %d\n",(unsigned int)((event.u.completionEvent.Frequency)+(tone==SEC_TONE_OFF ? LOF1 : LOF2)));           fprintf(stderr,"        SymbolRate: %d\n",event.u.completionEvent.u.qpsk.SymbolRate);           fprintf(stderr,"        FEC_inner:  %d\n",event.u.completionEvent.u.qpsk.FEC_inner);           fprintf(stderr,"\n");           break;         case FE_QAM:           fprintf(stderr,"Event:  Frequency: %d\n",event.u.completionEvent.Frequency);           fprintf(stderr,"        SymbolRate: %d\n",event.u.completionEvent.u.qpsk.SymbolRate);           fprintf(stderr,"        FEC_inner:  %d\n",event.u.completionEvent.u.qpsk.FEC_inner);           break;         default:           break;      }      strength=0;      ioctl(fd_frontend,FE_READ_BER,&strength);      fprintf(stderr,"Bit error rate: %d\n",strength);      strength=0;      ioctl(fd_frontend,FE_READ_SIGNAL_STRENGTH,&strength);      fprintf(stderr,"Signal strength: %d\n",strength);      strength=0;      ioctl(fd_frontend,FE_READ_SNR,&strength);      fprintf(stderr,"SNR: %d\n",strength);      festatus=0;      ioctl(fd_frontend,FE_READ_STATUS,&festatus);      fprintf(stderr,"FE_STATUS:");      if (festatus & FE_HAS_POWER) fprintf(stderr," FE_HAS_POWER");      if (festatus & FE_HAS_SIGNAL) fprintf(stderr," FE_HAS_SIGNAL");      if (festatus & FE_SPECTRUM_INV) fprintf(stderr," FE_SPECTRUM_INV");      if (festatus & FE_HAS_LOCK) fprintf(stderr," FE_HAS_LOCK");      if (festatus & FE_HAS_CARRIER) fprintf(stderr," FE_HAS_CARRIER");      if (festatus & FE_HAS_VITERBI) fprintf(stderr," FE_HAS_VITERBI");      if (festatus & FE_HAS_SYNC) fprintf(stderr," FE_HAS_SYNC");      if (festatus & FE_TUNER_HAS_LOCK) fprintf(stderr," FE_TUNER_HAS_LOCK");      fprintf(stderr,"\n");    } else {    fprintf(stderr,"Not able to lock to the signal on the given frequency\n");    return -1;  }  return 0;}#endifint tune_it(int fd_frontend, int fd_sec, unsigned int freq, unsigned int srate, char pol, int tone, fe_spectral_inversion_t specInv, unsigned int diseqc,fe_modulation_t modulation,fe_code_rate_t HP_CodeRate,fe_transmit_mode_t TransmissionMode,fe_guard_interval_t guardInterval, fe_bandwidth_t bandwidth) {  int res;#ifdef NEWSTRUCT  struct dvb_frontend_parameters feparams;  struct dvb_frontend_info fe_info;  fe_sec_voltage_t voltage;#else  FrontendParameters feparams;  FrontendInfo fe_info;  secVoltage voltage;  struct secStatus sec_state;#endif  /* discard stale frontend events */  /*  pfd[0].fd = fd_frontend;  pfd[0].events = POLLIN;  if (poll(pfd,1,500)){    if (pfd[0].revents & POLLIN){      while (1) {        if (ioctl (fd_frontend, FE_GET_EVENT, &event) == -1) { break; }      }    }  }  */  if ( (res = ioctl(fd_frontend,FE_GET_INFO, &fe_info) < 0)){     perror("FE_GET_INFO: ");     return -1;  }  //  OSTSelftest(fd_frontend);//  OSTSetPowerState(fd_frontend, FE_POWER_ON);//  OSTGetPowerState(fd_frontend, &festatus);#ifdef NEWSTRUCT  fprintf(stderr,"Using DVB card \"%s\"\n",fe_info.name);#endif  switch(fe_info.type) {    case FE_OFDM:#ifdef NEWSTRUCT      if (freq < 1000000) freq*=1000UL;      feparams.frequency=freq;      feparams.inversion=INVERSION_OFF;      feparams.u.ofdm.bandwidth=bandwidth;      feparams.u.ofdm.code_rate_HP=HP_CodeRate;      feparams.u.ofdm.code_rate_LP=LP_CODERATE_DEFAULT;      feparams.u.ofdm.constellation=modulation;      feparams.u.ofdm.transmission_mode=TransmissionMode;      feparams.u.ofdm.guard_interval=guardInterval;      feparams.u.ofdm.hierarchy_information=HIERARCHY_DEFAULT;#else      if (freq < 1000000) freq*=1000UL;      feparams.Frequency=freq;      feparams.Inversion=INVERSION_OFF;      feparams.u.ofdm.bandWidth=bandwidth;      feparams.u.ofdm.HP_CodeRate=HP_CodeRate;      feparams.u.ofdm.LP_CodeRate=LP_CODERATE_DEFAULT;      feparams.u.ofdm.Constellation=modulation;      feparams.u.ofdm.TransmissionMode=TransmissionMode;      feparams.u.ofdm.guardInterval=guardInterval;      feparams.u.ofdm.HierarchyInformation=HIERARCHY_DEFAULT;#endif      fprintf(stderr,"tuning DVB-T (%s) to %d Hz\n",DVB_T_LOCATION,freq);      break;    case FE_QPSK:#ifdef NEWSTRUCT      fprintf(stderr,"tuning DVB-S to L-Band:%d, Pol:%c Srate=%d, 22kHz=%s\n",feparams.frequency,pol,srate,tone == SEC_TONE_ON ? "on" : "off");#else      fprintf(stderr,"tuning DVB-S to L-Band:%d, Pol:%c Srate=%d, 22kHz=%s\n",feparams.Frequency,pol,srate,tone == SEC_TONE_ON ? "on" : "off");#endif      if ((pol=='h') || (pol=='H')) {        voltage = SEC_VOLTAGE_18;      } else {        voltage = SEC_VOLTAGE_13;      }#ifdef NEWSTRUCTif (diseqc==0) if (ioctl(fd_frontend,FE_SET_VOLTAGE,voltage) < 0) {#else      if (ioctl(fd_sec,SEC_SET_VOLTAGE,voltage) < 0) {#endif         perror("ERROR setting voltage\n");      }      if (freq > 2200000) {        // this must be an absolute frequency        if (freq < SLOF) {#ifdef NEWSTRUCT          feparams.frequency=(freq-LOF1);#else          feparams.Frequency=(freq-LOF1);#endif          if (tone < 0) tone = SEC_TONE_OFF;        } else {#ifdef NEWSTRUCT          feparams.frequency=(freq-LOF2);#else          feparams.Frequency=(freq-LOF2);#endif          if (tone < 0) tone = SEC_TONE_ON;        }      } else {        // this is an L-Band frequency#ifdef NEWSTRUCT       feparams.frequency=freq;#else       feparams.Frequency=freq;#endif      }#ifdef NEWSTRUCT      feparams.inversion=specInv;      feparams.u.qpsk.symbol_rate=srate;      feparams.u.qpsk.fec_inner=FEC_AUTO;#else      feparams.Inversion=specInv;      feparams.u.qpsk.SymbolRate=srate;      feparams.u.qpsk.FEC_inner=FEC_AUTO;#endif#ifdef NEWSTRUCT      if (diseqc==0) {      if (ioctl(fd_frontend,FE_SET_TONE,tone) < 0) {               perror("ERROR setting tone\n");      }      }#else      if (ioctl(fd_sec,SEC_SET_TONE,tone) < 0) {         perror("ERROR setting tone\n");      }#endif#ifdef NEWSTRUCT	      if (diseqc > 0) {		do_diseqc(fd_frontend, diseqc-1,voltage,tone);		sleep(1);              }#else      if (diseqc > 0) {        struct secCommand scmd;        struct secCmdSequence scmds;        scmds.continuousTone = tone;        scmds.voltage = voltage;        /*        scmds.miniCommand = toneBurst ? SEC_MINI_B : SEC_MINI_A;        */        scmds.miniCommand = SEC_MINI_NONE;        scmd.type = 0;        scmds.numCommands = 1;        scmds.commands = &scmd;        scmd.u.diseqc.addr = 0x10;        scmd.u.diseqc.cmd = 0x38;        scmd.u.diseqc.numParams = 1;        scmd.u.diseqc.params[0] = 0xf0 |                                   (((diseqc - 1) << 2) & 0x0c) |                                  (voltage==SEC_VOLTAGE_18 ? 0x02 : 0) |                                  (tone==SEC_TONE_ON ? 0x01 : 0);        if (ioctl(fd_sec,SEC_SEND_SEQUENCE,&scmds) < 0) {          perror("Error sending DisEqC");          return -1;        }      }#endif      break;    case FE_QAM:      fprintf(stderr,"tuning DVB-C to %d, srate=%d\n",freq,srate);#ifdef NEWSTRUCT      feparams.frequency=freq;      feparams.inversion=INVERSION_OFF;      feparams.u.qam.symbol_rate = srate;      feparams.u.qam.fec_inner = FEC_AUTO;      feparams.u.qam.modulation = modulation;#else      feparams.Frequency=freq;      feparams.Inversion=INVERSION_OFF;      feparams.u.qam.SymbolRate = srate;      feparams.u.qam.FEC_inner = FEC_AUTO;      feparams.u.qam.QAM = modulation;#endif      break;    default:      fprintf(stderr,"Unknown FE type. Aborting\n");      exit(-1);  }  usleep(100000);#ifndef NEWSTRUCT     if (fd_sec) SecGetStatus(fd_sec, &sec_state);#endif  return(check_status(fd_frontend,&feparams,tone));}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -