void power_down()
{
+ uint16_t wake_count = 0;
+ unsigned char btn;
+
+sleep_again:
// enable PCINT14, so that user can wake up later
GIMSK |= _BV(PCIE1);
PCMSK1 |= _BV(PCINT14);
GIMSK &= ~_BV(PCIE1);
PCMSK1 &= ~_BV(PCINT14);
+ // allow wakeup by long button-press only
+ for (btn = 0; btn < 5; btn++) {
+ if ((PINB & _BV(PB6)) != 0) {
+ wake_count++;
+ goto sleep_again;;
+ }
+ _delay_ms(100);
+ }
+
+ // ok, so I will wake up
+ log_byte(0xb1);
+ log_word(wake_count);
+ log_flush();
+
hw_setup();
}