static void frontend_set_bw(struct dibFrontend *fe, struct dibChannel *ch) { if (fe->current_bw != ch->bandwidth_kHz) { tuner_set_bandwidth_ex(fe, ch); fe->current_bw = ch->bandwidth_kHz; //demod_set_bandwidth_and_update_timf(TIMF_SET_BANDWIDTH); } }
int tune_single_tuner_and_demod_channel(struct dibTuner *tuner, struct dibDemod *demod, struct dibChannel *ch) { int time, ret; if (demod_init(demod) != 0) { DibDbgPrint("-E- Demod init failed\n"); return 1; } if (tuner_init(tuner) != 0) { DibDbgPrint("-E- Tuner init failed\n"); return 1; } if (tuner_set_bandwidth_ex(tuner, ch) != 0) { DibDbgPrint("-E- Tuner set_bandwidth failed\n"); return 1; } if (tuner_tune(tuner, ch) != 0) { DibDbgPrint("-E- Tuner tune_digital failed\n"); return 1; } /* prepare the agc startup loop */ demod_agc_restart(demod); do { time = -1; ret = demod_agc_startup_ex(demod, ch); if (ret > time) time = ret; if (time != -1) DibMSleep(time); } while (time != -1); if ((ch->type == STANDARD_DVBT && (ch->u.dvbt.nfft == FFT_AUTO || ch->u.dvbt.guard == GUARD_INTERVAL_AUTO || ch->u.dvbt.constellation == QAM_AUTO || ch->u.dvbt.intlv_native == INTLV_NATIVE_AUTO || ch->u.dvbt.hrch == VIT_HRCH_AUTO || ch->u.dvbt.select_hp == VIT_PRIORITY_AUTO || ch->u.dvbt.alpha == VIT_ALPHA_AUTO || ch->u.dvbt.code_rate_hp == VIT_CODERATE_AUTO || ((ch->u.dvbt.hrch == VIT_HRCH_ON && ch->u.dvbt.code_rate_lp == VIT_CODERATE_AUTO)))) || ((ch->type == STANDARD_ISDBT) && (ch->u.isdbt.nfft == FFT_AUTO || ch->u.isdbt.guard == GUARD_INTERVAL_AUTO))) if (single_do_autosearch(demod, ch) != 0) { DibDbgPrint("-W- autosearching parameters failed.\n"); return 1; } dump_dvb_channel_params(ch); if (demod_tune_ex(demod,ch) != 0){ DibDbgPrint("-W- tuning failed for demod - this is just a warning could be normal in diversity.\n"); return 1; } return 0; }
/* tune (do autosearch in case of unknown parameters) */ void tune_diversity_tuner_and_demod_channel(struct dibTuner *tuner[], struct dibDemod *demod[], int num, struct dibChannel *ch) { int i, time, ret; for (i = 0; i < num; i++) { if (demod_init(demod[i]) != 0) { DibDbgPrint("-E- Tuner init failed\n"); return; } if (tuner_init(tuner[i]) != 0) { DibDbgPrint("-E- Tuner init failed\n"); return; } } for (i = 0; i < num; i++) { if (tuner_set_bandwidth_ex(tuner[i], ch) != 0) { DibDbgPrint("-E- Tuner set_bandwidth failed\n"); return; } if (tuner_tune(tuner[i], ch) != 0) { DibDbgPrint("-E- Tuner tune_digital failed\n"); return; } /* prepare the agc startup loop */ demod_agc_restart(demod[i]); } do { time = -1; for (i = 0; i < num; i++) { ret = demod_agc_startup_ex(demod[i], ch); if (ret > time) time = ret; } if (time != -1) DibMSleep(time); } while (time != -1); if ((ch->type == STANDARD_DVBT && (ch->u.dvbt.nfft == FFT_AUTO || ch->u.dvbt.guard == GUARD_INTERVAL_AUTO || ch->u.dvbt.constellation == QAM_AUTO || ch->u.dvbt.intlv_native == INTLV_NATIVE_AUTO || ch->u.dvbt.hrch == VIT_HRCH_AUTO || ch->u.dvbt.select_hp == VIT_PRIORITY_AUTO || ch->u.dvbt.alpha == VIT_ALPHA_AUTO || ch->u.dvbt.code_rate_hp == VIT_CODERATE_AUTO || ((ch->u.dvbt.hrch == VIT_HRCH_ON && ch->u.dvbt.code_rate_lp == VIT_CODERATE_AUTO))))) if (do_autosearch(demod, num, ch) != 0) { DibDbgPrint("-W- autosearching parameters failed.\n"); return; } dump_dvb_channel_params(ch); for (i = 0; i < num; i++) { if (demod_tune_ex(demod[i],ch) != 0) DibDbgPrint("-W- tuning failed for demod - this is just a warning could be normal in diversity.\n"); } for (i = 0; i < num; i++) { if (i == num-1) { // last demod in a diversity chain - turn off div-in combination DibDbgPrint("-D- setting diversity in off for demod %d\n",i); demod_set_diversity_in(demod[i], 0); } else { DibDbgPrint("-D- setting diversity in on for demod %d\n",i); demod_set_diversity_in(demod[i], 1); } if (i == 0) { // first demod in a diversity chain - no diversity output DibDbgPrint("-D- setting normal output for demod %d\n",i); demod_set_output_mode(demod[i], OUTMODE_MPEG2_PAR_GATED_CLK); } else { DibDbgPrint("-D- setting diversity out on for demod %d\n",i); demod_set_output_mode(demod[i], OUTMODE_DIVERSITY); } } return; }