LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Software (https://www.linuxquestions.org/questions/linux-software-2/)
-   -   Linux dvb usb adapter frontend (https://www.linuxquestions.org/questions/linux-software-2/linux-dvb-usb-adapter-frontend-4175509631/)

human_shu@yahoo.com 06-30-2014 06:32 AM

Linux dvb usb adapter frontend
 
Hi
Iam currently developing a DVB driver for a usb device. I have to provided get and set properties calls. For the testing purpose in 'get parameter' i am setting "dtv_frontend_properties"
----------------------------------
c->code_rate_HP = FEC_3_5;
c->code_rate_LP = FEC_5_6;
c->modulation = QAM_256;
c->transmission_mode = TRANSMISSION_MODE_4K;
c->guard_interval = GUARD_INTERVAL_19_128;
c->hierarchy = HIERARCHY_NONE;
c->frequency = state->frequency;
c->bandwidth_hz = state->bandwidth;
c->inversion = INVERSION_AUTO;
----------------------------------

and in 'set parameter' I'm printing same values

----------------------------------
printk("frequency %x\n",c->frequency );
printk("code_rate_HP %x\n",c->code_rate_HP );
printk("code_rate_LP %x\n",c->code_rate_LP );
printk("modulation %x\n",c->modulation );
printk("transmission_mode %x\n",c->transmission_mode );
printk("guard_interval %x\n",c->guard_interval );
printk("hierarchy %x\n",c->hierarchy );
printk("bandwidth_hz %x\n",c->bandwidth_hz );
printk("inversion %x\n",c->inversion );
----------------------------------
now when iam calling ioctl from application as following

----------------------------------
struct dtv_property prop[8];
struct dtv_properties props;
int dev,err;

memset(prop,0,sizeof(struct dtv_property)*8);
dev=open(DEVICE,O_RDWR);
if(dev < 0){
perror("Error in opening device");
return -1;
}
prop[0].cmd = DTV_MODULATION;
prop[1].cmd = DTV_BANDWIDTH_HZ;
prop[2].cmd = DTV_INVERSION;
prop[3].cmd = DTV_CODE_RATE_HP;
prop[4].cmd = DTV_CODE_RATE_LP;
prop[5].cmd = DTV_GUARD_INTERVAL;
prop[6].cmd = DTV_TRANSMISSION_MODE;
prop[7].cmd = DTV_FREQUENCY;

prop[0].u.data = QPSK;
prop[1].u.data = 8000000;
prop[2].u.data = INVERSION_AUTO;
prop[3].u.data = FEC_NONE ;
prop[4].u.data = FEC_NONE ;
prop[5].u.data = GUARD_INTERVAL_1_32;
prop[6].u.data = TRANSMISSION_MODE_2K;
prop[7].u.data = 57000000;

props.num = 8;
props.props = prop;
if((err=ioctl(dev, FE_SET_FRONTEND , &props)) < 0){
printf("ioctl error");
return -1;
}
----------------------------------------------
these values must update in cache according to my understanding.
but next ioctl call with FE_GET_FRONTEND ,as follows, returns all values as zeros
----------------------------------------------
memset(prop,0,sizeof(struct dtv_property)*8);

prop[0].cmd = DTV_MODULATION;
prop[1].cmd = DTV_BANDWIDTH_HZ;
prop[2].cmd = DTV_INVERSION;
prop[3].cmd = DTV_CODE_RATE_HP;
prop[4].cmd = DTV_CODE_RATE_LP;
prop[5].cmd = DTV_GUARD_INTERVAL;
prop[6].cmd = DTV_TRANSMISSION_MODE;
prop[7].cmd = DTV_FREQUENCY;
props.num = 8;
props.props = prop;
if((err=ioctl(dev, FE_GET_FRONTEND , &props)) < 0){
printf("ioctl error");
return -1;
}
printf("prop[0] %u\n",prop[0].u.data);
printf("prop[1] %u\n",prop[1].u.data);
printf("prop[2] %u\n",prop[2].u.data);
printf("prop[3] %u\n",prop[3].u.data);
printf("prop[4] %u\n",prop[4].u.data);
printf("prop[5] %u\n",prop[5].u.data);
printf("prop[6] %u\n",prop[6].u.data);
printf("prop[7] %u\n",prop[7].u.data);
close(dev);
-------------------------------------------------

what am I doing wrong or is there anything i have misunderstood in dvb for linux?


All times are GMT -5. The time now is 06:09 AM.