mirror of
https://github.com/iNavFlight/inav-configurator.git
synced 2025-07-19 14:25:13 +03:00
adsb enhanced
This commit is contained in:
parent
3226f68fc1
commit
03e37a3296
6 changed files with 120 additions and 74 deletions
2
js/fc.js
2
js/fc.js
|
@ -282,6 +282,8 @@ var FC = {
|
|||
this.ADSB_VEHICLES = {
|
||||
vehiclesCount: 0,
|
||||
callsignLength: 0,
|
||||
vehiclePacketCount: 0,
|
||||
heartbeatPacketCount: 0,
|
||||
vehicles: []
|
||||
};
|
||||
|
||||
|
|
|
@ -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++){
|
||||
|
||||
|
|
|
@ -5935,5 +5935,11 @@
|
|||
},
|
||||
"gpsAssistnowLoadDataError": {
|
||||
"message": "Error loading AssistNow data."
|
||||
},
|
||||
"adsbVehicleTotalMessages": {
|
||||
"message": "Vehicle msgs"
|
||||
},
|
||||
"adsbHeartbeatTotalMessages": {
|
||||
"message": "Heartbeat msgs"
|
||||
}
|
||||
}
|
||||
|
|
7
package-lock.json
generated
7
package-lock.json
generated
|
@ -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",
|
||||
|
|
|
@ -138,6 +138,23 @@
|
|||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="gui_box grey adsb_info_block">
|
||||
<div class="gui_box_titlebar">
|
||||
<div class="spacer_box_title">ADSB</div>
|
||||
</div>
|
||||
<div class="spacer_box GPS_stat">
|
||||
<table class="cf_table">
|
||||
<tr>
|
||||
<td style="width: 85px" data-i18n="adsbVehicleTotalMessages"></td>
|
||||
<td class="adsbVehicleTotalMessages">0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="width: 85px" data-i18n="adsbHeartbeatTotalMessages"></td>
|
||||
<td class="adsbHeartbeatTotalMessages">0</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
78
tabs/gps.js
78
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: <strong>`+ (feature.get('data').lon / 10000000) + `</strong><br />`
|
||||
+ `ASL: <strong>`+ (feature.get('data').altCM ) / 100 + `m</strong><br />`
|
||||
+ `heading: <strong>`+ feature.get('data').headingDegrees + `°</strong><br />`
|
||||
+ `type: <strong>`+ feature.get('data').emitterType + `</strong>`
|
||||
+ `type: <strong>`+ ADSB_VEHICLE_TYPE[feature.get('data').emitterType].name + `</strong>`
|
||||
).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,15 +338,17 @@ 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();
|
||||
}
|
||||
|
||||
$('.adsbVehicleTotalMessages').html(FC.ADSB_VEHICLES.vehiclePacketCount);
|
||||
$('.adsbHeartbeatTotalMessages').html(FC.ADSB_VEHICLES.heartbeatPacketCount);
|
||||
|
||||
for (let key in FC.ADSB_VEHICLES.vehicles) {
|
||||
let vehicle = FC.ADSB_VEHICLES.vehicles[key];
|
||||
|
||||
|
@ -365,7 +371,7 @@ TABS.gps.initialize = function (callback) {
|
|||
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]),
|
||||
src: path.join(__dirname, './../resources/adsb/' + ADSB_VEHICLE_TYPE[vehicle.emitterType].icon),
|
||||
})),
|
||||
text: new ol.style.Text(({
|
||||
text: vehicle.callsign,
|
||||
|
@ -391,8 +397,6 @@ TABS.gps.initialize = function (callback) {
|
|||
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();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue