// NSSPTest.cpp : Defines the entry point for the application.
//
// 12oct05 ak
// - add introductory information to debug output
// - display characters read during write
//

#include "stdafx.h"
#include "MapIO.hpp"
#include "gpio.h"
#include "ssp.h"
#include "clk.h"
#include <windows.h>
#include "resource.h"
#include <stdio.h>

volatile GPIO_REGS		*GpioRegPtr = NULL;
volatile SSP_REGS		*SspRegPtr  = NULL;
volatile CLKMAN_REGS	*v_pClkRegs	= NULL;

BOOL testGPIO()
{
	int		i;
	ULONG gpdr = 0x03 << 1;

    for(i = 0; i < 100; i++)
	{
//		WRITE_REGISTER_ULONG(&GpioRegPtr->GPSR_3, gpdr);
//		WRITE_REGISTER_ULONG(&GpioRegPtr->GPCR_3, gpdr);
	}
	return TRUE;
}

int WINAPI WinMain(	HINSTANCE hInstance,
					HINSTANCE hPrevInstance,
					LPTSTR    lpCmdLine,
					int       nCmdShow)
{
	unsigned char	Hello[]="ADS NSSP",
		            test;

	test = 'x';
	printf("hit c to contine \n");
//	while(scanf("%c", &test) != 'c');

	
	RETAILMSG (1,(TEXT("\r\n* NSSPTest.exe: Sends a test message out the NSSP port.\r\n")));
	RETAILMSG (TRUE, (L"  720020-11693 built %s %s\r\n",TEXT(__DATE__),TEXT(__TIME__))); 

	GpioRegPtr = (GPIO_REGS *)MapPhysicalAddr((GPIO_REGS *)GPIO_BASE_PHYSICAL,sizeof(GPIO_REGS));	// 1 Page

	if(GpioRegPtr == NULL)
	{
		RETAILMSG(1,(L" Error 'cause GpioRegPtr == NULL \r\n"));
		return 0;
	}

	SspRegPtr = (SSP_REGS *)MapPhysicalAddr((SSP_REGS *)NSSP_BASE_PHYSICAL,sizeof(SSP_REGS));	// 1 Page

	if(SspRegPtr == NULL)
	{
		RETAILMSG(1,(L" Error 'cause SspRegPtr == NULL \r\n"));
		return 0;
	}

	v_pClkRegs = (CLKMAN_REGS *)MapPhysicalAddr((CLKMAN_REGS *)CLK_BASE_PHYSICAL,sizeof(CLKMAN_REGS));	// 1 Page

	if(v_pClkRegs == NULL)
	{
		RETAILMSG(1,(L" Error 'cause v_pClkRegs == NULL \r\n"));
		return 0;
	}

	InitNSSP();

//	testGPIO();

	for(int i=0;i<10000;i++)
	{
		printf("Sending SSP Message\n");
		SendSSPMessage(Hello, sizeof(Hello));
		Sleep(1000);
	}

	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"));
	return 0;
}

