// McStar.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "MapIO.hpp"
#include "gpio.h"
#include "ssp.h"
#include "clk.h"
#include "resource.h"
#include "McStar.h"
#include <windows.h>
#include <stdio.h>

volatile GPIO_REGS		*GpioRegPtr = NULL;
volatile SSP_REGS		*SspRegPtr  = NULL;
volatile CLKMAN_REGS	*v_pClkRegs	= NULL;



double iToDW( int iValue )
{
	double dResult;

	if( iValue > 0x7FFFFF )
		iValue = (iValue - 0x1000000);
	dResult = 2.5 * double(iValue) / double(0x7FFFFF);
	return dResult;
}


int WINAPI WinMain(	HINSTANCE hInstance,
					HINSTANCE hPrevInstance,
					LPTSTR    lpCmdLine,
					int       nCmdShow)
{
	int				i,
					iTemp,
					recordCount,
					fileCount;
	int*			pData = 0;
	char			fileName[80];
	unsigned char	Hello[]="ADS NSSP";
	double			dTemp;
	FILE			*outFile;
	CFGDATA			configData;
	DWORD			time1, time2, dwTemp;
	wchar_t			cBuf[100];

	printf("\r\nPrototype Monterey Canyon Sediment Transport Acoutic Reciever Data Acq program\r\n");
	RETAILMSG (1,(TEXT("\r\nPrototype Monterey Canyon Sediment Transport Acoutic Receiver Data Acq program\r\n")));
	RETAILMSG (TRUE, (L"  720020-11693 built %s %s\r\n",TEXT(__DATE__),TEXT(__TIME__))); 

	ReadConfig( configData );
	SetPowerState( LOW_POWER );

	MapRegisters();

	if( 1 == 2)
	{
		InitStdSPI();
		i = 0;
		while(1 == 1)
		{
			printf("Sending SSP Message\n");
			SendSSPMessage(Hello, sizeof(Hello));
			Sleep(1000);
		} 
	}
	else
	{
		InitPSP2();
		pData = new int[configData.numSamples];
		for(fileCount=0; fileCount<configData.numFiles; fileCount++)
		{
			CreateFlashFilename( fileName );
			outFile = fopen( fileName, "ab");
			for(recordCount=0; recordCount<configData.numRecords; recordCount++)
			{
				time1 = GetTickCount();
					for(i=0; i<configData.numSamples; i++)
						*(pData + i) = dwReadSSP();
				time2 = GetTickCount();
				dwTemp = time2 - time1;
				DEBUGMSG(1,(TEXT("ReadSSP time = %d  "), dwTemp));
				time1 = GetTickCount();
				for(i=0; i<configData.numSamples; i++)
					fprintf(outFile, "%d ", *(pData + i));
				fprintf(outFile, "\n");
				time2 = GetTickCount();
				dwTemp = time2 - time1;
				DEBUGMSG(1,(TEXT("fprintf time = %d \n"), dwTemp));
				for(i=0; i<configData.numSamples; i++)
				{
					iTemp = *(pData + i);
					dTemp = iToDW( iTemp );
					swprintf(cBuf, TEXT("Data %d %14.12f \n"), iTemp, dTemp);
					DEBUGMSG(1,(cBuf));
				}
			}
			fclose(outFile);
			if( configData.sleepPeriod > 0)
			{
				DEBUGMSG(1,(TEXT("Sleeping for %d seconds \n"), configData.sleepPeriod));
				Sleep((DWORD)configData.sleepPeriod * 1000 );
			}
		}
	}

//	pData = new int[configData.numSamples];
//	GetData( configData.numSamples, configData.sampleRate, pData);
//	WriteToFlash( pData, configData.numSamples );
	WriteToUSBDisk();
	
	delete [] pData;

	VirtualFree((PVOID)v_pClkRegs,0,MEM_RELEASE);
	VirtualFree((PVOID)SspRegPtr,0,MEM_RELEASE);
	VirtualFree((PVOID)GpioRegPtr,0,MEM_RELEASE);

	RETAILMSG(1,(L" NSSP: Done \r\n"));
	SetPowerState( HIGH_POWER );
	GoToSleep( configData.sleepPeriod);
	return 0;
}

