/******************************************************************** * Description: easydvb - trivial application to receive video * from Twinhan 1025 DVB adapter * Author: Nick Fedchik * Created at: Thu Oct 26 19:43:07 EEST 2006 * Computer: voodsat * System: Linux 2.6.18-dvb on i686 * * Copyright (c) 2006 Nick Fedchik All rights reserved. * ********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define MPEG_FILE "easydvb.mpeg" struct dvbfe_handle { int fd; enum dvbfe_type type; char *name; }; int main(int argc, char *argv[]) { struct dvbfe_handle *h_fe; struct dvbfe_parameters params; struct dvbfe_info dvb_info; struct dvbsec_config sec_config; // start the DVB stuff int adapter_id = 0; int frontend_id = 0; int demux_id = 0; int dvr_id = 0; int locked = 0; int written; int i; int res; int opt; /* Parameteres parsing code begin */ /* * f - frequency (unsigned integer) * s - symbol rate in KB * P - PID (for video PES) */ // Pass params for 1+1 TV Channel // 1PLUS1:10723:h:1:27500:769:770:3 while ((opt = getopt(argc, argv, "h?f:s:P:p:")) != -1) { switch (opt) { case '?': case 'h': default: printf("Usage: %s \n", argv[0]); case 'f': params.frequency = strtoul(optarg, NULL, 0); printf("DEBUG: Freq=%d\n", params.frequency); params.frequency *= 1000; break; case 's': // symbol rate params.u.dvbs.symbol_rate = strtoul(optarg, NULL, 0); params.u.dvbs.symbol_rate *= 1000; break; case 'P': // PID pid = strtoul(optarg, NULL, 0); //Raw... break; case 'p': pol = strcmp("h", optarg); //Raw... break; } }; /* Parameteres parsing code end */ /* DVB Frontend area */ // open the frontend h_fe = dvbfe_open(adapter_id, frontend_id, 0 /*1:readonly, 0:rw */ ); if (NULL == h_fe) { fprintf(stderr, "Failed to open frontend\n"); exit(1); } /* Param 2 - Mask: DVBFE_INFO_LOCKSTATUS | DVBFE_INFO_FEPARAMS */ locked = dvbfe_get_info(h_fe, DVBFE_INFO_LOCKSTATUS | DVBFE_INFO_FEPARAMS, &dvb_info, DVBFE_INFO_QUERYTYPE_IMMEDIATE, 0); if (locked) { printf("DVB Device: %s\n", dvb_info.name); // DST DVB-S printf("Current: Freq: %ukHz\t", dvb_info.feparams.frequency); printf("SymbolRate: %d\t", dvb_info.feparams.u.dvbs.symbol_rate); printf("Pol.: %d\t", dvb_info.feparams.inversion); printf("FEC: %d\t", dvb_info.feparams.u.dvbs.fec_inner); printf("%s %slocked\n", dvb_info.signal ? "" : "signal", dvb_info.lock ? "" : "un"); } else { fprintf(stderr, "Failed to get frontend info\n"); dvbfe_close(h_fe); exit(1); } // TODO - Set our specific values - to our transponder params.inversion = DVBFE_INVERSION_AUTO; params.u.dvbs.fec_inner = DVBFE_FEC_AUTO; printf("Set up frontend: Freq=%ukHz, S/R=%d\n", params.frequency, params.u.dvbs.symbol_rate); // five tries for (i = 0; i < 5; i++) { /* sat_no, pol, hiband */ printf("Set DVB Frontend (%d)\n", i); sec_config.config_type = DVBSEC_CONFIG_STANDARD; res = dvbsec_set(h_fe, &sec_config, DISEQC_POLARIZATION_H, /* enum dvbsec_diseqc_polarization polarization, */ DISEQC_SWITCH_A, /* enum dvbsec_diseqc_switch sat_pos, DISEQC_SWITCH_A */ DISEQC_SWITCH_UNCHANGED, /* enum dvbsec_diseqc_switch switch_option, */ ¶ms, 2 /*timeout */ ); if (0 > res) fprintf(stderr, "Failed to set up frontend\n"); locked = dvbfe_get_info(h_fe, DVBFE_INFO_FEPARAMS, &dvb_info, DVBFE_INFO_QUERYTYPE_IMMEDIATE, 0); if (locked) { printf("Set up: Freq: %dkHz\t", dvb_info.feparams.frequency); printf("SymbolRate: %d\t", dvb_info.feparams.u.dvbs.symbol_rate); printf("Pol.: %d\t", dvb_info.feparams.inversion); printf("FEC: %d\t", dvb_info.feparams.u.dvbs.fec_inner); printf("Signal: %s %slocked\n", dvb_info.signal ? "yes" : "no", dvb_info.lock ? "" : "un"); } } /* DVB Frontend area end */ // Close fronend dvbfe_close(h_fe); return 0; }