mirror of
				https://github.com/DigitalDevices/dddvb.git
				synced 2025-03-01 10:35:23 +00:00 
			
		
		
		
	new tuning for dvbc
This commit is contained in:
		
							
								
								
									
										141
									
								
								apps/modtest.c
									
									
									
									
									
								
							
							
						
						
									
										141
									
								
								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); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user