]> www.fi.muni.cz Git - slotcarman.git/commitdiff
More debugging.
authorJan "Yenya" Kasprzak <kas@fi.muni.cz>
Sun, 5 Dec 2010 23:06:09 +0000 (00:06 +0100)
committerJan "Yenya" Kasprzak <kas@fi.muni.cz>
Sun, 5 Dec 2010 23:06:09 +0000 (00:06 +0100)
SCX/Car.pm
SCX/GUI.pm
SCX/Reader.pm
SCX/Track.pm
gui.pl
log-pit-lanes [new file with mode: 0644]
protocol.txt

index 21d6c682051f765ecf8e1ea85b9e56954351f93c..8446592f90b68dfb400d2b050c67c74341ac5ac8 100644 (file)
@@ -31,6 +31,11 @@ sub set_throttle {
                || (defined $self->{throttle} && defined $val
                        && $self->{throttle} == $val);
 
                || (defined $self->{throttle} && defined $val
                        && $self->{throttle} == $val);
 
+       if ($self->{in_pit_lane} && defined $val && $val > 3) {
+               delete $self->{in_pit_lane};
+               $self->gui->leave_pit_lane;
+       }
+
        $self->{throttle} = $val;
        $self->gui->set_throttle($self->{order}, $val);
 }
        $self->{throttle} = $val;
        $self->gui->set_throttle($self->{order}, $val);
 }
