trennfix/sw: Nice, keep! Good!
[eisenbahn.git] / trennfix / sw / include / pin_magic.h
diff --git a/trennfix/sw/include/pin_magic.h b/trennfix/sw/include/pin_magic.h
new file mode 100644 (file)
index 0000000..a6d0b4b
--- /dev/null
@@ -0,0 +1,23 @@
+#ifndef __HACHTIS_PIN_MAGIC_H
+#define __HACHTIS_PIN_MAGIC_H
+
+#include <avr/io.h>
+
+struct __ph_pin__ {
+       volatile uint8_t *addr;
+       uint8_t bitno;
+};
+
+#define _PIN(port, bit) ((volatile struct __ph_pin__){&port, bit})
+
+#define OUTPUT_PIN(pin) (*(pin.addr - 1) |= _BV(pin.bitno))
+#define INPUT_PIN(pin)  (*(pin.addr - 1) &= ~_BV(pin.bitno))
+
+#define PINON(pin)   (*pin.addr  |= _BV(pin.bitno))
+#define PINOFF(pin)  (*pin.addr  &= ~_BV(pin.bitno))
+
+#define PINVAL(pin)  (*(pin.addr - 2) & _BV(pin.bitno) ? 1 : 0)
+
+#define setpin(pin, val) ((val) ? PINON(pin) : PINOFF(pin))
+
+#endif