mirror of
https://github.com/iNavFlight/inav-configurator.git
synced 2025-07-23 08:15:19 +03:00
Sync with master
This commit is contained in:
parent
f24ccfc637
commit
53aebde936
12 changed files with 1154 additions and 1133 deletions
|
@ -39,47 +39,43 @@ helper.defaultsDialog = (function () {
|
|||
value: "DSHOT300"
|
||||
},
|
||||
/*
|
||||
Filtering
|
||||
Ez Tune setup
|
||||
*/
|
||||
{
|
||||
key: "gyro_main_lpf_hz",
|
||||
key: "ez_enabled",
|
||||
value: "ON"
|
||||
},
|
||||
{
|
||||
key: "ez_filter_hz",
|
||||
value: 90
|
||||
},
|
||||
{
|
||||
key: "gyro_main_lpf_type",
|
||||
value: "PT1"
|
||||
key: "ez_axis_ratio",
|
||||
value: 116
|
||||
},
|
||||
{
|
||||
key: "dterm_lpf_hz",
|
||||
value: 85
|
||||
key: "ez_response",
|
||||
value: 71
|
||||
},
|
||||
{
|
||||
key: "dterm_lpf_type",
|
||||
value: "PT3"
|
||||
key: "ez_damping",
|
||||
value: 103
|
||||
},
|
||||
{
|
||||
key: "dynamic_gyro_notch_enabled",
|
||||
value: "ON"
|
||||
key: "ez_stability",
|
||||
value: 105
|
||||
},
|
||||
{
|
||||
key: "dynamic_gyro_notch_q",
|
||||
value: 250
|
||||
key: "ez_aggressiveness",
|
||||
value: 100
|
||||
},
|
||||
{
|
||||
key: "dynamic_gyro_notch_min_hz",
|
||||
value: 70
|
||||
key: "ez_rate",
|
||||
value: 134
|
||||
},
|
||||
{
|
||||
key: "setpoint_kalman_enabled",
|
||||
value: "ON"
|
||||
},
|
||||
{
|
||||
key: "setpoint_kalman_q",
|
||||
value: 200
|
||||
},
|
||||
{
|
||||
key: "smith_predictor_delay", // Enable Smith Predictor
|
||||
value: 1.5
|
||||
key: "ez_expo",
|
||||
value: 118
|
||||
},
|
||||
/*
|
||||
Mechanics
|
||||
|
@ -112,64 +108,6 @@ helper.defaultsDialog = (function () {
|
|||
key: "antigravity_accelerator",
|
||||
value: 5
|
||||
},
|
||||
/*
|
||||
Rates
|
||||
*/
|
||||
{
|
||||
key: "rc_yaw_expo",
|
||||
value: 75
|
||||
},
|
||||
{
|
||||
key: "rc_expo",
|
||||
value: 75
|
||||
},
|
||||
{
|
||||
key: "roll_rate",
|
||||
value: 70
|
||||
},
|
||||
{
|
||||
key: "pitch_rate",
|
||||
value: 70
|
||||
},
|
||||
{
|
||||
key: "yaw_rate",
|
||||
value: 60
|
||||
},
|
||||
/*
|
||||
PIDs
|
||||
*/
|
||||
{
|
||||
key: "mc_p_pitch",
|
||||
value: 32
|
||||
},
|
||||
{
|
||||
key: "mc_i_pitch",
|
||||
value: 90
|
||||
},
|
||||
{
|
||||
key: "mc_d_pitch",
|
||||
value: 25
|
||||
},
|
||||
{
|
||||
key: "mc_p_roll",
|
||||
value: 28
|
||||
},
|
||||
{
|
||||
key: "mc_i_roll",
|
||||
value: 80
|
||||
},
|
||||
{
|
||||
key: "mc_d_roll",
|
||||
value: 23
|
||||
},
|
||||
{
|
||||
key: "mc_p_yaw",
|
||||
value: 30
|
||||
},
|
||||
{
|
||||
key: "mc_i_yaw",
|
||||
value: 80
|
||||
},
|
||||
/*
|
||||
* TPA
|
||||
*/
|
||||
|
@ -192,11 +130,6 @@ helper.defaultsDialog = (function () {
|
|||
{
|
||||
key: "failsafe_procedure",
|
||||
value: "DROP"
|
||||
},
|
||||
// Ez Tune
|
||||
{
|
||||
key: "ez_filter_hz",
|
||||
value: 90
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -227,15 +160,43 @@ helper.defaultsDialog = (function () {
|
|||
value: "DSHOT300"
|
||||
},
|
||||
/*
|
||||
Filtering
|
||||
Ez Tune setup
|
||||
*/
|
||||
{
|
||||
key: "gyro_main_lpf_hz",
|
||||
key: "ez_enabled",
|
||||
value: "ON"
|
||||
},
|
||||
{
|
||||
key: "ez_filter_hz",
|
||||
value: 110
|
||||
},
|
||||
{
|
||||
key: "gyro_main_lpf_type",
|
||||
value: "PT1"
|
||||
key: "ez_axis_ratio",
|
||||
value: 110
|
||||
},
|
||||
{
|
||||
key: "ez_response",
|
||||
value: 92
|
||||
},
|
||||
{
|
||||
key: "ez_damping",
|
||||
value: 108
|
||||
},
|
||||
{
|
||||
key: "ez_stability",
|
||||
value: 110
|
||||
},
|
||||
{
|
||||
key: "ez_aggressiveness",
|
||||
value: 80
|
||||
},
|
||||
{
|
||||
key: "ez_rate",
|
||||
value: 134
|
||||
},
|
||||
{
|
||||
key: "ez_expo",
|
||||
value: 118
|
||||
},
|
||||
/*
|
||||
Dynamic gyro LPF
|
||||
|
@ -257,41 +218,6 @@ helper.defaultsDialog = (function () {
|
|||
value: 3
|
||||
},
|
||||
/*
|
||||
D-term
|
||||
*/
|
||||
{
|
||||
key: "dterm_lpf_hz",
|
||||
value: 110
|
||||
},
|
||||
{
|
||||
key: "dterm_lpf_type",
|
||||
value: "PT3"
|
||||
},
|
||||
{
|
||||
key: "dynamic_gyro_notch_enabled",
|
||||
value: "ON"
|
||||
},
|
||||
{
|
||||
key: "dynamic_gyro_notch_q",
|
||||
value: 250
|
||||
},
|
||||
{
|
||||
key: "dynamic_gyro_notch_min_hz",
|
||||
value: 100
|
||||
},
|
||||
{
|
||||
key: "setpoint_kalman_enabled",
|
||||
value: "ON"
|
||||
},
|
||||
{
|
||||
key: "setpoint_kalman_q",
|
||||
value: 200
|
||||
},
|
||||
{
|
||||
key: "smith_predictor_delay", // Enable Smith Predictor
|
||||
value: 1.5
|
||||
},
|
||||
/*
|
||||
Mechanics
|
||||
*/
|
||||
{
|
||||
|
@ -322,64 +248,6 @@ helper.defaultsDialog = (function () {
|
|||
key: "antigravity_accelerator",
|
||||
value: 5
|
||||
},
|
||||
/*
|
||||
Rates
|
||||
*/
|
||||
{
|
||||
key: "rc_yaw_expo",
|
||||
value: 75
|
||||
},
|
||||
{
|
||||
key: "rc_expo",
|
||||
value: 75
|
||||
},
|
||||
{
|
||||
key: "roll_rate",
|
||||
value: 70
|
||||
},
|
||||
{
|
||||
key: "pitch_rate",
|
||||
value: 70
|
||||
},
|
||||
{
|
||||
key: "yaw_rate",
|
||||
value: 60
|
||||
},
|
||||
/*
|
||||
PIDs
|
||||
*/
|
||||
{
|
||||
key: "mc_p_pitch",
|
||||
value: 40
|
||||
},
|
||||
{
|
||||
key: "mc_i_pitch",
|
||||
value: 90
|
||||
},
|
||||
{
|
||||
key: "mc_d_pitch",
|
||||
value: 27
|
||||
},
|
||||
{
|
||||
key: "mc_p_roll",
|
||||
value: 36
|
||||
},
|
||||
{
|
||||
key: "mc_i_roll",
|
||||
value: 80
|
||||
},
|
||||
{
|
||||
key: "mc_d_roll",
|
||||
value: 25
|
||||
},
|
||||
{
|
||||
key: "mc_p_yaw",
|
||||
value: 35
|
||||
},
|
||||
{
|
||||
key: "mc_i_yaw",
|
||||
value: 80
|
||||
},
|
||||
/*
|
||||
* TPA
|
||||
*/
|
||||
|
@ -402,11 +270,6 @@ helper.defaultsDialog = (function () {
|
|||
{
|
||||
key: "failsafe_procedure",
|
||||
value: "DROP"
|
||||
},
|
||||
// Ez Tune
|
||||
{
|
||||
key: "ez_filter_hz",
|
||||
value: 110
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -437,51 +300,43 @@ helper.defaultsDialog = (function () {
|
|||
value: "DSHOT300"
|
||||
},
|
||||
/*
|
||||
Filtering
|
||||
Ez Tune setup
|
||||
*/
|
||||
{
|
||||
key: "gyro_main_lpf_hz",
|
||||
key: "ez_enabled",
|
||||
value: "ON"
|
||||
},
|
||||
{
|
||||
key: "ez_filter_hz",
|
||||
value: 90
|
||||
},
|
||||
{
|
||||
key: "gyro_main_lpf_type",
|
||||
value: "PT1"
|
||||
key: "ez_axis_ratio",
|
||||
value: 110
|
||||
},
|
||||
{
|
||||
key: "dterm_lpf_hz",
|
||||
value: 80
|
||||
key: "ez_response",
|
||||
value: 101
|
||||
},
|
||||
{
|
||||
key: "dterm_lpf_type",
|
||||
value: "PT3"
|
||||
key: "ez_damping",
|
||||
value: 115
|
||||
},
|
||||
{
|
||||
key: "dynamic_gyro_notch_enabled",
|
||||
value: "ON"
|
||||
key: "ez_stability",
|
||||
value: 100
|
||||
},
|
||||
{
|
||||
key: "dynamic_gyro_notch_mode",
|
||||
value: "3D"
|
||||
key: "ez_aggressiveness",
|
||||
value: 100
|
||||
},
|
||||
{
|
||||
key: "dynamic_gyro_notch_q",
|
||||
value: 250
|
||||
key: "ez_rate",
|
||||
value: 134
|
||||
},
|
||||
{
|
||||
key: "dynamic_gyro_notch_min_hz",
|
||||
value: 60
|
||||
},
|
||||
{
|
||||
key: "setpoint_kalman_enabled",
|
||||
value: "ON"
|
||||
},
|
||||
{
|
||||
key: "setpoint_kalman_q",
|
||||
value: 200
|
||||
},
|
||||
{
|
||||
key: "smith_predictor_delay", // Enable Smith Predictor
|
||||
value: 1.5
|
||||
key: "ez_expo",
|
||||
value: 118
|
||||
},
|
||||
/*
|
||||
Mechanics
|
||||
|
@ -514,64 +369,6 @@ helper.defaultsDialog = (function () {
|
|||
key: "antigravity_accelerator",
|
||||
value: 5
|
||||
},
|
||||
/*
|
||||
Rates
|
||||
*/
|
||||
{
|
||||
key: "rc_yaw_expo",
|
||||
value: 75
|
||||
},
|
||||
{
|
||||
key: "rc_expo",
|
||||
value: 75
|
||||
},
|
||||
{
|
||||
key: "roll_rate",
|
||||
value: 70
|
||||
},
|
||||
{
|
||||
key: "pitch_rate",
|
||||
value: 70
|
||||
},
|
||||
{
|
||||
key: "yaw_rate",
|
||||
value: 60
|
||||
},
|
||||
/*
|
||||
PIDs
|
||||
*/
|
||||
{
|
||||
key: "mc_p_pitch",
|
||||
value: 44
|
||||
},
|
||||
{
|
||||
key: "mc_i_pitch",
|
||||
value: 85
|
||||
},
|
||||
{
|
||||
key: "mc_d_pitch",
|
||||
value: 28
|
||||
},
|
||||
{
|
||||
key: "mc_p_roll",
|
||||
value: 40
|
||||
},
|
||||
{
|
||||
key: "mc_i_roll",
|
||||
value: 75
|
||||
},
|
||||
{
|
||||
key: "mc_d_roll",
|
||||
value: 26
|
||||
},
|
||||
{
|
||||
key: "mc_p_yaw",
|
||||
value: 40
|
||||
},
|
||||
{
|
||||
key: "mc_i_yaw",
|
||||
value: 80
|
||||
},
|
||||
/*
|
||||
* TPA
|
||||
*/
|
||||
|
@ -594,11 +391,6 @@ helper.defaultsDialog = (function () {
|
|||
{
|
||||
key: "failsafe_procedure",
|
||||
value: "DROP"
|
||||
},
|
||||
// Ez Tune
|
||||
{
|
||||
key: "ez_filter_hz",
|
||||
value: 90
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
13
js/fc.js
13
js/fc.js
|
@ -29,6 +29,7 @@ var CONFIG,
|
|||
MOTOR_DATA,
|
||||
SERVO_DATA,
|
||||
GPS_DATA,
|
||||
ADSB_VEHICLES,
|
||||
MISSION_PLANNER,
|
||||
ANALOG,
|
||||
ARMING_CONFIG,
|
||||
|
@ -252,6 +253,12 @@ var FC = {
|
|||
packetCount: 0
|
||||
};
|
||||
|
||||
DSB_VEHICLES = {
|
||||
vehiclesCount: 0,
|
||||
callsignLength: 0,
|
||||
vehicles: []
|
||||
};
|
||||
|
||||
MISSION_PLANNER = new WaypointCollection();
|
||||
|
||||
ANALOG = {
|
||||
|
@ -1238,6 +1245,12 @@ var FC = {
|
|||
hasOperand: [true, false],
|
||||
output: "raw"
|
||||
},
|
||||
54: {
|
||||
name: "Mag calibration",
|
||||
operandType: "Set Flight Parameter",
|
||||
hasOperand: [false, false],
|
||||
output: "boolean"
|
||||
},
|
||||
}
|
||||
},
|
||||
getOperandTypes: function () {
|
||||
|
|
|
@ -245,5 +245,7 @@ var MSPCodes = {
|
|||
MSP2_INAV_EZ_TUNE: 0x2070,
|
||||
MSP2_INAV_EZ_TUNE_SET: 0x2071,
|
||||
|
||||
MSP2_INAV_SELECT_MIXER_PROFILE: 0x2080
|
||||
MSP2_INAV_SELECT_MIXER_PROFILE: 0x2080,
|
||||
|
||||
MSP2_ADSB_VEHICLE_LIST: 0x2090,
|
||||
};
|
||||
|
|
|
@ -189,6 +189,34 @@ var mspHelper = (function (gui) {
|
|||
GPS_DATA.eph = data.getUint16(16, true);
|
||||
GPS_DATA.epv = data.getUint16(18, true);
|
||||
break;
|
||||
case MSPCodes.MSP2_ADSB_VEHICLE_LIST:
|
||||
var byteOffsetCounter = 0;
|
||||
ADSB_VEHICLES.vehicles = [];
|
||||
ADSB_VEHICLES.vehiclesCount = data.getUint8(byteOffsetCounter++);
|
||||
ADSB_VEHICLES.callsignLength = data.getUint8(byteOffsetCounter++);
|
||||
|
||||
for(i = 0; i < ADSB_VEHICLES.vehiclesCount; i++){
|
||||
|
||||
var vehicle = {callSignByteArray: [], callsign: "", icao: 0, lat: 0, lon: 0, alt: 0, heading: 0, ttl: 0, tslc: 0, emitterType: 0};
|
||||
|
||||
for(ii = 0; ii < ADSB_VEHICLES.callsignLength; ii++){
|
||||
vehicle.callSignByteArray.push(data.getUint8(byteOffsetCounter++));
|
||||
}
|
||||
|
||||
vehicle.callsign = (String.fromCharCode(...vehicle.callSignByteArray)).replace(/[^\x20-\x7E]/g, '');
|
||||
vehicle.icao = data.getUint32(byteOffsetCounter, true); byteOffsetCounter += 4;
|
||||
vehicle.lat = data.getInt32(byteOffsetCounter, true); byteOffsetCounter += 4;
|
||||
vehicle.lon = data.getInt32(byteOffsetCounter, true); byteOffsetCounter += 4;
|
||||
vehicle.altCM = data.getInt32(byteOffsetCounter, true); byteOffsetCounter += 4;
|
||||
vehicle.headingDegrees = data.getUint16(byteOffsetCounter, true); byteOffsetCounter += 2;
|
||||
vehicle.tslc = data.getUint8(byteOffsetCounter++);
|
||||
vehicle.emitterType = data.getUint8(byteOffsetCounter++);
|
||||
vehicle.ttl = data.getUint8(byteOffsetCounter++);
|
||||
|
||||
ADSB_VEHICLES.vehicles.push(vehicle);
|
||||
}
|
||||
break;
|
||||
|
||||
case MSPCodes.MSP_ATTITUDE:
|
||||
SENSOR_DATA.kinematics[0] = data.getInt16(0, true) / 10.0; // x
|
||||
SENSOR_DATA.kinematics[1] = data.getInt16(2, true) / 10.0; // y
|
||||
|
|
|
@ -24,7 +24,16 @@ PortHandler.initialize = function () {
|
|||
PortHandler.check = function () {
|
||||
var self = this;
|
||||
|
||||
ConnectionSerial.getDevices(function(current_ports) {
|
||||
ConnectionSerial.getDevices(function(all_ports) {
|
||||
|
||||
// filter out ports that are not serial
|
||||
let current_ports = [];
|
||||
for (var i = 0; i < all_ports.length; i++) {
|
||||
if (all_ports[i].indexOf(':') === -1) {
|
||||
current_ports.push(all_ports[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// port got removed or initial_ports wasn't initialized yet
|
||||
if (self.array_difference(self.initial_ports, current_ports).length > 0 || !self.initial_ports) {
|
||||
var removed_ports = self.array_difference(self.initial_ports, current_ports);
|
||||
|
|
|
@ -155,7 +155,11 @@
|
|||
<label for="maxBankAngle"><span data-i18n="maxBankAngle"></span></label>
|
||||
<div for="maxBankAngle" class="helpicon cf_tip" data-i18n_title="maxBankAngleHelp"></div>
|
||||
</div>
|
||||
|
||||
<div class="number">
|
||||
<input type="number" id="navManualClimbRate" data-unit="v-cms" data-setting="nav_fw_manual_climb_rate" data-setting-multiplier="1" step="1" min="10" max="2000" />
|
||||
<label for="navManualClimbRate"><span data-i18n="navManualClimbRate"></span></label>
|
||||
<div for="navManualClimbRate" class="helpicon cf_tip" data-i18n_title="navManualClimbRateHelp"></div>
|
||||
</div>
|
||||
<div class="number">
|
||||
<input id="maxClimbAngle" type="number" data-unit="deg" data-setting="nav_fw_climb_angle" data-setting-multiplier="1" step="1" min="5" max="80" />
|
||||
<label for="maxClimbAngle"><span data-i18n="maxClimbAngle"></span></label>
|
||||
|
@ -238,6 +242,16 @@
|
|||
<label for="max-manual-speed"><span data-i18n="posholdMaxManualSpeed"></span></label>
|
||||
<div for="max-manual-speed" class="helpicon cf_tip" data-i18n_title="posholdMaxManualSpeedHelp"></div>
|
||||
</div>
|
||||
<div class="number">
|
||||
<input type="number" id="navAutoClimbRate" data-unit="v-cms" data-setting="nav_mc_auto_climb_rate" data-setting-multiplier="1" step="1" min="10" max="2000" />
|
||||
<label for="navAutoClimbRate"><span data-i18n="navAutoClimbRate"></span></label>
|
||||
<div for="navAutoClimbRate" class="helpicon cf_tip" data-i18n_title="navAutoClimbRateHelp"></div>
|
||||
</div>
|
||||
<div class="number">
|
||||
<input type="number" id="navManualClimbRate" data-unit="v-cms" data-setting="nav_mc_manual_climb_rate" data-setting-multiplier="1" step="1" min="10" max="2000" />
|
||||
<label for="navManualClimbRate"><span data-i18n="navManualClimbRate"></span></label>
|
||||
<div for="navManualClimbRate" class="helpicon cf_tip" data-i18n_title="navManualClimbRateHelp"></div>
|
||||
</div>
|
||||
<div class="number">
|
||||
<input id="max-bank-angle" type="number" data-unit="deg" data-setting="nav_mc_bank_angle" data-setting-multiplier="1" step="1" min="15" max="45" />
|
||||
<label for="max-bank-angle"><span data-i18n="posholdMaxBankAngle"></span></label>
|
||||
|
@ -465,17 +479,6 @@
|
|||
<div class="spacer_box_title" data-i18n="generalNavigationSettings"></div>
|
||||
</div>
|
||||
<div class="spacer_box">
|
||||
<div class="number">
|
||||
<input type="number" id="navManualClimbRate" data-unit="v-cms" data-setting="nav_manual_climb_rate" data-setting-multiplier="1" step="1" min="10" max="2000" />
|
||||
<label for="navManualClimbRate"><span data-i18n="navManualClimbRate"></span></label>
|
||||
<div for="navManualClimbRate" class="helpicon cf_tip" data-i18n_title="navManualClimbRateHelp"></div>
|
||||
</div>
|
||||
|
||||
<div class="number">
|
||||
<input type="number" id="navAutoClimbRate" data-unit="v-cms" data-setting="nav_auto_climb_rate" data-setting-multiplier="1" step="1" min="10" max="2000" />
|
||||
<label for="navAutoClimbRate"><span data-i18n="navAutoClimbRate"></span></label>
|
||||
<div for="navAutoClimbRate" class="helpicon cf_tip" data-i18n_title="navAutoClimbRateHelp"></div>
|
||||
</div>
|
||||
|
||||
<div class="number">
|
||||
<input type="number" id="navMaxAltitude" data-unit="cm" data-setting="nav_max_altitude" data-setting-multiplier="1" step="1" min="0" max="65000" />
|
||||
|
|
119
tabs/gps.js
119
tabs/gps.js
|
@ -8,6 +8,30 @@ TABS.gps.initialize = function (callback) {
|
|||
GUI.active_tab = 'gps';
|
||||
}
|
||||
|
||||
// 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
|
||||
};
|
||||
|
||||
var loadChainer = new MSPChainerClass();
|
||||
|
||||
var loadChain = [
|
||||
|
@ -57,6 +81,9 @@ TABS.gps.initialize = function (callback) {
|
|||
let iconGeometry;
|
||||
let iconFeature;
|
||||
|
||||
let vehicleVectorSource;
|
||||
let vehiclesCursorInitialized = false;
|
||||
|
||||
function process_html() {
|
||||
localization.localize();;
|
||||
|
||||
|
@ -130,6 +157,36 @@ TABS.gps.initialize = function (callback) {
|
|||
view: mapView
|
||||
});
|
||||
|
||||
TABS.gps.toolboxAdsbVehicle = new jBox('Mouse', {
|
||||
position: {
|
||||
x: "right",
|
||||
y: "bottom"
|
||||
},
|
||||
offset: {
|
||||
x: -5,
|
||||
y: 20,
|
||||
},
|
||||
});
|
||||
|
||||
mapHandler.on('pointermove', function(evt) {
|
||||
var feature = mapHandler.forEachFeatureAtPixel(mapHandler.getEventPixel(evt.originalEvent), function(feature, layer) {
|
||||
return feature;
|
||||
});
|
||||
|
||||
if (feature) {
|
||||
TABS.gps.toolboxAdsbVehicle.setContent(
|
||||
`icao: <strong>` + feature.get('name') + `</strong><br />`
|
||||
+ `lat: <strong>`+ (feature.get('data').lat / 10000000) + `</strong><br />`
|
||||
+ `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>`
|
||||
).open();
|
||||
}else{
|
||||
TABS.gps.toolboxAdsbVehicle.close();
|
||||
}
|
||||
});
|
||||
|
||||
let center = ol.proj.fromLonLat([0, 0]);
|
||||
mapView.setCenter(center);
|
||||
mapView.setZoom(2);
|
||||
|
@ -220,6 +277,65 @@ TABS.gps.initialize = function (callback) {
|
|||
iconGeometry.setCoordinates(center);
|
||||
|
||||
}
|
||||
|
||||
if (semver.gte(CONFIG.flightControllerVersion, "7.1.0")) {
|
||||
MSP.send_message(MSPCodes.MSP2_ADSB_VEHICLE_LIST, false, false, function () {
|
||||
//ADSB vehicles
|
||||
|
||||
if (vehiclesCursorInitialized) {
|
||||
vehicleVectorSource.clear();
|
||||
}
|
||||
|
||||
for (let key in ADSB_VEHICLES.vehicles) {
|
||||
let vehicle = ADSB_VEHICLES.vehicles[key];
|
||||
|
||||
if (!vehiclesCursorInitialized) {
|
||||
vehiclesCursorInitialized = true;
|
||||
|
||||
vehicleVectorSource = new ol.source.Vector({});
|
||||
|
||||
let vehicleLayer = new ol.layer.Vector({
|
||||
source: vehicleVectorSource
|
||||
});
|
||||
|
||||
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: '../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'}),
|
||||
})),
|
||||
});
|
||||
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -256,4 +372,7 @@ TABS.gps.initialize = function (callback) {
|
|||
|
||||
TABS.gps.cleanup = function (callback) {
|
||||
if (callback) callback();
|
||||
if (TABS.gps.toolboxAdsbVehicle){
|
||||
TABS.gps.toolboxAdsbVehicle.close();
|
||||
}
|
||||
};
|
||||
|
|
|
@ -166,7 +166,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="point" id="elevationEarthModelclass" style="display: none">
|
||||
<label class="spacer_box_title" for="elevationEarthModel" data-i18n="missionLevelEarthDEMModel"></label>
|
||||
<label class="spacer_box_title" for="elevationEarthModel" data-i18n="missionEllipsoidEarthDEMModel"></label>
|
||||
<input id="elevationEarthModel" type="checkbox" value="0" class="togglemedium" required>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -80,11 +80,6 @@ TABS.mission_control.initialize = function (callback) {
|
|||
let isOffline = false;
|
||||
let rthUpdateInterval = 0;
|
||||
|
||||
var $safehomesTable;
|
||||
var $safehomesTableBody;
|
||||
var $waypointOptionsTable;
|
||||
var $waypointOptionsTableBody;
|
||||
|
||||
if (GUI.active_tab != 'mission_control') {
|
||||
GUI.active_tab = 'mission_control';
|
||||
}
|
||||
|
@ -105,7 +100,7 @@ TABS.mission_control.initialize = function (callback) {
|
|||
}
|
||||
|
||||
function loadHtml() {
|
||||
GUI.load(path.join(__dirname, "tabs/mission_control.html"), process_html);
|
||||
GUI.load("tabs/mission_control.html", process_html);
|
||||
}
|
||||
|
||||
function process_html() {
|
||||
|
@ -368,24 +363,15 @@ TABS.mission_control.initialize = function (callback) {
|
|||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// define & init parameters for default Settings
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
var vMaxDistSH = 0;
|
||||
var settings = {};
|
||||
var settings = {speed: 0, alt: 5000, safeRadiusSH : 50, maxDistSH : 0, bingDemModel : false};
|
||||
|
||||
if (CONFIGURATOR.connectionValid) {
|
||||
mspHelper.getSetting("safehome_max_distance").then(function (s) {
|
||||
if (s) {
|
||||
vMaxDistSH = Number(s.value)/100;
|
||||
settings = { speed: 0, alt: 5000, safeRadiusSH : 50, maxDistSH : vMaxDistSH};
|
||||
}
|
||||
else {
|
||||
vMaxDistSH = 0;
|
||||
settings = { speed: 0, alt: 5000, safeRadiusSH : 50, maxDistSH : vMaxDistSH};
|
||||
settings.maxDistSH = Number(s.value)/100;
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
vMaxDistSH = 0;
|
||||
settings = { speed: 0, alt: 5000, safeRadiusSH : 50, maxDistSH : vMaxDistSH};
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// define & init Waypoints parameters
|
||||
|
@ -683,6 +669,7 @@ TABS.mission_control.initialize = function (callback) {
|
|||
|
||||
if (globalSettings.mapProviderType == 'bing') {
|
||||
$('#elevationEarthModelclass').fadeIn(300);
|
||||
changeSwitchery($('#elevationEarthModel'), settings.bingDemModel);
|
||||
} else {
|
||||
$('#elevationEarthModelclass').fadeOut(300);
|
||||
}
|
||||
|
@ -2129,22 +2116,30 @@ TABS.mission_control.initialize = function (callback) {
|
|||
const elevationAtWP = await selectedMarker.getElevation(globalSettings);
|
||||
$('#elevationValueAtWP').text(elevationAtWP);
|
||||
var altitude = Number($('#pointAlt').val());
|
||||
|
||||
if (P3Value != selectedMarker.getP3()) {
|
||||
selectedMarker.setP3(P3Value);
|
||||
|
||||
let groundClearance = 100 * Number($('#groundClearanceValueAtWP').text());
|
||||
if (isNaN(groundClearance)) {
|
||||
groundClearance = settings.alt; // use default altitude if no current ground clearance
|
||||
}
|
||||
|
||||
if ($('#pointP3Alt').prop("checked")) {
|
||||
if (altitude < 0) {
|
||||
altitude = settings.alt;
|
||||
}
|
||||
selectedMarker.setAlt(altitude + elevationAtWP * 100);
|
||||
selectedMarker.setAlt(groundClearance + elevationAtWP * 100);
|
||||
} else {
|
||||
selectedMarker.setAlt(altitude - Number(elevationAtWP) * 100);
|
||||
let elevationAtHome = HOME.getAlt();
|
||||
if (isNaN(elevationAtHome)) {
|
||||
elevationAtHome = elevationAtWP;
|
||||
}
|
||||
selectedMarker.setAlt(groundClearance + 100 * (elevationAtWP - elevationAtHome));
|
||||
}
|
||||
}
|
||||
|
||||
const returnAltitude = checkAltElevSanity(false, selectedMarker.getAlt(), elevationAtWP, selectedMarker.getP3());
|
||||
selectedMarker.setAlt(returnAltitude);
|
||||
$('#pointAlt').val(selectedMarker.getAlt());
|
||||
var altitudeMeters = app.ConvertCentimetersToMeters(selectedMarker.getAlt());
|
||||
altitudeMeters = app.ConvertCentimetersToMeters(selectedMarker.getAlt());
|
||||
$('#altitudeInMeters').text(` ${altitudeMeters}m`);
|
||||
|
||||
mission.updateWaypoint(selectedMarker);
|
||||
|
@ -2323,6 +2318,9 @@ TABS.mission_control.initialize = function (callback) {
|
|||
redrawLayer();
|
||||
plotElevation();
|
||||
})()
|
||||
|
||||
settings.bingDemModel = $('#elevationEarthModel').prop("checked") ? true : false;
|
||||
saveSettings();
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -2474,13 +2472,19 @@ TABS.mission_control.initialize = function (callback) {
|
|||
/////////////////////////////////////////////
|
||||
$('#saveSettings').on('click', function () {
|
||||
let oldSafeRadiusSH = settings.safeRadiusSH;
|
||||
settings = { speed: Number($('#MPdefaultPointSpeed').val()), alt: Number($('#MPdefaultPointAlt').val()), safeRadiusSH: Number($('#MPdefaultSafeRangeSH').val()), maxDistSH : vMaxDistSH};
|
||||
|
||||
settings.speed = Number($('#MPdefaultPointSpeed').val());
|
||||
settings.alt = Number($('#MPdefaultPointAlt').val());
|
||||
settings.safeRadiusSH = Number($('#MPdefaultSafeRangeSH').val());
|
||||
|
||||
saveSettings();
|
||||
|
||||
if (settings.safeRadiusSH != oldSafeRadiusSH && $('#showHideSafehomeButton').is(":visible")) {
|
||||
cleanSafehomeLayers();
|
||||
renderSafehomesOnMap();
|
||||
$('#SafeHomeSafeDistance').text(settings.safeRadiusSH);
|
||||
}
|
||||
|
||||
closeSettingsPanel();
|
||||
});
|
||||
|
||||
|
@ -2838,7 +2842,11 @@ TABS.mission_control.initialize = function (callback) {
|
|||
alert(localization.getMessage('MissionPlannerAltitudeChangeReset'));
|
||||
altitude = selectedMarker.getAlt();
|
||||
} else {
|
||||
altitude = settings.alt + 100 * (elevation - elevationAtHome);
|
||||
let currentGroundClearance = 100 * Number($('#groundClearanceValueAtWP').text());
|
||||
if (isNaN(currentGroundClearance) || selectedMarker == null) {
|
||||
currentGroundClearance = settings.alt; // use default altitude if no current ground clearance
|
||||
}
|
||||
altitude = currentGroundClearance + 100 * (elevation - elevationAtHome);
|
||||
}
|
||||
}
|
||||
groundClearance = altitude / 100 + (elevationAtHome - elevation);
|
||||
|
|
|
@ -424,7 +424,7 @@ TABS.mixer.initialize = function (callback, scrollPosition) {
|
|||
function labelMotorNumbers() {
|
||||
|
||||
let index = 0;
|
||||
var rules
|
||||
var rules;
|
||||
|
||||
if (currentMixerPreset.id == loadedMixerPresetID) {
|
||||
rules = MOTOR_RULES.get();
|
||||
|
|
|
@ -242,6 +242,16 @@
|
|||
<input id="osd_gforce_axis_alarm_max" data-setting="osd_gforce_axis_alarm_max" data-setting-multiplier="1" type="number" data-step="0.1" />
|
||||
<span data-i18n="osd_gforce_axis_alarm_max"></span>
|
||||
</label>
|
||||
<div for="adsb_distance_warning" class="helpicon cf_tip" data-i18n_title="osdAlarmADSB_MAX_DISTANCE_WARNING"></div>
|
||||
<label for="adsb_distance_warning">
|
||||
<input id="adsb_distance_warning" data-setting="osd_adsb_distance_warning" data-unit="m" data-setting-multiplier="1" type="number" data-step="1" />
|
||||
<span data-i18n="osd_adsb_distance_warning"></span>
|
||||
</label>
|
||||
<div for="adsb_distance_alert" class="helpicon cf_tip" data-i18n_title="osdAlarmADSB_MAX_DISTANCE_ALERT"></div>
|
||||
<label for="adsb_distance_alert">
|
||||
<input id="adsb_distance_alert" data-setting="osd_adsb_distance_alert" data-unit="m" data-setting-multiplier="1" type="number" data-step="1" />
|
||||
<span data-i18n="osd_adsb_distance_alert"></span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="gui_box grey dji-hd-container" id="dji_settings">
|
||||
|
|
37
tabs/osd.js
37
tabs/osd.js
|
@ -116,6 +116,7 @@ SYM.FLIGHT_DIST_REMAINING = 0x167;
|
|||
SYM.GROUND_COURSE = 0xDC;
|
||||
SYM.ALERT = 0xDD;
|
||||
SYM.CROSS_TRACK_ERROR = 0xFC;
|
||||
SYM.ADSB = 0xFD;
|
||||
SYM.PAN_SERVO_IS_OFFSET_L = 0x1C7;
|
||||
SYM.ODOMETER = 0X168;
|
||||
SYM.PILOT_LOGO_SML_L = 0x1D5;
|
||||
|
@ -482,6 +483,8 @@ OSD.initData = function () {
|
|||
imu_temp_alarm_max: null,
|
||||
baro_temp_alarm_min: null,
|
||||
baro_temp_alarm_max: null,
|
||||
adsb_distance_warning: null,
|
||||
adsb_distance_alert: null,
|
||||
},
|
||||
layouts: [],
|
||||
layout_count: 1, // This needs to be 1 for compatibility with < 2.0
|
||||
|
@ -783,6 +786,24 @@ OSD.constants = {
|
|||
min: -55,
|
||||
max: 125
|
||||
},
|
||||
{
|
||||
name: 'ADSB_MAX_DISTANCE_WARNING',
|
||||
field: 'adsb_distance_warning',
|
||||
step: 1,
|
||||
unit: "meters",
|
||||
min: 1,
|
||||
max: 64000,
|
||||
min_version: '7.1.0',
|
||||
},
|
||||
{
|
||||
name: 'ADSB_MAX_DISTANCE_ALERT',
|
||||
field: 'adsb_distance_alert',
|
||||
step: 1,
|
||||
unit: "meters",
|
||||
min: 1,
|
||||
max: 64000,
|
||||
min_version: '7.1.0',
|
||||
},
|
||||
],
|
||||
|
||||
// All display fields, from every version, do not remove elements, only add!
|
||||
|
@ -1656,6 +1677,18 @@ OSD.constants = {
|
|||
min_version: '6.0.0',
|
||||
preview: FONT.symbol(SYM.GROUND_COURSE) + '245' + FONT.symbol(SYM.DEGREES)
|
||||
},
|
||||
{
|
||||
name: 'ADSB_WARNING_MESSAGE',
|
||||
id: 147,
|
||||
min_version: '7.1.0',
|
||||
preview: FONT.symbol(SYM.ADSB) + '19.25' + FONT.symbol(SYM.DIR_TO_HOME+1) + '2.75',
|
||||
},
|
||||
{
|
||||
name: 'ADSB_INFO',
|
||||
id: 148,
|
||||
min_version: '7.1.0',
|
||||
preview: FONT.symbol(SYM.ADSB) + '2',
|
||||
},
|
||||
{
|
||||
name: 'CROSS TRACK ERROR',
|
||||
id: 141,
|
||||
|
@ -2266,6 +2299,8 @@ OSD.msp = {
|
|||
result.push16(OSD.data.alarms.imu_temp_alarm_max);
|
||||
result.push16(OSD.data.alarms.baro_temp_alarm_min);
|
||||
result.push16(OSD.data.alarms.baro_temp_alarm_max);
|
||||
result.push16(OSD.data.alarms.adsb_distance_warning);
|
||||
result.push16(OSD.data.alarms.adsb_distance_alert);
|
||||
return result;
|
||||
},
|
||||
|
||||
|
@ -2285,6 +2320,8 @@ OSD.msp = {
|
|||
OSD.data.alarms.imu_temp_alarm_max = alarms.read16();
|
||||
OSD.data.alarms.baro_temp_alarm_min = alarms.read16();
|
||||
OSD.data.alarms.baro_temp_alarm_max = alarms.read16();
|
||||
OSD.data.alarms.adsb_distance_warning = alarms.read16();
|
||||
OSD.data.alarms.adsb_distance_alert = alarms.read16();
|
||||
},
|
||||
|
||||
encodePreferences: function() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue