diff --git a/apps/modtest.c b/apps/modtest.c index de04850..f5d9d71 100644 --- a/apps/modtest.c +++ b/apps/modtest.c @@ -1003,7 +1003,8 @@ int mci_set_stream( int fd, uint8_t stream, uint8_t channel, uint8_t standard, } -void set_dvbt_mods(int adapt, int chans, uint32_t start_freq, write_data *wd) +void set_dvb_mods(int adapt, int chans, uint32_t start_freq, + enum fe_delivery_system delsys, write_data *wd) { if ((mci_set_output_simple(adapt, chans) < 0)|| (mci_set_channels_simple(adapt, start_freq, chans)< 0)) @@ -1019,16 +1020,32 @@ void set_dvbt_mods(int adapt, int chans, uint32_t start_freq, write_data *wd) char *device; int fd; - wd->tp[i].tpid = 1; // all the same transport stream id - wd->tp[i].delsys = SYS_DVBT; - wd->tp[i].freq = start_freq+8000000*i; - wd->tp[i].qam = 2; - wd->tp[i].symbolrate = 0; - wd->tp[i].bandwidth = 0; - wd->tp[i].guard = 0; - wd->tp[i].code_rate = 4; - wd->tp[i].trans_mode = MOD_STANDARD_DVBT_8; - + switch(delsys){ + case SYS_DVBT: + wd->tp[i].tpid = 1; // all the same transport stream id + wd->tp[i].delsys = SYS_DVBT; + wd->tp[i].freq = start_freq+8000000*i; + wd->tp[i].qam = 2; + wd->tp[i].symbolrate = 0; + wd->tp[i].bandwidth = 0; + wd->tp[i].guard = 0; + wd->tp[i].code_rate = 4; + wd->tp[i].trans_mode = MOD_STANDARD_DVBT_8; + break; + + case SYS_DVBC_ANNEX_A: + wd->tp[i].tpid = i; + wd->tp[i].delsys = SYS_DVBC_ANNEX_A; + wd->tp[i].freq = start_freq+8000000*i; + wd->tp[i].qam = QAM_256; + wd->tp[i].symbolrate = 6900000; + wd->tp[i].bandwidth = 0; + wd->tp[i].guard = 0; + wd->tp[i].code_rate = 0; + wd->tp[i].trans_mode = 0; + break; + } + device = malloc(sizeof(char)*40); snprintf(device,35,"/dev/dvb/adapter%d/mod%d",adapt,i); fd = open(device, O_RDWR); @@ -1045,104 +1062,6 @@ void set_dvbt_mods(int adapt, int chans, uint32_t start_freq, write_data *wd) } } -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -//++++++++++++++++++++++++++++++++DVBC MOD++++++++++++++++++++++++++++++++ - -static int set_property(int fd, uint32_t cmd, uint32_t data) -{ - struct dtv_property p; - struct dtv_properties c; - int ret; - - p.cmd = cmd; - c.num = 1; - c.props = &p; - p.u.data = data; - ret = ioctl(fd, FE_SET_PROPERTY, &c); - if (ret < 0) { - fprintf(stderr, "FE_SET_PROPERTY returned %d\n", errno); - return -1; - } - return 0; -} - -static int set_input_bitrate(int fd, uint64_t data) -{ - struct dtv_property p; - struct dtv_properties c; - int ret; - - p.cmd = MODULATOR_INPUT_BITRATE; - c.num = 1; - c.props = &p; - p.u.data64 = data; - ret = ioctl(fd, FE_SET_PROPERTY, &c); - if (ret < 0) { - fprintf(stderr, "FE_SET_PROPERTY returned %d\n", errno); - return -1; - } - return 0; -} - -void set_dvbc_mods(int adapt, int chans, uint32_t start_freq, write_data *wd) -{ - uint32_t freq = start_freq; - uint8_t qam = QAM_256; - uint32_t sym = 6900000; - - wd->chans = chans; - wd->fd_out = (int *)malloc(chans*sizeof(int)); - memset(wd->fd_out,0,chans*sizeof(int)); - - for (int i = 0; i < chans; i++){ - char *device; - int fd; - - wd->tp[i].tpid = i; - wd->tp[i].delsys = SYS_DVBC_ANNEX_A; - wd->tp[i].freq = freq; - wd->tp[i].qam = qam; - wd->tp[i].symbolrate = sym; - wd->tp[i].bandwidth = 0; - wd->tp[i].guard = 0; - wd->tp[i].code_rate = 0; - wd->tp[i].trans_mode = 0; - - device = malloc(sizeof(char)*40); - snprintf(device,35,"/dev/dvb/adapter%d/mod%d",adapt,i); - fd = open(device, O_RDWR); - if( fd < 0 ) - { - fprintf(stderr,"Error opening %s : %s\n",device,strerror(errno)); - free(device); - exit(1); - } - if (set_property(fd, MODULATOR_FREQUENCY, freq) < 0){ - fprintf(stderr,"setting freq %d failed\n",freq); - exit(1); - } - if (set_property(fd, MODULATOR_MODULATION, qam) < 0){ - fprintf(stderr,"setting qam %d failed\n",qam); - exit(1); - } - if (set_property(fd, MODULATOR_SYMBOL_RATE, sym) < 0){ - fprintf(stderr,"setting sym %d failed\n",sym); - exit(1); - } - - if (set_input_bitrate(fd, (DEFAULT_BIT_RATE_C << 32)) < 0){ - fprintf(stderr,"setting bitrate %d failed\n", - (int)DEFAULT_BIT_RATE_C); - exit(1); - } - - freq += 8000000; - close(fd); - free(device); - } -} - //+++++++++++++++++++++++++++++CLI++++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -1296,9 +1215,9 @@ int main(int argc, char **argv) chans = ddevices.ndevs[adapt]; if (dvbt){ - set_dvbt_mods(adapt, chans, start_freq, &wd); + set_dvb_mods(adapt, chans, start_freq, SYS_DVBT, &wd); } else { - set_dvbc_mods(adapt, chans, start_freq, &wd); + set_dvb_mods(adapt, chans, start_freq, SYS_DVBC_ANNEX_A, &wd); } fprintf(stderr,"Reading from %s\n", filename);