Project

General

Profile

Revision 213

fixed cardbox code for new board, updated tooltron.py for new cardbox

View differences:

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