@@ -60,7 +65,7 @@ sub set_model {
 
        return if (!defined $self->{car_icon} && !defined $name)
                || (defined $self->{car_icon} && defined $name
 
        return if (!defined $self->{car_icon} && !defined $name)
                || (defined $self->{car_icon} && defined $name
-                       && $self->{car_icon} ne $name);
+                       && $self->{car_icon} eq $name);
 
        $self->{car_icon} = $name;
        $self->gui->set_car_icon($self->{order}, $name);
 
        $self->{car_icon} = $name;
        $self->gui->set_car_icon($self->{order}, $name);
@@ -71,10 +76,10 @@ sub set_lap {
 
        return if (!defined $self->{lap} && !defined $lap_nr)
                || (defined $self->{lap} && defined $lap_nr
 
        return if (!defined $self->{lap} && !defined $lap_nr)
                || (defined $self->{lap} && defined $lap_nr
-                       && $self->{lap} != $lap_nr);
+                       && $self->{lap} == $lap_nr);
 
        $self->{lap} = $lap_nr;
 
        $self->{lap} = $lap_nr;
-       $self->gui->set_lap($self->{order}, $lap_nr || 'N/A');
+       $self->gui->set_lap($self->{order}, defined $lap_nr ? $lap_nr : 'N/A');
 }
 
 sub set_laptime {
 }
 
 sub set_laptime {
@@ -82,22 +87,28 @@ sub set_laptime {
 
        if (defined $lap_time) {
                $lap_time = sprintf("%.2f", $lap_time);
 
        if (defined $lap_time) {
                $lap_time = sprintf("%.2f", $lap_time);
-               if (!defined $self->{best_lap}
-                       || $self->{best_lap} > $lap_time) {
+               if ($lap_time > 1.0 && (
+                       !$self->{in_pit_lane} && !defined $self->{best_lap}
+                       || $self->{best_lap} > $lap_time
+                       )) {
 
                        $self->gui->set_best_lap($self->{order}, $lap_time);
                        $self->{best_lap} = $lap_time;
                }
                
 
                        $self->gui->set_best_lap($self->{order}, $lap_time);
                        $self->{best_lap} = $lap_time;
                }
                
+       } else {
+               $self->gui->set_best_lap($self->{order}, 'N/A');
+               $self->{best_lap} = undef;
        }
 
        return if (!defined $self->{laptime} && !defined $lap_time)
                || (defined $self->{laptime} && defined $lap_time
        }
 
        return if (!defined $self->{laptime} && !defined $lap_time)
                || (defined $self->{laptime} && defined $lap_time
-                       && $self->{laptime} != $lap_time);
+                       && $self->{laptime} == $lap_time);
 
        $self->{laptime} = $lap_time;
 
 
        $self->{laptime} = $lap_time;
 
-       $self->gui->set_laptime($self->{order}, $lap_time || 'N/A');
+       $self->gui->set_laptime($self->{order}, defined $lap_time
+               ? $lap_time : 'N/A');
 }
 
 sub set_driver {
 }
 
 sub set_driver {
@@ -105,11 +116,18 @@ sub set_driver {
 
        return if (!defined $self->{driver} && !defined $driver_name)
                || (defined $self->{driver} && defined $driver_name
 
        return if (!defined $self->{driver} && !defined $driver_name)
                || (defined $self->{driver} && defined $driver_name
-                       && $self->{driver} != $driver_name);
+                       && $self->{driver} == $driver_name);
 
        $self->{driver} = $driver_name;
        $self->gui->set_driver($self->{order}, $driver_name || 'N/A');
 }
 
 
        $self->{driver} = $driver_name;
        $self->gui->set_driver($self->{order}, $driver_name || 'N/A');
 }
 
+sub enter_pit_lane {
+       my ($self) = @_;
+
+       $self->{in_pit_lane} = 1;
+       $self->gui->enter_pit_lane;
+}
+
 1;
 
 1;
 
index 813d111fa73274e56a2f6ac8aa7cfe0e9adaca03..c8700a20bb5b41b38925e10e69f197d032d80895 100755 (executable)
@@ -153,5 +153,15 @@ sub set_driver {
        $label->set_markup('<span font_desc="18" weight="bold">'.$text.'</span>');
 }
 
        $label->set_markup('<span font_desc="18" weight="bold">'.$text.'</span>');
 }
 
+sub enter_pit_lane {
+       my ($self, $row) = @_;
+       $self->set_laptime($row, 'PIT');
+}
+
+sub leave_pit_lane {
+       my ($self, $row) = @_;
+       $self->set_laptime($row, '--');
+}
+
 1;
 
 1;
 
index 873ffa058a09a451b217df87ed47196bd1efc37a..8d9f42dcad72e6382d2f2e9e6880cc6605df809b 100644 (file)
@@ -226,6 +226,8 @@ sub lap_time_packet {
                || $bytes[4] & 0x01
                || $bytes[5] & 0x01;
 
                || $bytes[4] & 0x01
                || $bytes[5] & 0x01;
 
+       my $nonzero = grep { $_ != 0 } @bytes;
+
        my $car = $bytes[0];
        my $round = 256*$bytes[1] + $bytes[2]
                + ($bytes[3] & 2 ? 256 : 0)
        my $car = $bytes[0];
        my $round = 256*$bytes[1] + $bytes[2]
                + ($bytes[3] & 2 ? 256 : 0)
@@ -233,10 +235,19 @@ sub lap_time_packet {
        my $time = 256*$bytes[4] + $bytes[5]
                + ($bytes[3] & 8 ? 256 : 0)
                + ($bytes[3] & 4 ? 1 : 0);
        my $time = 256*$bytes[4] + $bytes[5]
                + ($bytes[3] & 8 ? 256 : 0)
                + ($bytes[3] & 4 ? 1 : 0);
-       $time *= 0.01024;
-
-       $self->track->car($car)->set_lap($round);
-       $self->track->car($car)->set_laptime($time);
+       if ($time == 65535) {
+               $self->track->car($car)->enter_pit_lane;
+       } else {
+               $time *= 0.01024;
+
+               if ($nonzero) {
+                       $self->track->car($car)->set_lap($round);
+                       $self->track->car($car)->set_laptime($time);
+               } else {
+                       # FIXME - probably reset race time or whatever
+                       # all-zeros packet is sent after the race setup
+               }
+       }
 
        return $msg;
 }
 
        return $msg;
 }
@@ -253,6 +264,11 @@ sub race_setup_packet {
                || $bytes[4] != 0xFF
                || $bytes[5] != 0xFF;
 
                || $bytes[4] != 0xFF
                || $bytes[5] != 0xFF;
 
+       for my $car (0..5) {
+               $self->track->car($car)->set_lap(undef);
+               $self->track->car($car)->set_laptime(undef);
+       }
+
        return $msg; # FIXME - to be implemented
 }
 
        return $msg; # FIXME - to be implemented
 }
 
