#ifndef MEISSNER_CONFIG_H
#define MEISSNER_CONFIG_H 1
#include <stddef.h>
#include <stdlib.h>
#include <inttypes.h>
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#include "WConstants.h"
#endif
// Target machine conditionals:
#if defined(__arm__) && defined(CORE_TEENSY)
#define PROCESSOR_TEENSY_3_X 1 // run on Paul Stoffregen's ARM Cortex M4 based teensy 3.0/teensy 3.1
#ifdef __MK20DX128__
#define PROCESSOR_TEENSY_3_0 1
#endif
#ifdef __MK20DX256__
#define PROCESSOR_TEENSY_3_1 1
#endif
#elif defined(__AVR_ATmega328P__)
#define PROCESSOR_UNO_R3 1 // run on an Arduino Uno R3
#elif defined(__SAM3X8E__)
#define PROCESSOR_DUE 1 // run on Digistump's digiX (or Arduino Due)
#define PROCESSOR_DIGIX 1
#elif defined(__AVR_ATtiny85__)
#define PROCESSOR_ATTINY85 1 // run on ATtiny85 devices (trinket, gemma, digispark)
#define PROCESSOR_TRINKET 1
#define PROCESSOR_GEMMA 1
#define PROCESSOR_DIGISPARK 1
#define NO_SERIAL 1
#define NO_SERVO_H 1
#define NO_WIRE_H 1
#else
#define PROCESSOR_UNKNOWN 1 // something else
#endif
// Pins used on the different processors
// On board LED
#if defined(PROCESSOR_ATTINY85)
const uint8_t PIN_LED = 1;
#else
const uint8_t PIN_LED = LED_BUILTIN;
#endif
// I2C pins
#if defined(PROCESSOR_ATTINY85)
const uint8_t PIN_SDA = 0;
const uint8_t PIN_SCL = 2;
#else
const uint8_t PIN_SDA = SDA;
const uint8_t PIN_SCL = SCL;
#endif
// Pin for programming the NeoPixel
// Pin 1 has the bulitin LED on Trinket/Gemma/Digispark, and
// is the only pin that does not interfere i2c on the Gemma
#if defined(PROCESSOR_ATTINY85)
const uint8_t PIN_NEOPIXEL = 1;
#else
const uint8_t PIN_NEOPIXEL = 4;
#endif
// Possibly unused analog pin for setting random numbers
#if defined(PROCESSOR_TEENSY_3_X)
const uint8_t PIN_RANDOM = A13;
#elif defined(PROCESSOR_ATTINY85)
const uint8_t PIN_RANDOM = 2;
#else
const uint8_t PIN_RANDOM = A3;
#endif
// Unused pin for the tindie 128x64 OLED display
#if defined(PROCESSOR_TEENY_3_X)
const uint8_t PIN_UNUSED = 29;
#else
const uint8_t PIN_UNUSED = PIN_RANDOM;
#endif
// other stuff
#endif /* MEISSNER_CONFIG_H */