X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?p=bike-lights.git;a=blobdiff_plain;f=buttons.c;h=d5a18bec515ba2d7f3f17d645b923ffebe2e823b;hp=b58ca2adade9d384e17659da9202df9508fdf438;hb=01e1d3b0da770db9cc4dc9a7fd649548e60ac0ec;hpb=17c3ca665220350644eded751e14820324c4ba86 diff --git a/buttons.c b/buttons.c index b58ca2a..d5a18be 100644 --- a/buttons.c +++ b/buttons.c @@ -1,26 +1,48 @@ #include #include +#include #include "lights.h" static uint16_t button_start[N_BUTTONS]; static unsigned char button_pressed[N_BUTTONS]; +static unsigned char sleep_after_release; + void init_buttons() { - // MCUCR |= _BV(ISC00); // any edge generates IRQ - // GIMSK |= _BV(INT0); // enable INT0 DDRB &= ~(_BV(PB6) | _BV(PB0)); PORTB |= _BV(PB6) | _BV(PB0); + sleep_after_release = 0; // log_byte(PORTB); } -extern unsigned char led1_counter; - static void inline long_press(unsigned char n) { - led_set_status(2); + sleep_after_release = 1; + gpio_set(1, 1); +} + +static void do_sleep() +{ + // led_set_status(2); + // MCUCR |= _BV(ISC00); // any edge generates IRQ + log_byte(0xb0); + log_flush(); + set_sleep_mode(SLEEP_MODE_PWR_DOWN); + PORTA = 0; + PORTB = 0; + DDRA = 0; + DDRB = 0; + GIMSK |= _BV(INT0); // enable INT0 + sleep_enable(); + sei(); + sleep_cpu(); + sleep_disable(); + cli(); + GIMSK &= ~_BV(INT0); // disable INT0 + hw_setup(); } static void inline short_press(unsigned char n) @@ -66,19 +88,17 @@ void timer_check_buttons() button_pressed[i] = 0; if (duration > 6 && duration < 30) short_press(i); + if (sleep_after_release) + do_sleep(); } } } } -#if 0 ISR(INT0_vect) { - unsigned char tmpval = PINB & _BV(PB6); - - gpio_set(GPIO_LED2, tmpval); + hw_setup(); log_byte(0xbb); log_flush(); } -#endif