/****************************************************************************/
/* Copyright 2010 MBARI.                                                    */
/* MBARI Proprietary Information. All rights reserved.                      */
/****************************************************************************/
#include "analog.h"
#include "p24Fxxxx.h"

#include "serial.h"
#include "stdio.h"
#include "sys_defs.h"
#include "errors.h"
#include "spi_io.h"
#include "stdlib.h"

static char msg_buff[64]; // 

#define ADC_LSB 0.0000762939

double anaConvSample(int chan, unsigned int sample, int type)
{
 	double value;	
	float convfact[8] = {0};
	

	switch (type) 
	{
		case 0: // 16-bit word
		{
			convfact[0] = 1;
			convfact[1] = 1;
			convfact[2] = 1;
			convfact[3] = 1;
			break;
		}
		case 1: // Raw voltage measured by ADC
		{
			convfact[0] = ADC_LSB;
			convfact[1] = ADC_LSB;
			convfact[2] = ADC_LSB;
			convfact[3] = ADC_LSB;
			break;
		}
		case 2: // Converted to real world value
		{
			convfact[0] = ADC_LSB * 6.38; // Volt1 -- change typed in constants to an array...
			convfact[1] = ADC_LSB * 2.4; // Curr1
			convfact[2] = ADC_LSB * 6.38; // Volt2
			convfact[3] = ADC_LSB * 2.4; // Curr2
		}
		default: return -1;
	}
	

	switch (chan)
	{
		case 0:
		{
			value = convfact[chan] * sample;
			break;
		}
		case 1:
		{
			value = convfact[chan] * sample;
			break;
		}
		case 2:
		{
			value = convfact[chan] * sample;
			break;
		}
		case 3:
		{
			value = convfact[chan] * sample;
			break;
		}
		default: return -1;
	}

	return value;
}





