/* 
 * File:   config.h
 * Author: hamilton
 *
 * Created on January 15, 2014, 4:29 PM
 */

#ifndef CONFIG_H
#define	CONFIG_H

#define ALLOW_RESET_BY_CAN
//#define DEBUG  //This includes various DEBUG features
//#define ALLOW_CALIBRATION  //This allows the controller to be put into calibration mode and displays raw counts for the AIO on the serial port.
//#define KEYBOARD_TESTING
#define CODE_VERSION 0
#define CODE_SUBVERSION 9



//Configure Maxon Power Switches
#define MAXON_TETHER_POWER _LATE1  //Turns on and off power to MAXON drive from tether
#define MAXON_POWER _LATE5    //Turns on and off power to MAXON drive from batteries

#define CTRL_BATT_POWER _LATE0   //Turns on and off battery power to Controller,  Tether power can't be turned off.  1 = 0n, 0 = off

//Configure MAXON Power/Control mode
#define MAXON_LOWPWRMODE 0
#define MAXON_MONITORPOSMODE 1
#define MAXON_HOLDPOSMODE 2
#define MAXON_MANUALMODE 3 //Allows user to run low-leve commands over CAN, mostly for debugging
#define MAXON_DEFAULTMODE MAXON_LOWPWRMODE

//Configure Charge Enable/Disable Behavior
#define CHARGE_ENABLE _LATE3
#define CHARGETIME_ON_POWERUP  10 //48*60  //Am,ount of time to charge batteries on powerup.  In Minutes.
#define CHARGE_TIME 9 //30              //Amount of time to periodically charge batteries. In Minutes.
#define CHARGE_PERIOD 10 //24*60          //Period of charge cycling.  In Minutes

#define CAN_ENABLE _LATE2

#define CHARGE_OFF 0
#define CHARGE_ON 1
#define CHARGE_AUTO_TIME 2
#define CHARGE_AUTO_VOLT 3

#define CHARGER_ON_VOLTAGE 46  //Turn Charger on if BattVoltage drops below this value
#define CHARGER_OFF_VOLTAGE 47  //Turn Charger off if BattVoltage is above this value
#define TETHER_GONE_VOLTAGE 24  //This is the voltage the system decides the tether supply is gone

//Configure power lost or CAN comms lost behavior
#define POWERLOSS_TIMEOUT 60  //Time to wait after power loss before closing doors.  In Minutes.
#define COMMSLOSS_TIMEOUT 60  //Time to tolerate no watchdog reset before closing doors.  In Minutes.

#define NUMBER_OF_CMDS_TO_INTERPRET 9

#define COMPASS_OFFSET 180  //This is the angle the IMU outputs when the FFD is pointed north.  (i.e. 180 degrees means it's mounted pointed at the stern)



/******** Configure CAN Bus identifier and speed *********/
//  CAN ID field width definitions, from least sig to most sig.
#define SEQ_WIDTH  9
#define ID_WIDTH  5
#define SRC_WIDTH 4

#define CAN_SRCID 4  //Specific ID identifying messages that originate from this hardware.

/* number of ECAN message buffers in DMA memory (must be greater or equal to the number of buffers used. */
#define ECAN1_MSG_BUF_LENGTH 16   /* 8 transmit buffers  8 recieve buffers */
#define ECAN1_NUM_TX_BUFFERS 8

#define CAN_PACKET_RATE 10  //Must be 10 or 25

/******** Configure Analog IO here  *********/
#define NUMAIO 3

#define FILTERSAMPLES 32  //Must be 1,2,4,8,16,32,64,128.  Must match FIR filter length

#define AIOMASK_H 0xfff9  // Select AN17,AN18 to be sampled and scanned, total must match NUMAIO
//#define AIOMASK_L 0xf3ff  //Select AN10,AN11 to be sampled and scanned, total must match NUMAIO
//#define AIOMASK_L 0xf7ef  //Select AN4,AN11 to be sampled and scanned, total must match NUMAIO
#define AIOMASK_L 0xf7ff  //Select AN11 to be sampled and scanned, total must match NUMAIO

#define MAXHEADINGFILTERSAMPLES 2*60*CAN_PACKET_RATE
#define DEFAULTHEADINGFILTERSAMPLES 10*CAN_PACKET_RATE

#define DLE 0x90
#define STX 0x02

#define HOME_MOVE_STATE_MACHINE 0
#define VEL_MOVE_STATE_MACHINE 1
#define DEFAULT_STATE_MACHINE VEL_MOVE_STATE_MACHINE

#define CLOSED_TREFOIL_ENCODER_VALUE 536000L
#define OPEN_TREFOIL_ENCODER_VALUE 0L
#define TREFOIL_HOME_OFFSET 4000 //Encoder Counts
#define TREFOIL_TARGET_OFFSET 10000 // Encoder Counts short of the expected target position to stop and shift to home move technique  ~1deg

#define MAXON_MOTOR_SPEED 400L  //RPM
#define MAXON_MOTOR_ACCEL 400L  //RP(M^2)
#define MAXON_MOTOR_DECEL 1500L  //RP(M^2)
#define MAXON_MOTOR_HOME_ACCEL 400L  //RP(M^2)

#define DELAY_AFTER_MAXON_POWERUP 3000L  //milliseconds
#define VELOCITY_MOVE_TIMEOUT 60000L // milliseconds
#define BACKUP_MOVE_TIMEOUT 3000L //milliseconds

#define HOME_MOVE_TIMEOUT 10000L //milliseconds

#define MAX_CURR 5000 //Max Winding Current Target = 5000 mA
#define MIN_CURR 500 //Max Winding Current Target = 500 mA
#define DEFAULT_CURR  3500 //4000 //4000 //Default Winding Current Target = 4000 mA   !!!!!!!!!!!!!!!!!!!



#endif	/* CONFIG_H */

