| 1 | #ifndef __HACHTIS_PIN_MAGIC_H |
| 2 | #define __HACHTIS_PIN_MAGIC_H |
| 3 | |
| 4 | #include <avr/io.h> |
| 5 | |
| 6 | struct __ph_pin__ { |
| 7 | volatile uint8_t *addr; |
| 8 | uint8_t bitno; |
| 9 | }; |
| 10 | |
| 11 | #define _PIN(port, bit) ((volatile struct __ph_pin__){&port, bit}) |
| 12 | |
| 13 | #define OUTPUT_PIN(pin) (*(pin.addr - 1) |= _BV(pin.bitno)) |
| 14 | #define INPUT_PIN(pin) (*(pin.addr - 1) &= ~_BV(pin.bitno)) |
| 15 | |
| 16 | #define PINON(pin) (*pin.addr |= _BV(pin.bitno)) |
| 17 | #define PINOFF(pin) (*pin.addr &= ~_BV(pin.bitno)) |
| 18 | |
| 19 | #define PINVAL(pin) (*(pin.addr - 2) & _BV(pin.bitno) ? 1 : 0) |
| 20 | |
| 21 | #define setpin(pin, val) ((val) ? PINON(pin) : PINOFF(pin)) |
| 22 | |
| 23 | #endif |