<p>
Hello.
</p>
<p>
Here is my patch to scan utility that allows giving data for initial tuning (DVB-S) from the command line instead of a file only.
</p>
<p>
It is useful for me and maybe it will be useful for someone else.
</p>
<p>
18a19,21<br />
> * <br />
> * 2008-05-31 - Added -F-S-z-E console parameters for initial tuning<br />
> * Added by Wmn<br />
1691c1694<br />
< static int tune_initial (int frontend_fd, const char *initial)<br />
---<br />
> static int tune_initial (int frontend_fd, const char *initial, unsigned int freq, unsigned int srate, char polar, char *_fec)<br />
1699,1702c1702,1801<br />
< inif = fopen(initial, "r");<br />
< if (!inif) {<br />
< error("cannot open '%s': %d %m\n", initial, errno);<br />
< return -1;<br />
---<br />
> if (!freq || !srate)<br />
> {<br />
> inif = fopen(initial, "r");<br />
> if (!inif) {<br />
> error("cannot open '%s': %d %m\n", initial, errno);<br />
> return -1;<br />
> }<br />
> while (fgets(buf, sizeof(buf), inif)) {<br />
> if (buf[0] == '#' || buf[0] == '\n')<br />
> ;<br />
> else if (sscanf(buf, "S %u %1[HVLR] %u %4s\n", &f, pol, &sr, fec) == 4) {<br />
> t = alloc_transponder(f);<br />
> t->type = FE_QPSK;<br />
> switch(pol[0]) {<br />
> case 'H':<br />
> case 'L':<br />
> t->polarisation = POLARISATION_HORIZONTAL;<br />
> break;<br />
> default:<br />
> t->polarisation = POLARISATION_VERTICAL;;<br />
> break;<br />
> }<br />
> t->param.inversion = spectral_inversion;<br />
> t->param.u.qpsk.symbol_rate = sr;<br />
> t->param.u.qpsk.fec_inner = str2fec(fec);<br />
> info("initial transponder %u %c %u %d\n",<br />
> t->param.frequency,<br />
> pol[0], sr,<br />
> t->param.u.qpsk.fec_inner);<br />
> }<br />
> else if (sscanf(buf, "C %u %u %4s %6s\n", &f, &sr, fec, qam) == 4) {<br />
> t = alloc_transponder(f);<br />
> t->type = FE_QAM;<br />
> t->param.inversion = spectral_inversion;<br />
> t->param.u.qam.symbol_rate = sr;<br />
> t->param.u.qam.fec_inner = str2fec(fec);<br />
> t->param.u.qam.modulation = str2qam(qam);<br />
> info("initial transponder %u %u %d %d\n",<br />
> t->param.frequency,<br />
> sr,<br />
> t->param.u.qam.fec_inner,<br />
> t->param.u.qam.modulation);<br />
> }<br />
> else if (sscanf(buf, "T %u %4s %4s %4s %7s %4s %4s %4s\n",<br />
> &f, bw, fec, fec2, qam, mode, guard, hier) == 8) {<br />
> t = alloc_transponder(f);<br />
> t->type = FE_OFDM;<br />
> t->param.inversion = spectral_inversion;<br />
> t->param.u.ofdm.bandwidth = str2bandwidth(bw);<br />
> t->param.u.ofdm.code_rate_HP = str2fec(fec);<br />
> if (t->param.u.ofdm.code_rate_HP == FEC_NONE)<br />
> t->param.u.ofdm.code_rate_HP = FEC_AUTO;<br />
> t->param.u.ofdm.code_rate_LP = str2fec(fec2);<br />
> if (t->param.u.ofdm.code_rate_LP == FEC_NONE)<br />
> t->param.u.ofdm.code_rate_LP = FEC_AUTO;<br />
> t->param.u.ofdm.constellation = str2qam(qam);<br />
> t->param.u.ofdm.transmission_mode = str2mode(mode);<br />
> t->param.u.ofdm.guard_interval = str2guard(guard);<br />
> t->param.u.ofdm.hierarchy_information = str2hier(hier);<br />
> info("initial transponder %u %d %d %d %d %d %d %d\n",<br />
> t->param.frequency,<br />
> t->param.u.ofdm.bandwidth,<br />
> t->param.u.ofdm.code_rate_HP,<br />
> t->param.u.ofdm.code_rate_LP,<br />
> t->param.u.ofdm.constellation,<br />
> t->param.u.ofdm.transmission_mode,<br />
> t->param.u.ofdm.guard_interval,<br />
> t->param.u.ofdm.hierarchy_information);<br />
> }<br />
> else if (sscanf(buf, "A %u %7s\n",<br />
> &f,qam) == 2) {<br />
> t = alloc_transponder(f);<br />
> t->type = FE_ATSC;<br />
> t->param.u.vsb.modulation = str2qam(qam);<br />
> } else<br />
> error("cannot parse'%s'\n", buf);<br />
> }<br />
> <br />
> fclose(inif);<br />
> }<br />
> else<br />
> {<br />
> t = alloc_transponder(freq);<br />
> t->type = FE_QPSK;<br />
> switch(polar) {<br />
> case 'H':<br />
> case 'L':<br />
> t->polarisation = POLARISATION_HORIZONTAL;<br />
> break;<br />
> default:<br />
> t->polarisation = POLARISATION_VERTICAL;;<br />
> break;<br />
> }<br />
> t->param.inversion = spectral_inversion;<br />
> t->param.u.qpsk.symbol_rate = srate;<br />
> t->param.u.qpsk.fec_inner = str2fec(_fec);<br />
> info("initial transponder %u %c %u %d\n",<br />
> t->param.frequency,<br />
> polar, srate,<br />
> t->param.u.qpsk.fec_inner);<br />
1704,1775d1802<br />
< while (fgets(buf, sizeof(buf), inif)) {<br />
< if (buf[0] == '#' || buf[0] == '\n')<br />
< ;<br />
< else if (sscanf(buf, "S %u %1[HVLR] %u %4s\n", &f, pol, &sr, fec) == 4) {<br />
< t = alloc_transponder(f);<br />
< t->type = FE_QPSK;<br />
< switch(pol[0]) {<br />
< case 'H':<br />
< case 'L':<br />
< t->polarisation = POLARISATION_HORIZONTAL;<br />
< break;<br />
< default:<br />
< t->polarisation = POLARISATION_VERTICAL;;<br />
< break;<br />
< }<br />
< t->param.inversion = spectral_inversion;<br />
< t->param.u.qpsk.symbol_rate = sr;<br />
< t->param.u.qpsk.fec_inner = str2fec(fec);<br />
< info("initial transponder %u %c %u %d\n",<br />
< t->param.frequency,<br />
< pol[0], sr,<br />
< t->param.u.qpsk.fec_inner);<br />
< }<br />
< else if (sscanf(buf, "C %u %u %4s %6s\n", &f, &sr, fec, qam) == 4) {<br />
< t = alloc_transponder(f);<br />
< t->type = FE_QAM;<br />
< t->param.inversion = spectral_inversion;<br />
< t->param.u.qam.symbol_rate = sr;<br />
< t->param.u.qam.fec_inner = str2fec(fec);<br />
< t->param.u.qam.modulation = str2qam(qam);<br />
< info("initial transponder %u %u %d %d\n",<br />
< t->param.frequency,<br />
< sr,<br />
< t->param.u.qam.fec_inner,<br />
< t->param.u.qam.modulation);<br />
< }<br />
< else if (sscanf(buf, "T %u %4s %4s %4s %7s %4s %4s %4s\n",<br />
< &f, bw, fec, fec2, qam, mode, guard, hier) == 8) {<br />
< t = alloc_transponder(f);<br />
< t->type = FE_OFDM;<br />
< t->param.inversion = spectral_inversion;<br />
< t->param.u.ofdm.bandwidth = str2bandwidth(bw);<br />
< t->param.u.ofdm.code_rate_HP = str2fec(fec);<br />
< if (t->param.u.ofdm.code_rate_HP == FEC_NONE)<br />
< t->param.u.ofdm.code_rate_HP = FEC_AUTO;<br />
< t->param.u.ofdm.code_rate_LP = str2fec(fec2);<br />
< if (t->param.u.ofdm.code_rate_LP == FEC_NONE)<br />
< t->param.u.ofdm.code_rate_LP = FEC_AUTO;<br />
< t->param.u.ofdm.constellation = str2qam(qam);<br />
< t->param.u.ofdm.transmission_mode = str2mode(mode);<br />
< t->param.u.ofdm.guard_interval = str2guard(guard);<br />
< t->param.u.ofdm.hierarchy_information = str2hier(hier);<br />
< info("initial transponder %u %d %d %d %d %d %d %d\n",<br />
< t->param.frequency,<br />
< t->param.u.ofdm.bandwidth,<br />
< t->param.u.ofdm.code_rate_HP,<br />
< t->param.u.ofdm.code_rate_LP,<br />
< t->param.u.ofdm.constellation,<br />
< t->param.u.ofdm.transmission_mode,<br />
< t->param.u.ofdm.guard_interval,<br />
< t->param.u.ofdm.hierarchy_information);<br />
< }<br />
< else if (sscanf(buf, "A %u %7s\n",<br />
< &f,qam) == 2) {<br />
< t = alloc_transponder(f);<br />
< t->type = FE_ATSC;<br />
< t->param.u.vsb.modulation = str2qam(qam);<br />
< } else<br />
< error("cannot parse'%s'\n", buf);<br />
< }<br />
< <br />
< fclose(inif);<br />
1858c1885<br />
< static void scan_network (int frontend_fd, const char *initial)<br />
---<br />
> static void scan_network (int frontend_fd, const char *initial, unsigned int freq, unsigned int srate, char polar, char *fec)<br />
1860c1887<br />
< if (tune_initial (frontend_fd, initial) < 0) {<br />
---<br />
> if (tune_initial (frontend_fd, initial, freq, srate, polar, fec) < 0) {<br />
2054c2081<br />
< "usage: %s [options...] [-c | initial-tuning-data-file]\n"<br />
---<br />
> "usage: %s [options...] [-c | -F-S[-z-E] | initial-tuning-data-file]\n"<br />
2084c2111,2117<br />
< " -U Uniquely name unknown services\n";<br />
---<br />
> " -U Uniquely name unknown services\n"<br />
> "\n"<br />
> " Initial tune data:\n"<br />
> " -F N Frequency for initial tune\n"<br />
> " -S N Symbol-rate for initial tune\n"<br />
> " -z <V=default|H|R|L> Polarization for initial tune\n"<br />
> " -E <NONE|1/2|2/3|3/4|4/5|5/6|6/7|7/8|8/9|AUTO=default> FEC for initial tune\n";<br />
2122a2156,2158<br />
> unsigned int srate = 0, freq = 0;<br />
> char polar = 'V';<br />
> char fec[] = "AUTO";<br />
2132c2168<br />
< while ((opt = getopt(argc, argv, "5cnpa:f:d:s:o:x:e:t:i:l:vquPA:U")) != -1) {<br />
---<br />
> while ((opt = getopt(argc, argv, "5cnpa:f:d:s:o:x:e:t:i:l:vquPA:US:F:z:E:")) != -1) {<br />
2207d2242<br />
< <br />
2211a2247,2259<br />
> case 'S':<br />
> srate = strtoul(optarg, NULL, 0);<br />
> break;<br />
> case 'F':<br />
> freq = strtoul(optarg, NULL, 0);<br />
> break;<br />
> case 'z':<br />
> polar = optarg[0];<br />
> break;<br />
> case 'E':<br />
> strncpy (fec, optarg, 4);<br />
> fec[4] = '\0';<br />
> break;<br />
2220c2268<br />
< if ((!initial && !current_tp_only) || (initial && current_tp_only) ||<br />
---<br />
> if ((((!freq || !srate) && !initial) && !current_tp_only) || (((freq && srate) || initial) && current_tp_only) ||<br />
2269c2317<br />
< scan_network (frontend_fd, initial);<br />
---<br />
> scan_network (frontend_fd, initial, freq, srate, polar, fec);
</p>