diff --git a/htdocs/openwebrx.css b/htdocs/openwebrx.css
index e0d6c3f..67bde0c 100644
--- a/htdocs/openwebrx.css
+++ b/htdocs/openwebrx.css
@@ -830,6 +830,7 @@ img.openwebrx-mirror-img
#openwebrx-digimode-canvas-container canvas
{
position: absolute;
+ pointer-events: none;
}
#openwebrx-secondary-demod-listbox
@@ -944,3 +945,18 @@ img.openwebrx-mirror-img
0%{ transform: rotateX(0deg) rotateY(-90deg) translateX(-5px) scale(1.3); }
100%{ transform: rotateX(0deg) rotateY(0deg) translateX(0) scale(1); }
}
+
+#openwebrx-digimode-select-channel
+{
+ transition: all 500ms;
+ background-color: Yellow;
+ display: block;
+ position: absolute;
+ pointer-events: none;
+ height: 100%;
+ width: 0px;
+ top: 0px;
+ left: 0px;
+ opacity: 0.7;
+}
+
diff --git a/htdocs/openwebrx.js b/htdocs/openwebrx.js
index cebedf0..3e72205 100644
--- a/htdocs/openwebrx.js
+++ b/htdocs/openwebrx.js
@@ -1206,6 +1206,12 @@ function on_ws_recv(evt)
break;
case "secondary_setup":
secondary_demod_init_canvases();
+ break;
+ case "if_samp_rate":
+ if_samp_rate=parseInt(param[1]);
+ break;
+ case "secondary_bw":
+ secondary_bw=parseFloat(param[1]);
break;
case "fft_fps":
fft_fps=parseInt(param[1]);
@@ -2241,13 +2247,13 @@ function secondary_demod_create_canvas()
new_canvas.style.height=$(secondary_demod_canvas_container).height()+"px";
console.log(new_canvas.width, new_canvas.height, new_canvas.style.width, new_canvas.style.height);
secondary_demod_current_canvas_actual_line=new_canvas.height-1;
- $(secondary_demod_canvas_container).append(new_canvas);
+ $(secondary_demod_canvas_container).children().last().before(new_canvas);
return new_canvas;
}
function secondary_demod_remove_canvases()
{
- $(secondary_demod_canvas_container).children().remove();
+ $(secondary_demod_canvas_container).children("canvas").remove();
}
function secondary_demod_init_canvases()
@@ -2263,6 +2269,7 @@ function secondary_demod_init_canvases()
secondary_demod_current_canvas_actual_line=$(secondary_demod_canvas_container).height()-1;
secondary_demod_current_canvas_index=0;
secondary_demod_canvases_initialized=true;
+ secondary_demod_update_marker();
}
function secondary_demod_canvases_update_top()
@@ -2283,6 +2290,12 @@ function secondary_demod_init()
{
$("#openwebrx-panel-digimodes")[0].openwebrxHidden = true;
secondary_demod_canvas_container = $("#openwebrx-digimode-canvas-container")[0];
+ $(secondary_demod_canvas_container)
+ .mousemove(secondary_demod_canvas_container_mousemove)
+ .mouseup(secondary_demod_canvas_container_mouseup)
+ .mousedown(secondary_demod_canvas_container_mousedown)
+ .mouseenter(secondary_demod_canvas_container_mousein)
+ .mouseleave(secondary_demod_canvas_container_mouseout);
}
function secondary_demod_start(subtype)
@@ -2390,3 +2403,48 @@ function secondary_demod_listbox_update()
console.log("update");
secondary_demod_listbox_updating = false;
}
+
+secondary_demod_channel_freq=1000;
+function secondary_demod_update_marker()
+{
+ var width = Math.max( (secondary_bw / if_samp_rate) * $(secondary_demod_canvas_container).width(), 5);
+ var center_at = (secondary_demod_channel_freq / if_samp_rate) * $(secondary_demod_canvas_container).width();
+ var left = center_at-width / 2;
+ console.log("sdum", width, left);
+ $("#openwebrx-digimode-select-channel").width(width).css("left",left+"px")
+}
+
+function secondary_demod_update_channel_freq_from_event(evt)
+{
+ var relativeX=(evt.offsetX)?evt.offsetX:evt.layerX;
+ //console.log("ize", evt, e);
+ secondary_demod_channel_freq=(relativeX/$(secondary_demod_canvas_container).width()) * if_samp_rate;
+ secondary_demod_update_marker();
+}
+
+secondary_demod_mousedown=false;
+function secondary_demod_canvas_container_mousein()
+{
+ $("#openwebrx-digimode-select-channel").css("opacity","0.7");
+}
+
+function secondary_demod_canvas_container_mouseout()
+{
+ $("#openwebrx-digimode-select-channel").css("opacity","0");
+}
+
+function secondary_demod_canvas_container_mousemove(evt)
+{
+ if(secondary_demod_mousedown) secondary_demod_update_channel_freq_from_event(evt);
+}
+
+function secondary_demod_canvas_container_mousedown(evt)
+{
+ if(evt.which==1) secondary_demod_mousedown=true;
+}
+
+function secondary_demod_canvas_container_mouseup(evt)
+{
+ if(evt.which==1) secondary_demod_mousedown=false;
+ secondary_demod_update_channel_freq_from_event(evt);
+}
diff --git a/openwebrx.py b/openwebrx.py
index 36a6e75..4768663 100755
--- a/openwebrx.py
+++ b/openwebrx.py
@@ -522,7 +522,7 @@ class WebRXHandler(BaseHTTPRequestHandler):
try:
secondary_spectrum_data=dsp.read_secondary_fft(dsp.get_secondary_fft_bytes_to_read())
if len(secondary_spectrum_data) == 0: break
- print "len(secondary_spectrum_data)", len(secondary_spectrum_data) #TODO digimodes
+ # print "len(secondary_spectrum_data)", len(secondary_spectrum_data) #TODO digimodes
rxws.send(self, secondary_spectrum_data, "FFTS")
except: break
myclient.loopstat=42
@@ -589,7 +589,7 @@ class WebRXHandler(BaseHTTPRequestHandler):
else:
dsp.set_secondary_demodulator(param_value)
do_secondary_demod = True
- rxws.send(self, "MSG secondary_fft_size={0} secondary_setup".format(cfg.digimodes_fft_size))
+ rxws.send(self, "MSG secondary_fft_size={0} if_samp_rate={1} secondary_bw={2} secondary_setup".format(cfg.digimodes_fft_size, dsp.if_samp_rate(), dsp.secondary_bw()))
if dsp_initialized: dsp.start()
elif param_name=="secondary_offset_freq" and 0 <= int(param_value) <= dsp.if_samp_rate()/2 and cfg.digimodes_enable:
dsp.set_secondary_offset_freq(int(param_value))