--- /dev/null
+#ifndef __HARDWARE_H
+#define __HARDWARE_H
+
+
+#include "pin_magic.h"
+
+#define PIN_LED _PIN(PORTB, PORTB2)
+#define PIN_SENSE _PIN(PORTB, PORTB4)
+#define PIN_DRIVE _PIN(PORTB, PORTB3)
+#define PIN_BTN _PIN(PORTB, PB1)
+
+#define MM_SENSE (!PINVAL(PIN_SENSE))
+#define BTN_PRESSED (!PINVAL(PIN_BTN))
+
+#define START_TIMER0 ({TCNT0 = 0; TCCR0B = 2;})
+#define START_TIMER1 ({TCNT1 = 1; TCCR1 = 7; GTCCR |= 2;})
+#define STOP_TIMER1 ({TCCR1 = 0; TCNT1 = 1;})
+
+
+static inline void setup_hw(void)
+{
+ /* Turn off the 1/8 clock prescaler - now running at 16MHz*/
+ CLKPR = (1 << CLKPCE);
+ CLKPR = 0;
+
+ INPUT_PIN(PIN_SENSE);
+ INPUT_PIN(PIN_BTN);
+ OUTPUT_PIN(PIN_DRIVE);
+ OUTPUT_PIN(PIN_LED);
+ setpin(PIN_BTN, 1); /* Need pullup */
+
+ GIMSK |= _BV(PCIE); /* Enable pin change interrupt for sense port */
+ PCMSK |= _BV(PCINT4); /* PB4, Rail sense input */
+
+ /* Change interrupt for button */
+ PCMSK |= _BV(PCINT1); /* PB1 */
+
+ /* Setup timer 0, used for mm_switch */
+ TCCR0A = 0; /* Normal mode */
+ TCCR0B = 0; /* Timer off */
+ TIMSK |= _BV(OCIE0A); /* Get a match interrupt */
+
+ /* We need 13 + 45,5 us delay, That's 464 clocks @8MHz*/
+ //OCR0A = 91; /* Prescaler 8 is used */
+
+ /* Timer 1 for timeout */
+ /* We set it to 1024us by prescaler 64 and running full 256 */
+ // TCCR1 = 7;
+ // TIMSK |= _BV(TOIE1); /* Overflow interrupt */
+}
+
+/* deprecated */
+#define START_TIMER0 ({TCNT0 = 0; TCCR0B = 2;})
+#define START_TIMER1 ({TCNT1 = 1; TCCR1 = 7; GTCCR |= 2;})
+#define STOP_TIMER0 (TCCR0B = 0)
+#define STOP_TIMER1 ({TCCR1 = 0; TCNT1 = 1;})
+
+#define TSTART_CLK_TO_SAMPLE_FAST ({TCNT0 = 0; GTCCR |= 1; OCR0A = 110; TCCR0B = 2;})
+#define TSTART_CLK_TO_SAMPLE_SLOW ({TCNT0 = 0; GTCCR |= 1; OCR0A = 220; TCCR0B = 2;})
+
+//#define TSTART_CLK_TO_SAMPLE_FAST ({TCNT0 = 0; GTCCR |= 1; OCR0A = 91; TCCR0B = 2;})
+//#define TSTART_CLK_TO_SAMPLE_SLOW ({TCNT0 = 0; GTCCR |= 1; OCR0A = 182; TCCR0B = 2;})
+
+#define TSTOP ({TCCR0B = 0;})
+
+
+
+#endif