Merge branch 'jketterl:develop' into tuning_step
This commit is contained in:
@@ -81,6 +81,12 @@ Envelope.prototype.draw = function(visible_range){
|
||||
scale_ctx.fill();
|
||||
scale_ctx.globalAlpha = 1;
|
||||
scale_ctx.stroke();
|
||||
scale_ctx.lineWidth = 1;
|
||||
scale_ctx.textAlign = "left";
|
||||
scale_ctx.fillText(this.demodulator.high_cut.toString(), to_px + env_att_w, env_h2);
|
||||
scale_ctx.textAlign = "right";
|
||||
scale_ctx.fillText(this.demodulator.low_cut.toString(), from_px - env_att_w, env_h2);
|
||||
scale_ctx.lineWidth = 3;
|
||||
}
|
||||
if (typeof line !== "undefined") // out of screen?
|
||||
{
|
||||
|
||||
@@ -37,6 +37,7 @@ $(function(){
|
||||
var retention_time = 2 * 60 * 60 * 1000;
|
||||
var strokeOpacity = 0.8;
|
||||
var fillOpacity = 0.35;
|
||||
var callsign_url = null;
|
||||
|
||||
var colorKeys = {};
|
||||
var colorScale = chroma.scale(['red', 'blue', 'green']).mode('hsl');
|
||||
@@ -286,6 +287,9 @@ $(function(){
|
||||
if ('map_position_retention_time' in config) {
|
||||
retention_time = config.map_position_retention_time * 1000;
|
||||
}
|
||||
if ('callsign_url' in config) {
|
||||
callsign_url = config['callsign_url'];
|
||||
}
|
||||
break;
|
||||
case "update":
|
||||
processUpdates(json.value);
|
||||
@@ -338,7 +342,33 @@ $(function(){
|
||||
delete infowindow.locator;
|
||||
delete infowindow.callsign;
|
||||
return infowindow;
|
||||
}
|
||||
};
|
||||
|
||||
var linkifyCallsign = function(callsign) {
|
||||
if ((callsign_url == null) || (callsign_url == ''))
|
||||
return callsign;
|
||||
else
|
||||
return '<a target="callsign_info" href="' +
|
||||
callsign_url.replaceAll('{}', callsign.replace(new RegExp('-.*$'), '')) +
|
||||
'">' + callsign + '</a>';
|
||||
};
|
||||
|
||||
var distanceKm = function(p1, p2) {
|
||||
// Earth radius in km
|
||||
var R = 6371.0;
|
||||
// Convert degrees to radians
|
||||
var rlat1 = p1.lat() * (Math.PI/180);
|
||||
var rlat2 = p2.lat() * (Math.PI/180);
|
||||
// Compute difference in radians
|
||||
var difflat = rlat2-rlat1;
|
||||
var difflon = (p2.lng()-p1.lng()) * (Math.PI/180);
|
||||
// Compute distance
|
||||
d = 2 * R * Math.asin(Math.sqrt(
|
||||
Math.sin(difflat/2) * Math.sin(difflat/2) +
|
||||
Math.cos(rlat1) * Math.cos(rlat2) * Math.sin(difflon/2) * Math.sin(difflon/2)
|
||||
));
|
||||
return Math.round(d);
|
||||
};
|
||||
|
||||
var infowindow;
|
||||
var showLocatorInfoWindow = function(locator, pos) {
|
||||
@@ -351,13 +381,15 @@ $(function(){
|
||||
}).sort(function(a, b){
|
||||
return b.lastseen - a.lastseen;
|
||||
});
|
||||
var distance = receiverMarker?
|
||||
" at " + distanceKm(receiverMarker.position, pos) + " km" : "";
|
||||
infowindow.setContent(
|
||||
'<h3>Locator: ' + locator + '</h3>' +
|
||||
'<h3>Locator: ' + locator + distance + '</h3>' +
|
||||
'<div>Active Callsigns:</div>' +
|
||||
'<ul>' +
|
||||
inLocator.map(function(i){
|
||||
var timestring = moment(i.lastseen).fromNow();
|
||||
var message = i.callsign + ' (' + timestring + ' using ' + i.mode;
|
||||
var message = linkifyCallsign(i.callsign) + ' (' + timestring + ' using ' + i.mode;
|
||||
if (i.band) message += ' on ' + i.band;
|
||||
message += ')';
|
||||
return '<li>' + message + '</li>'
|
||||
@@ -374,16 +406,20 @@ $(function(){
|
||||
var marker = markers[callsign];
|
||||
var timestring = moment(marker.lastseen).fromNow();
|
||||
var commentString = "";
|
||||
var distance = "";
|
||||
if (marker.comment) {
|
||||
commentString = '<div>' + marker.comment + '</div>';
|
||||
}
|
||||
if (receiverMarker) {
|
||||
distance = " at " + distanceKm(receiverMarker.position, marker.position) + " km";
|
||||
}
|
||||
infowindow.setContent(
|
||||
'<h3>' + callsign + '</h3>' +
|
||||
'<h3>' + linkifyCallsign(callsign) + distance + '</h3>' +
|
||||
'<div>' + timestring + ' using ' + marker.mode + ( marker.band ? ' on ' + marker.band : '' ) + '</div>' +
|
||||
commentString
|
||||
);
|
||||
infowindow.open(map, marker);
|
||||
}
|
||||
};
|
||||
|
||||
var showReceiverInfoWindow = function(marker) {
|
||||
var infowindow = getInfoWindow()
|
||||
@@ -392,7 +428,7 @@ $(function(){
|
||||
'<div>Receiver location</div>'
|
||||
);
|
||||
infowindow.open(map, marker);
|
||||
}
|
||||
};
|
||||
|
||||
var getScale = function(lastseen) {
|
||||
var age = new Date().getTime() - lastseen;
|
||||
|
||||
@@ -802,6 +802,7 @@ function on_ws_recv(evt) {
|
||||
$('#openwebrx-sdr-profiles-listbox').val(currentprofile.toString());
|
||||
|
||||
waterfall_clear();
|
||||
zoom_set(0);
|
||||
}
|
||||
|
||||
if ('tuning_precision' in config)
|
||||
@@ -969,9 +970,15 @@ var waterfall_measure_minmax_now = false;
|
||||
var waterfall_measure_minmax_continuous = false;
|
||||
|
||||
function waterfall_measure_minmax_do(what) {
|
||||
// Get visible range
|
||||
var range = get_visible_freq_range();
|
||||
var start = center_freq - bandwidth / 2;
|
||||
|
||||
// this is based on an oversampling factor of about 1,25
|
||||
var ignored = .1 * what.length;
|
||||
var data = what.slice(ignored, -ignored);
|
||||
range.start = Math.max(0.1, (range.start - start) / bandwidth);
|
||||
range.end = Math.min(0.9, (range.end - start) / bandwidth);
|
||||
|
||||
var data = what.slice(range.start * what.length, range.end * what.length);
|
||||
return {
|
||||
min: Math.min.apply(Math, data),
|
||||
max: Math.max.apply(Math, data)
|
||||
|
||||
Reference in New Issue
Block a user