//-------------------------------------------------------------------
// McStarSubs.cpp
//
// March 21, 2008
// Gene Massion		
//-------------------------------------------------------------------

#include "stdafx.h"
#include <windows.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <iostream>

#include "McStarMX31.h"

bool ReadConfig( CFGDATA& configData )
{
	FILE *configFile;
	char inString[80],
	 	 *label,
		 *value,
		 cTemp[160];

	if ( (configFile = fopen( "\\Storage Card\\McStar\\McStarConfig.txt", "r")) != NULL)
		WriteLog(1,1,1, "Opened Configuration File");
	else
	{
		//process error
	}


	while( !feof(configFile) ) 
	{
		fgets(inString, 80, configFile);
		label = strtok(inString, ":");
		value = strtok(NULL, ":") ;

		if (strcmp(label, "SampleRate") == 0)
		{
			configData.sampleRate = (float)atof(value);
			sprintf( cTemp, "sampleRate %10.3f", configData.sampleRate);
			WriteLog(1,1,1, cTemp);
			label = "";
		}
		else if (strcmp(label, "numSamples") == 0)
		{
			configData.numSamples = atoi(value);
			sprintf(cTemp, "numSamples %d", configData.numSamples);
			WriteLog(1,1,1, cTemp);
			label = "";
		}
		else if (strcmp(label, "USBWrites") == 0)
		{
			configData.USBWrites = atoi(value);
			sprintf(cTemp, "USBWrites %d", configData.USBWrites);
			WriteLog(1,1,1, cTemp);
			label = "";
		}
		else if (strcmp(label, "numFlashFiles") == 0)
		{
			configData.numFlashFiles = atoi(value);
			sprintf(cTemp, "NumFlashFiles %d", configData.numFlashFiles);
			WriteLog(1,1,1, cTemp);
			label = "";
		}
		else if (strcmp(label, "diskPwrUpTime") == 0)
		{
			configData.diskPwrUpTime = atoi(value);
			sprintf(cTemp, "diskPwrUpTime %d", configData.diskPwrUpTime);
			WriteLog(1,1,1, cTemp);
			label = "";
		}
		else if (strcmp(label, "filesPerDirectory") == 0)
		{
			configData.filesPerDirectory = atoi(value);
			sprintf(cTemp, "filesPerDirectory %d", configData.filesPerDirectory);
			WriteLog(1,1,1, cTemp);
			label = "";
		}
		else if (strcmp(label, "SleepPeriod") == 0)
		{
			configData.sleepPeriod = atoi(value);
			sprintf(cTemp, "SleepPeriod rate %d\n", configData.sleepPeriod);
			WriteLog(1,1,1, cTemp);
			label = "";
		}
	}

	fclose(configFile);
	return TRUE;
}
/*
int WriteToUSBDisk(unsigned int* data, int numValues, TCHAR fileName[80])
{
	int		numWritten;
	FILE	*outFile;

	CreateFilename( fileName, USBFILE );
	if( (outFile = fopen( "\\Hard Disk\\file1", "ab")) == NULL)
		printf("Error opening hard disk file\n");
	
	numWritten = fwrite(data, sizeof(int), numValues, outFile);
	DEBUGMSG(1, (_T("Wrote %d samples to USB Disk \n"), numWritten));

	fclose(outFile);

	return numWritten;
}

int WriteToFlash(unsigned int* data, int numValues, TCHAR fileName[80])
{
	int		numWritten;
	FILE	*outFile;

	CreateFilename( fileName, FLASHFILE );

	outFile = _wfopen( fileName, (TEXT("ab")));

	numWritten = fwrite(data, sizeof(int), numValues, outFile);
	DEBUGMSG(1, (_T("Wrote %d samples to Flash Disk \n"), numWritten));

	fclose(outFile);

	return numWritten;
}
*/
double iToDW( int iValue )
{
	double dResult;
	double LSB; //= 2.980232594e-7;
	double Vref;
	
	Vref = (double)2.5;
	LSB = Vref / (pow(2.0, 23.0) - 1.0);

	if( (iValue & 0x00800000) != 0)
	{
		iValue = ~iValue;
		iValue = iValue & 0x00FFFFFF;
		dResult = -1.0 * ((double)(iValue + 0x00000001)) * LSB;
	} else
		dResult = double(iValue) * LSB;

	return dResult;
}

