#ifndef _CONFIG

#define _CONFIG

#include <Arduino.h>
#include "wiring_private.h" // pinPeripheral() function

// Set SERCOM peripherals
void configSerialPins() {
    pinPeripheral(PIN_SERIAL5_RX, PIO_SERCOM_ALT);
    pinPeripheral(PIN_SERIAL5_TX, PIO_SERCOM_ALT);
    pinPeripheral(PIN_SERIAL3_RX, PIO_SERCOM_ALT);
    pinPeripheral(PIN_SERIAL3_TX, PIO_SERCOM_ALT);
    pinPeripheral(PIN_SERIAL1_RX, PIO_SERCOM_ALT);
    pinPeripheral(PIN_SERIAL1_TX, PIO_SERCOM_ALT);
}

// Defines for system controller board
#define V12_ON SCC_PB03
#define ANODE_EN SCC_PB02
#define ORIN_STRB_OUT SCC_PA28
#define ORIN_STRB_IN SCC_PA27
#define RS232_EN SCC_PA21
#define ADC_SELECT_0 SCC_PA20
#define ADC_SELECT_1 SCC_PA19
#define ADC_SELECT_2 SCC_PA18

#define PORT_ISNS_AIN_0 SCC_PA02
#define ISO_SNS_AIN_1 SCC_PA03
#define SCC_VREF SCC_PA04
#define BME280OFF SCC_PA05
#define SMBALERT SCC_PA06
#define RS232_SELECT_0 SCC_PA07
#define RS232_SELECT_1 SCC_PA11
#define RS232_SELECT_2 SCC_PA15
#define GPIO_0_RESET SCC_PA09
#define GPIO_0_INT SCC_PA10
#define ETHERNET_ON SCC_PA14

#define DEBUGPORT Serial
#define HWPORT1 Serial1
#define HWPORT3 Serial3
#define HWPORT5 Serial5

#define UI1 HWPORT1
#define UI2 HWPORT5
#define SENSOR_PORT HWPORT3

// RTC Config
#define RTC_PCF
// #define RTC_DS3231

// ORIN serial console uses UI2
#define ORIN_SERIAL UI2

// Define Config Settings
#define LOGINT "LOGINT"
#define POLLFREQ "POLLFREQ"
#define LOCALECHO "LOCALECHO"
#define CMDTIMEOUT "CMDTIMEOUT"
#define HWPORT0BAUD "HWPORT0BAUD"
#define HWPORT1BAUD "HWPORT1BAUD"
#define HWPORT2BAUD "HWPORT2BAUD"
#define HWPORT3BAUD "HWPORT3BAUD"
#define HWPORT5BAUD "HWPORT5BAUD"
#define STROBEDELAY "STROBEDELAY"
#define FRAMERATE "FRAMERATE"
#define TRIGWIDTH "TRIGWIDTH"
#define FLASHDUR "FLASHDUR"
#define FLASHTYPE "FLASHTYPE"
#define PROFILEMODE "PROFILEMODE"
#define LOWVOLTAGE "LOWVOLTAGE"
#define STANDBY "STANDBY"
#define CHECKHOURLY "CHECKHOURLY"
#define STARTUPTIME "STARTUPTIME"
#define WATCHDOG "WATCHDOG"
#define CAMGUARD "CAMGUARD"
#define TEMPLIMIT "TEMPLIMIT"
#define HUMLIMIT "HUMLIMIT"
#define MAXSHUTDOWNTIME "MAXSHUTDOWNTIME"
#define CHECKINTERVAL "CHECKINTERVAL"
#define MINDEPTH "MINDEPTH"
#define MAXDEPTH "MAXDEPTH"
#define ECHORBR "ECHORBR"
#define USERBRCLOCK "USERBRCLOCK"
#define CTDTYPE "CTDTYPE"
#define AUVMODE "AUVMODE"

// Define Commands
#define CFG "CFG"
#define PORTPASS "PORTPASS"
#define SETTIME "SETTIME"
#define WRITECONFIG "WRITECONFIG"
#define READCONFIG "READCONFIG"
#define CAMERAON "CAMERAON"
#define CAMERAOFF "CAMERAOFF"
#define SHUTDOWNJETSON "SHUTDOWNJETSON"
#define NEWEVENT "NEWEVENT"
#define PRINTEVENTS "PRINTEVENTS"
#define CLEAREVENTS "CLEAREVENTS"
#define BOOSTENABLE "BOOSTENABLE"
#define BOOSTDISABLE "BOOSTDISABLE"
#define TRIGENABLE "TRIGENABLE"
#define TRIGDISABLE "TRIGDISABLE"
#define TESTSTANDBY "TESTSTANDBY"
#define RUNTESTS "RUNTESTS"
#define READCURRENT "READCURRENT"

// Define constants
#define ON  1
#define OFF 0

#endif