fix s-meter

This commit is contained in:
2026-03-08 23:51:56 +03:00
parent d347a26d6d
commit e5441be063
3 changed files with 39 additions and 27 deletions
+10 -8
View File
@@ -268,14 +268,14 @@ begin
'function updBand(vfo){let bi=0,bd=1e15;BAND_F.forEach((f,i)=>{const d=Math.abs((vfo||0)-f);if(d<bd){bd=d;bi=i;}});q("bandSel").value=bi;}' +
'let smAvg=-130,smPeak=-130,smMin=-130;' +
'function dbToX(db,bx,bw){return Math.max(bx,Math.min(bx+bw,Math.round(bx+(db+127)/127*bw)));}' +
'function dbToX(db,bx,bw){const DB_MIN=-127,DB_MAX=-13;return Math.max(bx,Math.min(bx+bw,Math.round(bx+(db-DB_MIN)/(DB_MAX-DB_MIN)*bw)));}' +
'function paintSM(dbm){' +
'const w=smCv.clientWidth||340,h=smCv.clientHeight||64;' +
'const AVG_ALPHA=0.40,ZONE_DB=6,PEAK_BASE=0.12,MIN_BASE=0.12,ACCEL=0.030,MAX_A=0.92;' +
'const DBM_MARKS=[-120,-100,-80,-60,-40,-20,0];' +
'const DBM_LABELS=["-120","-100","-80","-60","-40","-20","0"];' +
'const S_MARKS_DBM=[-121,-115,-109,-103,-93,-83,-73,-53,-33];' +
'const S_MARKS_LBL=["S1","S3","S5","S7","S9","+10","+20","+40","+60"];' +
'const DBM_MARKS=[-120,-100,-80,-60,-40,-20];' +
'const DBM_LABELS=["-120","-100","-80","-60","-40","-20"];' +
'const S_MARKS_DBM=[-121,-109,-97,-85,-73,-53,-33,-13];' +
'const S_MARKS_LBL=["S1","S3","S5","S7","S9","+20","+40","+60"];' +
'const TICK_LONG=5,TICK_MED=3;' +
'smAvg=smAvg*(1-AVG_ALPHA)+dbm*AVG_ALPHA;' +
'const pTarget=Math.max(dbm,smAvg+ZONE_DB),mTarget=Math.min(dbm,smAvg-ZONE_DB);' +
@@ -303,7 +303,7 @@ begin
'mctx.strokeStyle="#DCE0E0";mctx.lineWidth=1;mctx.beginPath();mctx.moveTo(x,YT-TICK_LONG);mctx.lineTo(x,YT-1);mctx.stroke();' +
'const t=DBM_LABELS[i],tw=mctx.measureText(t).width;' +
'mctx.fillStyle="#DCDCD0";mctx.fillText(t,Math.round(x-tw/2),YT-TICK_LONG-1);}' +
'for(let d=-125;d<0;d+=5){const x=dbToX(d,BX,BW);' +
'for(let d=-125;d<-13;d+=5){const x=dbToX(d,BX,BW);' +
'mctx.strokeStyle="#708070";mctx.lineWidth=1;mctx.beginPath();mctx.moveTo(x,YT-TICK_MED);mctx.lineTo(x,YT-1);mctx.stroke();}' +
'for(let i=0;i<S_MARKS_DBM.length;i++){const x=dbToX(S_MARKS_DBM[i],BX,BW),ov=S_MARKS_DBM[i]>=-73;' +
'mctx.strokeStyle=ov?"#70A090":"#708070";mctx.lineWidth=1;mctx.beginPath();mctx.moveTo(x,YB+1);mctx.lineTo(x,YB+TICK_LONG);mctx.stroke();' +
@@ -312,8 +312,10 @@ begin
'mctx.fillStyle="#DCD896";mctx.font="bold 12px Courier New";' +
'mctx.fillText(dbm.toFixed(1).padStart(6," "),1,12);' +
'mctx.fillStyle="#707050";mctx.font="10px Courier New";mctx.fillText("dBm",1,YT-2);' +
'let sLbl;if(dbm<-93){let sv=Math.round((dbm+127)/6);if(sv<1)sv=1;if(sv>9)sv=9;sLbl="S"+sv;}' +
'else sLbl="S9+"+Math.round(dbm+93);' +
'let sLbl;' +
'if(dbm>=-73){let over=Math.round(dbm+73);if(over<5)sLbl="S9";else{over=Math.round((over+5)/10)*10;if(over===0)over=10;sLbl="S9+"+over;}}' +
'else if(dbm<=-121){sLbl="S1";}' +
'else{sLbl="S1";for(let i=1;i<=8;i++){if(dbm>=(-121+(i-1)*6))sLbl="S"+i;}}' +
'mctx.fillStyle="#F0F0F0";mctx.font="bold 12px Courier New";mctx.fillText(sLbl,1,YB+TICK_LONG+10);}' +
// pendingCmds: команды в пути — не перезаписываем эти поля из server state