if ((DVB_API_VERSION == 3) && (DVB_API_VERSION_MINOR == 2)) { struct dvbfe_params fe_params; printf("API 3.2\n"); if(channel->tuner == T_QPSK) { struct dvbfe_info fe_info; // a temporary hack, need to clean memset(&fe_info, 0, sizeof (&fe_info)); if(channel->delsys == 0) fe_info.delivery = DVBFE_DELSYS_DVBS; else if(channel->delsys == 2) fe_info.delivery = DVBFE_DELSYS_DVBS2; int result = ioctl(frontendFD, DVBFE_GET_INFO, &fe_info); if (result < 0) { perror("ioctl DVBFE_GET_INFO failed"); close(frontendFD); return FALSE; } switch (fe_info.delivery) { case DVBFE_DELSYS_DVBS: printf("----------------------------------> Using '%s' DVB-S\n", fe_info.name); break; case DVBFE_DELSYS_DSS: printf("----------------------------------> Using '%s' DSS\n", fe_info.name); break; case DVBFE_DELSYS_DVBS2: printf("----------------------------------> Using '%s' DVB-S2\n", fe_info.name); break; default: printf("Unsupported Delivery system (%d)!\n", fe_info.delivery); close(frontendFD); return FALSE; } printf("Satellite: %d\n", channel->delsys); /* DVB-S */ uint32_t freq = 1000*(channel->frequency - 10600); fe_params.frequency = freq; fe_params.inversion = INVERSION_AUTO; if (channel->delsys == 0) { fe_params.delsys.dvbs.symbol_rate = 1000*channel->symbol_rate; fe_params.delsys.dvbs.fec = FEC_AUTO; syslog(LOG_INFO, "Tuning DVB-S to %d Hz, Symbol Rate: %d", fe_params.frequency, fe_params.delsys.dvbs.symbol_rate); } else if (channel->delsys == 2) { fe_params.delsys.dvbs2.symbol_rate = 1000*channel->symbol_rate; fe_params.delsys.dvbs2.fec = FEC_AUTO; syslog(LOG_INFO, "Tuning DVB-S2 to %d Hz, Symbol Rate: %d", fe_params.frequency, fe_params.delsys.dvbs2.symbol_rate); printf("DVB-S2\n"); } } else printf("API 3.2 supports only DVB-S for now"); if (ioctl(frontendFD, FE_SET_FRONTEND, &fe_params) != 0) { syslog(LOG_ERR, "FE_SET_FRONTEND failed"); return FALSE; } }