// McStar1-0.cpp : Defines the entry point for the application.
//

// Comment this line to disable loads of the Led Driver
#define LOAD_DRIVER

#define LED_DRIVER_REG_PATH (TEXT("\\Drivers\\LEDDriver"))
#define LER_DRIVER_NAME TEXT("LED1:")

#include "stdafx.h"
#include "McStar1-1.h"
#include "LEDDriver_ioctl2.h"

#include <stdio.h>
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include <time.h>
#include <winbase.h>

int InitDriver( HANDLE hDriver, HANDLE hActiveDriver );

typedef BOOL (WINAPI *PGETDISKFREESPACEEX)(LPCSTR,
   PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER);

int WINAPI WinMain(	HINSTANCE hInstance,
					HINSTANCE hPrevInstance,
					LPTSTR    lpCmdLine,
					int       nCmdShow)
{

	unsigned int*	pData = 0;
	
	HANDLE			hDriver;
	HANDLE			hActiveDriver;
	BOOL			bRet = FALSE;

	printf("Disk function test program\n");
	printf("Built %s %s\n\n",__DATE__,__TIME__); 

	InitDriver( hDriver, hActiveDriver );

	
// Close the driver
	if (hDriver != INVALID_HANDLE_VALUE)
	{
		bRet = CloseHandle(hDriver);
		if (bRet == FALSE)
		{
			RETAILMSG(1, (TEXT("Unable to close LED driver ")));
		}
		else
		{
			RETAILMSG(1, (TEXT("LED driver Closed")));
		}
	}

	#ifdef LOAD_DRIVER
		if (hActiveDriver != INVALID_HANDLE_VALUE)
		{
			bRet = DeactivateDevice(hActiveDriver);
			if (bRet == FALSE)
			{
				RETAILMSG(1, (TEXT("Unable to unload LED driver ")));
			}
			else
			{
				RETAILMSG(1, (TEXT("LED driver Unloaded")));
			}
		}
	#endif

	return 0;
}


int InitDriver( HANDLE hDriver, HANDLE hActiveDriver )
{
//int _tmain(int argc, TCHAR *argv[], TCHAR *envp[])
//{
#define LER_DRIVER_NAME TEXT("LED1:")


	#ifdef LOAD_DRIVER
//		HANDLE hActiveDriver = INVALID_HANDLE_VALUE;
	#endif
		BOOL bRet = FALSE;
//		HANDLE hDriver = INVALID_HANDLE_VALUE;
		DWORD dwBlinkLoop = 4;
		DWORD dwBytesReturned = 0;
		DWORD dwDummyBuffer = 12345;
		DWORD dwDummyRetBuffer = 0;

	#ifdef LOAD_DRIVER
		// Ask Device Manager to load the driver
		hActiveDriver = ActivateDeviceEx(LED_DRIVER_REG_PATH, NULL, 0, NULL);
		if (hActiveDriver == INVALID_HANDLE_VALUE)
	    {
			RETAILMSG(1, (TEXT("Unable to load driver : %s"),LED_DRIVER_REG_PATH));
			return -1;
		}
		else
		{
			RETAILMSG(1, (TEXT("LED driver loaded.")));

		}
	#endif

		// Open the driver
		hDriver = CreateFile (LER_DRIVER_NAME, 
							  GENERIC_READ| GENERIC_WRITE,
							  FILE_SHARE_READ | FILE_SHARE_WRITE,
							  NULL,
							  OPEN_EXISTING,
							  FILE_ATTRIBUTE_NORMAL,
							  NULL);

		if (hDriver == INVALID_HANDLE_VALUE)
		{
			RETAILMSG(1, (TEXT("Unable to open LED driver : please check LOAD_DRIVER")));
			return 0;
		}

		// Make the Led Blinking
		while (dwBlinkLoop--)
		{
			// Swith on/off the LED
			bRet = DeviceIoControl(hDriver,
									(dwBlinkLoop % 2)?IOCTL_LED_ON:IOCTL_LED_OFF,
									&dwDummyBuffer, sizeof(dwDummyBuffer),
									&dwDummyRetBuffer, sizeof(dwDummyRetBuffer),
									&dwBytesReturned,
									NULL);
			if (bRet == FALSE)
			{
				RETAILMSG(1, (TEXT("IoControl call to LED driver failed")));            
			}
			// Wait .3 sec.
			Sleep (300);
		}



		return 0;
}


