Compare commits

..

No commits in common. "096a1065eaa6a0876f1b92bf6792dc8583584aed" and "e2761fc21da65166103e552d8954f359378d5d4d" have entirely different histories.

9 changed files with 129 additions and 127 deletions

25
Jenkinsfile vendored
View file

@ -1,13 +1,4 @@
node(label: 'raspberrypi') {
properties([
pipelineTriggers([
upstream(threshold: 'SUCCESS',
upstreamProjects: "bladeRF/${env.BRANCH_NAME}")
]),
disableConcurrentBuilds(),
durabilityHint(hint: 'PERFORMANCE_OPTIMIZED')
])
def dists = ["stretch", "jessie"]
def srcdir = "${WORKSPACE}/src"
@ -33,21 +24,23 @@ node(label: 'raspberrypi') {
sh "rm -fr ${results}"
sh "mkdir -p ${results}"
dir(pkgdir) {
sh "DIST=${dist} BRANCH=${env.BRANCH_NAME} pdebuild --use-pdebuild-internal --debbuildopts -b --buildresult ${WORKSPACE}/${results} -- --override-config"
sh "DIST=${dist} pdebuild --use-pdebuild-internal --debbuildopts -b --buildresult ${WORKSPACE}/${results}"
}
archiveArtifacts artifacts: "${results}/*.deb", fingerprint: true
}
stage("Test install on ${dist}") {
sh "BRANCH=${env.BRANCH_NAME} /build/pi-builder/scripts/validate-packages.sh ${dist} ${results}/dump1090-fa_*.deb ${results}/dump1090_*.deb"
sh "/build/repo/validate-packages.sh ${dist} ${results}/dump1090-fa_*.deb ${results}/dump1090_*.deb"
}
}
stage('Deploy to internal repository') {
for (int i = 0; i < dists.size(); ++i) {
def dist = dists[i]
def results = "results-${dist}"
sh "/build/pi-builder/scripts/deploy.sh -distribution ${dist} -branch ${env.BRANCH_NAME} ${results}/*.deb"
if (env.BRANCH_NAME == "master" || env.BRANCH_NAME == "dev") {
stage("Deploy to staging repo") {
for (int i = 0; i < dists.size(); ++i) {
def dist = dists[i]
def results = "results-${dist}"
sh "/build/repo/deploy-packages.sh ${dist} ${results}/*.deb"
}
}
}
}

16
debian/changelog vendored
View file

@ -1,18 +1,8 @@
dump1090-fa (3.7.2) stable; urgency=medium
dump1090-fa (3.7.2~dev) UNRELEASED; urgency=medium
* dump1090: Fix reversed sense of Track Angle/Heading bit in surface opstatus messages
* dump1090: Have filter-regs emit a special value "-COMPUTED-" for filtered data
values, rather than blanking them out entirely
* Fix registration side mappings with a non-zero offset
* dump1090: Update aircraft DB to 20190816
* dump1090: Reject outright libbladerf that's too old
* dump1090: Trigger build after bladeRF build; turn off build durability; turn
off concurrent builds
* SkyAware: SkyAware Renaming
* SkyAware: Fix some display errors for ground vehicles
* SkyAware: Fix aircraft trail handling
* in development
-- Eric Tran <eric.tran@flightaware.com> Mon, 09 Sep 2019 09:25:00 -6000
-- Eric Tran <eric.tran@flightaware.com> Wed, 31 Jul 2019 11:27:00 -6000
dump1090-fa (3.7.1) stable; urgency=medium

View file

@ -51,8 +51,6 @@
#include <stdarg.h>
struct modeStruct Modes;
//
// ============================= Utility functions ==========================
//

View file

@ -294,7 +294,7 @@ struct mag_buf {
};
// Program global state
struct modeStruct { // Internal state
struct { // Internal state
pthread_t reader_thread;
pthread_mutex_t data_mutex; // Mutex to synchronize buffer access
@ -392,9 +392,7 @@ struct modeStruct { // Internal state
int stats_latest_1min;
struct stats stats_5min;
struct stats stats_15min;
};
extern struct modeStruct Modes;
} Modes;
// The struct we use to store information about a decoded message.
struct modesMessage {

View file

@ -11,11 +11,11 @@ PlaneCountInTitle = true;
MessageRateInTitle = false;
// -- Output Settings -------------------------------------
// The DisplayUnits setting controls whether nautical (ft, NM, knots),
// metric (m, km, km/h) or imperial (ft, mi, mph) units are used in the
// The DisplayUnits setting controls whether nautical (ft, NM, knots),
// metric (m, km, km/h) or imperial (ft, mi, mph) units are used in the
// plane table and in the detailed plane info. Valid values are
// "nautical", "metric", or "imperial".
DisplayUnits = "metric";
DisplayUnits = "nautical";
// -- Map settings ----------------------------------------
// These settings are overridden by any position information
@ -23,17 +23,17 @@ DisplayUnits = "metric";
// degrees.
// Default center of the map.
DefaultCenterLat = 49.425626;
DefaultCenterLon = 7.756527;
DefaultCenterLat = 45.0;
DefaultCenterLon = 9.0;
// The google maps zoom level, 0 - 16, lower is further out
DefaultZoomLvl = 8;
DefaultZoomLvl = 7;
// Center marker. If dump1090 provides a receiver location,
// that location is used and these settings are ignored.
SiteShow = true; // true to show a center marker
SiteLat = 49.425626; // position of the marker
SiteLon = 7.756527;
SiteShow = false; // true to show a center marker
SiteLat = 45.0; // position of the marker
SiteLon = 9.0;
SiteName = "My Radar Site"; // tooltip of the marker
// -- Marker settings -------------------------------------
@ -96,7 +96,7 @@ OutlineMlatColor = '#4040FF';
SiteCircles = true; // true to show circles (only shown if the center marker is shown)
// In miles, nautical miles, or km (depending settings value 'DisplayUnits')
SiteCirclesDistances = new Array(25,50,75,100);
SiteCirclesDistances = new Array(100,150,200);
// Controls page title, righthand pane when nothing is selected
PageName = "PiAware SkyAware";

View file

@ -2,7 +2,7 @@
<html>
<head>
<meta charset="utf-8"/>
<link rel="stylesheet" type="text/css" href="style.css?v=3.7.2" />
<link rel="stylesheet" type="text/css" href="style.css?v=2" />
<link rel="stylesheet" href="jquery/jquery-ui-1.11.4-smoothness.css" />
<script src="jquery/jquery-3.0.0.min.js"></script>
<script src="jquery/jquery-ui-1.11.4.min.js"></script>
@ -14,16 +14,16 @@
<link rel="stylesheet" href="ol/ol3-layerswitcher.css" type="text/css"/>
<script src="ol/ol3-layerswitcher.js" type="text/javascript"></script>
<script type="text/javascript" src="config.js?v=3.7.2"></script>
<script type="text/javascript" src="markers.js?v=3.7.2"></script>
<script type="text/javascript" src="dbloader.js?v=3.7.2"></script>
<script type="text/javascript" src="registrations.js?v=3.7.2"></script>
<script type="text/javascript" src="planeObject.js?v=3.7.2"></script>
<script type="text/javascript" src="formatter.js?v=2?v=3.7.2"></script>
<script type="text/javascript" src="flags.js?v=3.7.2"></script>
<script type="text/javascript" src="layers.js?v=3.7.2"></script>
<script type="text/javascript" src="script.js?v=3.7.2"></script>
<title>DL0XK Aeorspectator</title>
<script type="text/javascript" src="config.js"></script>
<script type="text/javascript" src="markers.js"></script>
<script type="text/javascript" src="dbloader.js"></script>
<script type="text/javascript" src="registrations.js"></script>
<script type="text/javascript" src="planeObject.js?v=2"></script>
<script type="text/javascript" src="formatter.js?v=2"></script>
<script type="text/javascript" src="flags.js"></script>
<script type="text/javascript" src="layers.js"></script>
<script type="text/javascript" src="script.js?v=2"></script>
<title>PiAware SkyAware</title>
</head>
<body onload="initialize()">
@ -46,8 +46,25 @@
<input type="hidden" name="submit" value="submit">
</form>
<div id="header" class="infoHeading">
<div class="logoContainer">
<a href="http://flightaware.com/" target="_blank"><img src="images/fa_logo_color.png" alt="FlightAware" class="flightawareLogo" srcset="images/fa_logo_color.png 1x, images/fa_logo_color@2x.png 2x, images/fa_logo_color@3x.png 3x"></a>
<img src="images/pa-sa-logo.png" alt="PiAware SkyAware" class="adsbLogo piAwareLogo" srcset="images/pa-sa-logo.png 1x, images/pa-sa-logo@2x.png 2x, images/pa-sa-logo@3x.png 3x">
<img src="images/ff-sa-logo.png" alt="FlightFeeder SkyAware" class="adsbLogo flightfeederLogo" srcset="images/ff-sa-logo.png 1x, images/ff-sa-logo@2x.png 2x, images/ff-sa-logo@3x.png 3x" style="display: none;">
</div>
<div class="buttonContainer">
<div class="dateTime" id="clock_div"></div>
<div class="button buttonHeader" onclick="resetMap();"><span class="buttonText">Reset Map</span></div>
<div class="button buttonHeader" onclick="selectAllPlanes();"><span class="buttonText">Show All Tracks</span></div>
<div class="button buttonHeader" onclick="deselectAllPlanes();"><span class="buttonText">Hide All Tracks</span></div>
</div>
<div class="settingsContainer"><img src="images/settings-icon.png" id="settingsCog" srcset="images/settings-icon.png 1x, images/settings-icon@2x.png 2x, images/settings-icon@3x.png 3x"></div>
</div>
<div id="layout_container">
<div id="highlighted_infoblock">
<div class="highlightedTitle">
<span class="identLarge"><span id="highlighted_callsign">n/a</span></span>
@ -150,8 +167,8 @@
<div id="sidebar_container">
<div id="splitter" class="ui-resizable-handle ui-resizable-w"></div>
<div id="sidebar_canvas">
<div id="sidebar-table">
<div id="dump1090_infoblock">
<table style="width: 100%">
@ -163,19 +180,30 @@
<a href="https://github.com/flightaware/dump1090" id="dump1090_version" target="_blank"></a>
</td>
</tr>
<tr class="infoblock_body">
<td><span class="infoBlockTitleText">Total Aircraft:</span> <span id="dump1090_total_ac">n/a</span></td>
<td><span class="infoBlockTitleText">Messages:</span> <span id="dump1090_message_rate">n/a</span>/sec</td>
</tr>
<tr class="infoblock_body">
<td><span class="infoBlockTitleText">With Positions:</span> <span id="dump1090_total_ac_positions">n/a</span></td>
<td><span class="infoBlockTitleText">History:</span> <span id="dump1090_total_history">n/a</span> positions</td>
</tr>
</table>
</div> <!-- dump1090_infoblock -->
<form id="altitude_filter_form">
<label><span class="infoBlockTitleText">Filter by Altitude:</span></label>
<input id="altitude_filter_min" name="minAltitude" type="text" class="altitudeFilterInput" maxlength="5">
<label for="minAltitude" class="altitudeUnit"></label>
<span> to </span>
<input id="altitude_filter_max" name="maxAltitude" type="text" class="altitudeFilterInput" maxlength="5">
<label for="maxAltitude" class="altitudeUnit"></label>
<button type="submit">Filter</button>
<button id="altitude_filter_reset_button">Reset</button>
</form>
<div id="planes_table">
<table id="tableinfo" style="width: 100%">
<thead class="aircraft_table_header">
@ -240,13 +268,13 @@
</div> <!-- planes_table -->
</div>
</div> <!-- sidebar_canvas -->
</div> <!-- sidebar_canvas -->
<div id="selected_infoblock" class="hidden">
<div id="splitter-infoblock" class="ui-resizable-handle ui-resizable-n"></div>
<div id="close-button">Close</div>
<div class="infoblock-container">
@ -255,7 +283,7 @@
<span class="identLarge" title="Typically the air traffic control callsign or the aircraft's registration, as entered into the transponder by the pilot."><span id="selected_callsign">n/a</span></span>
<span class="identSmall" title="The aircraft's unique ICAO identification number shown in hexadecimal format."><span id="selected_icao">n/a</span></span>
</div>
<div class="infoBlockTopSection">
<span id="selected_flightaware_link" class=""></span>
<div class="infoRow removePadding">
@ -584,7 +612,7 @@
<span id="selected_rc">n/a</span>
</div>
</div>
</div>
@ -594,18 +622,18 @@
<div class="bottom-container">
<div class="selected_airframe">
<a href="http://www.airframes.org/" onclick="document.getElementById('horrible_hack').submit.call(document.getElementById('airframes_post')); return false;">
airframes.org
<a href="http://www.airframes.org/" onclick="document.getElementById('horrible_hack').submit.call(document.getElementById('airframes_post')); return false;">
airframes.org
</a>
</div>
</div>
</div>
</div> <!-- selected_infoblock -->
</div> <!-- sidebar_container -->
</div> <!-- layout_container -->

View file

@ -154,12 +154,12 @@ function fetchData() {
var plane = PlanesOrdered[i];
plane.updateTick(now, LastReceiverTimestamp);
}
selectNewPlanes();
refreshTableInfo();
refreshSelected();
refreshHighlighted();
if (ReceiverClock) {
var rcv = new Date(now * 1000);
ReceiverClock.render(rcv.getUTCHours(),rcv.getUTCMinutes(),rcv.getUTCSeconds());
@ -172,7 +172,7 @@ function fetchData() {
$("#update_error_detail").text("The data from dump1090 hasn't been updated in a while. Maybe dump1090 is no longer running?");
$("#update_error").css('display','block');
}
} else {
} else {
StaleReceiverCount = 0;
LastReceiverTimestamp = now;
$("#update_error").css('display','none');
@ -225,7 +225,7 @@ function initialize() {
SelectedPlane = null;
selectedPlane.selected = null;
selectedPlane.clearLines();
selectedPlane.updateMarker();
selectedPlane.updateMarker();
refreshSelected();
refreshHighlighted();
$('#selected_infoblock').hide();
@ -239,7 +239,7 @@ function initialize() {
// look at the window resize to resize the pop-up infoblock so it doesn't float off the bottom or go off the top
$(window).on('resize', function() {
var topCalc = ($(window).height() - $('#selected_infoblock').height() - 60);
// check if the top will be less than zero, which will be overlapping/off the screen, and set the top correctly.
// check if the top will be less than zero, which will be overlapping/off the screen, and set the top correctly.
if (topCalc < 0) {
topCalc = 0;
$('#selected_infoblock').css('height', ($(window).height() - 60) +'px');
@ -247,7 +247,7 @@ function initialize() {
$('#selected_infoblock').css('top', topCalc + 'px');
});
// to make the infoblock responsive
// to make the infoblock responsive
$('#sidebar_container').on('resize', function() {
if ($('#sidebar_container').width() < 500) {
$('#selected_infoblock').addClass('infoblock-container-small');
@ -255,7 +255,7 @@ function initialize() {
$('#selected_infoblock').removeClass('infoblock-container-small');
}
});
// Set up event handlers for buttons
$("#toggle_sidebar_button").click(toggleSidebarVisibility);
$("#expand_sidebar_button").click(expandSidebar);
@ -274,7 +274,7 @@ function initialize() {
errorPlacement: function(error, element) {
return true;
},
rules: {
minAltitude: {
number: true,
@ -325,7 +325,7 @@ function initialize() {
} else {
sortByDataSource();
}
});
$('#altitude_checkbox').on('click', function() {
@ -366,7 +366,7 @@ function initialize() {
DefaultCenterLat = data.lat;
DefaultCenterLon = data.lon;
}
Dump1090Version = data.version;
RefreshInterval = data.refresh;
PositionHistorySize = data.history;
@ -505,9 +505,9 @@ function make_geodesic_circle(center, radius, points) {
// Initalizes the map and starts up our timers to call various functions
function initialize_map() {
// Load stored map settings if present
CenterLat = DefaultCenterLat;
CenterLon = DefaultCenterLon;
ZoomLvl = DefaultZoomLvl;
CenterLat = Number(localStorage['CenterLat']) || DefaultCenterLat;
CenterLon = Number(localStorage['CenterLon']) || DefaultCenterLon;
ZoomLvl = Number(localStorage['ZoomLvl']) || DefaultZoomLvl;
MapType = localStorage['MapType'];
// Set SitePosition, initialize sorting
@ -648,7 +648,7 @@ function initialize_map() {
}
}
});
OLMap.getView().on('change:resolution', function(event) {
ZoomLvl = localStorage['ZoomLvl'] = OLMap.getView().getZoom();
for (var plane in Planes) {
@ -722,7 +722,7 @@ function initialize_map() {
var feature = new ol.Feature(new ol.geom.Point(ol.proj.fromLonLat(SitePosition)));
feature.setStyle(markerStyle);
StaticFeatures.push(feature);
if (SiteCircles) {
createSiteCircleFeatures();
}
@ -781,7 +781,7 @@ function initialize_map() {
function createSiteCircleFeatures() {
// Clear existing circles first
SiteCircleFeatures.forEach(function(circleFeature) {
StaticFeatures.remove(circleFeature);
StaticFeatures.remove(circleFeature);
});
SiteCircleFeatures.clear();
@ -829,7 +829,7 @@ function reaper() {
for (var i = 0; i < PlanesOrdered.length; ++i) {
var plane = PlanesOrdered[i];
if (plane.seen > 300) {
// Reap it.
// Reap it.
plane.tr.parentNode.removeChild(plane.tr);
plane.tr = null;
delete Planes[plane.icao];
@ -879,12 +879,12 @@ function refreshSelected() {
}
refreshPageTitle();
var selected = false;
if (typeof SelectedPlane !== 'undefined' && SelectedPlane != "ICAO" && SelectedPlane != null) {
selected = Planes[SelectedPlane];
}
$('#dump1090_infoblock').css('display','block');
$('#dump1090_version').text(Dump1090Version);
$('#dump1090_total_ac').text(TrackedAircraft);
@ -902,7 +902,7 @@ function refreshSelected() {
if (!selected) {
return;
}
if (selected.flight !== null && selected.flight !== "") {
$('#selected_callsign').text(selected.flight);
} else {
@ -940,7 +940,7 @@ function refreshSelected() {
} else {
$('#selected_squawk').text(selected.squawk);
}
$('#selected_speed').text(format_speed_long(selected.gs, DisplayUnits));
$('#selected_ias').text(format_speed_long(selected.ias, DisplayUnits));
$('#selected_tas').text(format_speed_long(selected.tas, DisplayUnits));
@ -969,13 +969,13 @@ function refreshSelected() {
$('#selected_position').text('n/a');
$('#selected_follow').addClass('hidden');
} else {
if (selected.seen_pos > 1) {
$('#selected_position').text(format_latlng(selected.position));
} else {
$('#selected_position').text(format_latlng(selected.position));
}
$('#selected_follow').removeClass('hidden');
if (FollowSelected) {
$('#selected_follow').css('font-weight', 'bold');
@ -998,7 +998,7 @@ function refreshSelected() {
$('#selected_rssi').text(selected.rssi.toFixed(1) + ' dBFS');
$('#selected_message_count').text(selected.messages);
$('#selected_photo_link').html(getFlightAwarePhotoLink(selected.registration));
$('#selected_altitude_geom').text(format_altitude_long(selected.alt_geom, selected.geom_rate, DisplayUnits));
$('#selected_mag_heading').text(format_track_long(selected.mag_heading));
$('#selected_true_heading').text(format_track_long(selected.true_heading));
@ -1062,7 +1062,7 @@ function refreshSelected() {
} else if (selected.sil_type == "persample") {
sampleRate = " per sample";
}
switch (selected.sil) {
case 0:
silDesc = "&gt; 1×10<sup>-3</sup>";
@ -1240,11 +1240,11 @@ function refreshTableInfo() {
if (tableplane.icao == SelectedPlane)
classes += " selected";
if (tableplane.squawk in SpecialSquawks) {
classes = classes + " " + SpecialSquawks[tableplane.squawk].cssClass;
show_squawk_warning = true;
}
}
// ICAO doesn't change
if (tableplane.flight) {
@ -1350,7 +1350,7 @@ function resortTable() {
}
PlanesOrdered.sort(sortFunction);
var tbody = document.getElementById('tableinfo').tBodies[0];
for (var i = 0; i < PlanesOrdered.length; ++i) {
tbody.appendChild(PlanesOrdered[i].tr);
@ -1406,7 +1406,7 @@ function selectPlaneByHex(hex,autofollow) {
Planes[SelectedPlane].updateLines();
Planes[SelectedPlane].updateMarker();
$(Planes[SelectedPlane].tr).addClass("selected");
} else {
} else {
SelectedPlane = null;
}
@ -1416,7 +1416,7 @@ function selectPlaneByHex(hex,autofollow) {
OLMap.getView().setZoom(8);
} else {
FollowSelected = false;
}
}
refreshSelected();
refreshHighlighted();
@ -1512,7 +1512,7 @@ function resetMap() {
// Set and refresh
OLMap.getView().setZoom(ZoomLvl);
OLMap.getView().setCenter(ol.proj.fromLonLat([CenterLon, CenterLat]));
selectPlaneByHex(null,false);
}
@ -1551,7 +1551,7 @@ function showMap() {
$("#sidebar_container").width("470px");
setColumnVisibility();
setSelectedInfoBlockVisibility();
updateMapSize();
updateMapSize();
}
function showColumn(table, columnId, visible) {
@ -1571,7 +1571,7 @@ function setColumnVisibility() {
var infoTable = $("#tableinfo");
showColumn(infoTable, "#registration", !mapIsVisible);
showColumn(infoTable, "#aircraft_type", !mapIsVisible);
showColumn(infoTable, "#aircraft_type", !mapIsVisible);
showColumn(infoTable, "#vert_rate", !mapIsVisible);
showColumn(infoTable, "#rssi", !mapIsVisible);
showColumn(infoTable, "#lat", !mapIsVisible);
@ -1613,7 +1613,7 @@ function adjustSelectedInfoBlockPosition() {
var marker = selectedPlane.marker;
var markerCoordinates = selectedPlane.marker.getGeometry().getCoordinates();
var markerPosition = OLMap.getPixelFromCoordinate(markerCoordinates);
// Get map size
var mapCanvas = $('#map_canvas');
var mapExtent = getExtent(0, 0, mapCanvas.width(), mapCanvas.height());
@ -1638,7 +1638,7 @@ function adjustSelectedInfoBlockPosition() {
}
}
}
}
}
catch(e) { }
}
@ -1718,7 +1718,7 @@ function onFilterByAltitude(e) {
SelectedPlane = null;
selectedPlane.selected = false;
selectedPlane.clearLines();
selectedPlane.updateMarker();
selectedPlane.updateMarker();
refreshSelected();
refreshHighlighted();
}
@ -1840,7 +1840,7 @@ function getFlightAwarePhotoLink(registration) {
return "<a target=\"_blank\" href=\"https://flightaware.com/photos/aircraft/" + registration.replace(/[^0-9a-z]/ig,'') + "\">See Photos</a>";
}
return "";
return "";
}
function getAirframesModeSLink(code) {
@ -1848,14 +1848,14 @@ function getAirframesModeSLink(code) {
return "<a href=\"http://www.airframes.org/\" onclick=\"$('#airframes_post_icao').attr('value','" + code + "'); document.getElementById('horrible_hack').submit.call(document.getElementById('airframes_post')); return false;\">Airframes.org: " + code.toUpperCase() + "</a>";
}
return "";
return "";
}
// takes in an elemnt jQuery path and the OL3 layer name and toggles the visibility based on clicking it
function toggleLayer(element, layer) {
// set initial checked status
ol.control.LayerSwitcher.forEachRecursive(layers, function(lyr) {
ol.control.LayerSwitcher.forEachRecursive(layers, function(lyr) {
if (lyr.get('name') === layer && lyr.getVisible()) {
$(element).addClass('settingsCheckboxChecked');
}
@ -1865,7 +1865,7 @@ function toggleLayer(element, layer) {
if ($(element).hasClass('settingsCheckboxChecked')) {
visible = true;
}
ol.control.LayerSwitcher.forEachRecursive(layers, function(lyr) {
ol.control.LayerSwitcher.forEachRecursive(layers, function(lyr) {
if (lyr.get('name') === layer) {
if (visible) {
lyr.setVisible(false);

View file

@ -4,9 +4,9 @@ html, body {
font-size: 10pt; overflow: hidden; height: 100%;
}
#layout_container {
#layout_container {
display: flex;
height: 100%;
height: calc(100% - 60px);;
}
#selected_infoblock {
@ -21,10 +21,9 @@ html, body {
overflow: scroll;
height: 100%;
}
#sidebar_canvas {
#sidebar_canvas {
padding: 10px;
overflow: scroll;
height: 100%
}
#sidebar_container {
display: flex;
@ -204,7 +203,7 @@ div#loader { z-index: 99; position: absolute; left: 0; top: 0; bottom: 0; right:
margin: 10px 0 10px 0;
}
.aircraft_table_header {
.aircraft_table_header {
background-color: #002F5D;
color: #FFFFFF;
cursor: pointer;
@ -232,7 +231,7 @@ div#loader { z-index: 99; position: absolute; left: 0; top: 0; bottom: 0; right:
.squawk7600 { font-weight: bold; background-color: #00ffff; }
.squawk7700 { font-weight: bold; background-color: #ffff00; }
.selected { background-color: #dddddd; }
.plane_table_row {
.plane_table_row {
cursor: pointer;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
@ -719,7 +718,7 @@ select.error, textarea.error, input.error {
}
/* Retina 2x images */
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
.settingsCloseBox {
background-image: url('images/close-settings@2x.png');
}
@ -747,7 +746,7 @@ select.error, textarea.error, input.error {
}
/* Retina 3x images */
@media (-webkit-min-device-pixel-ratio: 3), (min-resolution: 192dpi) {
@media (-webkit-min-device-pixel-ratio: 3), (min-resolution: 192dpi) {
.settingsCloseBox {
background-image: url('images/close-settings@3x.png');
}
@ -772,4 +771,4 @@ select.error, textarea.error, input.error {
#toggle_sidebar_button.hide_sidebar {
background-image: url("images/map-icon@3x.png");
}
}
}

View file

@ -23,12 +23,8 @@
#include <libbladeRF.h>
#include <inttypes.h>
#if !defined(LIBBLADERF_API_VERSION) || (LIBBLADERF_API_VERSION < 0x01060100)
#error This libbladeRF is too old, upgrade or disable bladerf support
#endif
// Polyfill for the older bladerf API
#if LIBBLADERF_API_VERSION < 0x02000000
#if defined(LIBBLADERF_API_VERSION) && (LIBBLADERF_API_VERSION < 0x02000000)
typedef unsigned int bladerf_frequency;
#endif