summaryrefslogtreecommitdiff
path: root/src-avr
diff options
context:
space:
mode:
Diffstat (limited to 'src-avr')
-rw-r--r--src-avr/ao_log_telescience.c54
1 files changed, 38 insertions, 16 deletions
diff --git a/src-avr/ao_log_telescience.c b/src-avr/ao_log_telescience.c
index f092027a..bda89129 100644
--- a/src-avr/ao_log_telescience.c
+++ b/src-avr/ao_log_telescience.c
@@ -86,8 +86,35 @@ ao_log_valid(struct ao_log_telescience *log)
}
void
+ao_log_start(void)
+{
+ printf("Log goes from %ld to %ld\n", ao_log_current_pos, ao_log_end_pos);
+ ao_log_running = 1;
+ ao_wakeup(&ao_log_running);
+}
+
+void
+ao_log_stop(void)
+{
+ printf ("Log stopped at %ld\n", ao_log_current_pos);
+ ao_log_running = 0;
+ ao_wakeup((void *) &ao_adc_head);
+}
+
+void
+ao_log_check_pin(void)
+{
+ if (PINB & (1 << PINB0))
+ ao_log_stop();
+ else
+ ao_log_start();
+}
+
+void
ao_log_telescience(void)
{
+ ao_log_check_pin();
+
ao_storage_setup();
/* Find end of data */
@@ -128,22 +155,6 @@ ao_log_telescience(void)
}
void
-ao_log_start(void)
-{
- printf("Log goes from %ld to %ld\n", ao_log_current_pos, ao_log_end_pos);
- ao_log_running = 1;
- ao_wakeup(&ao_log_running);
-}
-
-void
-ao_log_stop(void)
-{
- printf ("Log stopped at %ld\n", ao_log_current_pos);
- ao_log_running = 0;
- ao_wakeup((void *) &ao_adc_head);
-}
-
-void
ao_log_set(void)
{
ao_cmd_hex();
@@ -214,11 +225,22 @@ const struct ao_cmds ao_log_cmds[] = {
{ 0, NULL },
};
+ISR(PCINT0_vect)
+{
+ ao_log_check_pin();
+}
+
void
ao_log_init(void)
{
ao_log_running = 0;
+ 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");