@@ -301,6 +317,11 @@ sub qualification_packet {
                || $bytes[4] != 0xFF
                || $bytes[5] != 0xFF;
 
                || $bytes[4] != 0xFF
                || $bytes[5] != 0xFF;
 
+       for my $car (0..5) {
+               $self->track->car($car)->set_lap(undef);
+               $self->track->car($car)->set_laptime(undef);
+       }
+
        return $msg; # FIXME - to be implemented
 }
 
        return $msg; # FIXME - to be implemented
 }
 
@@ -316,6 +337,8 @@ sub end_of_race_packet {
                || $bytes[4] != 0xFF
                || $bytes[5] != 0xFF;
 
                || $bytes[4] != 0xFF
                || $bytes[5] != 0xFF;
 
+       $self->track->race_end;
+
        return $msg; # FIXME - to be implemented
 }
 
        return $msg; # FIXME - to be implemented
 }
 
@@ -331,6 +354,8 @@ sub race_start_packet {
                || $bytes[4] != 0xAA
                || $bytes[5] != 0xAA;
 
                || $bytes[4] != 0xAA
                || $bytes[5] != 0xAA;
 
+       $self->track->race_start;
+
        return $msg; # FIXME - to be implemented
 }
 
        return $msg; # FIXME - to be implemented
 }
 
@@ -365,6 +390,21 @@ sub finish_line_packet {
        my $msg = 'Strange finish_line packet'
                if $fail;
 
        my $msg = 'Strange finish_line packet'
                if $fail;
 
+       my $pit_lane_entry;
+       my @cars_finished;
+       for my $i (0..5) {
+               my $byte = $bytes[$i];
+
+               $pit_lane_entry = 1 if $byte == 0xF0;
+               push @cars_finished, $i if $byte == 0xE7;
+       }
+
+       if ($pit_lane_entry) {
+               for my $car (@cars_finished) {
+                       $self->track->car($car)->enter_pit_lane;
+               }
+       }
+
        return $msg; # FIXME - to be implemented
 }
 
        return $msg; # FIXME - to be implemented
 }
 
