diff options
Diffstat (limited to 'src-avr')
| -rw-r--r-- | src-avr/ao_log_telescience.c | 54 | 
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"); | 
