1
0
Fork 0

FLARM: Add support for Salus combi instrument, various small improvements

This commit is contained in:
Delta Echo 2022-09-29 14:43:40 +02:00
parent f29af4e558
commit 23b17f6e3f

View file

@ -1,5 +1,5 @@
## FLARM ## FLARM
## Version 08/2021 ## Version 09/2022
## by Benedikt Wolf (D-ECHO) ## by Benedikt Wolf (D-ECHO)
## References: ## References:
@ -28,6 +28,8 @@ var track = props.globals.getNode("/orientation/track-deg");
var ai_models = props.globals.getNode("/ai/models"); var ai_models = props.globals.getNode("/ai/models");
var elapsed_sec = props.globals.getNode("/sim/time/elapsed-sec"); var elapsed_sec = props.globals.getNode("/sim/time/elapsed-sec");
var version = 202209; # used for backwards compatibility (e.g. Salus Combined Instrument)
# Initialize Arrays to internally store targets and warnings # Initialize Arrays to internally store targets and warnings
var targets = []; var targets = [];
var warnings = []; var warnings = [];
@ -56,17 +58,19 @@ var new_contact = func () { #Sound message for new contact
} }
# Target class # Target class
#var target1 = Target.new(n,scnd);
var Target = { var Target = {
new : func(n,scnd){ new : func(n, type, scnd){
m = { parents : [Target] }; m = { parents : [Target] };
m.id=n; m.id=n;
m.lat = ai_models.getNode("multiplayer["~n~"]/position/latitude-deg"); m.prop_path = ai_models.getNode(type ~ "[" ~n~ "]" );
m.lon = ai_models.getNode("multiplayer["~n~"]/position/longitude-deg"); m.lat = m.prop_path.getNode("position/latitude-deg");
m.alt = ai_models.getNode("multiplayer["~n~"]/position/altitude-ft"); m.lon = m.prop_path.getNode("position/longitude-deg");
m.alt = m.prop_path.getNode("position/altitude-ft");
m.pos = geo.Coord.new().set_latlon( m.lat.getDoubleValue(), m.pos = geo.Coord.new().set_latlon( m.lat.getDoubleValue(),
m.lon.getDoubleValue(), m.lon.getDoubleValue(),
m.alt.getDoubleValue() ); m.alt.getDoubleValue() );
m.hdg = m.prop_path.getNode("orientation/true-heading-deg");
m.vario = m.prop_path.getNode("velocities/vertical-speed-fps");
m.second=0.0; m.second=0.0;
var ac = geo.aircraft_position(); var ac = geo.aircraft_position();
m.last_dist = m.pos.direct_distance_to( ac ); m.last_dist = m.pos.direct_distance_to( ac );
@ -154,19 +158,21 @@ setlistener("/sim/signals/fdm-initialized", func{
var update_FLARM = func{ var update_FLARM = func{
for(var f=0; f<=30; f=f+1){ # Check MP first, AI afterwards
if(getprop("/ai/models/multiplayer["~f~"]/position/latitude-deg") != nil){ var type = "multiplayer";
var temp_pos = geo.Coord.set_latlon( getprop("/ai/models/multiplayer["~f~"]/position/latitude-deg"), for(var f = 0; f < 15; f += 1){
getprop("/ai/models/multiplayer["~f~"]/position/longitude-deg"), if(getprop("/ai/models/"~ type ~"[" ~f~ "]/position/latitude-deg") != nil){
getprop("/ai/models/multiplayer["~f~"]/position/altitude-ft")); var temp_pos = geo.Coord.set_latlon( getprop("/ai/models/"~ type ~"[" ~f~ "]/position/latitude-deg"),
getprop("/ai/models/"~ type ~"[" ~f~ "]/position/longitude-deg"),
getprop("/ai/models/"~ type ~"[" ~f~ "]/position/altitude-ft"));
#Check whether in range and target not already existing #Check whether in range and target not already existing
var distance_km = temp_pos.distance_to(geo.aircraft_position())/1000; var distance_km = temp_pos.distance_to(geo.aircraft_position())/1000;
if(distance_km<max_dist and targets_tracked[f] == 0){ if( distance_km < max_dist and targets_tracked[f] == 0){
#Now generate a target #Now generate a target
targets[f]=Target.new( f, elapsed_sec.getDoubleValue() ); targets[f]=Target.new( f, type, elapsed_sec.getDoubleValue() );
targets_tracked[f] = 1; targets_tracked[f] = 1;
}else if(distance_km>max_dist and targets_tracked[f] == 1){ }else if( distance_km > max_dist and targets_tracked[f] == 1){
#Target existing, but has moved meanwhile out of range #Target existing, but has moved meanwhile out of range
targets[f] = nil; targets[f] = nil;
targets_tracked[f] = 0; targets_tracked[f] = 0;
@ -177,6 +183,30 @@ var update_FLARM = func{
targets_tracked[f] = 0; targets_tracked[f] = 0;
} }
} }
type = "aircraft";
for(var f = 0; f < 15; f += 1){
if(getprop("/ai/models/"~ type ~"[" ~f~ "]/position/latitude-deg") != nil){
var temp_pos = geo.Coord.set_latlon( getprop("/ai/models/"~ type ~"[" ~f~ "]/position/latitude-deg"),
getprop("/ai/models/"~ type ~"[" ~f~ "]/position/longitude-deg"),
getprop("/ai/models/"~ type ~"[" ~f~ "]/position/altitude-ft"));
#Check whether in range and target not already existing
var distance_km = temp_pos.distance_to(geo.aircraft_position())/1000;
if( distance_km < max_dist and targets_tracked[ f+15 ] == 0){
#Now generate a target
targets[ f+15 ]=Target.new( f, type, elapsed_sec.getDoubleValue() );
targets_tracked[ f+15 ] = 1;
}else if( distance_km > max_dist and targets_tracked[ f+15 ] == 1){
#Target existing, but has moved meanwhile out of range
targets[ f+15 ] = nil;
targets_tracked[ f+15 ] = 0;
}
} else if ( targets_tracked[ f+15 ] == 1){
#Target existing, but has meanwhile logged out
targets[ f+15 ]=nil;
targets_tracked[ f+15 ] = 0;
}
}
receive = 0; receive = 0;
@ -291,7 +321,8 @@ var update_FLARM = func{
} }
} }
var flarm_update = maketimer( 1, func() { update_FLARM(); } ); var flarm_update = maketimer( 1, func() { update_FLARM(); } );
flarm_update.simulatedTime = 1;
# Startup as described in [1], p.6 # Startup as described in [1], p.6
var phase1_timer = nil; var phase1_timer = nil;