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);
    }
}
Example #2
0
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;
}
Example #3
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;
}