+ p[2].cmd = DTV_FREQUENCY, p[2].u.data = parm_frequency;
+ p[3].cmd = DTV_MODULATION, p[3].u.data = parm_u_qam_modulation;
+ p[4].cmd = DTV_SYMBOL_RATE, p[4].u.data = parm_u_qam_symbol_rate;
+ p[5].cmd = DTV_INNER_FEC, p[5].u.data = parm_u_qam_fec_inner;
+ p[6].cmd = DTV_INVERSION, p[6].u.data = parm_inversion;
+ p[7].cmd = DTV_TUNE;
+ cmdseq.num = 8;
+ if (ioctl(m_fd, FE_SET_PROPERTY, &cmdseq) == -1)
+ {
+ perror("FE_SET_PROPERTY failed");
+ return;
+ }
+ }
+ else if (type == iDVBFrontend::feTerrestrial)
+ {
+ fe_delivery_system_t system = SYS_DVBT;
+ eDVBFrontendParametersTerrestrial tparm;
+ oparm.getDVBT(tparm);
+ switch (tparm.system)
+ {
+ default:
+ case eDVBFrontendParametersTerrestrial::System_DVB_T: system = SYS_DVBT; break;
+ case eDVBFrontendParametersTerrestrial::System_DVB_T2: system = SYS_DVBT2; break;
+ }
+ int bandwidth = 0;
+ switch (tparm.bandwidth)
+ {
+ case eDVBFrontendParametersTerrestrial::Bandwidth_8MHz: bandwidth = 8000000; break;
+ case eDVBFrontendParametersTerrestrial::Bandwidth_7MHz: bandwidth = 7000000; break;
+ case eDVBFrontendParametersTerrestrial::Bandwidth_6MHz: bandwidth = 6000000; break;
+ default:
+ case eDVBFrontendParametersTerrestrial::Bandwidth_Auto: bandwidth = 0; break;
+ case eDVBFrontendParametersTerrestrial::Bandwidth_5MHz: bandwidth = 5000000; break;
+ case eDVBFrontendParametersTerrestrial::Bandwidth_10MHz: bandwidth = 10000000; break;
+ case eDVBFrontendParametersTerrestrial::Bandwidth_1_712MHz: bandwidth = 1712000; break;
+ }
+ struct dtv_property p[13];
+ struct dtv_properties cmdseq;
+ cmdseq.props = p;
+ cmdseq.num = 0;
+ p[cmdseq.num].cmd = DTV_CLEAR, cmdseq.num++;
+ p[cmdseq.num].cmd = DTV_DELIVERY_SYSTEM, p[cmdseq.num].u.data = system, cmdseq.num++;
+ p[cmdseq.num].cmd = DTV_FREQUENCY, p[cmdseq.num].u.data = parm_frequency, cmdseq.num++;
+ p[cmdseq.num].cmd = DTV_CODE_RATE_LP, p[cmdseq.num].u.data = parm_u_ofdm_code_rate_LP, cmdseq.num++;
+ p[cmdseq.num].cmd = DTV_CODE_RATE_HP, p[cmdseq.num].u.data = parm_u_ofdm_code_rate_HP, cmdseq.num++;
+ p[cmdseq.num].cmd = DTV_MODULATION, p[cmdseq.num].u.data = parm_u_ofdm_constellation, cmdseq.num++;
+ p[cmdseq.num].cmd = DTV_TRANSMISSION_MODE, p[cmdseq.num].u.data = parm_u_ofdm_transmission_mode, cmdseq.num++;
+ p[cmdseq.num].cmd = DTV_GUARD_INTERVAL, p[cmdseq.num].u.data = parm_u_ofdm_guard_interval, cmdseq.num++;
+ p[cmdseq.num].cmd = DTV_HIERARCHY, p[cmdseq.num].u.data = parm_u_ofdm_hierarchy_information, cmdseq.num++;
+ p[cmdseq.num].cmd = DTV_BANDWIDTH_HZ, p[cmdseq.num].u.data = bandwidth, cmdseq.num++;
+ p[cmdseq.num].cmd = DTV_INVERSION, p[cmdseq.num].u.data = parm_inversion, cmdseq.num++;
+#if defined DTV_STREAM_ID
+ p[cmdseq.num].cmd = DTV_STREAM_ID , p[cmdseq.num].u.data = tparm.plpid, cmdseq.num++;
+#elif defined DTV_DVBT2_PLP_ID
+ p[cmdseq.num].cmd = DTV_DVBT2_PLP_ID , p[cmdseq.num].u.data = tparm.plpid, cmdseq.num++;
+#endif
+ p[cmdseq.num].cmd = DTV_TUNE, cmdseq.num++;
+ if (ioctl(m_fd, FE_SET_PROPERTY, &cmdseq) == -1)
+ {
+ perror("FE_SET_PROPERTY failed");
+ return;
+ }
+ }
+ else