/***
 *     _______  _____   ___    
 *    |_   __ \|_   _|.'   `.  
 *      | |__) | | | /  .-.  \ 
 *      |  ___/  | | | |   | | 
 *     _| |_    _| |_\  `-'  / 
 *    |_____|  |_____|`.___.'  
 * 
 *    Preprocessor I/O Library
 *
 *    ~ version 1.0.0
 *    ~ written by Tristan Krause
 *    ~ visit www.devfix.net
 * 
 *    You should have received a copy of the MIT License.
 *    If not, see <https://opensource.org/licenses/MIT>.
 * 
 *    How does it work?
 *    ----------------------------------------------
 *    Instead of the classical way
 *    (1a)   DDRA |= (1<<PA0);
 *    you can now write
 *    (1b)   dMode(A0, OUT);
 * 
 *    It gets directly replaced by the fast
 *    PORT manipulation command (1a) using
 *    preprocessor macros. This way, PIO
 *    does not increase the overall memory
 *    consumption or slow down the execution
 *    like Arduino does.
 * 
 *    Why using PIO? The Port commands are enough...
 *    ----------------------------------------------
 *    First, the code gets a bit more readable,
 *    especially for beginners.
 *    Second, you can define pins regardless
 *    their corresponding port, resulting in
 *    a more flexible code. For instance:
 *    (2a)   #define LED A0
 *           dMode(LED, OUT);
 *           dWrite(LED, HIGH);
 *    If you now choose another pin, the rest
 *    of the code can stay the same and PIO
 *    will take care of the right PORT commands.
 *    (2b)   #define LED D6     // this changed
 *           dMode(LED, OUT);   // same command
 *           dWrite(LED, HIGH); // same command
 *                             
 */

#ifndef PIO_H
#define PIO_H

// current version
#define PIOLIB 100

#include <avr/io.h>

#ifdef HIGH
#undef HIGH
#endif
#define HIGH 1

#ifndef LOW
#undef LOW
#endif
#define LOW  0

#ifndef OUT
#undef OUT
#endif
#define OUT 1

#ifndef OUTPUT
#undef OUTPUT
#endif
#define OUTPUT 1

#ifndef IN
#undef IN
#endif
#define IN 0

#ifndef INPUT
#undef INPUT
#endif
#define INPUT 0

#include "pio/dmode.h"
#include "pio/dwrite.h"
#include "pio/dread.h"

#include "pio/mcus.h"

#endif // PIO_H