//#include <proc/p32mx440f256h.h>

#include "TC77.h"
#include "BoardCfg.h"
#include "timer.h"

short mDeviceID;

int TC77Configure()
{

	TEMP_SENSOR_CS_PIN = 0;
        
	//Execute a 16 bits read first.
	SPI3BUF = 0xFF;
    while(!SPI3STATbits.SPIRBF);
	SPI3BUF = 0xFF;
    while(!SPI3STATbits.SPIRBF);
	
	//Now, write 0xFFFF to config register.
    SPI3BUF = 0xFF;
    while(!SPI3STATbits.SPIRBF);
	SPI3BUF = 0xFF;
    while(!SPI3STATbits.SPIRBF);
	
	//Read Device ID
	SPI3BUF = 0x00;
    while(!SPI3STATbits.SPIRBF);
	mDeviceID = SPI3BUF;
	mDeviceID <<= 8;
	
	SPI3BUF = 0xFF;
    while(!SPI3STATbits.SPIRBF);
	mDeviceID += SPI3BUF;
	TEMP_SENSOR_CS_PIN = 1;
	
	mDeviceID &= 0xFFFC;
	if(mDeviceID != 0x5400)
	{
		return RET_ERROR;
	}
	
	Sleep(100);
	
	//Device detected.  Now, put the device in continuous read mode.
	TEMP_SENSOR_CS_PIN = 0;
	
	//Execute a 16 bits read first.
	SPI3BUF = 0xFF;
    while(!SPI3STATbits.SPIRBF);
	SPI3BUF = 0xFF;
    while(!SPI3STATbits.SPIRBF);
	
	//Now, write 0x0000 to config register.
    SPI3BUF = 0x00;
    while(!SPI3STATbits.SPIRBF);
	SPI3BUF = 0x00;
    while(!SPI3STATbits.SPIRBF);
	
	TEMP_SENSOR_CS_PIN = 1;
	
	return RET_OK;
}
float TC77GetActualTemp()
{
	short RawTemp = 0;
	float Temp;
	TEMP_SENSOR_CS_PIN = 0;
    
	//Read 16 bits.
	SPI3BUF = 0x00;
    while(!SPI3STATbits.SPIRBF);
	RawTemp = SPI3BUF;
	RawTemp <<= 8;
	
	SPI3BUF = 0xFF;
    while(!SPI3STATbits.SPIRBF);
	RawTemp += SPI3BUF;
	
	TEMP_SENSOR_CS_PIN = 1;
	
	RawTemp &= 0xFFF8;		//Get rid of useless 3 LSB
	//RawTemp >>= 3;
	
	Temp = ((float)0.0625 * (float)RawTemp);
	Temp /= 8;

	return Temp;
	
}

short TC77GetDeviceID()
{
	return mDeviceID;
}