diff --git a/sw/lib/perl/Paparazzi/Aircraft.pm b/sw/lib/perl/Paparazzi/Aircraft.pm index 46c81030ac..893dbc25fa 100644 --- a/sw/lib/perl/Paparazzi/Aircraft.pm +++ b/sw/lib/perl/Paparazzi/Aircraft.pm @@ -36,7 +36,7 @@ sub populate { -callsign => [S_NOINIT, S_PASSIVE, S_RDWR, S_OVRWRT, S_NOPRPG, ""], flight_plan => [S_NOINIT, S_PASSIVE, S_RDWR, S_OVRWRT, S_NOPRPG, undef], - airframe => [S_NOINIT, S_PASSIVE, S_RDWR, S_OVRWRT, S_NOPRPG, "UNKNOWN"], + airframe => [S_NOINIT, S_PASSIVE, S_RDWR, S_OVRWRT, S_NOPRPG, undef], radio => [S_NOINIT, S_PASSIVE, S_RDWR, S_OVRWRT, S_NOPRPG, "UNKNOWN"], roll => [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 59937d4733..1e95f8b299 100644 --- a/sw/lib/perl/Paparazzi/AircraftsManager.pm +++ b/sw/lib/perl/Paparazzi/AircraftsManager.pm @@ -30,6 +30,7 @@ use strict; use Paparazzi::IvyProtocol; use Paparazzi::Aircraft; use Paparazzi::Flightplan; +use Paparazzi::Airframe; sub populate { my ($self, $args) = @_; @@ -93,6 +94,7 @@ sub on_config { my $ac_id = $fields->{ac_id}; my $ac = $self->get('-aircrafts')->{$ac_id}; delete $fields->{ac_id}; + my $fp_url = $fields->{flight_plan}; if (defined $fp_url) { # print "in AircraftsManager : on_config creating new flight plan\n"; @@ -102,6 +104,11 @@ sub on_config { # print "##### mission\n".Dumper($fp->get('-mission')); $fields->{flight_plan} = $fp; } + my $airframe_url = $fields->{airframe}; + if (defined $airframe_url) { + my $af = Paparazzi::Airframe->new(-url => $airframe_url); + $fields->{airframe} = $af; + } $ac->configure(%{$fields}); } diff --git a/sw/lib/perl/Paparazzi/Airframe.pm b/sw/lib/perl/Paparazzi/Airframe.pm new file mode 100644 index 0000000000..caf0894bba --- /dev/null +++ b/sw/lib/perl/Paparazzi/Airframe.pm @@ -0,0 +1,36 @@ +package Paparazzi::Airframe; + +use Subject; +@ISA = ("Subject"); +use strict; + +use XML::DOM; + +sub populate { + my ($self, $args) = @_; + $self->SUPER::populate($args); + $self->configspec( + -url => [S_NEEDINIT, S_PASSIVE, S_RDONLY, S_OVRWRT, S_NOPRPG, undef], + -name => [S_NOINIT, S_PASSIVE, S_RDONLY, S_OVRWRT, S_NOPRPG, undef], + ); +} + +sub completeinit { + my $self = shift; + $self->SUPER::completeinit(); + my $airframe_url = $self->get('-url'); + $airframe_url =~ /file:\/\/(.*)/; + my $filename = $1; + $self->parse_airframe($filename); +} + +sub parse_airframe { + my ($self, $filename) = @_; + + my $parser = XML::DOM::Parser->new(); + my $doc = $parser->parsefile($filename); + my $airframe = $doc->getElementsByTagName('airframe')->[0]; + $self->configure( -name => $airframe->getAttribute('name')); +} + +1; diff --git a/sw/lib/perl/Paparazzi/Flightplan.pm b/sw/lib/perl/Paparazzi/Flightplan.pm index aea42c373d..c4961bf1d7 100644 --- a/sw/lib/perl/Paparazzi/Flightplan.pm +++ b/sw/lib/perl/Paparazzi/Flightplan.pm @@ -47,8 +47,8 @@ sub populate { } # url -# NAV_UTM_EAST0 -# NAV_UTM_NORTH0 +# nav_utm_east0 +# nav_utm_north0 # max_dist_from_home # waypoints # |-- name