comparison main.c @ 328:46070aaf29ea

A bit of work on the server python
author Matt Johnston <matt@ucc.asn.au>
date Sat, 26 May 2012 10:17:27 +0800
parents f6b5941b4c34
children 44c5ab5ea879
comparison
equal deleted inserted replaced
327:5639c74f2cbb 328:46070aaf29ea
32 #define MEASURE_WAKE 10 32 #define MEASURE_WAKE 10
33 33
34 #define VALUE_NOSENSOR -9000 34 #define VALUE_NOSENSOR -9000
35 #define VALUE_BROKEN -8000 35 #define VALUE_BROKEN -8000
36 36
37 // limited to uint16_t for now
37 #define COMMS_WAKE 3600 38 #define COMMS_WAKE 3600
38 #define WAKE_SECS 30 39 #define WAKE_SECS 30
39 40
40 #define BAUD 19200 41 #define BAUD 19200
41 #define UBRR ((F_CPU)/8/(BAUD)-1) 42 #define UBRR ((F_CPU)/8/(BAUD)-1)
67 static FILE *crc_stdout = &_crc_stdout; 68 static FILE *crc_stdout = &_crc_stdout;
68 69
69 static uint16_t n_measurements; 70 static uint16_t n_measurements;
70 // stored as decidegrees 71 // stored as decidegrees
71 static int16_t measurements[NUM_MEASUREMENTS][MAX_SENSORS]; 72 static int16_t measurements[NUM_MEASUREMENTS][MAX_SENSORS];
73 static uint32_t first_measurement_clock;
74 // last_measurement_clock is redundant but checks that we're not missing
75 // samples
76 static uint32_t last_measurement_clock;
72 77
73 // boolean flags 78 // boolean flags
74 static uint8_t need_measurement; 79 static uint8_t need_measurement;
75 static uint8_t need_comms; 80 static uint8_t need_comms;
76 81
216 crc_out = 0; 221 crc_out = 0;
217 uint8_t n_sensors; 222 uint8_t n_sensors;
218 eeprom_read(n_sensors, n_sensors); 223 eeprom_read(n_sensors, n_sensors);
219 224
220 fprintf_P(crc_stdout, PSTR("START\n")); 225 fprintf_P(crc_stdout, PSTR("START\n"));
221 fprintf_P(crc_stdout, PSTR("time=%lu\n"), clock_epoch); 226 fprintf_P(crc_stdout, PSTR("now=%lu\n"), clock_epoch);
227 fprintf_P(crc_stdout, PSTR("first_time=%lu\n"), first_measurement_clock);
228 fprintf_P(crc_stdout, PSTR("last_time=%lu\n"), last_measurement_clock);
222 fprintf_P(crc_stdout, PSTR("sensors=%d\n"), n_measurements); 229 fprintf_P(crc_stdout, PSTR("sensors=%d\n"), n_measurements);
223 for (uint8_t s = 0; s < n_sensors; s++) 230 for (uint8_t s = 0; s < n_sensors; s++)
224 { 231 {
225 uint8_t id[ID_LEN]; 232 uint8_t id[ID_LEN];
226 fprintf_P(crc_stdout, PSTR("sensor_id%d="), s); 233 fprintf_P(crc_stdout, PSTR("sensor_id%d="), s);
250 } 257 }
251 258
252 static void 259 static void
253 cmd_btoff() 260 cmd_btoff()
254 { 261 {
255 printf_P(PSTR("Turning off\n")); 262 uint16_t next_wake = COMMS_WAKE - comms_count;
263 printf_P(PSTR("off:%d\n"), next_wake);
256 _delay_ms(50); 264 _delay_ms(50);
257 comms_timeout = 0; 265 comms_timeout = 0;
258 } 266 }
259 267
260 static void 268 static void
460 468
461 ISR(USART_RX_vect) 469 ISR(USART_RX_vect)
462 { 470 {
463 char c = UDR0; 471 char c = UDR0;
464 uart_putchar(c, NULL); 472 uart_putchar(c, NULL);
465 if (c == '\r') 473 // XXX move this out of interrupt handler
466 { 474 if (c == '\r' || c == '\n')
467 readbuf[readpos] = '\0'; 475 {
468 read_handler(); 476 if (readpos > 0)
469 readpos = 0; 477 {
478 readbuf[readpos] = '\0';
479 read_handler();
480 readpos = 0;
481 }
470 } 482 }
471 else 483 else
472 { 484 {
473 readbuf[readpos] = c; 485 readbuf[readpos] = c;
474 readpos++; 486 readpos++;
623 decicelsius = VALUE_BROKEN; 635 decicelsius = VALUE_BROKEN;
624 } 636 }
625 } 637 }
626 measurements[n_measurements][s] = decicelsius; 638 measurements[n_measurements][s] = decicelsius;
627 } 639 }
640
641 if (n_measurements == 0)
642 {
643 first_measurement_clock = clock_epoch;
644 }
645 last_measurement_clock = clock_epoch;
646
628 n_measurements++; 647 n_measurements++;
629 //do_adc_335(); 648 //do_adc_335();
630 } 649 }
631 650
632 static void 651 static void