+void timer_check_buttons()
+{
+ unsigned char pin = PINA & (_BV(PA3) | _BV(PA4));
+
+ handle_button(0, pin & _BV(PA3), prev_pin & _BV(PA3));
+ handle_button(1, pin & _BV(PA4), prev_pin & _BV(PA4));
+
+ prev_pin = pin;
+
+ if (user_params_state && jiffies - user_params_starttime > 1000) {
+ user_params_state = 0;
+ set_status_led(0, buttons_setup_status0_pattern_select());
+ set_status_led(1, buttons_setup_status1_pattern_select());
+ }
+}
+
+unsigned char buttons_wait_for_release()
+{
+ uint16_t wake_count = 0;
+ unsigned char pin;
+
+ do {
+ if (wake_count++ > WAKEUP_LIMIT)
+ gpio_set(0, 1); // inform the user
+
+ _delay_ms(100);
+
+ pin = PINA & (_BV(PA3) | _BV(PA4));
+ } while (!(pin & _BV(PA3)) || !(pin & _BV(PA4)));
+
+ gpio_set(0, 0);
+
+ return wake_count > WAKEUP_LIMIT;
+
+}
+
+ISR(PCINT_vect)
+{
+ // empty - let it wake us from sleep, but do nothing else
+}
+