ONDD command line calculator
by Hajime Yamasaki Vukelic
HTML
<form id="sat-settings">
<p>
<label for="lnb">LNB type</label>
<select id="lnb">
<option value="u">Universal</option>
<option value="k">NA Ku</option>
<option value="c">C-band</option>
</select>
<span class="hint">Ku LNBs are only used in North America</span>
</p>
<p>
<label for="freq">Transponder frequency (MHz)</label>
<input type="numeric" required id="freq"/>
<span class="hint">e.g., 11471</span>
</p>
<p>
<label for="symb">Symbol rate (kbauds)</label>
<input type="numeric" required id="symb"/>
<span class="hint">eg., 27500</span>
</p>
<p>
<label for="pol">Polarisation</label>
<select id="pol">
<option value="V">Vertical</option>
<option value="H">Horizontal</option>
</select>
</p>
<p>
<button>Calcualte ONDD commandline</button>
</p>
</form>
<input type="text" id="out"></input>
CSS
body {
font-family: Arial, sans-serif;
background: #eee;
color: #333;
}
button {
box-sizing: border-box;
width: 280px;
background: #5577aa;
border: 1px solid #5577aa;
cursor: pointer;
color: #eee;
font-size: 18px;
padding: 0.5em 1em;
border-radius: 3px;
}
label {
display: block;
font-weight: bold;
font-size: 18px;
line-height: 140%;
cursor: pointer;
color: #5577aa;
}
.hint {
color: grey;
font-style: italic;
display: block;
}
input[type="text"],
input[type="numeric"],
select {
box-sizing: border-box;
font-size: 120%;
width: 280px;
border: 1px solid grey;
padding: 0.5em;
}
output {
border: 1px solid grey;
background: white;
color: #333;
width: 280px;
box-sizing: border-box;
}
JavaScript
// Constants
var UN_SW = 11700; // high-low switch frequency for Universal
var UN_HOFF = 10600; // Universal high band offset
var UN_LOFF = 9750; // Universal low band offset
var KU_OFF = 10750; // Ku LNB offset
var C_OFF = 5150; // C LNB offset
var KU = 'k'; // Ku band LNB
var UN = 'u'; // Universal LNB
var C = 'c'; // C-band LNB
// Stash selectors
var satForm = $('#sat-settings');
var output = $('#out');
// Business
satForm.on('submit', function(e) {
var data, onddCmd;
e.preventDefault();
data = getFormValue(satForm);
onddCmd = buildCmd(data.lnb, data.freq, data.symb, data.pol);
output.val(onddCmd);
});
// Helpers
function getValue(frm, name) {
return frm.find('#' + name).val();
}
function getNumeric(s) {
return /(\d+)/.exec(s).slice(1).join('');
}
function getFormValue(frm) {
var data = {};
['lnb', 'freq', 'symb', 'pol'].forEach(function(k) {
data[k] = getValue(frm, k);
});
data.freq = parseInt(getNumeric(data.freq), 10);
data.symb = parseInt(getNumeric(data.symb), 10);
return data;
}
function needsTone(lnbType, freq) {
if (lnbType === KU || lnbType === C) {
return false;
}
if (freq >= UN_SW) {
return true;
}
return false;
}
function lFreq(lnbType, freq) {
if (lnbType === KU) {
return freq - KU_OFF;
}
if (lnbType === C) {
return Math.abs(freq - C_OFF);
}
if (freq >= UN_SW) {
return freq - UN_HOFF;
}
return freq - UN_LOFF;
}
function buildCmd(lnbType, freq, symb, pol) {
var lf = lFreq(lnbType, freq);
var tone = needsTone(lnbType, freq);
var cmd = '/usr/sbin/ondd';
cmd += ' -f ' + lf;
cmd += ' -s ' + symb;
cmd += ' -p ' + pol;
if (tone) {
cmd += ' -t';
}
cmd += ' -o /tmp/downloads';
return cmd;
}