void frontend_unregister_tuner(struct dibFrontend *fe)
{
    if (fe->tuner_is_shared)
        fe->tuner_is_shared--;
    else
        tuner_release(fe);
    fe->tuner_info = NULL; fe->tuner_priv = NULL;
}
/* example of creating all the demod-structure and tuner-structures and tuning them in diversity and start monitoring after that */
int main(int argc, char *argv[])
{
    struct dibI2CAdapter *main_i2c = open_spp_i2c();
    struct dibI2CAdapter *tuner_i2c[2];
    struct dibDemod *demod[2];
    struct dibTuner *tuner[2];

    struct dibDemodMonitor mon[2];

    struct dibDVBChannel ch;

    DibZeroMemory(mon, sizeof(mon));

    if (main_i2c == NULL)
        return 1;

    /* attach 2 demods, do i2c-enumeration */
    if (dib7000p_attach(main_i2c, 2, DEFAULT_DIB7000P_I2C_ADDRESS, 1, dib7000p_example_board_config, demod) != 0) {
        DibDbgPrint("-E-  dib7000 attaching and i2c enumeration failed.\n");
        exit(1);
    }

    /* first tuner */
    tuner_i2c[0] = dib7000p_get_i2c_master(demod[0], DIBX000_I2C_INTERFACE_TUNER, 1);
    if ((tuner[0] = env57h12d5_attach(tuner_i2c[0], &tuner_0_config)) == NULL) {
        DibDbgPrint("-E-  env57h12d5 -0- attaching failed.\n");
        exit(1);
    }

    /* second tuner */
    tuner_i2c[1] = dib7000p_get_i2c_master(demod[1], DIBX000_I2C_INTERFACE_TUNER, 1);
    if ((tuner[1] = env57h12d5_attach(tuner_i2c[1], &tuner_1_config)) == NULL) {
        DibDbgPrint("-E-  env57h12d5 -1- attaching failed.\n");
        exit(1);
    }

    INIT_DVB_CHANNEL(&ch);
    ch.RF_kHz = 474000;
    ch.Bw     = INDEX_BW_8_0_MHZ;

    /* tune the 2 demods and tuner to the channel "ch" */
    tune_diversity_tuner_and_demod(tuner,demod,2,&ch);

    DibDbgPrint("-I-  Tuning done <enter>\n");
    getchar();

    while (1) {
        /* get monitoring information for the first demod */
        demod_get_monitoring(demod[0], &mon[0]);
        /* get monitoring information for the second demod */
        demod_get_monitoring(demod[1], &mon[1]);
        /* display information for 2 demods */
        dib7000_print_monitor(mon, NULL, 0, 2);
        usleep(100000);
    }

    DibDbgPrint("-I-  Cleaning up\n");

    /* release the 2 tuners */
    tuner_release(tuner[1]);
    tuner_release(tuner[0]);

    /* release the 2 demods */
    demod_release(demod[1]);
    demod_release(demod[0]);

    close_spp_i2c();

    return 0;
}
/* example of creating all the demod-structure and tuner-structures and tuning them in diversity and start monitoring after that */
int main(int argc, char *argv[])
{
    struct dibI2CAdapter *main_i2c = open_spp_i2c();
    struct dibI2CAdapter *tuner_i2c[2];
    struct dibDemod *demod[2];
    struct dibTuner *tuner[2];

    struct dibDemodMonitor mon[2];

    struct dibDVBChannel ch;

    DibZeroMemory(mon, sizeof(mon));

    if (main_i2c == NULL)
        return 1;

    if (dib7000m_attach(main_i2c, 2, DEFAULT_DIB7000M_I2C_ADDRESS, 1, dib7000m_demod_config, demod) != 0) {
        DibDbgPrint("-E-  dib7000 attaching and i2c enumeration failed.\n");
        exit(1);
    }

    tuner_i2c[0] = dib7000m_get_i2c_master(demod[0], DIBX000_I2C_INTERFACE_TUNER, 1);
    if ((tuner[0] = env57h12d5_attach(tuner_i2c[0], &tuner_0_config)) == NULL) {
        DibDbgPrint("-E-  env57h12d5 -0- attaching failed.\n");
        exit(1);
    }

    tuner_i2c[1] = dib7000m_get_i2c_master(demod[1], DIBX000_I2C_INTERFACE_TUNER, 1);
    if ((tuner[1] = env57h12d5_attach(tuner_i2c[1], &tuner_1_config)) == NULL) {
        DibDbgPrint("-E-  env57h12d5 -1- attaching failed.\n");
        exit(1);
    }

    INIT_DVB_CHANNEL(&ch);
    ch.RF_kHz = 474000;
    ch.Bw     = INDEX_BW_8_0_MHZ;

    tune_diversity_tuner_and_demod(tuner,demod,2,&ch);

    DibDbgPrint("-I-  Tuning done <enter>\n");
    getchar();

    while (1) {
        demod_get_monitoring(demod[0], &mon[0]);
        demod_get_monitoring(demod[1], &mon[1]);
        dib7000_print_monitor(mon, NULL, 0, 2);
        usleep(100000);
    }

    DibDbgPrint("-I-  Cleaning up\n");

    tuner_release(tuner[1]);
    tuner_release(tuner[0]);

    demod_release(demod[1]);
    demod_release(demod[0]);

    close_spp_i2c();

    return 0;
}