Revision 213
fixed cardbox code for new board, updated tooltron.py for new cardbox
main.c | ||
---|---|---|
23 | 23 |
|
24 | 24 |
#include <tooltron.h> |
25 | 25 |
#include "timer.h" |
26 |
#include "packet.h" |
|
26 | 27 |
|
27 | 28 |
/***** Keypad definitions ******/ |
28 | 29 |
/** @brief ROW1 of the keypad */ |
... | ... | |
47 | 48 |
#define LED_RED (_BV(PC5)) |
48 | 49 |
#define LED_YELLOW (_BV(PC4)) |
49 | 50 |
#define LED_GREEN (_BV(PC3)) |
51 |
#define LED_PORT PORTC |
|
50 | 52 |
|
51 | 53 |
#define ADDR 2 |
52 | 54 |
|
... | ... | |
58 | 60 |
|
59 | 61 |
DDRC |= LED_RED | LED_YELLOW | LED_GREEN; |
60 | 62 |
|
61 |
PORTC |= LED_RED | LED_GREEN | LED_YELLOW;
|
|
63 |
LED_PORT |= LED_RED | LED_GREEN | LED_YELLOW;
|
|
62 | 64 |
|
63 | 65 |
return; |
64 | 66 |
} |
... | ... | |
167 | 169 |
uint8_t c; |
168 | 170 |
state_t state = req; |
169 | 171 |
|
170 |
rs485_init(BAUD9600); |
|
171 |
init_pins(); |
|
172 |
init_timer(); |
|
173 |
sei(); |
|
172 |
rs485_init(BAUD9600);
|
|
173 |
init_pins();
|
|
174 |
init_timer();
|
|
175 |
sei();
|
|
174 | 176 |
|
175 |
while(1) { |
|
177 |
while(1) {
|
|
176 | 178 |
|
177 |
switch(state) { |
|
178 |
case req: |
|
179 |
toggle_led(LED_RED|LED_GREEN|LED_YELLOW, OFF); |
|
179 |
while(1) { |
|
180 |
toggle_led(LED_GREEN, ON); |
|
181 |
send_packet(TT_TIMEOUT, ADDR); |
|
182 |
_delay_ms(100); |
|
183 |
toggle_led(LED_GREEN, OFF); |
|
184 |
_delay_ms(100); |
|
185 |
} |
|
186 |
|
|
187 |
switch(state) { |
|
188 |
case req: |
|
189 |
toggle_led(LED_RED|LED_GREEN|LED_YELLOW, OFF); |
|
180 | 190 |
|
181 |
// Wait for a packet
|
|
182 |
resp = parse_packet(mbuf, ADDR);
|
|
191 |
// Wait for a packet
|
|
192 |
resp = parse_packet(mbuf, ADDR);
|
|
183 | 193 |
|
184 |
if (resp == TT_GET_KEY) { |
|
185 |
toggle_led(LED_YELLOW, ON); |
|
186 |
reset_timer(); |
|
187 |
reset_timeout_flag(); |
|
188 |
start_timer(); |
|
189 |
c = ' '; |
|
190 |
state = press; |
|
191 |
} |
|
192 |
break; |
|
193 |
case press: |
|
194 |
if (resp == TT_GET_KEY) { |
|
195 |
toggle_led(LED_YELLOW, ON); |
|
196 |
reset_timer(); |
|
197 |
reset_timeout_flag(); |
|
198 |
start_timer(); |
|
199 |
c = ' '; |
|
200 |
state = press; |
|
201 |
} |
|
202 |
else if(resp != TT_BAD){ |
|
203 |
toggle_led(LED_RED, ON); |
|
204 |
while(1); |
|
205 |
} |
|
206 |
break; |
|
207 |
case press: |
|
194 | 208 |
c = get_button(); |
195 |
|
|
209 |
|
|
196 | 210 |
if (seconds > TIMEOUT_SECONDS) { |
197 | 211 |
set_timeout_flag(); |
198 | 212 |
state = send; |
... | ... | |
201 | 215 |
} |
202 | 216 |
|
203 | 217 |
break; |
204 |
case send: |
|
205 |
if (timeoutflag == 1) {
|
|
218 |
case send:
|
|
219 |
if (get_timeout_flag() == 1) {
|
|
206 | 220 |
send_packet(TT_TIMEOUT, ADDR); |
207 | 221 |
state = req; |
208 | 222 |
} else { |
... | ... | |
211 | 225 |
|
212 | 226 |
state = rsp; |
213 | 227 |
break; |
214 |
case rsp: |
|
215 |
resp = parse_packet(mbuf, ADDR);
|
|
228 |
case rsp:
|
|
229 |
resp = parse_packet(mbuf, ADDR);
|
|
216 | 230 |
|
217 |
if (resp == TT_ACK |
|
231 |
if (resp == TT_ACK) { |
|
232 |
toggle_led(LED_GREEN, ON); |
|
233 |
} |
|
234 |
else { |
|
235 |
toggle_led(LED_RED, ON); |
|
236 |
} |
|
237 |
_delay_ms(1000); |
|
238 |
toggle_led(LED_RED, OFF); |
|
239 |
toggle_led(LED_GREEN, ON); |
|
240 |
state = req; |
|
241 |
break; |
|
242 |
} |
|
218 | 243 |
|
244 |
} |
|
219 | 245 |
|
220 |
|
|
221 |
|
|
222 |
|
|
223 |
if (timeout_flag == 0) { |
|
224 |
//respond with key pressed |
|
225 |
uart_send_byte(c); |
|
226 |
|
|
227 |
//wait for response |
|
228 |
c=0; |
|
229 |
reset_timeout_flag(); |
|
230 |
reset_timer(); |
|
231 |
while((uart_get_byte(&c) < 0) && (seconds < TIMEOUT_SECONDS)); |
|
232 |
|
|
233 |
PORTC |= LED_YELLOW; |
|
234 |
|
|
235 |
switch(c) |
|
236 |
{ |
|
237 |
case TT_ACK: |
|
238 |
PORTC &= ~LED_GREEN; |
|
239 |
break; |
|
240 |
|
|
241 |
case TT_NACK: |
|
242 |
PORTC &= ~LED_RED; |
|
243 |
break; |
|
244 |
|
|
245 |
case TT_GET_KEY: //this means the states are messed up |
|
246 |
PORTC &= (~LED_RED & ~LED_YELLOW & ~LED_GREEN); |
|
247 |
break; |
|
248 |
|
|
249 |
case 0: //timeout |
|
250 |
PORTC &= (~LED_RED & ~LED_YELLOW); |
|
251 |
break; |
|
252 |
|
|
253 |
default: //bad packet |
|
254 |
PORTC &= (~LED_RED & ~LED_GREEN); |
|
255 |
break; |
|
256 |
} |
|
257 |
|
|
258 |
stop_timer(); |
|
259 |
_delay_ms(1000); |
|
260 |
|
|
261 |
} |
|
262 |
} |
|
263 |
return 0; |
|
264 |
|
|
246 |
return 0; |
|
265 | 247 |
} |
Also available in: Unified diff