mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-05-31 03:57:45 +08:00
*** empty log message ***
This commit is contained in:
+2
-2
@@ -259,7 +259,7 @@
|
||||
</message>
|
||||
|
||||
<message name="AIRCRAFTS" ID="3">
|
||||
<field name="ac_list" type="string" unit="csv"/>
|
||||
<field name="ac_list" type="string" format="csv"/>
|
||||
</message>
|
||||
|
||||
<message name="AIRCRAFTS_REQ" ID="4">
|
||||
@@ -345,7 +345,7 @@
|
||||
<field name="energy" type="float" unit="Wh"/>
|
||||
</message>
|
||||
|
||||
<message name="SVSINFO" ID="16">
|
||||
<message name="SVINFO" ID="16">
|
||||
<field name="ac_id" type="string"/>
|
||||
<field name="svid" type="string" format="csv"/>
|
||||
<field name="flags" type="string" format="csv"/>
|
||||
|
||||
@@ -20,6 +20,7 @@ sub Populate {
|
||||
my $notebook = $self->NoteBook(-ipadx => 6, -ipady => 6);
|
||||
$notebook->pack(-fill => 'both', -expand => "1");
|
||||
$self->Advertise('notebook' => $notebook);
|
||||
$self->{cur_block} = $self->{cur_stage} = -1;
|
||||
}
|
||||
|
||||
use Data::Dumper;
|
||||
@@ -52,7 +53,7 @@ sub add_aircraft {
|
||||
|
||||
sub on_ac_changed {
|
||||
my ($self, $aircraft, $event, $new_value) = @_;
|
||||
print "in MissionD : on_flight_plan @_\n";
|
||||
print "in MissionD : on_ac_changed $aircraft, $event $new_value\n";
|
||||
my $ac_id = $aircraft->get('-ac_id');
|
||||
if ($event eq 'flight_plan') {
|
||||
if (defined $new_value) {
|
||||
|
||||
@@ -29,7 +29,7 @@ sub completeinit {
|
||||
|
||||
sub visible {
|
||||
my ($self, $old_val, $new_val) = @_;
|
||||
print "in EngineView::visible $new_val\n";
|
||||
# print "in EngineView::visible $new_val\n";
|
||||
return unless defined $new_val and defined $self->{main_group};
|
||||
my $zinc = $self->get('-zinc');
|
||||
$zinc->itemconfigure ($self->{main_group},
|
||||
|
||||
@@ -68,18 +68,23 @@ sub completeinit {
|
||||
# $self->{fp} = $flight_plan;
|
||||
|
||||
$self->{modes} =
|
||||
{ ap_mode =>
|
||||
{ name => ["Manual", "Auto1", "Auto2", "Home"],
|
||||
color => ["sienna", "blue", "brown", "red"]
|
||||
},
|
||||
gps_mode =>
|
||||
{ name => [ "No fix", "GPS dead reckoning only", "2D-fix", "3D-fix", "GPS + dead reckoning combined"],
|
||||
color => ["red", "red", "orange", "brown", "orange"]
|
||||
},
|
||||
rc_status =>
|
||||
{ name => ["Lost","Ok", "Really lost", "error"],
|
||||
color => ["orange", "brown", "red", "red"]
|
||||
}
|
||||
{
|
||||
ap_mode =>
|
||||
{ name => ["Manual", "Auto1", "Auto2", "Home"],
|
||||
color => ["sienna", "blue", "brown", "red"]
|
||||
},
|
||||
gps_mode =>
|
||||
{ name => [ "No fix", "GPS dead reckoning only", "2D-fix", "3D-fix", "GPS + dead reckoning combined"],
|
||||
color => ["red", "red", "orange", "brown", "orange"]
|
||||
},
|
||||
rc_status =>
|
||||
{ name => ["Ok","Lost", "Really lost", "error"],
|
||||
color => ["orange", "brown", "red", "red"]
|
||||
},
|
||||
contrast_status =>
|
||||
{ name => ["Default","Waiting", "Set", "error"],
|
||||
color => ["orange", "brown", "red", "red"]
|
||||
}
|
||||
};
|
||||
|
||||
$self->{'frame'} = undef;
|
||||
@@ -170,12 +175,12 @@ sub draw {
|
||||
$self->add_value_text("gps_mode");
|
||||
|
||||
## Cal label and value
|
||||
$self->add_label("cal", "cal", 70, 46);
|
||||
$self->add_value_text("cal");
|
||||
$self->add_label("cal", "contrast_status", 70, 46);
|
||||
$self->add_value_text("contrast_status");
|
||||
|
||||
## crst label and value
|
||||
$self->add_label("crst", "crst", 70, 58);
|
||||
$self->add_value_text("crst");
|
||||
$self->add_label("crst", "contrast_value", 70, 58);
|
||||
$self->add_value_text("contrast_value");
|
||||
|
||||
|
||||
|
||||
@@ -184,8 +189,8 @@ sub draw {
|
||||
$self->add_value_text("alt");
|
||||
|
||||
## desired alt label and value
|
||||
$self->add_label("desired:","desired_alt", 150, 22);
|
||||
$self->add_value_text("desired_alt");
|
||||
$self->add_label("desired:","target_alt", 150, 22);
|
||||
$self->add_value_text("target_alt");
|
||||
|
||||
## speed label and value
|
||||
$self->add_label("speed:", "speed", 150, 46);
|
||||
@@ -284,8 +289,6 @@ sub border_block {
|
||||
my @groups = ();
|
||||
my @x = ( 300, 350, 400, 450, 500, 550, 600, 650, 700, 750);
|
||||
|
||||
print "############ coucou\n";
|
||||
|
||||
my $zinc = $self->get('-zinc');
|
||||
|
||||
$zinc->add('text', $self->{contentgroup}, -text => "Event1",
|
||||
@@ -293,8 +296,6 @@ sub border_block {
|
||||
-color => $self->{options}->{label_color}
|
||||
);
|
||||
|
||||
print "############ coucou2\n";
|
||||
|
||||
$zinc->add('text', $self->{contentgroup}, -text => "Event2",
|
||||
-position => [ 260, 60], -font => $self->{options}->{small_font},
|
||||
-color => $self->{options}->{label_color}
|
||||
@@ -347,8 +348,7 @@ sub set_block {
|
||||
|
||||
# FIXME: should be deprecated and we should use set_item or something like that
|
||||
sub setBat {
|
||||
my $self = shift;
|
||||
my ($bat) = @_;
|
||||
my ($self, $bat) = @_;
|
||||
$self->{'battery'} = $bat;
|
||||
my $batcolor = '#8080ff';
|
||||
$self->{'zinc'}->remove($self->{'zinc_bat'});
|
||||
@@ -374,7 +374,8 @@ sub string_of_time {
|
||||
##############################################################################
|
||||
sub attach_to_aircraft {
|
||||
my ($self) = @_;
|
||||
my @options = ('flight_plan', 'mode', 'flight_time', 'bat', 'speed', 'climb', 'alt', 'target_alt', 'cur_block');
|
||||
my @options = ('flight_plan', 'ap_mode', 'rc_mode', 'gps_mode', 'contrast_status', 'contrast_value',
|
||||
'flight_time', 'alt', 'target_alt', 'speed', 'climb');
|
||||
foreach my $option (@options) {
|
||||
$self->get('-aircraft')->attach($self, $option, [\&aircraft_config_changed]);
|
||||
}
|
||||
@@ -385,19 +386,26 @@ sub aircraft_config_changed {
|
||||
my ($self, $aircraft, $event, $new_value) = @_;
|
||||
# parse_config();
|
||||
# parse flight plan
|
||||
# print "in strip aircraft_config_changed $event $new_value\n";
|
||||
print "in strip aircraft_config_changed $event $new_value\n";
|
||||
# flight_plan
|
||||
if ($event eq 'flight_plan' and defined $new_value) {
|
||||
$self->border_block(); # display blocks of flight plan
|
||||
# $self->border_block(); # display blocks of flight plan
|
||||
}
|
||||
|
||||
# mode (AP)
|
||||
elsif ($event eq 'mode') {
|
||||
$self->set_item("ap_mode",$self->{modes}->{ap_mode}->{name}[$new_value], $self->{modes}->{ap_mode}->{color}[$new_value]); # display blocks of flight plan
|
||||
elsif ($event eq 'ap_mode' or $event eq 'rc_status' or
|
||||
$event eq 'gps_mode' or $event eq 'contrast_status') {
|
||||
my $names = $self->{modes}->{$event}->{name};
|
||||
my $colors = $self->{modes}->{$event}->{color};
|
||||
if ($new_value < @{$names} ) {
|
||||
$self->set_item($event,$self->{modes}->{$event}->{name}[$new_value], $self->{modes}->{$event}->{color}[$new_value]);
|
||||
}
|
||||
else {
|
||||
print "in Strip::aircraft_config_changed : wrong value $new_value for $event\n";
|
||||
}
|
||||
}
|
||||
|
||||
elsif ($event eq 'flight_time') {
|
||||
$self->set_item("flight_time",$self->string_of_time($new_value), $self->{options}->{value_color});
|
||||
$self->set_item("flight_time",$self->string_of_time($new_value), $self->{options}->{value_color});
|
||||
}
|
||||
|
||||
elsif ($event eq 'bat') {
|
||||
|
||||
@@ -59,7 +59,7 @@ sub add_strip {
|
||||
use constant NB_STRIP => 3;
|
||||
my $step = $self->get('-height') / NB_STRIP;
|
||||
my $nb_strips = keys %{$self->{strips}};
|
||||
my ($p, $w, $h) = ([5, 10 + $step * $nb_strips], 120, 45);
|
||||
my ($p, $w, $h) = ([5, 5 + $step * $nb_strips], 120, 45);
|
||||
my $strip = Paparazzi::Strip->new( -zinc => $zinc, -parent_grp => $self->{sp_main_group},
|
||||
-origin => $p, -width => $w, -height => $h,
|
||||
-aircraft => $aircraft);
|
||||
|
||||
@@ -103,11 +103,11 @@ sub build_gui {
|
||||
-height => $pfd_h,
|
||||
);
|
||||
# $self->{pfd}->attach($self, 'SHOW_PAGE', ['onShowPage']);
|
||||
# $self->{nd} = Paparazzi::ND->new( -zinc => $zinc,
|
||||
# -origin => $nd_p,
|
||||
# -width => $nd_w,
|
||||
# -height => $nd_h,
|
||||
# );
|
||||
$self->{nd} = Paparazzi::ND->new( -zinc => $zinc,
|
||||
-origin => $nd_p,
|
||||
-width => $nd_w,
|
||||
-height => $nd_h,
|
||||
);
|
||||
# $self->{nd}->attach($self, 'WIND_COMMAND', ['onWindCommand']);
|
||||
my $md = $bot_frame->MissionD(-bg => '#c1daff');
|
||||
$md->pack(-side => 'bottom', -anchor => "n", -fill => 'both', -expand => 1);
|
||||
|
||||
@@ -76,6 +76,13 @@ 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, []],
|
||||
|
||||
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.],
|
||||
|
||||
@@ -84,6 +91,9 @@ sub populate {
|
||||
contrast_status => [S_NOINIT, S_PASSIVE, S_RDWR, S_OVRWRT, S_NOPRPG, 0.],
|
||||
contrast_value => [S_NOINIT, S_PASSIVE, S_RDWR, S_OVRWRT, S_NOPRPG, 0.],
|
||||
|
||||
if_mode => [S_NOINIT, S_PASSIVE, S_RDWR, S_OVRWRT, S_NOPRPG, 0.],
|
||||
if_value1 => [S_NOINIT, S_PASSIVE, S_RDWR, S_OVRWRT, S_NOPRPG, 0.],
|
||||
if_value2 => [S_NOINIT, S_PASSIVE, S_RDWR, S_OVRWRT, S_NOPRPG, 0.],
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -27,8 +27,6 @@ use Subject;
|
||||
@ISA = ("Subject");
|
||||
use strict;
|
||||
|
||||
use Text::CSV;
|
||||
|
||||
use Paparazzi::IvyProtocol;
|
||||
use Paparazzi::Aircraft;
|
||||
use Paparazzi::Flightplan;
|
||||
@@ -63,14 +61,12 @@ sub on_aircraft_new_die {
|
||||
}
|
||||
|
||||
sub on_aircrafts {
|
||||
print "AircraftsManager : in on_aircrafts\n";
|
||||
# print "AircraftsManager::on_aircrafts\n";
|
||||
my ($sender_name, $msg_class, $msg_name, $fields, $self) = @_;
|
||||
# use Data::Dumper;
|
||||
# print "fields ".Dumper($fields)."\n";
|
||||
my $csv = Text::CSV->new();
|
||||
$csv->parse($fields->{ac_list});
|
||||
my @ac_list = $csv->fields();
|
||||
foreach my $ac_id (@ac_list) {
|
||||
use Data::Dumper;
|
||||
# print "in AircraftsManager::on_aircrafts : dumping fields\n ".Dumper($fields);
|
||||
my $ac_list = $fields->{ac_list};
|
||||
foreach my $ac_id (@{$ac_list}) {
|
||||
$self->add_aircraft($ac_id) unless $ac_id eq "";
|
||||
}
|
||||
}
|
||||
@@ -91,7 +87,7 @@ sub add_aircraft {
|
||||
|
||||
sub on_config {
|
||||
my ($sender_name, $msg_class, $msg_name, $fields, $self) = @_;
|
||||
print "AircraftsManager : in on_config\n"; # if (COCKPIT_DEBUG);
|
||||
print "AircraftsManager::on_config\n";
|
||||
# use Data::Dumper;
|
||||
# print "fields ".Dumper($fields)."\n";
|
||||
my $ac_id = $fields->{ac_id};
|
||||
@@ -112,12 +108,24 @@ sub on_config {
|
||||
|
||||
sub on_ac_msg {
|
||||
my ($sender_name, $msg_class, $msg_name, $fields, $self) = @_;
|
||||
# print "in on_ac_msg $msg_name\n";# if (COCKPIT_DEBUG);
|
||||
my $ac_id = $fields->{ac_id};
|
||||
my $aircraft = $self->get('-aircrafts')->{$ac_id};
|
||||
delete $fields->{ac_id};
|
||||
# print Dumper($fields);
|
||||
$aircraft->configure(%{$fields});
|
||||
# print "AircraftsManager::on_ac_msg : $msg_name\n".Dumper($fields);
|
||||
if (defined ($aircraft)) {
|
||||
delete $fields->{ac_id};
|
||||
$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 {
|
||||
@@ -130,7 +138,7 @@ sub listen_to_ac {
|
||||
['FLY_BY_WIRE', \&on_ac_msg],
|
||||
['INFRARED', \&on_ac_msg],
|
||||
['INFLIGH_CALIB', \&on_ac_msg],
|
||||
# ['SATS', \&ivyOnSats],
|
||||
['SVINFO', \&on_sv_info],
|
||||
);
|
||||
foreach my $event (@ac_events) {
|
||||
Paparazzi::IvyProtocol::bind_msg("ground", "ground", $event->[0],
|
||||
|
||||
@@ -2,6 +2,7 @@ package Paparazzi::IvyProtocol;
|
||||
|
||||
use strict;
|
||||
use XML::DOM;
|
||||
use Text::CSV;
|
||||
use Carp;
|
||||
use Ivy;
|
||||
|
||||
@@ -72,13 +73,28 @@ sub on_msg_received {
|
||||
# print STDERR "##### on_msg_received ".Dumper(@_);
|
||||
my $ret = {};
|
||||
my $msg = $classes_by_name->{$msg_class}->{$msg_name};
|
||||
unless (defined $msg) {
|
||||
print STDERR "in IvyProtocol::on_msg_received : unknown message $msg_class $msg_name\n";
|
||||
return;
|
||||
}
|
||||
my $nb_fields = @{$msg};
|
||||
for (my $i=0; $i<$nb_fields; $i++) {
|
||||
my $field_name = $msg->[$i]->{name};
|
||||
foreach my $field (@{$msg}) {
|
||||
my $field_name = $field->{name};
|
||||
if ($known_fields->{$field_name}) {
|
||||
$ret->{$field_name} = $known_fields->{$field_name};
|
||||
} else {
|
||||
$ret->{$field_name} = shift @matched_regexps;
|
||||
my $val = shift @matched_regexps;
|
||||
if (exists $field->{format} and $field->{format} eq 'csv') {
|
||||
# print "in IvyProtocol::on_msg_received : val $val\n";
|
||||
my $csv = Text::CSV->new();
|
||||
$csv->parse($val);
|
||||
my @list = $csv->fields();
|
||||
pop @list if $list[$#list] eq '';
|
||||
$ret->{$field_name} = \@list;
|
||||
}
|
||||
else {
|
||||
$ret->{$field_name} = $val;
|
||||
}
|
||||
}
|
||||
}
|
||||
# print STDERR "ret : ".Dumper($ret)."\n";
|
||||
|
||||
Reference in New Issue
Block a user