Fixes for S3/C3 betaflight passthrough flashing (#2714)
[ExpressLRS.git] / src / html / cw.js
blob25ea0abdd8e1b677b5da61eb4e704a7263c9bfa3
1 @@require(chip)
2 /* eslint-disable max-len, require-jsdoc */
3 document.addEventListener('DOMContentLoaded', init, false);
5 function _(el) {
6   return document.getElementById(el);
9 var cwFreq = 2440000000;
10 var xtalNominal = 52000000;
11 var warn_offset;
12 var bad_offset;
14 function updateParams(data) {
15   cwFreq = data.center;
16 @@if chip == 'SX128X':
17   xtalNominal = 52000000;
18   warn_offset = 90000;
19   bad_offset = 180000;
20 @@end
21 @@if chip == 'SX127X':
22   xtalNominal = 32000000;
23   warn_offset = 100000;
24   bad_offset = 125000;
25 @@end
26 @@if chip == 'LR1121':
27   xtalNominal = 32000000;
28   warn_offset = 100000;
29   bad_offset = 125000;
30   if (!_('optionsSetSubGHz').checked) {
31     cwFreq = data.center2;
32   }
33 @@end
34   _('frequency').textContent = (cwFreq / 1000000).toString();
35   _('start-cw').disabled = false;
38 function init() {
39   const xmlhttp = new XMLHttpRequest();
40   xmlhttp.onreadystatechange = function() {
41     if (this.readyState === 4 && this.status === 200) {
42       const data = JSON.parse(this.responseText);
43       if (data.radios === 2) {
44         _('radioOption').style.display = 'block';
45       }
46 @@if chip == 'LR1121':
47       _('optionsSetSubGHz').onclick = () => {
48         updateParams(data);
49       }
50 @@end
51       updateParams(data);
52     }
53   };
54   xmlhttp.open('GET', '/cw', true);
55   xmlhttp.send();
58 _('start-cw').onclick = (e) => {
59   e.stopPropagation();
60   e.preventDefault();
61   _('start-cw').disabled = true;
62   _('optionsRadios1').disabled = true;
63   _('optionsRadios2').disabled = true;
64   const xmlhttp = new XMLHttpRequest();
65   xmlhttp.open('POST', '/cw', true);
66   xmlhttp.onreadystatechange = function() {};
67   const formdata = new FormData;
68   formdata.append('radio', _('optionsRadios1').checked ? 1 : 2);
69 @@if chip == 'LR1121':
70   formdata.append('subGHz', _('optionsSetSubGHz').checked ? 1 : 0);
71   _('optionsSetSubGHz').disabled = true;
72 @@end
73   xmlhttp.send(formdata);
76 _('measured').onchange = (e) => {
77   const calc = (e.target.value/cwFreq)*xtalNominal;
78   _('calculated').innerHTML = Math.round(calc);
79   _('offset').innerHTML = Math.round(calc - xtalNominal) / 1000;
80   _('ppm').innerHTML = Math.abs(Math.round(calc - xtalNominal)) / (xtalNominal /1000000);
81   const rawShift = Math.round(e.target.value - cwFreq);
82   _('raw').innerHTML = rawShift / 1000;
83   let icon;
84   if (Math.abs(rawShift) < warn_offset) {
85     icon = `<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="64" height="64" viewBox="0 0 96 96" enable-background="new 0 0 96 96" xml:space="preserve"><g><path fill-rule="evenodd" clip-rule="evenodd" fill="#6BBE66" d="M48,0c26.51,0,48,21.49,48,48S74.51,96,48,96S0,74.51,0,48 S21.49,0,48,0L48,0z M26.764,49.277c0.644-3.734,4.906-5.813,8.269-3.79c0.305,0.182,0.596,0.398,0.867,0.646l0.026,0.025 c1.509,1.446,3.2,2.951,4.876,4.443l1.438,1.291l17.063-17.898c1.019-1.067,1.764-1.757,3.293-2.101 c5.235-1.155,8.916,5.244,5.206,9.155L46.536,63.366c-2.003,2.137-5.583,2.332-7.736,0.291c-1.234-1.146-2.576-2.312-3.933-3.489 c-2.35-2.042-4.747-4.125-6.701-6.187C26.993,52.809,26.487,50.89,26.764,49.277L26.764,49.277z"/></g></svg>`;
86   } else if (Math.abs(rawShift) < bad_offset) {
87     icon = `
88     <svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 20 20">
89       <style type="text/css">.cls-1{ fill: #fc3 }</style>
90       <path class="cls-1" d="M19.64 16.36L11.53 2.3A1.85 1.85 0 0 0 10 1.21 1.85 1.85 0 0 0 8.48 2.3L.36 16.36C-.48 17.81.21 19 1.88 19h16.24c1.67 0 2.36-1.19 1.52-2.64zM11 16H9v-2h2zm0-4H9V6h2z"/>
91     </svg>`;
92   } else {
93     icon = `
94       <svg xmlns="http://www.w3.org/2000/svg"  width="64" height="64" viewBox="0 0 122.88 122.88">
95       <defs><style>.cls-1{fill:#eb0100;}.cls-1,.cls-2{fill-rule:evenodd;}.cls-2{fill:#fff;}</style></defs>
96       <path class="cls-1" d="M61.44,0A61.44,61.44,0,1,1,0,61.44,61.44,61.44,0,0,1,61.44,0Z"/><path class="cls-2" d="M35.38,49.72c-2.16-2.13-3.9-3.47-1.19-6.1l8.74-8.53c2.77-2.8,4.39-2.66,7,0L61.68,46.86,73.39,35.15c2.14-2.17,3.47-3.91,6.1-1.2L88,42.69c2.8,2.77,2.66,4.4,0,7L76.27,61.44,88,73.21c2.65,2.58,2.79,4.21,0,7l-8.54,8.74c-2.63,2.71-4,1-6.1-1.19L61.68,76,49.9,87.81c-2.58,2.64-4.2,2.78-7,0l-8.74-8.53c-2.71-2.63-1-4,1.19-6.1L47.1,61.44,35.38,49.72Z"/>
97     </svg>`;
98   }
99   _('tldr').innerHTML = icon;
100   _('result').style.display = 'block';