/****************************************************************************/
/* 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 "spi2.h"
#include "stdlib.h"
#include "actions.h"

static char msg_buff[64]; // 

#define ADC_LSB 0.000038147

double anaConvSample(int chan, unsigned int sample, int type)
{
 	double value;	
	float convfact[12] = {0};
	

	switch (type) 
	{
		case 0: // 16-bit word
		{
			convfact[0] = 1;
			convfact[1] = 1;
			convfact[2] = 1;
			convfact[3] = 1;
			convfact[4] = 1;
			convfact[5] = 1;
			convfact[6] = 1;
			convfact[7] = 1;
			convfact[8] = 1;
			convfact[9] = 1;
			convfact[10] = 1;
			convfact[11] = 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;
			convfact[4] = ADC_LSB;
			convfact[5] = ADC_LSB;
			convfact[6] = ADC_LSB;
			convfact[7] = ADC_LSB;
			convfact[8] = ADC_LSB;
			convfact[9] = ADC_LSB;
			convfact[10] = ADC_LSB;
			convfact[11] = ADC_LSB;	
			break;
		}
		case 2: // Converted to real world value
		{
			convfact[0] = ADC_LSB * 40; // Onboard Humidity Sensor (0-100 %RH)
			convfact[1] = ADC_LSB * 40; // Remote Humidity Sensor
			convfact[2] = ADC_LSB * 40; // Remote Humidity Sensor
			convfact[3] = ADC_LSB * 40; // Remote Humidity Sensor
			convfact[4] = ADC_LSB * 40; // Remote Humidity Sensor
			convfact[5] = ADC_LSB * 20; // Onboard Pressure Sensor (0-50 psia)
			convfact[6] = ADC_LSB * 40; // Onboard Temperature Sensor (0-100 degC)
			convfact[7] = ADC_LSB *  1; // Currently unused
			convfact[8] = ADC_LSB * 0.4;  // Mag compass X axis (+/- 1 Gauss)
			convfact[9] = ADC_LSB * 0.4;  // Mag compass Y axis
			convfact[10] = ADC_LSB * 0.4; // Mag compass Z axis
			convfact[11] = ADC_LSB *  1;  // Currently unused
			break;
		}
		default: return -1;
	}
	

	value = convfact[chan] * sample;

	
	return value;
}





