/****************************************************************************/
/* Copyright 2007 MBARI.                                                    */
/* Monterey Bay Aquarium Research Institute Proprietary Information.        */
/* All rights reserved.       																						  */
/*																																					*/
/* Rev History:																															*/
/* Initial Creation 11/2007		B.Kieft																		    */
/*																																					*/
/*																																					*/
/****************************************************************************/
#ifndef PH_PROBE_H
#define PH_PROBE_H

#define HI  1
#define LO  0

#define ON  1
#define OFF 0

#define MAX_SPI_CHARS 11

//
// Interface Specification Parameters
//
int16 startup_oc_threshold = 0;
int16 steady_oc_threshold = 0;
int16 startup_oc_time = 0;
int8 RS485_ID=0; 
int8 eeprom_written = 0;      // Data was written to EEPROM, so initialize from there if equal
                              // to 10011001 (or 0x99)
int8 relay_status_closed = 0; // 0 == False == open circuit

// Used to store the location of interface params in EEPROM
#define EE_startup_oc_threshold  0  //size=2
#define EE_steady_oc_threshold   2  //size=2
#define EE_startup_oc_time       4  //size=2
#define EE_RS485_ID              5  //size=1
#define EE_relay_status_closed   6  //size=1
#define EE_eeprom_written        7  //size=1


//
//Error parameters 
//
int16 error_status = 0;
int16 slave_errors = 0;
// MSB
Boolean flash_write_err_slave = false;
Boolean flash_write_err       = false;
Boolean ground_fault_err      = false;
Boolean over_temp_err         = false;
Boolean over_curr_err         = false;
Boolean switch_err            = false;
Boolean invld_cmd_err         = false;
Boolean invld_param_err       = false;
Boolean invld_cksum_err       = false;
Boolean wdt_reset_err         = false;
Boolean slv_cmd_err           = false;
//LSB
//


// Constant Definitions
static const int16 VREF = 4096;        // 4.096 reference voltage
static const int8 RSENSE = 200;        // .2 Ohm Rsense
static const int8 CURRDIVISOR = 5;     // 5 V/V amplification
//static const float GF_RSENSE = 402;
//static const float GF_VSCALE = 4.048;
//static const float GF_VREF   = 4.096;       

const char empty_string[1] = {""};
const int8 sw_version[] = "1.0"; 
//

static int32 adc_value_glob;           // Stores A/D conversion values for SPI bus transmission
int16 overcurrent_adc_val = 0;         // Stores max A/D output for high priority overcurrent checking
int16 overcurrent_adc_val_startup = 0; // Stores max A/D output for startup overcurrent checking
char response_message[30];             // String for storing node response back to MVC

int8 serial_delay_msec = 3;            // delay for clocking 485 bits
int8 spi_data = 0;

Boolean master          = true;        // Master on SPI bus
Boolean cmd_received    = false;       // RS485 command received
Boolean wdt_reset       = false;       // Latest reset due to WDT reset
Boolean startup_elapsed = false;       // The time set for the startup current has elapsed
Boolean slave_is_on     = false;       // The slave PIC is powered up
Boolean load_is_on      = false;       // The load has been powered up
Boolean sleep_enabled   = false;       // The master is allowed to sleep

//*** DEBUG - to be removed
int8 rtos_pin = LO; 
//*** DEBUG - to be removed

// Function Definitions
void do_adc_voltage_calcs(int16);
void do_adc_current_calcs(int16, int16, int8, int8);

void write_eeprom8(int8, int8);
int16 read_eeprom16(int8);
void write_eeprom16(int8, int16);
void clear_errors(Boolean);
void check_slave_on();
void check_slave_off();
void calculate_errors();
#endif
