diff --git a/js/fc.js b/js/fc.js
index 7d777543..f43296f6 100644
--- a/js/fc.js
+++ b/js/fc.js
@@ -282,6 +282,8 @@ var FC = {
this.ADSB_VEHICLES = {
vehiclesCount: 0,
callsignLength: 0,
+ vehiclePacketCount: 0,
+ heartbeatPacketCount: 0,
vehicles: []
};
diff --git a/js/msp/MSPHelper.js b/js/msp/MSPHelper.js
index 894daf81..be92c128 100644
--- a/js/msp/MSPHelper.js
+++ b/js/msp/MSPHelper.js
@@ -196,6 +196,8 @@ var mspHelper = (function () {
FC.ADSB_VEHICLES.vehicles = [];
FC.ADSB_VEHICLES.vehiclesCount = data.getUint8(byteOffsetCounter++);
FC.ADSB_VEHICLES.callsignLength = data.getUint8(byteOffsetCounter++);
+ FC.ADSB_VEHICLES.vehiclePacketCount = data.getUint32(byteOffsetCounter, true); byteOffsetCounter += 4;
+ FC.ADSB_VEHICLES.heartbeatPacketCount = data.getUint32(byteOffsetCounter, true); byteOffsetCounter += 4;
for(i = 0; i < FC.ADSB_VEHICLES.vehiclesCount; i++){
diff --git a/locale/en/messages.json b/locale/en/messages.json
index bba5c8e2..97e0ed57 100644
--- a/locale/en/messages.json
+++ b/locale/en/messages.json
@@ -5935,5 +5935,11 @@
},
"gpsAssistnowLoadDataError": {
"message": "Error loading AssistNow data."
+ },
+ "adsbVehicleTotalMessages": {
+ "message": "Vehicle msgs"
+ },
+ "adsbHeartbeatTotalMessages": {
+ "message": "Heartbeat msgs"
}
}
diff --git a/package-lock.json b/package-lock.json
index c1d2bca7..58f0d505 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -39,6 +39,7 @@
"@electron-forge/maker-rpm": "^7.2.0",
"@electron-forge/maker-wix": "^7.2.0",
"@electron-forge/maker-zip": "^7.2.0",
+ "@electron/packager": "^18.3.3",
"electron": "28.1.4",
"node-gyp": "^10.1.0"
}
@@ -535,9 +536,9 @@
}
},
"node_modules/@electron/packager": {
- "version": "18.3.2",
- "resolved": "https://registry.npmjs.org/@electron/packager/-/packager-18.3.2.tgz",
- "integrity": "sha512-orjylavppgIh24qkNpWm2B/LQUpCS/YLOoKoU+eMK/hJgIhShLDsusPIQzgUGVwNCichu8/zPAGfdQZXHG0gtw==",
+ "version": "18.3.3",
+ "resolved": "https://registry.npmjs.org/@electron/packager/-/packager-18.3.3.tgz",
+ "integrity": "sha512-hGXzwbUdxv49XvlYwlVPC6W6j6WaXUAzKkYyyTeiwdhxvHFMfQSEJxVHsQpqMFzZZ7wrr7iqiokOFZ/qkgEzUQ==",
"dev": true,
"dependencies": {
"@electron/asar": "^3.2.1",
diff --git a/tabs/gps.html b/tabs/gps.html
index c217b7b9..138f9791 100644
--- a/tabs/gps.html
+++ b/tabs/gps.html
@@ -138,6 +138,23 @@
+
diff --git a/tabs/gps.js b/tabs/gps.js
index bf0dad53..e5d86861 100644
--- a/tabs/gps.js
+++ b/tabs/gps.js
@@ -30,26 +30,26 @@ TABS.gps.initialize = function (callback) {
// mavlink ADSB_EMITTER_TYPE
const ADSB_VEHICLE_TYPE = {
- 0: 'adsb_14.png', // ADSB_EMITTER_TYPE_NO_INFO
- 1: 'adsb_1.png', // ADSB_EMITTER_TYPE_LIGHT
- 2: 'adsb_1.png', // ADSB_EMITTER_TYPE_SMALL
- 3: 'adsb_2.png', // ADSB_EMITTER_TYPE_LARGE
- 4: 'adsb_14.png', // ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE
- 5: 'adsb_5.png', // ADSB_EMITTER_TYPE_HEAVY
- 6: 'adsb_14.png', // ADSB_EMITTER_TYPE_HIGHLY_MANUV
- 7: 'adsb_13.png', // ADSB_EMITTER_TYPE_ROTOCRAFT
- 8: 'adsb_14.png', // ADSB_EMITTER_TYPE_UNASSIGNED
- 9: 'adsb_6.png', // ADSB_EMITTER_TYPE_GLIDER
- 10: 'adsb_7.png', // ADSB_EMITTER_TYPE_LIGHTER_AIR
- 11: 'adsb_15.png', // ADSB_EMITTER_TYPE_PARACHUTE
- 12: 'adsb_1.png', // ADSB_EMITTER_TYPE_ULTRA_LIGHT
- 13: 'adsb_14.png', // ADSB_EMITTER_TYPE_UNASSIGNED2
- 14: 'adsb_8.png', // ADSB_EMITTER_TYPE_UAV
- 15: 'adsb_14.png', // ADSB_EMITTER_TYPE_SPACE
- 16: 'adsb_14.png', // ADSB_EMITTER_TYPE_UNASSGINED3
- 17: 'adsb_9.png', // ADSB_EMITTER_TYPE_EMERGENCY_SURFACE
- 18: 'adsb_10.png', // ADSB_EMITTER_TYPE_SERVICE_SURFACE
- 19: 'adsb_12.png', // ADSB_EMITTER_TYPE_POINT_OBSTACLE
+ 0: {icon: 'adsb_14.png', name: 'No info'}, // ADSB_EMITTER_TYPE_NO_INFO
+ 1: {icon: 'adsb_1.png', name: 'Light'}, // ADSB_EMITTER_TYPE_LIGHT
+ 2: {icon: 'adsb_1.png', name: 'Small'}, // ADSB_EMITTER_TYPE_SMALL
+ 3: {icon: 'adsb_2.png', name: 'Large'}, // ADSB_EMITTER_TYPE_LARGE
+ 4: {icon: 'adsb_14.png', name: 'High vortex large'}, // ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE
+ 5: {icon: 'adsb_5.png', name: 'Heavy'}, // ADSB_EMITTER_TYPE_HEAVY
+ 6: {icon: 'adsb_14.png', name: 'Manuv'}, // ADSB_EMITTER_TYPE_HIGHLY_MANUV
+ 7: {icon: 'adsb_13.png', name: 'Rotorcraft'}, // ADSB_EMITTER_TYPE_ROTOCRAFT
+ 8: {icon: 'adsb_14.png', name: 'Unassigned'}, // ADSB_EMITTER_TYPE_UNASSIGNED
+ 9: {icon: 'adsb_6.png', name: 'Glider'}, // ADSB_EMITTER_TYPE_GLIDER
+ 10:{icon: 'adsb_7.png', name: 'Lighter air'}, // ADSB_EMITTER_TYPE_LIGHTER_AIR
+ 11:{icon: 'adsb_15.png', name: 'Parachute'}, // ADSB_EMITTER_TYPE_PARACHUTE
+ 12:{icon: 'adsb_1.png', name: 'Ultra light'}, // ADSB_EMITTER_TYPE_ULTRA_LIGHT
+ 13:{icon: 'adsb_14.png', name: 'Unassigned 2'}, // ADSB_EMITTER_TYPE_UNASSIGNED2
+ 14:{icon: 'adsb_8.png', name: 'UAV'}, // ADSB_EMITTER_TYPE_UAV
+ 15:{icon: 'adsb_14.png', name: 'Space'}, // ADSB_EMITTER_TYPE_SPACE
+ 16:{icon: 'adsb_14.png', name: 'Unassigned 3'}, // ADSB_EMITTER_TYPE_UNASSGINED3
+ 17:{icon: 'adsb_9.png', name: 'Surface'}, // ADSB_EMITTER_TYPE_EMERGENCY_SURFACE
+ 18:{icon: 'adsb_10.png', name: 'Service surface'}, // ADSB_EMITTER_TYPE_SERVICE_SURFACE
+ 19:{icon: 'adsb_12.png', name: 'Pint obstacle'}, // ADSB_EMITTER_TYPE_POINT_OBSTACLE
};
var loadChainer = new MSPChainerClass();
@@ -238,7 +238,7 @@ TABS.gps.initialize = function (callback) {
+ `lon: `+ (feature.get('data').lon / 10000000) + `
`
+ `ASL: `+ (feature.get('data').altCM ) / 100 + `m
`
+ `heading: `+ feature.get('data').headingDegrees + `°
`
- + `type: `+ feature.get('data').emitterType + ``
+ + `type: `+ ADSB_VEHICLE_TYPE[feature.get('data').emitterType].name + ``
).open();
}else{
TABS.gps.toolboxAdsbVehicle.close();
@@ -258,10 +258,14 @@ TABS.gps.initialize = function (callback) {
}
function get_gpsstatistics_data() {
- MSP.send_message(MSPCodes.MSP_GPSSTATISTICS, false, false, update_ui);
+ MSP.send_message(MSPCodes.MSP_GPSSTATISTICS, false, false, update_gps_ui);
}
- function update_ui() {
+ function get_raw_adsb_data() {
+ MSP.send_message(MSPCodes.MSP2_ADSB_VEHICLE_LIST, false, false, update_adsb_ui);
+ }
+
+ function update_gps_ui() {
let lat = FC.GPS_DATA.lat / 10000000;
let lon = FC.GPS_DATA.lon / 10000000;
@@ -334,64 +338,64 @@ TABS.gps.initialize = function (callback) {
iconGeometry.setCoordinates(center);
}
+ }
- if (semver.gte(FC.CONFIG.flightControllerVersion, "7.1.0")) {
- MSP.send_message(MSPCodes.MSP2_ADSB_VEHICLE_LIST, false, false, function () {
- //ADSB vehicles
+ function update_adsb_ui() {
- if (vehiclesCursorInitialized) {
- vehicleVectorSource.clear();
- }
+ if (vehiclesCursorInitialized) {
+ vehicleVectorSource.clear();
+ }
- for (let key in FC.ADSB_VEHICLES.vehicles) {
- let vehicle = FC.ADSB_VEHICLES.vehicles[key];
+ $('.adsbVehicleTotalMessages').html(FC.ADSB_VEHICLES.vehiclePacketCount);
+ $('.adsbHeartbeatTotalMessages').html(FC.ADSB_VEHICLES.heartbeatPacketCount);
- if (!vehiclesCursorInitialized) {
- vehiclesCursorInitialized = true;
+ for (let key in FC.ADSB_VEHICLES.vehicles) {
+ let vehicle = FC.ADSB_VEHICLES.vehicles[key];
- vehicleVectorSource = new ol.source.Vector({});
+ if (!vehiclesCursorInitialized) {
+ vehiclesCursorInitialized = true;
- let vehicleLayer = new ol.layer.Vector({
- source: vehicleVectorSource
- });
+ vehicleVectorSource = new ol.source.Vector({});
- mapHandler.addLayer(vehicleLayer);
- }
+ let vehicleLayer = new ol.layer.Vector({
+ source: vehicleVectorSource
+ });
- if (vehicle.lat != 0 && vehicle.lon != 0 && vehicle.ttl > 0) {
- let vehicleIconStyle = new ol.style.Style({
- image: new ol.style.Icon(({
- opacity: 1,
- rotation: vehicle.headingDegrees * (Math.PI / 180),
- scale: 0.8,
- anchor: [0.5, 0.5],
- src: path.join(__dirname, './../resources/adsb/' + ADSB_VEHICLE_TYPE[vehicle.emitterType]),
- })),
- text: new ol.style.Text(({
- text: vehicle.callsign,
- textAlign: 'center',
- textBaseline: "bottom",
- offsetY: +40,
- padding: [2, 2, 2, 2],
- backgroundFill: '#444444',
- fill: new ol.style.Fill({color: '#ffffff'}),
- })),
- });
+ mapHandler.addLayer(vehicleLayer);
+ }
+
+ if (vehicle.lat != 0 && vehicle.lon != 0 && vehicle.ttl > 0) {
+ let vehicleIconStyle = new ol.style.Style({
+ image: new ol.style.Icon(({
+ opacity: 1,
+ rotation: vehicle.headingDegrees * (Math.PI / 180),
+ scale: 0.8,
+ anchor: [0.5, 0.5],
+ src: path.join(__dirname, './../resources/adsb/' + ADSB_VEHICLE_TYPE[vehicle.emitterType].icon),
+ })),
+ text: new ol.style.Text(({
+ text: vehicle.callsign,
+ textAlign: 'center',
+ textBaseline: "bottom",
+ offsetY: +40,
+ padding: [2, 2, 2, 2],
+ backgroundFill: '#444444',
+ fill: new ol.style.Fill({color: '#ffffff'}),
+ })),
+ });
- let iconGeometry = new ol.geom.Point(ol.proj.fromLonLat([vehicle.lon / 10000000, vehicle.lat / 10000000]));
- let iconFeature = new ol.Feature({
- geometry: iconGeometry,
- name: vehicle.callsign,
- type: 'adsb',
- data: vehicle,
- });
+ let iconGeometry = new ol.geom.Point(ol.proj.fromLonLat([vehicle.lon / 10000000, vehicle.lat / 10000000]));
+ let iconFeature = new ol.Feature({
+ geometry: iconGeometry,
+ name: vehicle.callsign,
+ type: 'adsb',
+ data: vehicle,
+ });
- iconFeature.setStyle(vehicleIconStyle);
- vehicleVectorSource.addFeature(iconFeature);
- }
- }
- });
+ iconFeature.setStyle(vehicleIconStyle);
+ vehicleVectorSource.addFeature(iconFeature);
+ }
}
}
@@ -402,14 +406,28 @@ TABS.gps.initialize = function (callback) {
interval.add('gps_pull', function gps_update() {
// avoid usage of the GPS commands until a GPS sensor is detected for targets that are compiled without GPS support.
if (!SerialBackend.have_sensor(FC.CONFIG.activeSensors, 'gps')) {
- update_ui();
+ update_gps_ui();
return;
}
get_raw_gps_data();
+
}, 200);
+ if (semver.gte(FC.CONFIG.flightControllerVersion, "8.0.0")) {
+ $('.adsb_info_block').hide();
+ mspHelper.loadSerialPorts(function () {
+ for(var i in FC.SERIAL_CONFIG.ports){
+ if(FC.SERIAL_CONFIG.ports[i].functions && FC.SERIAL_CONFIG.ports[i].functions.includes("TELEMETRY_MAVLINK")){
+ $('.adsb_info_block').show();
+ interval.add('adsb_pull', get_raw_adsb_data, 200);
+ break;
+ }
+ }
+ });
+ }
+
$('a.save').on('click', function () {
serialPortHelper.set($port.val(), 'GPS', $baud.val());
features.reset();