blackbox/main.c

Sat, 15 Dec 2012 23:15:32 +0100

author
Malte Bayer <mbayer@neo-soft.org>
date
Sat, 15 Dec 2012 23:15:32 +0100
changeset 124
0b12a8bf23b2
parent 123
ec623e5fcbca
child 125
edaf6a50276a
permissions
-rw-r--r--

new option to set pitlane entry as finish line too to increase laps

0
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
1 #include <avr/interrupt.h>
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
2 #include <avr/io.h>
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
3 #include <avr/wdt.h>
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
4 #include <avr/eeprom.h>
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
5 #include <stdlib.h>
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
6 #include <stdint.h>
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
7 #include <avr/pgmspace.h>
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
8 #include <util/delay.h>
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
9
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
10 #include "driver/rs232.h"
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
11 #include "driver/adc.h"
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
12
2
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
13 #include "main.h"
0
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
14 #include "lowlevel.h"
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
15
103
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
16 const char ok[] PROGMEM="OK\n";
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
17 const char busy[] PROGMEM="BUSY\n";
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
18 const char prepare[] PROGMEM="!RACE PREPARE\n";
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
19 const char countdownstart[] PROGMEM="!COUNTDOWN\n";
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
20 const char racestart[] PROGMEM="!RACE START\n";
37
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
21
103
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
22 const char SHORTCUT[] PROGMEM="!SHORTCUT\n";
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
23 const char PANIC[] PROGMEM="!PANIC\n";
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
24 const char RESUME[] PROGMEM="!RESUME\n";
89
4b5b4c7ba03d added panic mode, shortcircuit can be resumed now
Malte Bayer <mbayer@neo-soft.org>
parents: 83
diff changeset
25
45
da820f138498 switched sysclk to u32
Malte Bayer <mbayer@neo-soft.org>
parents: 44
diff changeset
26 typedef union {
46
d200e3d8a550 corrected lap times, packed data struct for each slotcar
Malte Bayer <mbayer@neo-soft.org>
parents: 45
diff changeset
27 uint32_t value;
45
da820f138498 switched sysclk to u32
Malte Bayer <mbayer@neo-soft.org>
parents: 44
diff changeset
28 uint16_t word[2]; // high, low word
da820f138498 switched sysclk to u32
Malte Bayer <mbayer@neo-soft.org>
parents: 44
diff changeset
29 uint8_t byte[4]; // all four bytes
da820f138498 switched sysclk to u32
Malte Bayer <mbayer@neo-soft.org>
parents: 44
diff changeset
30 } u32;
37
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
31
59
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
32 #define FUEL_FULL 10000
81
4f2f94a043fd betatest corrections
Malte Bayer <mbayer@neo-soft.org>
parents: 77
diff changeset
33 #define FUEL_JUMPSTART 5000
75
0b38de31ad5d made fuel divisor configurable
Malte Bayer <mbayer@neo-soft.org>
parents: 73
diff changeset
34 #define FUEL_DIV_DEFAULT 25
124
0b12a8bf23b2 new option to set pitlane entry as finish line too to increase laps
Malte Bayer <mbayer@neo-soft.org>
parents: 123
diff changeset
35 #define PITLANE_SPEEDLIMIT 10
75
0b38de31ad5d made fuel divisor configurable
Malte Bayer <mbayer@neo-soft.org>
parents: 73
diff changeset
36 volatile uint8_t fuel_divisor = FUEL_DIV_DEFAULT; // default, can be set via serial command
0b38de31ad5d made fuel divisor configurable
Malte Bayer <mbayer@neo-soft.org>
parents: 73
diff changeset
37
46
d200e3d8a550 corrected lap times, packed data struct for each slotcar
Malte Bayer <mbayer@neo-soft.org>
parents: 45
diff changeset
38 typedef struct {
49
3957ff8e86c6 more memsave through packed structure#
Malte Bayer <mbayer@neo-soft.org>
parents: 48
diff changeset
39 unsigned speedlimit:4; // 4bits speedlimit
3957ff8e86c6 more memsave through packed structure#
Malte Bayer <mbayer@neo-soft.org>
parents: 48
diff changeset
40 unsigned speedminimum:4; // 4bits speedminimum
59
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
41 unsigned seccnt:4; // 4 bits tenth seconds counter
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
42 unsigned accel:4; // 4 bits last configured acceleration
103
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
43 unsigned speed:4; // 4 bits last speed
104
95b2c23cb973 pitlane checkout bug resolved, prepare for customized pitlane speedlimit
Malte Bayer <mbayer@neo-soft.org>
parents: 103
diff changeset
44 unsigned pitlane_limit:4; // 4bits speedlimit
49
3957ff8e86c6 more memsave through packed structure#
Malte Bayer <mbayer@neo-soft.org>
parents: 48
diff changeset
45 unsigned trackswitch:1; // 1bit bool
60
bfc2f2d6913c added refueling mechanism by stopping the car
Malte Bayer <mbayer@neo-soft.org>
parents: 59
diff changeset
46 unsigned canrefuel:1; // 1bit bool
92
c57f43f25a5c fix: ghostcars unlimited fuel
Malte Bayer <mbayer@neo-soft.org>
parents: 91
diff changeset
47 unsigned unlimitedfuel:1; // 1bit bool
103
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
48 unsigned trackchange:1; // 1bit bool
59
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
49 uint16_t jumpstart_time, laps, fuel;
46
d200e3d8a550 corrected lap times, packed data struct for each slotcar
Malte Bayer <mbayer@neo-soft.org>
parents: 45
diff changeset
50 u32 lap_time_start, lap_time;
d200e3d8a550 corrected lap times, packed data struct for each slotcar
Malte Bayer <mbayer@neo-soft.org>
parents: 45
diff changeset
51 } cardata;
d200e3d8a550 corrected lap times, packed data struct for each slotcar
Malte Bayer <mbayer@neo-soft.org>
parents: 45
diff changeset
52
59
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
53 static char s[8];
37
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
54 static uint8_t countdown, countdown_loops;
89
4b5b4c7ba03d added panic mode, shortcircuit can be resumed now
Malte Bayer <mbayer@neo-soft.org>
parents: 83
diff changeset
55 extern uint8_t mode = 0;
37
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
56 // valid race modes:
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
57 // 0: free drive / idle
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
58 // 1: waiting for countdown start
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
59 // 2: race countdown initiated
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
60 // 3: Race start condition
89
4b5b4c7ba03d added panic mode, shortcircuit can be resumed now
Malte Bayer <mbayer@neo-soft.org>
parents: 83
diff changeset
61 // 255 PANIC MODE -> TURN OFF TRACK POWER
4b5b4c7ba03d added panic mode, shortcircuit can be resumed now
Malte Bayer <mbayer@neo-soft.org>
parents: 83
diff changeset
62
4b5b4c7ba03d added panic mode, shortcircuit can be resumed now
Malte Bayer <mbayer@neo-soft.org>
parents: 83
diff changeset
63 extern uint8_t btn_start = _BV(SW_START);
4b5b4c7ba03d added panic mode, shortcircuit can be resumed now
Malte Bayer <mbayer@neo-soft.org>
parents: 83
diff changeset
64 extern uint8_t old_start = _BV(SW_START);
4b5b4c7ba03d added panic mode, shortcircuit can be resumed now
Malte Bayer <mbayer@neo-soft.org>
parents: 83
diff changeset
65
124
0b12a8bf23b2 new option to set pitlane entry as finish line too to increase laps
Malte Bayer <mbayer@neo-soft.org>
parents: 123
diff changeset
66 // todo: pack as bit structure:
73
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
67 uint8_t liveinfo = 0;
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
68 uint8_t fuel_enabled = 1;
124
0b12a8bf23b2 new option to set pitlane entry as finish line too to increase laps
Malte Bayer <mbayer@neo-soft.org>
parents: 123
diff changeset
69 uint8_t pitlane_finishline = 0;
37
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
70
45
da820f138498 switched sysclk to u32
Malte Bayer <mbayer@neo-soft.org>
parents: 44
diff changeset
71 volatile u32 sysclk;
42
018d4d63ad3b implemented 500ns timer and set jumpstart time
Malte Bayer <mbayer@neo-soft.org>
parents: 41
diff changeset
72 volatile uint8_t sysclk_packettimer = 0;
46
d200e3d8a550 corrected lap times, packed data struct for each slotcar
Malte Bayer <mbayer@neo-soft.org>
parents: 45
diff changeset
73 volatile cardata slot[MAX_SLOTS];
44
4f4326794ba4 implemented lap time, there is some bug in 32bit substraction yet
Malte Bayer <mbayer@neo-soft.org>
parents: 43
diff changeset
74
48
5bba01aad0a6 memsave and implemented minimum slot speed for virtual cars
Malte Bayer <mbayer@neo-soft.org>
parents: 47
diff changeset
75 volatile uint8_t car0, car1;
41
9857c18c5e64 implemented car detection to cu
Malte Bayer <mbayer@neo-soft.org>
parents: 37
diff changeset
76 volatile uint16_t car0_new, car0_old;
9857c18c5e64 implemented car detection to cu
Malte Bayer <mbayer@neo-soft.org>
parents: 37
diff changeset
77 volatile uint16_t car1_new, car1_old;
9857c18c5e64 implemented car detection to cu
Malte Bayer <mbayer@neo-soft.org>
parents: 37
diff changeset
78 uint8_t car0_state, car1_state;
36
aea84f4f5a12 feature: program a specific controller speed limit without changing the car's acceleration
Malte Bayer <mbayer@neo-soft.org>
parents: 35
diff changeset
79
4
58529e14c45c implemented rs232 program word injection
Malte Bayer <mbayer@neo-soft.org>
parents: 3
diff changeset
80 volatile uint8_t program_count = 0;
58529e14c45c implemented rs232 program word injection
Malte Bayer <mbayer@neo-soft.org>
parents: 3
diff changeset
81 volatile uint8_t program_id;
58529e14c45c implemented rs232 program word injection
Malte Bayer <mbayer@neo-soft.org>
parents: 3
diff changeset
82 volatile uint8_t program_command;
58529e14c45c implemented rs232 program word injection
Malte Bayer <mbayer@neo-soft.org>
parents: 3
diff changeset
83 volatile uint8_t program_parameter;
58529e14c45c implemented rs232 program word injection
Malte Bayer <mbayer@neo-soft.org>
parents: 3
diff changeset
84
0
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
85 volatile uint8_t datalen = 0;
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
86 char data[10]; // 8 bytes data buffer + string termination
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
87
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
88 static char buffer[RS232_BUFSIZE+1];
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
89 static uint8_t buffer_len;
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
90
6
2405aff29a51 added response receiver timer
Malte Bayer <mbayer@neo-soft.org>
parents: 5
diff changeset
91 volatile uint16_t transmit_buffer;
2405aff29a51 added response receiver timer
Malte Bayer <mbayer@neo-soft.org>
parents: 5
diff changeset
92 volatile uint16_t transmit_buffer_queue;
2405aff29a51 added response receiver timer
Malte Bayer <mbayer@neo-soft.org>
parents: 5
diff changeset
93 volatile uint8_t transmit_len;
2405aff29a51 added response receiver timer
Malte Bayer <mbayer@neo-soft.org>
parents: 5
diff changeset
94 volatile uint8_t transmit_len_next;
2405aff29a51 added response receiver timer
Malte Bayer <mbayer@neo-soft.org>
parents: 5
diff changeset
95 volatile uint8_t transmit_len_queue;
2405aff29a51 added response receiver timer
Malte Bayer <mbayer@neo-soft.org>
parents: 5
diff changeset
96
69
27c0c0095e26 implemented responsewire in CU firmware
Malte Bayer <mbayer@neo-soft.org>
parents: 64
diff changeset
97 volatile uint16_t responsewire_data = 0;
6
2405aff29a51 added response receiver timer
Malte Bayer <mbayer@neo-soft.org>
parents: 5
diff changeset
98 volatile uint16_t response;
33
c261350bb394 fixed shortcut detection
Malte Bayer <mbayer@neo-soft.org>
parents: 11
diff changeset
99 volatile uint8_t response_len;
6
2405aff29a51 added response receiver timer
Malte Bayer <mbayer@neo-soft.org>
parents: 5
diff changeset
100 volatile uint8_t timer0_delay;
2405aff29a51 added response receiver timer
Malte Bayer <mbayer@neo-soft.org>
parents: 5
diff changeset
101
2405aff29a51 added response receiver timer
Malte Bayer <mbayer@neo-soft.org>
parents: 5
diff changeset
102
73
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
103 /* RESPONSEWIRE frame format:
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
104 1 startbit
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
105 2 car id bit 1
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
106 3 car id bit 2
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
107 4 car id bit 3
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
108 5 track change status bit 1
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
109 6 track change status bit 2
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
110 7 track change status bit 3
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
111 8 track change status bit 4
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
112 9 sender id bit 1
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
113 10 sender id bit 2
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
114 11 sender id bit 3
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
115 12 sender id bit 4
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
116 13 device type bit 1
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
117 14 device type bit 2
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
118 15 device type bit 3
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
119 16 stopbit
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
120 */
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
121
77
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
122 /* PITLANE/TRACKSWITCH STATUS DEFINITION
73
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
123 1 = AA
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
124 2 = AB
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
125 3 = BB
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
126 4 = BA
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
127 5 = BC
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
128 6 = ZZ -> pitlane exit
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
129 */
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
130
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
131 #define STARTSTOP 0b1000000000000001
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
132 void decode_responsewire(void) {
77
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
133 // ATTENTION: THIS IS CALLED IN AN INTERRUPT, KEEP AS SHORT AS POSSIBLE
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
134
73
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
135 uint16_t data = responsewire_data;
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
136 // first check if start + stopbit are set
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
137 // todo future: unsure but last bit doesnt get set?!
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
138 /*
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
139 if ((data & STARTSTOP) != STARTSTOP) {
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
140 RS232_puts("RW BAD\n");
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
141 return; // incomplete response
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
142 }
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
143 */
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
144 // now extract the car id, track change status
77
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
145 data >>= 1;
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
146 uint8_t car = (data & 0b111);
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
147 data >>= 3;
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
148 uint8_t status = (data & 0b1111);
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
149 data >>= 4;
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
150 uint8_t sender = (data & 0b1111);
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
151 data >>= 4;
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
152 uint8_t type = (data & 0b111);
73
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
153 if (type == 4) {
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
154 // pitlane response
124
0b12a8bf23b2 new option to set pitlane entry as finish line too to increase laps
Malte Bayer <mbayer@neo-soft.org>
parents: 123
diff changeset
155 if (status == 5) {
0b12a8bf23b2 new option to set pitlane entry as finish line too to increase laps
Malte Bayer <mbayer@neo-soft.org>
parents: 123
diff changeset
156 slot[car].canrefuel = 1;
0b12a8bf23b2 new option to set pitlane entry as finish line too to increase laps
Malte Bayer <mbayer@neo-soft.org>
parents: 123
diff changeset
157 if (pitlane_finishline) slot[car].laps++;
0b12a8bf23b2 new option to set pitlane entry as finish line too to increase laps
Malte Bayer <mbayer@neo-soft.org>
parents: 123
diff changeset
158 }
73
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
159 if (status == 6) for (data=0; data<MAX_SLOTS; data++) slot[data].canrefuel = 0;
104
95b2c23cb973 pitlane checkout bug resolved, prepare for customized pitlane speedlimit
Malte Bayer <mbayer@neo-soft.org>
parents: 103
diff changeset
160 if (status == 7) slot[car].canrefuel = 0;
73
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
161 }
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
162 RS232_puts("RW:");
77
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
163 RS232_putc(car + '0');
73
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
164 RS232_putc(':');
77
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
165 RS232_putc(type + '0');
73
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
166 RS232_putc(':');
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
167 itoa(sender, s, 16);
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
168 RS232_puts(s);
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
169 RS232_putc(':');
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
170 itoa(status, s, 16);
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
171 RS232_puts(s);
77
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
172 RS232_putc(':');
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
173 ultoa(sysclk.value, s, 16);
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
174 RS232_puts(s);
73
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
175 RS232_putc('\n');
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
176 }
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
177
35
00166228a419 cli: implemented setting of fuel, brake, speed, blinkstate for any car
Malte Bayer <mbayer@neo-soft.org>
parents: 34
diff changeset
178 int insert_queue(uint16_t tmp, uint8_t len) {
00166228a419 cli: implemented setting of fuel, brake, speed, blinkstate for any car
Malte Bayer <mbayer@neo-soft.org>
parents: 34
diff changeset
179 if (transmit_buffer_queue == 0) {
00166228a419 cli: implemented setting of fuel, brake, speed, blinkstate for any car
Malte Bayer <mbayer@neo-soft.org>
parents: 34
diff changeset
180 transmit_buffer_queue = tmp;
00166228a419 cli: implemented setting of fuel, brake, speed, blinkstate for any car
Malte Bayer <mbayer@neo-soft.org>
parents: 34
diff changeset
181 transmit_len_queue = len;
00166228a419 cli: implemented setting of fuel, brake, speed, blinkstate for any car
Malte Bayer <mbayer@neo-soft.org>
parents: 34
diff changeset
182 return 1;
00166228a419 cli: implemented setting of fuel, brake, speed, blinkstate for any car
Malte Bayer <mbayer@neo-soft.org>
parents: 34
diff changeset
183 }
00166228a419 cli: implemented setting of fuel, brake, speed, blinkstate for any car
Malte Bayer <mbayer@neo-soft.org>
parents: 34
diff changeset
184 return 0;
00166228a419 cli: implemented setting of fuel, brake, speed, blinkstate for any car
Malte Bayer <mbayer@neo-soft.org>
parents: 34
diff changeset
185 }
00166228a419 cli: implemented setting of fuel, brake, speed, blinkstate for any car
Malte Bayer <mbayer@neo-soft.org>
parents: 34
diff changeset
186
90
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
187 void startbutton(void) {
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
188 // start button press active
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
189 if (mode == 0) {
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
190 mode = 1; // set wait for race start mode
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
191 reset_vars();
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
192 LED(1, 1);
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
193 LED(2, 1);
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
194 LED(3, 1);
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
195 LED(4, 1);
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
196 LED(5, 1);
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
197 RS232_puts_p(prepare);
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
198 } else if (mode == 1) {
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
199 // Initiate race countdown
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
200 sysclk.value = 0;
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
201 countdown = 5;
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
202 countdown_loops = COUNTDOWN_DELAY;
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
203 mode = 2;
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
204 LED(1, 0);
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
205 LED(2, 0);
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
206 LED(3, 0);
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
207 LED(4, 0);
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
208 LED(5, 0);
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
209 RS232_puts_p(countdownstart);
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
210 }
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
211 }
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
212
0
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
213 ISR ( USART_RXC_vect ) {
36
aea84f4f5a12 feature: program a specific controller speed limit without changing the car's acceleration
Malte Bayer <mbayer@neo-soft.org>
parents: 35
diff changeset
214 uint8_t tmp;
0
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
215 char c = UDR;
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
216
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
217 // check for buffer overflow
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
218 if (buffer_len==sizeof(buffer)) {
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
219 buffer_len=0;
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
220 } else {
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
221 // collect characters until end of line
35
00166228a419 cli: implemented setting of fuel, brake, speed, blinkstate for any car
Malte Bayer <mbayer@neo-soft.org>
parents: 34
diff changeset
222 if ( (c=='\n') ) {
0
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
223 buffer[buffer_len]=0;
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
224
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
225 // packet end received, parse the received packet
4
58529e14c45c implemented rs232 program word injection
Malte Bayer <mbayer@neo-soft.org>
parents: 3
diff changeset
226 switch (buffer[0]) {
58529e14c45c implemented rs232 program word injection
Malte Bayer <mbayer@neo-soft.org>
parents: 3
diff changeset
227 case 'P': // inject a program data word to the rails
5
7319de27d44a added queue busy response on command injection
Malte Bayer <mbayer@neo-soft.org>
parents: 4
diff changeset
228 if (program_count == 0) {
7319de27d44a added queue busy response on command injection
Malte Bayer <mbayer@neo-soft.org>
parents: 4
diff changeset
229 program_id = buffer[3]-'0';
7319de27d44a added queue busy response on command injection
Malte Bayer <mbayer@neo-soft.org>
parents: 4
diff changeset
230 program_command = buffer[1]-'0';
10
6d6e982bbc41 meeting2 stuff
Malte Bayer <mbayer@neo-soft.org>
parents: 8
diff changeset
231 if (program_command > 9)
6d6e982bbc41 meeting2 stuff
Malte Bayer <mbayer@neo-soft.org>
parents: 8
diff changeset
232 program_command = buffer[1]-'A'+10;
5
7319de27d44a added queue busy response on command injection
Malte Bayer <mbayer@neo-soft.org>
parents: 4
diff changeset
233 program_parameter = buffer[2]-'0';
10
6d6e982bbc41 meeting2 stuff
Malte Bayer <mbayer@neo-soft.org>
parents: 8
diff changeset
234 if (program_parameter > 9)
6d6e982bbc41 meeting2 stuff
Malte Bayer <mbayer@neo-soft.org>
parents: 8
diff changeset
235 program_parameter = buffer[2]-'A'+10;
5
7319de27d44a added queue busy response on command injection
Malte Bayer <mbayer@neo-soft.org>
parents: 4
diff changeset
236 if (program_command < 4)
7319de27d44a added queue busy response on command injection
Malte Bayer <mbayer@neo-soft.org>
parents: 4
diff changeset
237 program_count = 0x02; // send commands twice (fuel, speed, brake)
7319de27d44a added queue busy response on command injection
Malte Bayer <mbayer@neo-soft.org>
parents: 4
diff changeset
238 else
7319de27d44a added queue busy response on command injection
Malte Bayer <mbayer@neo-soft.org>
parents: 4
diff changeset
239 program_count = 0x01;
36
aea84f4f5a12 feature: program a specific controller speed limit without changing the car's acceleration
Malte Bayer <mbayer@neo-soft.org>
parents: 35
diff changeset
240 RS232_puts_p(ok);
aea84f4f5a12 feature: program a specific controller speed limit without changing the car's acceleration
Malte Bayer <mbayer@neo-soft.org>
parents: 35
diff changeset
241 } else RS232_puts_p(busy);
aea84f4f5a12 feature: program a specific controller speed limit without changing the car's acceleration
Malte Bayer <mbayer@neo-soft.org>
parents: 35
diff changeset
242 break;
aea84f4f5a12 feature: program a specific controller speed limit without changing the car's acceleration
Malte Bayer <mbayer@neo-soft.org>
parents: 35
diff changeset
243
aea84f4f5a12 feature: program a specific controller speed limit without changing the car's acceleration
Malte Bayer <mbayer@neo-soft.org>
parents: 35
diff changeset
244 case 'L': // Limit maximum speed for a car
aea84f4f5a12 feature: program a specific controller speed limit without changing the car's acceleration
Malte Bayer <mbayer@neo-soft.org>
parents: 35
diff changeset
245 tmp = buffer[2]-'0';
aea84f4f5a12 feature: program a specific controller speed limit without changing the car's acceleration
Malte Bayer <mbayer@neo-soft.org>
parents: 35
diff changeset
246 if (tmp > 9)
aea84f4f5a12 feature: program a specific controller speed limit without changing the car's acceleration
Malte Bayer <mbayer@neo-soft.org>
parents: 35
diff changeset
247 tmp = buffer[2]-'A'+10;
46
d200e3d8a550 corrected lap times, packed data struct for each slotcar
Malte Bayer <mbayer@neo-soft.org>
parents: 45
diff changeset
248 slot[buffer[1]-'0'].speedlimit = tmp;
36
aea84f4f5a12 feature: program a specific controller speed limit without changing the car's acceleration
Malte Bayer <mbayer@neo-soft.org>
parents: 35
diff changeset
249 RS232_puts_p(ok);
5
7319de27d44a added queue busy response on command injection
Malte Bayer <mbayer@neo-soft.org>
parents: 4
diff changeset
250 break;
4
58529e14c45c implemented rs232 program word injection
Malte Bayer <mbayer@neo-soft.org>
parents: 3
diff changeset
251
48
5bba01aad0a6 memsave and implemented minimum slot speed for virtual cars
Malte Bayer <mbayer@neo-soft.org>
parents: 47
diff changeset
252 case 'S': // set minimum speed for a car
5bba01aad0a6 memsave and implemented minimum slot speed for virtual cars
Malte Bayer <mbayer@neo-soft.org>
parents: 47
diff changeset
253 tmp = buffer[2]-'0';
5bba01aad0a6 memsave and implemented minimum slot speed for virtual cars
Malte Bayer <mbayer@neo-soft.org>
parents: 47
diff changeset
254 if (tmp > 9)
5bba01aad0a6 memsave and implemented minimum slot speed for virtual cars
Malte Bayer <mbayer@neo-soft.org>
parents: 47
diff changeset
255 tmp = buffer[2]-'A'+10;
5bba01aad0a6 memsave and implemented minimum slot speed for virtual cars
Malte Bayer <mbayer@neo-soft.org>
parents: 47
diff changeset
256 slot[buffer[1]-'0'].speedminimum = tmp;
5bba01aad0a6 memsave and implemented minimum slot speed for virtual cars
Malte Bayer <mbayer@neo-soft.org>
parents: 47
diff changeset
257 RS232_puts_p(ok);
5bba01aad0a6 memsave and implemented minimum slot speed for virtual cars
Malte Bayer <mbayer@neo-soft.org>
parents: 47
diff changeset
258 break;
5bba01aad0a6 memsave and implemented minimum slot speed for virtual cars
Malte Bayer <mbayer@neo-soft.org>
parents: 47
diff changeset
259
73
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
260 case 'F': // set fuel enabled
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
261 fuel_enabled = buffer[1]-'0';
75
0b38de31ad5d made fuel divisor configurable
Malte Bayer <mbayer@neo-soft.org>
parents: 73
diff changeset
262 if (buffer[2] == ':') {
0b38de31ad5d made fuel divisor configurable
Malte Bayer <mbayer@neo-soft.org>
parents: 73
diff changeset
263 // convert fuel divisor
0b38de31ad5d made fuel divisor configurable
Malte Bayer <mbayer@neo-soft.org>
parents: 73
diff changeset
264 buffer[0] = '0'; // atoi expects zeros!
0b38de31ad5d made fuel divisor configurable
Malte Bayer <mbayer@neo-soft.org>
parents: 73
diff changeset
265 buffer[1] = '0';
0b38de31ad5d made fuel divisor configurable
Malte Bayer <mbayer@neo-soft.org>
parents: 73
diff changeset
266 buffer[2] = '0';
0b38de31ad5d made fuel divisor configurable
Malte Bayer <mbayer@neo-soft.org>
parents: 73
diff changeset
267 RS232_puts("DivisorChange: ");
0b38de31ad5d made fuel divisor configurable
Malte Bayer <mbayer@neo-soft.org>
parents: 73
diff changeset
268 itoa(fuel_divisor, s, 10);
0b38de31ad5d made fuel divisor configurable
Malte Bayer <mbayer@neo-soft.org>
parents: 73
diff changeset
269 RS232_puts(s);
0b38de31ad5d made fuel divisor configurable
Malte Bayer <mbayer@neo-soft.org>
parents: 73
diff changeset
270 RS232_putc('>');
0b38de31ad5d made fuel divisor configurable
Malte Bayer <mbayer@neo-soft.org>
parents: 73
diff changeset
271 fuel_divisor = atoi(buffer);
0b38de31ad5d made fuel divisor configurable
Malte Bayer <mbayer@neo-soft.org>
parents: 73
diff changeset
272 itoa(fuel_divisor, s, 10);
0b38de31ad5d made fuel divisor configurable
Malte Bayer <mbayer@neo-soft.org>
parents: 73
diff changeset
273 RS232_puts(s);
0b38de31ad5d made fuel divisor configurable
Malte Bayer <mbayer@neo-soft.org>
parents: 73
diff changeset
274 RS232_putc(' ');
0b38de31ad5d made fuel divisor configurable
Malte Bayer <mbayer@neo-soft.org>
parents: 73
diff changeset
275 }
73
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
276 RS232_puts_p(ok);
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
277 break;
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
278
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
279 case '*': // set live information
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
280 liveinfo = buffer[1]-'0';
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
281 RS232_puts_p(ok);
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
282 break;
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
283
124
0b12a8bf23b2 new option to set pitlane entry as finish line too to increase laps
Malte Bayer <mbayer@neo-soft.org>
parents: 123
diff changeset
284 case 'X': // set Pitlane act as finish line
0b12a8bf23b2 new option to set pitlane entry as finish line too to increase laps
Malte Bayer <mbayer@neo-soft.org>
parents: 123
diff changeset
285 // this can be used if pitlane exit comes after finish line while pitlane entry is before finish line
0b12a8bf23b2 new option to set pitlane entry as finish line too to increase laps
Malte Bayer <mbayer@neo-soft.org>
parents: 123
diff changeset
286 pitlane_finishline = buffer[1]-'0';
0b12a8bf23b2 new option to set pitlane entry as finish line too to increase laps
Malte Bayer <mbayer@neo-soft.org>
parents: 123
diff changeset
287 RS232_puts_p(ok);
0b12a8bf23b2 new option to set pitlane entry as finish line too to increase laps
Malte Bayer <mbayer@neo-soft.org>
parents: 123
diff changeset
288 break;
0b12a8bf23b2 new option to set pitlane entry as finish line too to increase laps
Malte Bayer <mbayer@neo-soft.org>
parents: 123
diff changeset
289
0b12a8bf23b2 new option to set pitlane entry as finish line too to increase laps
Malte Bayer <mbayer@neo-soft.org>
parents: 123
diff changeset
290
90
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
291 case '#': // remote start button press
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
292 RS232_puts_p(ok);
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
293 startbutton();
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
294 break;
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
295
89
4b5b4c7ba03d added panic mode, shortcircuit can be resumed now
Malte Bayer <mbayer@neo-soft.org>
parents: 83
diff changeset
296 case '+': // toggle panic mode
4b5b4c7ba03d added panic mode, shortcircuit can be resumed now
Malte Bayer <mbayer@neo-soft.org>
parents: 83
diff changeset
297 RS232_puts_p(ok);
4b5b4c7ba03d added panic mode, shortcircuit can be resumed now
Malte Bayer <mbayer@neo-soft.org>
parents: 83
diff changeset
298 if (mode != 0xff) {
4b5b4c7ba03d added panic mode, shortcircuit can be resumed now
Malte Bayer <mbayer@neo-soft.org>
parents: 83
diff changeset
299 mode = 0xff;
4b5b4c7ba03d added panic mode, shortcircuit can be resumed now
Malte Bayer <mbayer@neo-soft.org>
parents: 83
diff changeset
300 RS232_puts_p(PANIC);
4b5b4c7ba03d added panic mode, shortcircuit can be resumed now
Malte Bayer <mbayer@neo-soft.org>
parents: 83
diff changeset
301 } else {
4b5b4c7ba03d added panic mode, shortcircuit can be resumed now
Malte Bayer <mbayer@neo-soft.org>
parents: 83
diff changeset
302 mode = 0;
4b5b4c7ba03d added panic mode, shortcircuit can be resumed now
Malte Bayer <mbayer@neo-soft.org>
parents: 83
diff changeset
303 RS232_puts_p(RESUME);
4b5b4c7ba03d added panic mode, shortcircuit can be resumed now
Malte Bayer <mbayer@neo-soft.org>
parents: 83
diff changeset
304 }
4b5b4c7ba03d added panic mode, shortcircuit can be resumed now
Malte Bayer <mbayer@neo-soft.org>
parents: 83
diff changeset
305 break;
73
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
306
37
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
307 case 'I': // get Information data (incl. important global parameter dump)
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
308 RS232_puts(VERSION);
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
309 RS232_putc(':');
46
d200e3d8a550 corrected lap times, packed data struct for each slotcar
Malte Bayer <mbayer@neo-soft.org>
parents: 45
diff changeset
310 for (tmp=0;tmp<MAX_SLOTS;tmp++) RS232_putc(slot[tmp].speedlimit); // output speed limits
37
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
311 RS232_putc(':');
48
5bba01aad0a6 memsave and implemented minimum slot speed for virtual cars
Malte Bayer <mbayer@neo-soft.org>
parents: 47
diff changeset
312 for (tmp=0;tmp<MAX_SLOTS;tmp++) RS232_putc(slot[tmp].speedminimum); // output minimum speed
5bba01aad0a6 memsave and implemented minimum slot speed for virtual cars
Malte Bayer <mbayer@neo-soft.org>
parents: 47
diff changeset
313 RS232_putc(':');
43
4e5d389f7b83 jumpstart time output via interface
Malte Bayer <mbayer@neo-soft.org>
parents: 42
diff changeset
314 for (tmp=0;tmp<MAX_SLOTS;tmp++) {
46
d200e3d8a550 corrected lap times, packed data struct for each slotcar
Malte Bayer <mbayer@neo-soft.org>
parents: 45
diff changeset
315 itoa(slot[tmp].fuel, s, 16);
43
4e5d389f7b83 jumpstart time output via interface
Malte Bayer <mbayer@neo-soft.org>
parents: 42
diff changeset
316 RS232_putc(s); // output fuel levels (0=empty, 100=full, 0xff=no fuel option)
4e5d389f7b83 jumpstart time output via interface
Malte Bayer <mbayer@neo-soft.org>
parents: 42
diff changeset
317 RS232_putc(',');
4e5d389f7b83 jumpstart time output via interface
Malte Bayer <mbayer@neo-soft.org>
parents: 42
diff changeset
318 }
37
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
319 RS232_putc(':');
43
4e5d389f7b83 jumpstart time output via interface
Malte Bayer <mbayer@neo-soft.org>
parents: 42
diff changeset
320 for (tmp=0;tmp<MAX_SLOTS;tmp++) {
46
d200e3d8a550 corrected lap times, packed data struct for each slotcar
Malte Bayer <mbayer@neo-soft.org>
parents: 45
diff changeset
321 itoa(slot[tmp].jumpstart_time, s, 16);
43
4e5d389f7b83 jumpstart time output via interface
Malte Bayer <mbayer@neo-soft.org>
parents: 42
diff changeset
322 RS232_puts(s); // output jumpstart times
4e5d389f7b83 jumpstart time output via interface
Malte Bayer <mbayer@neo-soft.org>
parents: 42
diff changeset
323 RS232_putc(',');
4e5d389f7b83 jumpstart time output via interface
Malte Bayer <mbayer@neo-soft.org>
parents: 42
diff changeset
324 }
37
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
325 RS232_putc(':');
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
326 RS232_putc('\n');
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
327 break;
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
328
4
58529e14c45c implemented rs232 program word injection
Malte Bayer <mbayer@neo-soft.org>
parents: 3
diff changeset
329 }
0
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
330
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
331 // wait for the next packet
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
332 buffer_len=0;
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
333 } else {
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
334 buffer[buffer_len++]=c;
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
335 }
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
336 }
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
337 }
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
338
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
339
37
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
340 void jumpstart(uint8_t controller) {
46
d200e3d8a550 corrected lap times, packed data struct for each slotcar
Malte Bayer <mbayer@neo-soft.org>
parents: 45
diff changeset
341 if (slot[controller].jumpstart_time == 0) {
d200e3d8a550 corrected lap times, packed data struct for each slotcar
Malte Bayer <mbayer@neo-soft.org>
parents: 45
diff changeset
342 slot[controller].jumpstart_time = sysclk.word[0]; // low word
37
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
343 RS232_putc('~');
81
4f2f94a043fd betatest corrections
Malte Bayer <mbayer@neo-soft.org>
parents: 77
diff changeset
344 RS232_putc('0'+controller);
46
d200e3d8a550 corrected lap times, packed data struct for each slotcar
Malte Bayer <mbayer@neo-soft.org>
parents: 45
diff changeset
345 RS232_putc(':');
d200e3d8a550 corrected lap times, packed data struct for each slotcar
Malte Bayer <mbayer@neo-soft.org>
parents: 45
diff changeset
346 itoa(slot[controller].jumpstart_time, s, 16);
43
4e5d389f7b83 jumpstart time output via interface
Malte Bayer <mbayer@neo-soft.org>
parents: 42
diff changeset
347 RS232_puts(s);
37
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
348 RS232_putc('\n');
81
4f2f94a043fd betatest corrections
Malte Bayer <mbayer@neo-soft.org>
parents: 77
diff changeset
349 slot[controller].fuel = FUEL_JUMPSTART; // suck 50% off that bitch!
37
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
350 }
0
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
351
37
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
352 }
0
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
353
59
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
354 uint8_t do_controller(uint8_t controller) {
0
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
355 // read controller X speed & encode controller data packet
37
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
356 uint16_t tmp = 0;
59
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
357 uint8_t speed;
51
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
358 uint8_t trackchange = 0xff;
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
359
48
5bba01aad0a6 memsave and implemented minimum slot speed for virtual cars
Malte Bayer <mbayer@neo-soft.org>
parents: 47
diff changeset
360 if ( (PIN(SW_PACECAR_PORT) & _BV(SW_PACECAR)) == 0 ) {
5bba01aad0a6 memsave and implemented minimum slot speed for virtual cars
Malte Bayer <mbayer@neo-soft.org>
parents: 47
diff changeset
361 // map controller 1+2 to 5+6
51
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
362 if (controller == 4) tmp = ((getADC(CONTROLLER1_SPEED) / CONTROLLER_DIVISOR) & 0x0F);
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
363 if (controller == 5) tmp = ((getADC(CONTROLLER2_SPEED) / CONTROLLER_DIVISOR) & 0x0F);
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
364 if (controller == 4) trackchange = (PIN(CONTROLLER_PORT) & _BV(CONTROLLER1_SW));
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
365 if (controller == 5) trackchange = (PIN(CONTROLLER_PORT) & _BV(CONTROLLER2_SW));
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
366 } else {
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
367 // read speeds
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
368 if ((controller == 0) && (mode!=1)) tmp = ((getADC(CONTROLLER1_SPEED) / CONTROLLER_DIVISOR) & 0x0F);
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
369 if ((controller == 1) && (mode!=1)) tmp = ((getADC(CONTROLLER2_SPEED) / CONTROLLER_DIVISOR) & 0x0F);
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
370 if ((controller == 2) && (mode!=1)) tmp = ((getADC(CONTROLLER3_SPEED) / CONTROLLER_DIVISOR) & 0x0F);
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
371 if ((controller == 3) && (mode!=1)) tmp = ((getADC(CONTROLLER4_SPEED) / CONTROLLER_DIVISOR) & 0x0F);
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
372 if (controller == 0) trackchange = (PIN(CONTROLLER_PORT) & _BV(CONTROLLER1_SW));
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
373 if (controller == 1) trackchange = (PIN(CONTROLLER_PORT) & _BV(CONTROLLER2_SW));
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
374 if (controller == 2) trackchange = (PIN(CONTROLLER_PORT) & _BV(CONTROLLER3_SW));
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
375 if (controller == 3) trackchange = (PIN(CONTROLLER_PORT) & _BV(CONTROLLER4_SW));
52
6b26d7e3ecd0 simplified do_controller function
Malte Bayer <mbayer@neo-soft.org>
parents: 51
diff changeset
376
6b26d7e3ecd0 simplified do_controller function
Malte Bayer <mbayer@neo-soft.org>
parents: 51
diff changeset
377 if (controller < 4) {
6b26d7e3ecd0 simplified do_controller function
Malte Bayer <mbayer@neo-soft.org>
parents: 51
diff changeset
378 if (tmp < slot[controller].speedminimum) tmp = slot[controller].speedminimum;
6b26d7e3ecd0 simplified do_controller function
Malte Bayer <mbayer@neo-soft.org>
parents: 51
diff changeset
379 if ((mode == 2) && (tmp != 0)) { jumpstart(controller); tmp = 0; }
6b26d7e3ecd0 simplified do_controller function
Malte Bayer <mbayer@neo-soft.org>
parents: 51
diff changeset
380 if (tmp > slot[controller].speedlimit) tmp = slot[controller].speedlimit;
104
95b2c23cb973 pitlane checkout bug resolved, prepare for customized pitlane speedlimit
Malte Bayer <mbayer@neo-soft.org>
parents: 103
diff changeset
381 if (slot[controller].canrefuel && (tmp > slot[controller].pitlane_limit)) tmp = slot[controller].pitlane_limit;
52
6b26d7e3ecd0 simplified do_controller function
Malte Bayer <mbayer@neo-soft.org>
parents: 51
diff changeset
382 } else {
6b26d7e3ecd0 simplified do_controller function
Malte Bayer <mbayer@neo-soft.org>
parents: 51
diff changeset
383 if ((mode == 0) && (tmp < slot[controller].speedminimum)) tmp = slot[controller].speedminimum;
6b26d7e3ecd0 simplified do_controller function
Malte Bayer <mbayer@neo-soft.org>
parents: 51
diff changeset
384 if (tmp > slot[controller].speedlimit) tmp = slot[controller].speedlimit;
91
e0738355b517 bugfix: ghostcar assignment to slots 5 and 6
Malte Bayer <mbayer@neo-soft.org>
parents: 90
diff changeset
385 // //if ( (trackchange!=0) || (slot[controller].trackswitch)) tmp |= (1<<5);
52
6b26d7e3ecd0 simplified do_controller function
Malte Bayer <mbayer@neo-soft.org>
parents: 51
diff changeset
386 }
91
e0738355b517 bugfix: ghostcar assignment to slots 5 and 6
Malte Bayer <mbayer@neo-soft.org>
parents: 90
diff changeset
387 }
e0738355b517 bugfix: ghostcar assignment to slots 5 and 6
Malte Bayer <mbayer@neo-soft.org>
parents: 90
diff changeset
388 speed = tmp;
103
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
389 slot[controller].speed = tmp;
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
390 slot[controller].trackchange = (trackchange != 0);
91
e0738355b517 bugfix: ghostcar assignment to slots 5 and 6
Malte Bayer <mbayer@neo-soft.org>
parents: 90
diff changeset
391 tmp = tmp << 1;
e0738355b517 bugfix: ghostcar assignment to slots 5 and 6
Malte Bayer <mbayer@neo-soft.org>
parents: 90
diff changeset
392 if (trackchange != 0) tmp |= (1<<5);
59
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
393
48
5bba01aad0a6 memsave and implemented minimum slot speed for virtual cars
Malte Bayer <mbayer@neo-soft.org>
parents: 47
diff changeset
394
0
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
395 switch (controller) {
3
1a0ef40ef458 fixed track change keys
Malte Bayer <mbayer@neo-soft.org>
parents: 2
diff changeset
396 case 0:
51
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
397 if (trackchange != 0) {
37
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
398 if (mode == 0) LED(1,0);
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
399 } else if (mode == 0) LED(1,1);
3
1a0ef40ef458 fixed track change keys
Malte Bayer <mbayer@neo-soft.org>
parents: 2
diff changeset
400 break;
1a0ef40ef458 fixed track change keys
Malte Bayer <mbayer@neo-soft.org>
parents: 2
diff changeset
401 case 1:
51
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
402 if (trackchange != 0) {
37
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
403 if (mode == 0) LED(2,0);
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
404 } else if (mode == 0) LED(2,1);
3
1a0ef40ef458 fixed track change keys
Malte Bayer <mbayer@neo-soft.org>
parents: 2
diff changeset
405 break;
1a0ef40ef458 fixed track change keys
Malte Bayer <mbayer@neo-soft.org>
parents: 2
diff changeset
406 case 2:
51
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
407 if (trackchange != 0) {
37
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
408 if (mode == 0) LED(4,0);
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
409 } else if (mode == 0) LED(4,1);
3
1a0ef40ef458 fixed track change keys
Malte Bayer <mbayer@neo-soft.org>
parents: 2
diff changeset
410 break;
1a0ef40ef458 fixed track change keys
Malte Bayer <mbayer@neo-soft.org>
parents: 2
diff changeset
411 case 3:
51
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
412 if (trackchange != 0) {
37
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
413 if (mode == 0) LED(5,0);
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
414 } else if (mode == 0) LED(5,1);
3
1a0ef40ef458 fixed track change keys
Malte Bayer <mbayer@neo-soft.org>
parents: 2
diff changeset
415 break;
52
6b26d7e3ecd0 simplified do_controller function
Malte Bayer <mbayer@neo-soft.org>
parents: 51
diff changeset
416 }
48
5bba01aad0a6 memsave and implemented minimum slot speed for virtual cars
Malte Bayer <mbayer@neo-soft.org>
parents: 47
diff changeset
417
34
d12d095e3282 some code cleanup
Malte Bayer <mbayer@neo-soft.org>
parents: 33
diff changeset
418 tmp |= (0b1000000000 | (controller << 6));
60
bfc2f2d6913c added refueling mechanism by stopping the car
Malte Bayer <mbayer@neo-soft.org>
parents: 59
diff changeset
419 // FUEL BIT GETS SET WHEN FUEL == 0,
bfc2f2d6913c added refueling mechanism by stopping the car
Malte Bayer <mbayer@neo-soft.org>
parents: 59
diff changeset
420 // THIS REQUIRES PHYSICAL CAR FUEL LEVEL SET TO ZERO BEFORE!
92
c57f43f25a5c fix: ghostcars unlimited fuel
Malte Bayer <mbayer@neo-soft.org>
parents: 91
diff changeset
421 if ( ((PIN(SW_FUEL_PORT) & _BV(SW_FUEL)) != 0) | (slot[controller].fuel == 0)) tmp |= 1;
59
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
422 if (insert_queue(tmp, 9)) {
92
c57f43f25a5c fix: ghostcars unlimited fuel
Malte Bayer <mbayer@neo-soft.org>
parents: 91
diff changeset
423 if ((fuel_enabled) && (slot[controller].unlimitedfuel == 0)) {
116
c2fc650cc48f added option to disable freeslot fuel logic
Malte Bayer <mbayer@neo-soft.org>
parents: 114
diff changeset
424 if ((speed != 0) && (fuel_divisor > 0)) {
73
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
425 // do the fuel calculation, regardless if fuel logic active or not
75
0b38de31ad5d made fuel divisor configurable
Malte Bayer <mbayer@neo-soft.org>
parents: 73
diff changeset
426 tmp = (uint8_t)(((slot[controller].accel * speed) + 1) / fuel_divisor);
73
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
427 if (tmp == 0) tmp = 1;
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
428 if (slot[controller].fuel > 0) {
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
429 // enough fuel left to decrement?
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
430 if (slot[controller].fuel > tmp) {
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
431 slot[controller].fuel -= tmp; // decrement fuel level
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
432 } else slot[controller].fuel = 0;
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
433 }
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
434 } else if (slot[controller].canrefuel) {
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
435 // increase fuel by 5%/sec, this equals by adding 50 to the counter
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
436 slot[controller].fuel += 50;
123
ec623e5fcbca firmware fix: only fuel to 100% once in pitlane
Malte Bayer <mbayer@neo-soft.org>
parents: 116
diff changeset
437 if (slot[controller].fuel > FUEL_FULL) {
ec623e5fcbca firmware fix: only fuel to 100% once in pitlane
Malte Bayer <mbayer@neo-soft.org>
parents: 116
diff changeset
438 slot[controller].fuel = FUEL_FULL;
ec623e5fcbca firmware fix: only fuel to 100% once in pitlane
Malte Bayer <mbayer@neo-soft.org>
parents: 116
diff changeset
439 slot[controller].canrefuel = 0;
ec623e5fcbca firmware fix: only fuel to 100% once in pitlane
Malte Bayer <mbayer@neo-soft.org>
parents: 116
diff changeset
440 }
59
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
441 }
73
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
442 return 1;
59
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
443 }
75
0b38de31ad5d made fuel divisor configurable
Malte Bayer <mbayer@neo-soft.org>
parents: 73
diff changeset
444 return 1;
59
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
445 } else return 0;
0
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
446 }
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
447
4
58529e14c45c implemented rs232 program word injection
Malte Bayer <mbayer@neo-soft.org>
parents: 3
diff changeset
448 uint8_t mirror( uint8_t n ) {
0
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
449 n = ((n >> 1) & 0x55) | ((n << 1) & 0xaa);
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
450 n = ((n >> 2) & 0x33) | ((n << 2) & 0xcc);
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
451 n = ((n >> 4) & 0x0f) | ((n << 4) & 0xf0);
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
452 return n;
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
453 }
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
454
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
455 int do_program(uint8_t controller, uint8_t command, uint8_t parameter) {
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
456 // send program data packet
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
457 uint16_t tmp;
4
58529e14c45c implemented rs232 program word injection
Malte Bayer <mbayer@neo-soft.org>
parents: 3
diff changeset
458 parameter = mirror(parameter);
58529e14c45c implemented rs232 program word injection
Malte Bayer <mbayer@neo-soft.org>
parents: 3
diff changeset
459 controller = mirror(controller);
58529e14c45c implemented rs232 program word injection
Malte Bayer <mbayer@neo-soft.org>
parents: 3
diff changeset
460 command = mirror(command);
58529e14c45c implemented rs232 program word injection
Malte Bayer <mbayer@neo-soft.org>
parents: 3
diff changeset
461 tmp = 0b1000000000000 | (parameter << 4) | command | (controller >> 5);
0
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
462 return insert_queue(tmp, 12);
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
463 }
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
464
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
465 int do_active(void) {
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
466 // send controller active data packet
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
467 uint16_t tmp = 0b10000000;
51
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
468 if ( (PIN(SW_PACECAR_PORT) & _BV(SW_PACECAR)) == 0 ) {
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
469 // map controller 1+2 to 5+6
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
470 if ((getADC(CONTROLLER1_SPEED) / CONTROLLER_DIVISOR) > 0) tmp |= 0b10000101;
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
471 if ((getADC(CONTROLLER2_SPEED) / CONTROLLER_DIVISOR) > 0) tmp |= 0b10000011;
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
472 } else {
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
473 if ((slot[0].speedminimum != 0) || ((getADC(CONTROLLER1_SPEED) / CONTROLLER_DIVISOR) > 0)) tmp |= 0b11000001;
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
474 if ((slot[1].speedminimum != 0) || ((getADC(CONTROLLER2_SPEED) / CONTROLLER_DIVISOR) > 0)) tmp |= 0b10100001;
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
475 if ((slot[2].speedminimum != 0) || ((getADC(CONTROLLER3_SPEED) / CONTROLLER_DIVISOR) > 0)) tmp |= 0b10010001;
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
476 if ((slot[3].speedminimum != 0) || ((getADC(CONTROLLER4_SPEED) / CONTROLLER_DIVISOR) > 0)) tmp |= 0b10001001;
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
477 if (slot[4].speedminimum != 0) tmp |= 0b10000101;
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
478 if (slot[5].speedminimum != 0) tmp |= 0b10000011;
ec9e8cc27012 car id setting for slot 5+6 working via pressing pacecar button
Malte Bayer <mbayer@neo-soft.org>
parents: 49
diff changeset
479 }
4
58529e14c45c implemented rs232 program word injection
Malte Bayer <mbayer@neo-soft.org>
parents: 3
diff changeset
480 // todo: wenn Daten enpfangen wurden hier eine Quittierung senden anstatt dem Active Word
0
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
481
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
482 return insert_queue(tmp, 7);
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
483 }
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
484
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
485 int do_pace_ghost(void) {
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
486 // send ghost and pacecar data packet
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
487 // todo: at the moment, both disabled!
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
488 uint16_t tmp = 0b1111100000;
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
489 if ( (PIN(SW_FUEL_PORT) & _BV(SW_FUEL)) != 0) tmp |= 1; // benzinstand aktiv - tankmodusschalter
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
490 // todo: PC, NH, TK, (KFR, FR)
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
491
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
492 return insert_queue(tmp, 9);
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
493 }
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
494
53
f659e6faf18f moved ISRs from main.c to interrupts.c
Malte Bayer <mbayer@neo-soft.org>
parents: 52
diff changeset
495 #include "interrupts.c"
7
f4e250d5402b fixes, bound lap counter reset to race start button
Malte Bayer <mbayer@neo-soft.org>
parents: 6
diff changeset
496
36
aea84f4f5a12 feature: program a specific controller speed limit without changing the car's acceleration
Malte Bayer <mbayer@neo-soft.org>
parents: 35
diff changeset
497 void reset_vars(void) {
aea84f4f5a12 feature: program a specific controller speed limit without changing the car's acceleration
Malte Bayer <mbayer@neo-soft.org>
parents: 35
diff changeset
498 uint8_t i;
aea84f4f5a12 feature: program a specific controller speed limit without changing the car's acceleration
Malte Bayer <mbayer@neo-soft.org>
parents: 35
diff changeset
499 for (i=0; i<MAX_SLOTS; i++) {
48
5bba01aad0a6 memsave and implemented minimum slot speed for virtual cars
Malte Bayer <mbayer@neo-soft.org>
parents: 47
diff changeset
500 slot[i].speedlimit = 15;
114
313aad7435a8 fix #688
Malte Bayer <mbayer@neo-soft.org>
parents: 105
diff changeset
501 //slot[i].speedminimum = 0; // issue #688
48
5bba01aad0a6 memsave and implemented minimum slot speed for virtual cars
Malte Bayer <mbayer@neo-soft.org>
parents: 47
diff changeset
502 slot[i].trackswitch = 0;
59
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
503 slot[i].fuel = FUEL_FULL;
46
d200e3d8a550 corrected lap times, packed data struct for each slotcar
Malte Bayer <mbayer@neo-soft.org>
parents: 45
diff changeset
504 slot[i].jumpstart_time = 0;
47
34ac9f92bc1e implemented lap counter, doesnt count first sensor touch
Malte Bayer <mbayer@neo-soft.org>
parents: 46
diff changeset
505 slot[i].laps = 0;
59
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
506 slot[i].seccnt = 0;
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
507 slot[i].accel = 15; // full acceleration per default - TODO
73
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
508 slot[i].canrefuel = 0;
104
95b2c23cb973 pitlane checkout bug resolved, prepare for customized pitlane speedlimit
Malte Bayer <mbayer@neo-soft.org>
parents: 103
diff changeset
509 slot[i].pitlane_limit = PITLANE_SPEEDLIMIT;
92
c57f43f25a5c fix: ghostcars unlimited fuel
Malte Bayer <mbayer@neo-soft.org>
parents: 91
diff changeset
510 if (i<4) slot[i].unlimitedfuel = 0; else slot[i].unlimitedfuel = 1;
77
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
511 slot[i].lap_time_start.value = 0;
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
512 slot[i].lap_time.value = 0;
37
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
513 }
46
d200e3d8a550 corrected lap times, packed data struct for each slotcar
Malte Bayer <mbayer@neo-soft.org>
parents: 45
diff changeset
514 sysclk.value = 0;
37
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
515 }
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
516
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
517 void countdown_progress(void) {
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
518 // decrement COUNTDOWN_LOOPS
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
519 if (countdown_loops>0) {
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
520 countdown_loops--;
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
521 } else {
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
522 countdown--;
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
523 countdown_loops = COUNTDOWN_DELAY;
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
524 }
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
525 switch (countdown) {
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
526 case 5: LED(1, 1); break;
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
527 case 4: LED(2, 1); break;
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
528 case 3: LED(3, 1); break;
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
529 case 2: LED(4, 1); break;
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
530 case 1: LED(5, 1); break;
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
531 case 0: { // RACE START!
46
d200e3d8a550 corrected lap times, packed data struct for each slotcar
Malte Bayer <mbayer@neo-soft.org>
parents: 45
diff changeset
532 sysclk.value = 0;
37
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
533 LEDS_OFF();
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
534 LED(3, 1);
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
535 mode = 3;
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
536 } break;
36
aea84f4f5a12 feature: program a specific controller speed limit without changing the car's acceleration
Malte Bayer <mbayer@neo-soft.org>
parents: 35
diff changeset
537 }
aea84f4f5a12 feature: program a specific controller speed limit without changing the car's acceleration
Malte Bayer <mbayer@neo-soft.org>
parents: 35
diff changeset
538 }
aea84f4f5a12 feature: program a specific controller speed limit without changing the car's acceleration
Malte Bayer <mbayer@neo-soft.org>
parents: 35
diff changeset
539
41
9857c18c5e64 implemented car detection to cu
Malte Bayer <mbayer@neo-soft.org>
parents: 37
diff changeset
540 void check_cars(void) {
46
d200e3d8a550 corrected lap times, packed data struct for each slotcar
Malte Bayer <mbayer@neo-soft.org>
parents: 45
diff changeset
541 u32 clk, diff;
d200e3d8a550 corrected lap times, packed data struct for each slotcar
Malte Bayer <mbayer@neo-soft.org>
parents: 45
diff changeset
542 clk.value = sysclk.value; // freeze system clock time
44
4f4326794ba4 implemented lap time, there is some bug in 32bit substraction yet
Malte Bayer <mbayer@neo-soft.org>
parents: 43
diff changeset
543
41
9857c18c5e64 implemented car detection to cu
Malte Bayer <mbayer@neo-soft.org>
parents: 37
diff changeset
544 if (car0 != car0_state) {
9857c18c5e64 implemented car detection to cu
Malte Bayer <mbayer@neo-soft.org>
parents: 37
diff changeset
545 car0_state = car0;
9857c18c5e64 implemented car detection to cu
Malte Bayer <mbayer@neo-soft.org>
parents: 37
diff changeset
546 if (car0_state != 0) {
46
d200e3d8a550 corrected lap times, packed data struct for each slotcar
Malte Bayer <mbayer@neo-soft.org>
parents: 45
diff changeset
547 diff.value = clk.value - slot[car0-1].lap_time_start.value;
d200e3d8a550 corrected lap times, packed data struct for each slotcar
Malte Bayer <mbayer@neo-soft.org>
parents: 45
diff changeset
548 if ( diff.value > 3000 ) { // minimum 1.5 second for 1 lap!
47
34ac9f92bc1e implemented lap counter, doesnt count first sensor touch
Malte Bayer <mbayer@neo-soft.org>
parents: 46
diff changeset
549 if (slot[car0-1].lap_time_start.value != 0) {
34ac9f92bc1e implemented lap counter, doesnt count first sensor touch
Malte Bayer <mbayer@neo-soft.org>
parents: 46
diff changeset
550 slot[car0-1].lap_time.value = diff.value;
34ac9f92bc1e implemented lap counter, doesnt count first sensor touch
Malte Bayer <mbayer@neo-soft.org>
parents: 46
diff changeset
551 slot[car0-1].laps++;
77
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
552 RS232_puts("L:3:"); // 3 = BB
47
34ac9f92bc1e implemented lap counter, doesnt count first sensor touch
Malte Bayer <mbayer@neo-soft.org>
parents: 46
diff changeset
553 itoa(slot[car0-1].laps, s, 16);
34ac9f92bc1e implemented lap counter, doesnt count first sensor touch
Malte Bayer <mbayer@neo-soft.org>
parents: 46
diff changeset
554 RS232_puts(s);
34ac9f92bc1e implemented lap counter, doesnt count first sensor touch
Malte Bayer <mbayer@neo-soft.org>
parents: 46
diff changeset
555 RS232_putc(':');
34ac9f92bc1e implemented lap counter, doesnt count first sensor touch
Malte Bayer <mbayer@neo-soft.org>
parents: 46
diff changeset
556 RS232_putc('0'+car0_state);
34ac9f92bc1e implemented lap counter, doesnt count first sensor touch
Malte Bayer <mbayer@neo-soft.org>
parents: 46
diff changeset
557 RS232_putc(':');
34ac9f92bc1e implemented lap counter, doesnt count first sensor touch
Malte Bayer <mbayer@neo-soft.org>
parents: 46
diff changeset
558 ultoa(diff.value, s, 16);
34ac9f92bc1e implemented lap counter, doesnt count first sensor touch
Malte Bayer <mbayer@neo-soft.org>
parents: 46
diff changeset
559 RS232_puts(s);
77
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
560 RS232_putc(':');
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
561 ultoa(clk.value, s, 16);
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
562 RS232_puts(s);
47
34ac9f92bc1e implemented lap counter, doesnt count first sensor touch
Malte Bayer <mbayer@neo-soft.org>
parents: 46
diff changeset
563 RS232_putc('\n');
34ac9f92bc1e implemented lap counter, doesnt count first sensor touch
Malte Bayer <mbayer@neo-soft.org>
parents: 46
diff changeset
564 }
46
d200e3d8a550 corrected lap times, packed data struct for each slotcar
Malte Bayer <mbayer@neo-soft.org>
parents: 45
diff changeset
565 slot[car0-1].lap_time_start.value = clk.value;
44
4f4326794ba4 implemented lap time, there is some bug in 32bit substraction yet
Malte Bayer <mbayer@neo-soft.org>
parents: 43
diff changeset
566 }
41
9857c18c5e64 implemented car detection to cu
Malte Bayer <mbayer@neo-soft.org>
parents: 37
diff changeset
567 }
9857c18c5e64 implemented car detection to cu
Malte Bayer <mbayer@neo-soft.org>
parents: 37
diff changeset
568 } car0 = 0;
9857c18c5e64 implemented car detection to cu
Malte Bayer <mbayer@neo-soft.org>
parents: 37
diff changeset
569
83
c8e7a69a318a added pitlane speedlimit
Malte Bayer <mbayer@neo-soft.org>
parents: 81
diff changeset
570
41
9857c18c5e64 implemented car detection to cu
Malte Bayer <mbayer@neo-soft.org>
parents: 37
diff changeset
571 if (car1 != car1_state) {
9857c18c5e64 implemented car detection to cu
Malte Bayer <mbayer@neo-soft.org>
parents: 37
diff changeset
572 car1_state = car1;
9857c18c5e64 implemented car detection to cu
Malte Bayer <mbayer@neo-soft.org>
parents: 37
diff changeset
573 if (car1_state != 0) {
46
d200e3d8a550 corrected lap times, packed data struct for each slotcar
Malte Bayer <mbayer@neo-soft.org>
parents: 45
diff changeset
574 diff.value = clk.value - slot[car1-1].lap_time_start.value;
d200e3d8a550 corrected lap times, packed data struct for each slotcar
Malte Bayer <mbayer@neo-soft.org>
parents: 45
diff changeset
575 if ( diff.value > 3000 ) { // minimum 1.5 second for 1 lap!
47
34ac9f92bc1e implemented lap counter, doesnt count first sensor touch
Malte Bayer <mbayer@neo-soft.org>
parents: 46
diff changeset
576 if (slot[car1-1].lap_time_start.value != 0) {
34ac9f92bc1e implemented lap counter, doesnt count first sensor touch
Malte Bayer <mbayer@neo-soft.org>
parents: 46
diff changeset
577 slot[car1-1].lap_time.value = diff.value;
34ac9f92bc1e implemented lap counter, doesnt count first sensor touch
Malte Bayer <mbayer@neo-soft.org>
parents: 46
diff changeset
578 slot[car1-1].laps++;
77
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
579 RS232_puts("L:1:"); // 1 = AA
47
34ac9f92bc1e implemented lap counter, doesnt count first sensor touch
Malte Bayer <mbayer@neo-soft.org>
parents: 46
diff changeset
580 itoa(slot[car1-1].laps, s, 16);
34ac9f92bc1e implemented lap counter, doesnt count first sensor touch
Malte Bayer <mbayer@neo-soft.org>
parents: 46
diff changeset
581 RS232_puts(s);
34ac9f92bc1e implemented lap counter, doesnt count first sensor touch
Malte Bayer <mbayer@neo-soft.org>
parents: 46
diff changeset
582 RS232_putc(':');
34ac9f92bc1e implemented lap counter, doesnt count first sensor touch
Malte Bayer <mbayer@neo-soft.org>
parents: 46
diff changeset
583 RS232_putc('0'+car1_state);
34ac9f92bc1e implemented lap counter, doesnt count first sensor touch
Malte Bayer <mbayer@neo-soft.org>
parents: 46
diff changeset
584 RS232_putc(':');
34ac9f92bc1e implemented lap counter, doesnt count first sensor touch
Malte Bayer <mbayer@neo-soft.org>
parents: 46
diff changeset
585 ultoa(diff.value, s, 16);
34ac9f92bc1e implemented lap counter, doesnt count first sensor touch
Malte Bayer <mbayer@neo-soft.org>
parents: 46
diff changeset
586 RS232_puts(s);
77
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
587 RS232_putc(':');
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
588 ultoa(clk.value, s, 16);
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
589 RS232_puts(s);
47
34ac9f92bc1e implemented lap counter, doesnt count first sensor touch
Malte Bayer <mbayer@neo-soft.org>
parents: 46
diff changeset
590 RS232_putc('\n');
34ac9f92bc1e implemented lap counter, doesnt count first sensor touch
Malte Bayer <mbayer@neo-soft.org>
parents: 46
diff changeset
591 }
46
d200e3d8a550 corrected lap times, packed data struct for each slotcar
Malte Bayer <mbayer@neo-soft.org>
parents: 45
diff changeset
592 slot[car1-1].lap_time_start.value = clk.value;
44
4f4326794ba4 implemented lap time, there is some bug in 32bit substraction yet
Malte Bayer <mbayer@neo-soft.org>
parents: 43
diff changeset
593 }
41
9857c18c5e64 implemented car detection to cu
Malte Bayer <mbayer@neo-soft.org>
parents: 37
diff changeset
594 }
9857c18c5e64 implemented car detection to cu
Malte Bayer <mbayer@neo-soft.org>
parents: 37
diff changeset
595 } car1 = 0;
83
c8e7a69a318a added pitlane speedlimit
Malte Bayer <mbayer@neo-soft.org>
parents: 81
diff changeset
596
41
9857c18c5e64 implemented car detection to cu
Malte Bayer <mbayer@neo-soft.org>
parents: 37
diff changeset
597 }
9857c18c5e64 implemented car detection to cu
Malte Bayer <mbayer@neo-soft.org>
parents: 37
diff changeset
598
59
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
599 void slot_liveinfo(uint8_t idx) {
73
ec888cfa024e bugfix: responsewire bitmap, todo: trackswitch response
Malte Bayer <mbayer@neo-soft.org>
parents: 69
diff changeset
600 if (liveinfo == 0) return;
59
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
601
103
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
602 if (liveinfo == 1) {
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
603 // increment packet counter, if == 10 output some live info
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
604 if (slot[idx].seccnt == 10) {
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
605 // output current fuel status
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
606 RS232_putc('F');
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
607 RS232_putc(':');
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
608 RS232_putc(idx + '0');
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
609 RS232_putc(':');
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
610 itoa(slot[idx].fuel, s, 16);
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
611 RS232_puts(s);
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
612 RS232_putc(':');
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
613 ultoa(sysclk.value, s, 16);
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
614 RS232_puts(s);
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
615 RS232_putc('\n');
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
616 slot[idx].seccnt = 0;
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
617 } else slot[idx].seccnt++;
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
618 } else if ( (liveinfo - 2) == idx ) {
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
619 // output controller status LIVEINFO-2 for remote learning
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
620 RS232_putc('L');
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
621 RS232_putc('N');
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
622 RS232_putc(':');
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
623 itoa(slot[idx].speed, s, 16);
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
624 RS232_puts(s);
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
625 RS232_putc(':');
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
626 if (slot[idx].trackchange)
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
627 RS232_putc('X');
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
628 RS232_putc('\n');
52fd4283cd2c added learn and teach modes for intelligent ghostcars
Malte Bayer <mbayer@neo-soft.org>
parents: 92
diff changeset
629 }
59
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
630 }
0
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
631
90
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
632
0
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
633 int main(void)
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
634 {
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
635 uint8_t packet_index = 1;
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
636
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
637 init_hardware();
36
aea84f4f5a12 feature: program a specific controller speed limit without changing the car's acceleration
Malte Bayer <mbayer@neo-soft.org>
parents: 35
diff changeset
638 reset_vars();
37
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
639 LED(3, 1); // enable middle led == idle mode
0
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
640
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
641 // switch on rails power
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
642 RAIL_POWER_PORT |= _BV(RAIL_POWER);
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
643
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
644 while (1) {
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
645 // check for short circuit on the rails
2
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
646 check_rails_shortcut();
41
9857c18c5e64 implemented car detection to cu
Malte Bayer <mbayer@neo-soft.org>
parents: 37
diff changeset
647 check_cars();
89
4b5b4c7ba03d added panic mode, shortcircuit can be resumed now
Malte Bayer <mbayer@neo-soft.org>
parents: 83
diff changeset
648 while (mode == 0xff) panic_mode();
0
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
649
33
c261350bb394 fixed shortcut detection
Malte Bayer <mbayer@neo-soft.org>
parents: 11
diff changeset
650 if (response_len > 0) {
c261350bb394 fixed shortcut detection
Malte Bayer <mbayer@neo-soft.org>
parents: 11
diff changeset
651 itoa(response, s, 2);
c261350bb394 fixed shortcut detection
Malte Bayer <mbayer@neo-soft.org>
parents: 11
diff changeset
652 response_len = 0;
77
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
653 //RS232_puts("ANSWER RX: ");
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
654 //RS232_puts(s);
cede78304992 finished live CLI, BB firmware improvements and fixes
Malte Bayer <mbayer@neo-soft.org>
parents: 75
diff changeset
655 //RS232_putc('\n');
33
c261350bb394 fixed shortcut detection
Malte Bayer <mbayer@neo-soft.org>
parents: 11
diff changeset
656 }
c261350bb394 fixed shortcut detection
Malte Bayer <mbayer@neo-soft.org>
parents: 11
diff changeset
657
c261350bb394 fixed shortcut detection
Malte Bayer <mbayer@neo-soft.org>
parents: 11
diff changeset
658
7
f4e250d5402b fixes, bound lap counter reset to race start button
Malte Bayer <mbayer@neo-soft.org>
parents: 6
diff changeset
659 // read in button presses
8
84249ab5d691 debugging stuff
Malte Bayer <mbayer@neo-soft.org>
parents: 7
diff changeset
660 btn_start = (PIN(SW_START_PORT) & _BV(SW_START));
84249ab5d691 debugging stuff
Malte Bayer <mbayer@neo-soft.org>
parents: 7
diff changeset
661 if (old_start != btn_start) {
84249ab5d691 debugging stuff
Malte Bayer <mbayer@neo-soft.org>
parents: 7
diff changeset
662 // start button changed
90
7ed95dbadf1f added remote start button press
Malte Bayer <mbayer@neo-soft.org>
parents: 89
diff changeset
663 if (btn_start == 0) startbutton();
37
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
664 old_start = btn_start;
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
665 }
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
666
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
667 if (mode==3) {
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
668 // RACE START!
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
669 // issue reset command to lap counter
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
670 mode = 0;
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
671 RS232_puts_p(racestart);
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
672 program_command = 6;
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
673 program_parameter = 9;
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
674 program_id = 0;
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
675 program_count = 1;
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
676 LAP_COUNTER_PORT |= _BV(LAP_COUNTER);
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
677 // TODO: beep long
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
678 _delay_us(50);
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
679 LAP_COUNTER_PORT &= ~_BV(LAP_COUNTER);
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
680 }
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
681
7
f4e250d5402b fixes, bound lap counter reset to race start button
Malte Bayer <mbayer@neo-soft.org>
parents: 6
diff changeset
682
2
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
683 switch (packet_index) {
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
684 case 1:
4
58529e14c45c implemented rs232 program word injection
Malte Bayer <mbayer@neo-soft.org>
parents: 3
diff changeset
685 if (program_count > 0) {
58529e14c45c implemented rs232 program word injection
Malte Bayer <mbayer@neo-soft.org>
parents: 3
diff changeset
686 // command in queue
58529e14c45c implemented rs232 program word injection
Malte Bayer <mbayer@neo-soft.org>
parents: 3
diff changeset
687 if (do_program(program_id, program_command, program_parameter)) {
58529e14c45c implemented rs232 program word injection
Malte Bayer <mbayer@neo-soft.org>
parents: 3
diff changeset
688 packet_index++;
58529e14c45c implemented rs232 program word injection
Malte Bayer <mbayer@neo-soft.org>
parents: 3
diff changeset
689 program_count--;
58529e14c45c implemented rs232 program word injection
Malte Bayer <mbayer@neo-soft.org>
parents: 3
diff changeset
690 }
58529e14c45c implemented rs232 program word injection
Malte Bayer <mbayer@neo-soft.org>
parents: 3
diff changeset
691 } else {
58529e14c45c implemented rs232 program word injection
Malte Bayer <mbayer@neo-soft.org>
parents: 3
diff changeset
692 // output idle command
11
69c2a1408619 done code for sniffing the rails
Malte Bayer <mbayer@neo-soft.org>
parents: 10
diff changeset
693 if (do_program(7, 19, 0)) packet_index++; // reset
8
84249ab5d691 debugging stuff
Malte Bayer <mbayer@neo-soft.org>
parents: 7
diff changeset
694 //if (do_program(7, 20, 15)) packet_index++; // reset / pitstop detect
11
69c2a1408619 done code for sniffing the rails
Malte Bayer <mbayer@neo-soft.org>
parents: 10
diff changeset
695 //if (insert_queue(0, 0)) packet_index++; // null command
4
58529e14c45c implemented rs232 program word injection
Malte Bayer <mbayer@neo-soft.org>
parents: 3
diff changeset
696 }
37
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
697
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
698 if ( (packet_index>1) && (mode == 2) ) countdown_progress();
136a79772098 implemented race prepare phase, countdown and jumpstart detection
Malte Bayer <mbayer@neo-soft.org>
parents: 36
diff changeset
699
2
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
700 break;
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
701 case 2:
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
702 if (do_pace_ghost()) packet_index++;
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
703 break;
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
704 case 3:
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
705 if (do_active()) packet_index++;
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
706 break;
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
707 case 4:
59
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
708 if (do_controller(0)) { packet_index++;
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
709 slot_liveinfo(0);
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
710 }
2
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
711 break;
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
712 case 5:
59
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
713 if (do_controller(4)) { packet_index++;
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
714 slot_liveinfo(4);
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
715 }
2
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
716 break;
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
717 case 6:
59
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
718 if (do_controller(1)) { packet_index++;
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
719 slot_liveinfo(1);
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
720 }
2
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
721 break;
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
722 case 7:
59
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
723 if (do_controller(5)) { packet_index++;
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
724 slot_liveinfo(5);
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
725 }
2
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
726 break;
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
727 case 8:
59
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
728 if (do_controller(2)) { packet_index++;
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
729 slot_liveinfo(2);
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
730 }
2
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
731 break;
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
732 case 9:
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
733 if (do_active()) packet_index++;
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
734 break;
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
735 case 10:
59
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
736 if (do_controller(3)) { packet_index = 1;
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
737 slot_liveinfo(3);
361bc4602cf7 added fuel management to blackbox, cars dont get stuck at the moment
Malte Bayer <mbayer@neo-soft.org>
parents: 53
diff changeset
738 }
2
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
739 // last packet, so reset packet index
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
740 break;
6c59b4293fa9 finished: rails short circuit check
Malte Bayer <mbayer@neo-soft.org>
parents: 0
diff changeset
741 }
0
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
742
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
743
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
744 } // main loop end
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
745 };
9b7de464f0ea initial commit - controller1 working
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
746

mercurial