int DeleteOldFiles( VOID )
{
	WIN32_FIND_DATA fd;
	HANDLE			hFind;
	int				numFiles;
	DWORD			time1, time2, dwTemp;
	wchar_t			cBuf[100];

	numFiles = 0;

	DEBUGMSG(1, (TEXT("Deleting old Log files \n")));
	time1 = GetTickCount();
	hFind = FindFirstFile(TEXT ("\\Storage Card\\McSTAR\\LogFiles\\*.*"), &fd);
	if(hFind != INVALID_HANDLE_VALUE )
	{
		do
		{
			wcscpy(cBuf,(TEXT ("\\Storage Card\\McSTAR\\LogFiles\\")));
			wcscat(cBuf, fd.cFileName);
			DEBUGMSG(1, (TEXT("Deleting Log file: %s \n"), cBuf));
			DeleteFile(cBuf);
			numFiles = numFiles + 1;
		} while(FindNextFile(hFind, &fd));
	}
	time2 = GetTickCount();
	dwTemp = time2 - time1;
	DEBUGMSG(1, (TEXT("Delete Done   Time = %d mSec\n\n"), dwTemp));

	DEBUGMSG(1, (TEXT("Deleting old Data files \n")));
	time1 = GetTickCount();
	hFind = FindFirstFile(TEXT ("\\Hard Disk\\McSTAR\\Data1\\*.*"), &fd);
	if(hFind != INVALID_HANDLE_VALUE )
	{
		do
		{
			wcscpy(cBuf,(TEXT ("\\Hard Disk\\McSTAR\\Data1\\*.*")));
			wcscat(cBuf, fd.cFileName);
			DEBUGMSG(1, (TEXT("Deleting Data file: %s \n"), cBuf));
			DeleteFile(cBuf);
			numFiles = numFiles + 1;
		} while(FindNextFile(hFind, &fd));
	}
	time2 = GetTickCount();
	dwTemp = time2 - time1;
	DEBUGMSG(1, (TEXT("Delete Done   Time = %d mSec\n\n"), dwTemp));

	return numFiles;
}

void UnmapAddress(LPVOID address)
{
	VirtualFree(address, 0, MEM_RELEASE);
	address = NULL;
}

void WriteLog(BOOL print, BOOL debug, BOOL file, char logEntry[200])
{
	FILE	*logFile;
	TCHAR	tcharTemp[160];
	__time64_t	t64Time;
	struct tm	timeNow;
	static BOOL		firstCall = 1;
	static char	fileName[80];
	
	if(firstCall == 1)
	{
		CreateFilename(fileName, LOGFILE, 0 );
		firstCall = 0;
	}

	if(print == 1)
	{
		_time64( &t64Time );
		_localtime64_s(&timeNow, &t64Time);
		printf("%d-%d-%d\t%d:%d:%d\t%s\n", timeNow.tm_mon+1, timeNow.tm_mday, timeNow.tm_year+1900, timeNow.tm_hour, timeNow.tm_min, timeNow.tm_sec, logEntry);
	}
	if(debug == 1)
	{
		mbstowcs(tcharTemp, logEntry, 200);
		DEBUGMSG(1, (TEXT("%s\n"), tcharTemp));
	}
	if(file == 1)
	{ 
		logFile = fopen( fileName, "a");
		_time64( &t64Time );
		_localtime64_s(&timeNow, &t64Time);
		fprintf(logFile, "%d-%d-%d\t%d:%d:%d\t%s\n", timeNow.tm_mon+1, timeNow.tm_mday, timeNow.tm_year+1900, timeNow.tm_hour, timeNow.tm_min, timeNow.tm_sec, logEntry);
		fclose(logFile);
	}
}

void CheckMemory( char comment[80] )
{
   // Program memory information
    MEMORYSTATUS	memInfo;
	char			cTemp[80];
	
	memInfo.dwLength = sizeof(memInfo);
    GlobalMemoryStatus(&memInfo);
    sprintf(cTemp, "%s Total RAM: %d bytes\n Free: %d \nUsed: %d\nMemory Load %d percent\n\n", comment, memInfo.dwTotalPhys, memInfo.dwAvailPhys, memInfo.dwTotalPhys-memInfo.dwAvailPhys, memInfo.dwMemoryLoad);
    WriteLog(1,1,1, cTemp);
}

