Moar inline docs
[dmxpainter.git] / src / util / pins.h
1 #pragma once
2
3 #include <avr/io.h>
4
5 #include "bits.h"
6
7 //////////////////////////////////////////
8
9 /**
10  * Check if a Pin is set.
11  */
12 #define pin_is_set(pp)  (bit_is_set(pin_SFR_PIN(pp), pin_PIN_NUM(pp)))
13
14 /**
15  * Set Pin to High level.
16  */
17 #define pin_on(pp)      bits_mask_on( pin_SFR_PRT(pp), pin_PIN_VAL(pp))
18 /**
19  * Set Pin to Low level.
20  */
21 #define pin_off(pp)     bits_mask_off(pin_SFR_PRT(pp), pin_PIN_VAL(pp))
22
23 /**
24  * Set Pin as Input.
25  */
26 #define pin_in(pp)      bits_mask_off(pin_SFR_DDR(pp), pin_PIN_VAL(pp))
27 /**
28  * Set Pin as Output.
29  */
30 #define pin_out(pp)     bits_mask_on( pin_SFR_DDR(pp), pin_PIN_VAL(pp))
31
32 //////////////////////////////////////////
33 // Beware of the precompiler magic, here art dragons!
34 // Helper macros to split the X,Y definitions to two separate
35 // arguments.
36 #define pin_pin(pp)  pin_PIN_NUM(pp)
37 #define pin_inr(pp)  pin_SFR_PIN(pp)
38 #define pin_outr(pp) pin_SFR_PRT(pp)
39 #define pin_ddr(pp)  pin_SFR_DDR(pp)
40 // Glue together and cut out parts of the definitions.
41 #define pin_PIN_NUM(port, pin) pin
42 #define pin_PIN_VAL(port, pin) bits_value(pin)
43 #define pin_SFR_PIN(port, pin) PIN  ## port
44 #define pin_SFR_PRT(port, pin) PORT ## port
45 #define pin_SFR_DDR(port, pin) DDR  ## port
46