#ifndef _BOARD_
#define _BOARD_

#include "chip.h"

/** SPI pins definition and pins definition needed to handle communication with DAC and ADC */
/** SPI MISO pin definition. */
#define PIN_SPI_MISO    {PIO_PA12A_MISO, PIOA, ID_PIOA, PIO_PERIPH_A, PIO_PULLUP} /*proc viz. Pin Struct Reference */
/** SPI MOSI pin definition. */
#define PIN_SPI_MOSI    {PIO_PA13A_MOSI, PIOA, ID_PIOA, PIO_PERIPH_A, PIO_PULLUP} /* Proc PERIPH A viz. dokumentace k sam3, str 583 */
/** SPI SPCK pin definition. */
#define PIN_SPI_SPCK    {PIO_PA14A_SPCK, PIOA, ID_PIOA, PIO_PERIPH_A, PIO_PULLUP}
/** SPI chip select pin definition. */
#define PIN_SPI_NPCS0_PA11  {PIO_PA11A_NPCS0, PIOA, ID_PIOA, PIO_PERIPH_A, PIO_PULLUP}  /* CS for ADC */
#define PIN_SPI_NPCS1_PA31  {PIO_PA31A_NPCS1, PIOA, ID_PIOA, PIO_PERIPH_A, PIO_PULLUP}  /* CS for DAC */
/** LDAC pin - Pin Load DAC is used for update DAC register and analog output */
#define PIN_LDAC {PIO_PA8, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_PULLUP} 

/** BUSY pin from ADC */
#define PIN_BUSY_ADC {PIO_PA25, PIOA, ID_PIOA, PIO_INPUT, PIO_PULLUP}// | PIO_IT_FALL_EDGE}  //mozna dat pak interup enable {PIO_PA25, PIOA, ID_PIOA, PIO_INPUT, PIO_PULLUP | PIO_IT_FALL_EDGE}
/** CNVST - conversion start ADC */
#define PIN_CNVST {PIO_PA24, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_PULLUP}

/** List of SPI pin definitions (MISO, MOSI & SPCK). */
#define PINS_SPI        PIN_SPI_MISO, PIN_SPI_MOSI, PIN_SPI_SPCK

/*------------------------------------------------------------------------------------------------------------------------*/
/** LCD pins definition */
/** Registr select signal */  
#define PIN_LCD_RS  {PIO_PB0, PIOB, ID_PIOB, PIO_OUTPUT_0, PIO_PULLUP} 
/** Enable signal */
#define PIN_LCD_E   {PIO_PA17, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_PULLUP}
/** Data Read/Write */
#define PIN_LCD_RW  {PIO_PB1, PIOB, ID_PIOB, PIO_OUTPUT_0, PIO_PULLUP} 
/** Data bits, default set as output */     /*pak treba bude potreba cist z displeje, tak je bude je potreba prepnout na input*/
#define PIN_LCD_DB0 {PIO_PA15, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_PULLUP}
#define PIN_LCD_DB1 {PIO_PA18, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_PULLUP} 
#define PIN_LCD_DB2 {PIO_PA16, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_PULLUP} 
#define PIN_LCD_DB3 {PIO_PA21, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_PULLUP} 
#define PIN_LCD_DB4 {PIO_PA20, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_PULLUP} 
#define PIN_LCD_DB5 {PIO_PA19, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_PULLUP} 
#define PIN_LCD_DB6 {PIO_PA23, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_PULLUP}
#define PIN_LCD_DB7 {PIO_PA22, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_PULLUP}

/** List of DB pin definitions */
#define PINS_LCD_DB     PIN_LCD_DB0, PIN_LCD_DB1, PIN_LCD_DB2, PIN_LCD_DB3, PIN_LCD_DB4, PIN_LCD_DB5, PIN_LCD_DB6, PIN_LCD_DB7

/*------------------------------------------------------------------------------------------------------------------------*/
/** Dgital Input pins definition */
/*!!!!!!!!!!!!!doladit podle potreby */
#define PIN_DI0 {PIO_PA6, PIOA, ID_PIOA, PIO_INPUT, PIO_DEFAULT}
#define PIN_DI1 {PIO_PA5, PIOA, ID_PIOA, PIO_INPUT, PIO_DEFAULT}
#define PIN_DI2 {PIO_PA27, PIOA, ID_PIOA, PIO_INPUT, PIO_DEFAULT}
#define PIN_DI3 {PIO_PA28, PIOA, ID_PIOA, PIO_INPUT, PIO_DEFAULT}

/** List of Digital input pins */
#define PINS_DI     PIN_DI0, PIN_DI1, PIN_DI2, PIN_DI3

/*------------------------------------------------------------------------------------------------------------------------*/
/** Dgital Output pins definition */
/*!!!!!!!!!!!!!doladit podle potreby */
#define PIN_DO0 {PIO_PB14, PIOB, ID_PIOB, PIO_OUTPUT_0, PIO_PULLUP}
#define PIN_DO1 {PIO_PA0, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_PULLUP}
#define PIN_DO2 {PIO_PA1, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_PULLUP}
#define PIN_DO3 {PIO_PA2, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_PULLUP}

/** List of Digital Output pins */
#define PINS_DO     PIN_DO0, PIN_DO1, PIN_DO2, PIN_DO3  

/*------------------------------------------------------------------------------------------------------------------------*/
/** USB pins definition */


/*------------------------------------------------------------------------------------------------------------------------*/
/** UART0 pins definition (RS-485) */
/* neazapomen na RTS*/

/*------------------------------------------------------------------------------------------------------------------------*/
/** UART1 pins definition (RS-232) */


/*------------------------------------------------------------------------------------------------------------------------*/
/** TWI pins definition (EEPROM) */
#define PIN_TWI_TWD {PIO_PA3A_TWD0, PIOA, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT}
#define PIN_TWI_TWCK {PIO_PA4A_TWCK0, PIOA, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT}

/*------------------------------------------------------------------------------------------------------------------------*/
/** Incremental controler pins definition */
#define PIN_PA7_A {PIO_PA7, PIOA, ID_PIOA, PIO_INPUT, PIO_PULLUP | PIO_IT_RISE_EDGE | PIO_DEBOUNCE}
#define PIN_PA29_B {PIO_PA29, PIOA, ID_PIOA, PIO_INPUT, PIO_PULLUP} //| PIO_DEBOUNCE}// | PIO_IT_RISE_EDGE}
#define PIN_PA30_NO {PIO_PA30, PIOA, ID_PIOA, PIO_INPUT, PIO_PULLUP | PIO_IT_FALL_EDGE | PIO_DEBOUNCE}

#endif /* _BOARD_ */
