diff --git a/WebPageHtml.pas b/WebPageHtml.pas index fdd1746..811ba7e 100644 --- a/WebPageHtml.pas +++ b/WebPageHtml.pas @@ -205,12 +205,8 @@ begin '' + '' + '' + - // Pluto RF-AGC (hw gain): режим FAST/SLOW/HYB/MAN + ручной gain (активен в MAN). Виден только на Pluto. - '' + - '
' + + // Pluto RF-AGC (hw gain): кнопка → оверлей FAST/SLOW/HYBRID/MANUAL + ползунок (MANUAL). Видна только на Pluto. + '' + '|' + '' + '' + @@ -298,7 +294,8 @@ begin 'function updAnfBtn(){sw("anfBtn",!!cur.anf);}' + 'function updBcnBtn(){const b=q("bcnBtn");if(!b)return;b.style.display=cur.beacon_visible?"":"none";sw("bcnBtn",!!cur.beacon_on);}' + 'function updRxMute(){const b=q("rxMuteBtn");if(!b)return;b.style.display=cur.rx_mute_visible?"":"none";sw("rxMuteBtn",!!cur.rx_mute_on);}' + - 'function updRfAgc(){const vis=!!cur.rf_agc_visible;const s=q("rfagcSel"),g=q("rfgainG");if(s)s.style.display=vis?"":"none";if(g)g.style.display=vis?"":"none";if(!vis)return;const m=cur.rx_gain_mode|0;if(s&&!isPending("rxgain"))s.value=String(m);const sl=q("rfgainSl"),l=q("rfgainVal");if(sl&&!sl.matches(":active")){sl.value=cur.rx_gain_db|0;sl.disabled=(m!==0);}if(l)l.textContent=(cur.rx_gain_db|0)+"dB";}' + + 'function rfagcModeName(m){m=m|0;return m===1?"FAST":m===2?"SLOW":m===3?"HYB":"MAN";}' + + 'function updRfAgc(){const b=q("rfagcBtn");if(!b)return;b.style.display=cur.rf_agc_visible?"":"none";b.textContent="RF AGC "+rfagcModeName(cur.rx_gain_mode);if(rfagcEls)rfagcRefresh();}' + 'const MODE_N=["LSB","USB","DSB","CWL","CWU","FM","AM","SAM"];' + @@ -457,8 +454,39 @@ begin 'q("nbBtn").onclick=function(){cur.nb_mode=((cur.nb_mode|0)+1)%3;cur.nb=cur.nb_mode!==0;updNbBtn();pend("nb");ws2({cmd:"set_nb_mode",mode:cur.nb_mode});};' + 'q("bcnBtn").onclick=function(){cur.beacon_on=!cur.beacon_on;beaconArm=cur.beacon_on;updBcnBtn();pend("beacon");cmd("set_beacon",cur.beacon_on);};' + 'q("rxMuteBtn").onclick=function(){cur.rx_mute_on=!cur.rx_mute_on;updRxMute();pend("rxmute");cmd("set_rx_mute",cur.rx_mute_on);};' + - 'q("rfagcSel").onchange=function(e){const m=+e.target.value;cur.rx_gain_mode=m;pend("rxgain");updRfAgc();ws2({cmd:"set_rx_gain_mode",mode:m});};' + - 'q("rfgainSl").oninput=function(e){const v=+e.target.value;cur.rx_gain_db=v;cur.rx_gain_mode=0;const l=q("rfgainVal");if(l)l.textContent=v+"dB";const s=q("rfagcSel");if(s)s.value="0";pend("rxgain");ws2({cmd:"set_rx_gain",db:v});};' + + // RF-AGC оверлей: кнопка RF AGC → попап FAST/SLOW/HYBRID/MANUAL + ползунок (активен в MANUAL). + 'var rfagcOv=null,rfagcEls=null;' + + 'var RFAGC_MODES=[["FAST",1],["SLOW",2],["HYBRID",3],["MANUAL",0]];' + + 'function closeRfagc(){if(rfagcOv){rfagcOv.remove();rfagcOv=null;rfagcEls=null;}document.removeEventListener("click",rfagcOutside);}' + + 'function rfagcOutside(e){if(rfagcOv&&!rfagcOv.contains(e.target)&&e.target!==q("rfagcBtn"))closeRfagc();}' + + 'function rfagcRefresh(){if(!rfagcEls)return;var m=cur.rx_gain_mode|0,g=cur.rx_gain_db|0;' + + 'rfagcEls.btns.forEach(function(o){var a=o.mode===m;o.el.style.background=a?"rgba(25,70,25,0.95)":"rgba(12,28,12,0.85)";o.el.style.color=a?"#b0ffb0":"#7aaa7a";o.el.style.borderColor=a?"rgba(120,220,120,0.7)":"rgba(55,95,55,0.45)";});' + + 'if(!rfagcEls.sl.matches(":active"))rfagcEls.sl.value=g;rfagcEls.sl.disabled=(m!==0);rfagcEls.sl.style.opacity=(m!==0)?"0.4":"1";rfagcEls.val.textContent=g+"dB";}' + + 'function showRfagc(){' + + 'if(rfagcOv){closeRfagc();return;}' + + 'rfagcOv=document.createElement("div");' + + 'rfagcOv.style.cssText="position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:rgba(6,14,6,0.93);border:1px solid rgba(70,120,70,0.65);border-radius:8px;padding:12px 14px;z-index:2000;backdrop-filter:blur(6px);box-shadow:0 4px 24px rgba(0,0,0,0.7);min-width:240px;";' + + 'var hd=document.createElement("div");hd.style.cssText="display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;";' + + 'var tl=document.createElement("span");tl.textContent="RF AGC";tl.style.cssText="color:#80b880;font-family:monospace;font-size:12px;letter-spacing:1px;";' + + 'var xb=document.createElement("button");xb.textContent="×";xb.style.cssText="background:none;border:none;color:#6a9a6a;font-size:16px;cursor:pointer;padding:0 2px;line-height:1;";xb.onclick=closeRfagc;' + + 'hd.appendChild(tl);hd.appendChild(xb);rfagcOv.appendChild(hd);' + + 'var gd=document.createElement("div");gd.style.cssText="display:grid;grid-template-columns:repeat(2,1fr);gap:5px;margin-bottom:10px;";' + + 'var btns=[];' + + 'RFAGC_MODES.forEach(function(pm){var b=document.createElement("button");b.textContent=pm[0];b.style.cssText="border:1px solid;border-radius:4px;padding:6px 0;font-family:monospace;font-size:12px;cursor:pointer;transition:background 0.1s;";' + + 'b.onclick=function(){cur.rx_gain_mode=pm[1];pend("rxgain");ws2({cmd:"set_rx_gain_mode",mode:pm[1]});rfagcRefresh();updRfAgc();};' + + 'gd.appendChild(b);btns.push({el:b,mode:pm[1]});});' + + 'rfagcOv.appendChild(gd);' + + 'var sr=document.createElement("div");sr.style.cssText="display:flex;align-items:center;gap:8px;";' + + 'var lb=document.createElement("span");lb.textContent="GAIN";lb.style.cssText="color:#7aaa7a;font-family:monospace;font-size:11px;";' + + 'var sl=document.createElement("input");sl.type="range";sl.min="0";sl.max="73";sl.value=String(cur.rx_gain_db|0);sl.style.cssText="flex:1;";' + + 'var vv=document.createElement("span");vv.style.cssText="color:#9c9;font-family:monospace;font-size:11px;min-width:34px;text-align:right;";vv.textContent=(cur.rx_gain_db|0)+"dB";' + + 'sl.oninput=function(e){var v=+e.target.value;cur.rx_gain_db=v;cur.rx_gain_mode=0;vv.textContent=v+"dB";pend("rxgain");ws2({cmd:"set_rx_gain",db:v});rfagcRefresh();updRfAgc();};' + + 'sr.appendChild(lb);sr.appendChild(sl);sr.appendChild(vv);rfagcOv.appendChild(sr);' + + 'rfagcEls={btns:btns,sl:sl,val:vv};rfagcRefresh();' + + 'document.body.appendChild(rfagcOv);' + + 'setTimeout(function(){document.addEventListener("click",rfagcOutside);},0);' + + '}' + + 'q("rfagcBtn").onclick=showRfagc;' + 'q("snbBtn").onclick=function(){cur.snb=!cur.snb;updSnbBtn();pend("snb");cmd("set_snb",cur.snb);};' + 'q("anfBtn").onclick=function(){cur.anf=!cur.anf;updAnfBtn();pend("anf");cmd("set_anf",cur.anf);};' +