// test1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>
#include <commctrl.h>
#include <iostream>
#include "cspi_1.h"
#include "gpio.h"
#include "gpioRegisters.h"

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	int i;
	unsigned int uiTemp;
	uint32_t	written, 
				read;

	GPIO::InitializeGPIO();
	for(i=0; i<10000000; i++)
	{
//		GPIO::SetGPIO( gpio1::GPIO0 );
		GPIO::SetGPIO( gpio1::GPIO1 );
/*		GPIO::SetGPIO( gpio1::GPIO2 );
		GPIO::SetGPIO( gpio1::GPIO31 );
		uiTemp = regRead(gpio1::DR);
		DEBUGMSG(1, (_T("After Set,    gpio1::DR = 0x%8x\n"), uiTemp));
		uiTemp = regRead(gpio1::PSR);
		DEBUGMSG(1, (_T("After Set,   gpio1::PSR = 0x%8x\n"), uiTemp));
		GPIO::ClearGPIO( gpio1::GPIO0 );
*/		GPIO::ClearGPIO( gpio1::GPIO1 );
/*		GPIO::ClearGPIO( gpio1::GPIO2 );
		GPIO::ClearGPIO( gpio1::GPIO31 );
		uiTemp = regRead(gpio1::DR);
		DEBUGMSG(1, (_T("After Clear,  gpio1::DR = 0x%8x\n"), uiTemp));
		uiTemp = regRead(gpio1::PSR);
		DEBUGMSG(1, (_T("After Clear, gpio1::PSR = 0x%8x\n"), uiTemp));  */
	}
/*
	for(i=0; i<10; i++)
	{
		uiTemp = regRead(gpio1::DR);
		uiTemp = uiTemp | 0x80000109;
		regWrite(gpio1::DR, uiTemp);
		uiTemp = regRead(gpio1::DR);
		DEBUGMSG(1, (_T("i = %3d  After Set,   gpio1::DR = 0x%8x\n"), i, uiTemp));
		uiTemp = uiTemp & 0x7FFFFEF6;
		regWrite(gpio1::DR, uiTemp);
		uiTemp = regRead(gpio1::DR);
		DEBUGMSG(1, (_T("i = %3d  After Clear,   gpio1::DR = 0x%8x\n"), i, uiTemp));
	}
*/
	Polled_CSPI_1::InitializeMasterMode();
	Polled_CSPI_1::Enable();
	// Polled_CSPI_1::EnableLoopback();
	Polled_CSPI_1::DisableLoopback();

	DEBUGMSG(1, (_T("Test Started\n")));
	cout << "Test Started" << endl;
	written = 0;
	while (1) 
	{
//		Polled_CSPI_1::SendSample(written);
		read = Polled_CSPI_1::GetSample();
		if (written != read)
		{
//			cout << written << " does not equal " << read << endl;
//			DEBUGMSG(1, (_T("ERROR: Read = %d does not equal Written = %d \n"), read, written));
		}
//		DEBUGMSG(1, (_T("Read = %d  Written = %d \n"), read, written));
//		cout << "Read = " << read << " Written = " << written++ << endl;
	}

	return 0;
}