@@ -374,7 +414,7 @@ sub controller_status_packet {
 
        my $fail;
        for my $byte (@bytes) {
 
        my $fail;
        for my $byte (@bytes) {
-               next if $byte == 0xA0;
+               next if $byte == 0xAA;
                $fail = 1
                        if ($byte & 0xC0) != 0xC0
                        || ($byte & 0x0F) > 12
                $fail = 1
                        if ($byte & 0xC0) != 0xC0
                        || ($byte & 0x0F) > 12
index ab12a44e09aa3e6b37dd651f1461ae6932a74cce..f6200de651989d50c18d85f64a503b99a77a1905 100644 (file)
@@ -28,5 +28,18 @@ sub new {
 
 sub car { return shift->{cars}->[shift]; }
 
 
 sub car { return shift->{cars}->[shift]; }
 
+sub race_start {
+       my ($self) = @_;
+
+       $self->{race_running} = 1;
+
+}
+
+sub race_end {
+       my ($self) = @_;
+
+       $self->{race_running} = 0;
+}
+
 1;
 
 1;
 
diff --git a/gui.pl b/gui.pl
index 170289fb02134d87b24c17b556995764a7f75dc6..0ea57b38ef24417d6d01fde9349631be306f16ea 100755 (executable)
--- a/gui.pl
+++ b/gui.pl
@@ -10,7 +10,7 @@ use SCX::GUI;
 use SCX::Track;
 use SCX::Reader;
 
 use SCX::Track;
 use SCX::Reader;
 
-my $no_reader = 1;
+my $no_reader = 0;
 
 my $gui = SCX::GUI->new;
 my $track = SCX::Track->new({ gui => $gui });
 
 my $gui = SCX::GUI->new;
 my $track = SCX::Track->new({ gui => $gui });
diff --git a/log-pit-lanes b/log-pit-lanes
new file mode 100644 (file)
index 0000000..925989c
--- /dev/null
@@ -0,0 +1,66 @@
+7 kol, prujezd boxy asi ve 3., rychly prujezd v 5., tankovani v 6.
+
+     6.071 55 d3 82 ff ff ff ff ff d5 05
+     6.173 55 d6 83 88 88 14 50 aa 93 05
+     6.327 55 d4 02 00 08 0c 00 66 9c 05
+     6.361 55 d5 ff 00 00 07 ff ff 05 05 # Race setup down 7 kol
+     6.573 55 d0 ff 0a 05 aa aa aa ad 05 # Reset
+     6.609 55 dd 00 aa aa aa aa aa 42 05 # race start
+     6.931 55 d6 83 88 88 14 50 aa 93 05
+     9.180 55 aa 18 06 f0 f0 f0 f0 93 05
+     9.187 55 aa 0c 06 f0 f0 f0 f0 7b 05
+     9.216 55 ee fe fe e7 aa aa aa 1e 05 # Car 2 crosses finish line
+     9.224 55 d4 02 00 00 01 00 00 a0 05 # Car 2 round 1 time 0
+     9.228 55 d3 82 ff ff ff ff ff d5 05 # Standing 2 _ _ _ _ _
+     9.250 55 aa 18 06 f0 f0 f0 f0 93 05
+     9.258 55 aa 0c 06 f0 f0 f0 f0 7b 05
+     9.286 55 ee fe fe fe aa aa aa a1 05 # No car crosses finish line
+     9.352 55 ee fe fe e7 aa aa aa 1e 05 # Car 2 crosses finish line
+    12.943 55 ee 02 00 e7 01 00 00 cf 05 # Strange finish_line packet
+    12.951 55 d4 02 00 02 0c 00 6a fa 05 # Car 2 round 2 time xxx
+    13.581 55 ee fe fe e7 aa aa aa 1e 05 # Normal finish line packet
+    13.700 55 d4 02 00 02 00 00 00 e1 05 # Car 2 round 2 time 0
+    16.765 55 aa 18 06 f0 f0 f0 f0 93 05
+    16.772 55 aa 0c 06 f0 f0 f0 f0 7b 05
+    16.801 55 ee fe fe e7 aa aa aa 1e 05 # Car 2 crosses finish line
+    16.809 55 d4 02 00 02 0d 00 78 9d 05 # Car 2 round 3 time xxx
+    16.836 55 aa 18 06 f0 f0 f0 f0 93 05
+    16.843 55 aa 0c 06 f0 f0 f0 f0 7b 05
+    16.871 55 ee fe fe fe aa aa aa a1 05 # No car crosses finish line
+    16.936 55 ee fe fe e7 aa aa aa 1e 05 # Car 2 crosses finish line
+    20.076 55 aa 18 06 f0 f0 f0 f0 93 05
+    20.083 55 aa 0c 06 f0 f0 f0 f0 7b 05
+    20.112 55 ee fe fe e7 aa aa aa 1e 05 # Car 2 crosses finish line
+    20.120 55 d4 02 00 04 08 00 42 e5 05 # Car 2 round 4 time xxx
+    20.146 55 aa 18 06 f0 f0 f0 f0 93 05
+    20.154 55 aa 0c 06 f0 f0 f0 f0 7b 05
+    20.182 55 ee fe fe fe aa aa aa a1 05 # No car crosses finish line
+    20.248 55 ee fe fe e7 aa aa aa 1e 05
+    23.555 55 aa 18 06 f0 f0 f0 f0 93 05
+    23.563 55 aa 0c 06 f0 f0 f0 f0 7b 05
+    23.591 55 ee fe fe e7 aa aa aa 1e 05 # Car 2 crosses finish line
+    23.599 55 d4 02 00 04 0d 00 54 6f 05 # Car 2 round 5 time xxx
+    23.626 55 aa 18 06 f0 f0 f0 f0 93 05
+    23.633 55 aa 0c 06 f0 f0 f0 f0 7b 05
+    23.662 55 ee fe fe fe aa aa aa a1 05 # No car crosses finish line
+    23.726 55 ee fe fe e7 aa aa aa 1e 05 # Car 2 crosses finish line
+    26.048 55 d6 83 78 88 14 50 aa 65 05 # Car 2 fuel 7
+    26.928 55 ee 82 ff e7 ff ff ff 90 05 # Strange finish_line packet (too fast?)
+    26.936 55 d4 02 00 06 0c 00 48 10 05 # Car 2 round 6 time xxx
+    28.032 55 ee fe fe e7 aa aa aa 1e 05 # Car 2 crosses finish line
+    32.195 55 ee f0 f0 e7 aa aa aa b1 05 # Car 2 crosses finish line
+    32.203 55 d4 02 00 06 0d 00 fe 4f 05 # Car 2 round 7 time ff ..
+    32.315 55 d4 02 00 06 01 00 00 a9 05 # Car 2 round 7 time 00
+    34.005 55 d4 02 00 06 09 fe fe 13 05 # Car 2 round 7 time feff?
+    35.700 55 d6 83 88 88 14 50 aa 93 05 # Car 2 fuel 8
+    42.156 55 aa 18 06 f0 f0 f0 f0 93 05
+    42.163 55 aa 0c 06 f0 f0 f0 f0 7b 05
+    42.191 55 ee fe fe e7 aa aa aa 1e 05 # Car 2 crosses finish line
+    42.213 55 dc ff ff ff ff ff ff df 05 # End of race
+    42.228 55 aa 18 06 f0 f0 f0 f0 93 05
+    42.235 55 aa 0c 06 f0 f0 f0 f0 7b 05
+    42.264 55 ee fe fe fe aa aa aa a1 05 # No car crosses finish line
+    42.341 55 ee fe fe e7 aa aa aa 1e 05 # Car 2 crosses finish line
+    42.381 55 d4 02 00 08 0c 02 d4 98 05 # Car 2 round 8 time ...
+    51.997 55 dc ff ff ff ff ff ff df 05 # End of race
+    52.003 55 dc ff ff ff ff ff ff df 05
index c09a5a20170f6ba851df7d4f540bbb2c9bab5e43..80c377858797182bd092541ea1176ad7eba67fb5 100644 (file)
@@ -112,9 +112,14 @@ Example:
 55 D4 01 00 02 08 00 E8 32  (round 2)
 55 D4 01 00 02 0D 00 B6 3C  (round 3)
 55 D4 01 00 04 0C 04 98 69  (round 4)
 55 D4 01 00 02 08 00 E8 32  (round 2)
 55 D4 01 00 02 0D 00 B6 3C  (round 3)
 55 D4 01 00 04 0C 04 98 69  (round 4)
+Box entry example
+32.203 55 d4 02 00 06 0d 00 fe 4f 05 # Car 2 round 7 time ff ..
+32.315 55 d4 02 00 06 01 00 00 a9 05 # Car 2 round 7 time 00
+34.005 55 d4 02 00 06 09 fe fe 13 05 # Here the back button has been presed
 
 
 
 
-0xD5 - race start
+
+0xD5 - race setup
 -----------------
 Format: 0x055 0xD5 DI R2-R0 0xFF 0xFF CRC
 
 -----------------
 Format: 0x055 0xD5 DI R2-R0 0xFF 0xFF CRC
 
@@ -216,12 +221,14 @@ Sent after the car crosses the finish line and sends back its ID.
 R0-R5 - one byte for each car. 0xE7 means that this car has crossed the
        finish line, every other value means it did not cross it:
        0xAA is sent for unconnected controllers.
 R0-R5 - one byte for each car. 0xE7 means that this car has crossed the
        finish line, every other value means it did not cross it:
        0xAA is sent for unconnected controllers.
-       My pit box with 020 firmware has been seen sending either
-       0xF0 or 0xFE values as well
 
 Example:
 55 EE F0 E7 F0 AA AA AA 3C
 
 Example:
 55 EE F0 E7 F0 AA AA AA 3C
-55 EE FE FE E7 AA AA AA 1E
+55 EE FE FE E7 AA AA AA 1E # Car 2 crosses normal finish line
+55 EE 02 00 E7 01 00 00 CF # Car 2 drives through pit lane
+55 EE 82 FF E7 FF FF Ff 90 # Car 2 enters pit lane too fast
+55 EE F0 F0 E7 AA AA AA B1 # Car 2 enters pit lane
+
 
 
 0xFF - controller status
 
 
 0xFF - controller status