/****************************************************************************/
/* Copyright 2010-2014 MBARI.                                               */
/* MBARI Proprietary Information. All rights reserved.                      */
/****************************************************************************/
#include "dig_io.h"
#include "p24Fxxxx.h"
#include "sys_defs.h"

/* init registers */
void digInit()
{
    /* Note: the AD1PCFGL and TRIS registers have to be set on 
    ADC pins if you want to use them as digital I/O pins */    
	
    /* Configure all analog/digital sharing pins to digital */
    // 1 = digital, 0 = analog (n=ADC#)

    AD1PCFG = 0xffff;

    /* set outputs here */

    TRISB = 0;
    TRISDbits.TRISD6 = 0;
    TRISDbits.TRISD7 = 0;
    TRISDbits.TRISD8 = 0;
    TRISDbits.TRISD9 = 0;
    TRISDbits.TRISD10 = 0;
    TRISDbits.TRISD11 = 0;
    TRISF = 0;
    TRISGbits.TRISG6 = 0;

    /* set inputs here */

    TRISE = 0x3f;
    TRISGbits.TRISG2 = 1;
    TRISGbits.TRISG3 = 1;
    TRISGbits.TRISG8 = 1;	/* Debugging SPI */


    /* put out bits in default state here */
    LATB = 0;
    LATD = 0xffff;
    LATF = 0;
}


void digSetBlinky(int state)
{
    Nop();

    if ( state )
        LED_BIT = 1;
    else
        LED_BIT = 0;
    
    Nop();
}

int digGetBlinky()
{
    Nop();
    return (int)LED_BIT;
}

void digSetFan(int fan, int state)
{
    if (fan == 1)
	FAN_01 = state ? 1 : 0;
    else if (fan == 2)
	FAN_02 = state ? 1 : 0;
}

int  digGetFanState(void)
{
    return(PORTE & (FAN_01_BIT | FAN_02_BIT));
}

void digSetVicor(int vicor, int state)
{
    if (vicor == 1)
	VICOR_01 = state ? 0 : 1;
    else if (vicor == 2)
	VICOR_02 = state ? 0 : 1;
}

int  digGetVicorState(void)
{
    return(PORTE & (VICOR_01_BIT | VICOR_02_BIT));
}

void digSetRelay(int relay, int state)
{
    if (relay == 1)
	RELAY_01 = state ? 1 : 0;
    else if (relay == 2)
	RELAY_02 = state ? 1 : 0;
}

int digGetRelayState(void)
{
    return(PORTE & (RELAY_01_BIT | RELAY_02_BIT));
}

int digGetSysStatus(void)
{
    return(PORTE & 0xff);
}

int digGetH2OSense(void)
{
    return((PORTG >> 2) & 3);
}


