diff --git a/sw/ground_segment/cockpit/Paparazzi/ND.pm b/sw/ground_segment/cockpit/Paparazzi/ND.pm index 56b54f621f..7c3db7b527 100644 --- a/sw/ground_segment/cockpit/Paparazzi/ND.pm +++ b/sw/ground_segment/cockpit/Paparazzi/ND.pm @@ -51,10 +51,15 @@ sub put_lls { } sub selected_ac { - my ($self, $old_ac, $new_ac) = @_; + my ($self, $previous_ac, $new_ac) = @_; + $previous_ac->detach($self, '-svsinfo', [\&foo_cbk, '-svsinfo']) if ($previous_ac); + $new_ac->attach($self, '-svsinfo', [\&foo_cbk, '-svsinfo']); +} - +sub foo_cbk { + my ($self, $field, $aircraft, $event, $new_value) = @_; + $self->configure('-sats', $new_value); } sub build_gui() { @@ -116,7 +121,7 @@ sub build_gui() { { -chn => 6 , -svid => 30, -flags => 0x01, -qi => 0, -cno => 42.2, -elev => 53, -azim => 161, -prres => 0.}, ] }; - $self->{Sat}->configure( -sats => $sat_h); +# $self->{Sat}->configure( -sats => $sat_h); $self->{Sat}->configure( -fix => 30.); # my $engine_h = { -nb_engine => 2, diff --git a/sw/ground_segment/cockpit/Paparazzi/SatPage.pm b/sw/ground_segment/cockpit/Paparazzi/SatPage.pm index 03f8296f8c..703f1ef018 100644 --- a/sw/ground_segment/cockpit/Paparazzi/SatPage.pm +++ b/sw/ground_segment/cockpit/Paparazzi/SatPage.pm @@ -28,19 +28,23 @@ sub sats { my $nb_ch = $new_val->{-nch}; my $sats = $new_val->{-sats}; my $zinc = $self->get('-zinc'); - foreach my $sat (@{$sats}) { - my $sat_obj = $self->{satellites}->[$sat->{-chn}]; - $zinc->coords($sat_obj->{-group}, $self->get_pos($sat->{-elev}, $sat->{-azim})); - $zinc->itemconfigure ($sat_obj->{-group}, - -visible => 1, - ); - $zinc->itemconfigure ($sat_obj->{-arc}, - -fillcolor => $sat->{-flags} & 0x01 ? "green3" : "red", - ); - $zinc->itemconfigure ($sat_obj->{-id_lab}, - -text => sprintf("%d", $sat->{-svid}), - ); - $sat_obj->{-sig_view}->configure(-sat => $sat); + + foreach my $i (0..MAX_CH-1) { + my $sat_obj = $self->{satellites}->[$i]; + unless ($new_val->{svid}->[$i] eq '' or $new_val->{svid}->[$i] == 0) { + my $pos = $self->get_pos($new_val->{elev}->[$i], $new_val->{azim}->[$i]); +# print "in SatPage::sats $i $new_val->{svid}->[$i] $new_val->{elev}->[$i], $new_val->{azim}->[$i] @{$pos}\n"; + $zinc->coords($sat_obj->{-group}, $pos); + $zinc->itemconfigure ($sat_obj->{-group}, -visible => 1 ); + $zinc->itemconfigure ($sat_obj->{-arc}, + -fillcolor => $new_val->{flags}->[$i] & 0x01 ? "green3" : "red", + ); + $zinc->itemconfigure ($sat_obj->{-id_lab}, + -text => sprintf("%d", $new_val->{svid}->[$i]), + ); + $sat_obj->{-sig_view}->configure(-svid => $new_val->{svid}->[$i], -cno => $new_val->{cno}->[$i]); + } + else { $zinc->itemconfigure ($sat_obj->{-group}, -visible => 0 )} } } diff --git a/sw/ground_segment/cockpit/Paparazzi/SatSigView.pm b/sw/ground_segment/cockpit/Paparazzi/SatSigView.pm index 8e412a9321..5f82a4e2cf 100644 --- a/sw/ground_segment/cockpit/Paparazzi/SatSigView.pm +++ b/sw/ground_segment/cockpit/Paparazzi/SatSigView.pm @@ -20,7 +20,8 @@ sub populate { -origin => [S_NEEDINIT, S_PASSIVE, S_RDONLY, S_OVRWRT, S_NOPRPG, undef], -width => [S_NEEDINIT, S_PASSIVE, S_RDONLY, S_OVRWRT, S_NOPRPG, undef], -height => [S_NEEDINIT, S_PASSIVE, S_RDONLY, S_OVRWRT, S_NOPRPG, undef], - -sat => [S_NOINIT, S_METHOD, S_RDWR, S_OVRWRT, S_NOPRPG, undef], + -svid => [S_NOINIT, S_METHOD, S_RDWR, S_OVRWRT, S_NOPRPG, undef], + -cno => [S_NOINIT, S_METHOD, S_RDWR, S_OVRWRT, S_NOPRPG, undef], ); } @@ -30,11 +31,16 @@ sub completeinit { $self->build_gui(); } -sub sat { +sub svid { my ($self, $old_val, $new_val) = @_; return unless defined $new_val; - $self->get('-zinc')->itemconfigure($self->{-id_lab}, -text => sprintf("%d", $new_val->{-svid})); - $self->get('-zinc')->itemconfigure($self->{-sig_lab}, -text => sprintf("%.1f db", $new_val->{-cno})); + $self->get('-zinc')->itemconfigure($self->{-id_lab}, -text => sprintf("%d", $new_val)); +} + +sub cno { + my ($self, $old_val, $new_val) = @_; + return unless defined $new_val; + $self->get('-zinc')->itemconfigure($self->{-sig_lab}, -text => sprintf("%.1f db", $new_val)); } sub build_gui { diff --git a/sw/lib/perl/Paparazzi/Aircraft.pm b/sw/lib/perl/Paparazzi/Aircraft.pm index 3cf11f730c..46c81030ac 100644 --- a/sw/lib/perl/Paparazzi/Aircraft.pm +++ b/sw/lib/perl/Paparazzi/Aircraft.pm @@ -76,12 +76,7 @@ sub populate { amp => [S_NOINIT, S_PASSIVE, S_RDWR, S_OVRWRT, S_NOPRPG, 0.], energy => [S_NOINIT, S_PASSIVE, S_RDWR, S_OVRWRT, S_NOPRPG, 0.], - svid => [S_NOINIT, S_PASSIVE, S_RDWR, S_OVRWRT, S_NOPRPG, []], - flags => [S_NOINIT, S_PASSIVE, S_RDWR, S_OVRWRT, S_NOPRPG, []], - qi => [S_NOINIT, S_PASSIVE, S_RDWR, S_OVRWRT, S_NOPRPG, []], - cno => [S_NOINIT, S_PASSIVE, S_RDWR, S_OVRWRT, S_NOPRPG, []], - elev => [S_NOINIT, S_PASSIVE, S_RDWR, S_OVRWRT, S_NOPRPG, []], - azim => [S_NOINIT, S_PASSIVE, S_RDWR, S_OVRWRT, S_NOPRPG, []], + -svsinfo => [S_NOINIT, S_PASSIVE, S_RDWR, S_OVRWRT, S_NOPRPG, undef], rc_status => [S_NOINIT, S_PASSIVE, S_RDWR, S_OVRWRT, S_NOPRPG, 0.], rc_mode => [S_NOINIT, S_PASSIVE, S_RDWR, S_OVRWRT, S_NOPRPG, 0.], diff --git a/sw/lib/perl/Paparazzi/AircraftsManager.pm b/sw/lib/perl/Paparazzi/AircraftsManager.pm index 9bd84cd57b..b976fd069d 100644 --- a/sw/lib/perl/Paparazzi/AircraftsManager.pm +++ b/sw/lib/perl/Paparazzi/AircraftsManager.pm @@ -113,36 +113,26 @@ sub on_ac_msg { # print "AircraftsManager::on_ac_msg : $msg_name\n".Dumper($fields); if (defined ($aircraft)) { delete $fields->{ac_id}; - $aircraft->configure(%{$fields}); + if ($msg_name eq "SVSINFO") { + $aircraft->configure(-svsinfo => $fields); + } + else { + $aircraft->configure(%{$fields}); + } } else { print STDERR "in AircraftsManager::on_ac_msg : unknow aircraft $ac_id in message $msg_class:$msg_name\n"; } } -sub on_sv_info { - my ($sender_name, $msg_class, $msg_name, $fields, $self) = @_; - print "in AircraftsManager::on_sv_info\n".Dumper($fields); - - - -} sub listen_to_ac { my ($self, $ac_id) = @_; - my @ac_events = ( ['FLIGHT_PARAM', \&on_ac_msg], - ['AP_STATUS', \&on_ac_msg], - ['NAV_STATUS', \&on_ac_msg], - ['CAM_STATUS', \&on_ac_msg], - ['ENGINE_STATUS', \&on_ac_msg], - ['FLY_BY_WIRE', \&on_ac_msg], - ['INFRARED', \&on_ac_msg], - ['INFLIGH_CALIB', \&on_ac_msg], - ['SVINFO', \&on_sv_info], - ); - foreach my $event (@ac_events) { - Paparazzi::IvyProtocol::bind_msg("ground", "ground", $event->[0], - {aircraft_id => $ac_id}, [$event->[1], $self]); + my @ac_msgs = ( 'FLIGHT_PARAM', 'AP_STATUS', 'NAV_STATUS', 'CAM_STATUS', 'ENGINE_STATUS', + 'FLY_BY_WIRE', 'INFRARED', 'INFLIGH_CALIB', 'SVSINFO'); + foreach my $msg_name (@ac_msgs) { + Paparazzi::IvyProtocol::bind_msg("ground", "ground", $msg_name, {aircraft_id => $ac_id}, + [\&on_ac_msg, $self]); } }