diff options
-rw-r--r-- | src-avr/ao_log_telescience.c | 24 | ||||
-rw-r--r-- | src/ao_flight.c | 15 |
2 files changed, 28 insertions, 11 deletions
diff --git a/src-avr/ao_log_telescience.c b/src-avr/ao_log_telescience.c index 04e494fd..ef5a1c97 100644 --- a/src-avr/ao_log_telescience.c +++ b/src-avr/ao_log_telescience.c @@ -111,8 +111,6 @@ ao_log_check_pin(void) void ao_log_telescience(void) { - ao_log_check_pin(); - ao_storage_setup(); /* Find end of data */ @@ -122,12 +120,21 @@ ao_log_telescience(void) if (!ao_log_valid(&log)) break; } + + /* + * Wait for the other side to settle down + */ + ao_delay(AO_SEC_TO_TICKS(5)); + + ao_log_check_pin(); + ao_log_current_pos = ao_log_start_pos; ao_log_end_pos = ao_storage_config; for (;;) { while (!ao_log_running) ao_sleep(&ao_log_running); + flush(); memset(&log, '\0', sizeof (struct ao_log_telescience)); log.type = AO_LOG_TELESCIENCE_START; log.tick = ao_time(); @@ -149,12 +156,14 @@ ao_log_telescience(void) /* Wait for more ADC data to arrive */ ao_sleep((void *) &ao_adc_head); } + flush(); } } void ao_log_set(void) { + printf("Logging currently %s\n", ao_log_running ? "on" : "off"); ao_cmd_hex(); if (ao_cmd_status == ao_cmd_success) { if (ao_cmd_lex_i) { @@ -165,6 +174,7 @@ ao_log_set(void) ao_log_stop(); } } + ao_cmd_status = ao_cmd_success; } void @@ -174,7 +184,7 @@ ao_log_list(void) uint32_t start = 0; uint8_t flight = 0; - for (pos = 0; pos < ao_storage_config; pos += sizeof (struct ao_log_telescience)) { + for (pos = 0; ; pos += sizeof (struct ao_log_telescience)) { if (!ao_storage_read(pos, &log, sizeof (struct ao_log_telescience))) break; if (!ao_log_valid(&log) || log.type == AO_LOG_TELESCIENCE_START) { @@ -206,6 +216,7 @@ ao_log_delete(void) printf("No such flight: %d\n", ao_cmd_lex_i); return; } + ao_log_stop(); for (pos = 0; pos < ao_storage_config; pos += ao_storage_block) { if (!ao_storage_read(pos, &log, sizeof (struct ao_log_telescience))) break; @@ -213,6 +224,7 @@ ao_log_delete(void) break; ao_storage_erase(pos); } + ao_log_current_pos = ao_log_start_pos = 0; if (pos == 0) printf("No such flight: %d\n", ao_cmd_lex_i); else @@ -236,12 +248,14 @@ ao_log_init(void) { ao_log_running = 0; + DDRB &= ~(1 << DDB0); + + PORTB |= (1 << PORTB0); /* Pull input up; require input to log */ + PCMSK0 |= (1 << PCINT0); /* Enable PCINT0 pin change */ PCICR |= (1 << PCIE0); /* Enable pin change interrupt */ - PORTB &= ~(1 << PORTB0); /* Pull input down; always log if NC */ - ao_cmd_register(&ao_log_cmds[0]); ao_add_task(&ao_log_task, ao_log_telescience, "log"); diff --git a/src/ao_flight.c b/src/ao_flight.c index cfecc5af..822a20b8 100644 --- a/src/ao_flight.c +++ b/src/ao_flight.c @@ -168,8 +168,9 @@ ao_flight(void) ao_wakeup(&ao_gps_data); ao_wakeup(&ao_gps_tracking_data); #endif -#ifdef ASCENT_PIN - ASCENT_PIN = 0; +#ifdef ASCENT_SIGNAL + ASCENT_SIGNAL = 0; + ASCENT_SIGNAL_DIR |= (1 << ASCENT_SIGNAL_PIN); #endif ao_wakeup(DATA_TO_XDATA(&ao_flight_state)); @@ -240,8 +241,9 @@ ao_flight(void) /* Turn the RDF beacon back on */ ao_rdf_set(1); -#ifdef ASCENT_PIN - ASCENT_PIN = 1; +#ifdef ASCENT_SIGNAL + ASCENT_SIGNAL_DIR &= ~(1 << ASCENT_SIGNAL_PIN); + ASCENT_SIGNAL = 0; #endif /* * Start recording min/max height @@ -320,9 +322,10 @@ void ao_flight_init(void) { #ifdef ASCENT_SIGNAL - ASCENT_SIGNAL = 1; - ASCENT_SIGNAL_DIR |= (1 << ASCENT_SIGNAL_PIN); ASCENT_SIGNAL_SEL &= ~(1 << ASCENT_SIGNAL_PIN); + ASCENT_SIGNAL_DIR &= ~(1 << ASCENT_SIGNAL_PIN); + P1INP |= (1 << ASCENT_SIGNAL_PIN); + ASCENT_SIGNAL = 1; #endif ao_flight_state = ao_flight_startup; ao_add_task(&flight_task, ao_flight, "flight"); |