//******************************************************************************
//Viewer			-	Program to interface with external FPGA and view
//							oscilloscope traces
//
//By				-	Yi Yao			http://yyao.ca/
//Date				-	2006-01-05
//******************************************************************************

#include <math.h>
#include <stdio.h>
#include <string.h>
#include <GL/glut.h>
#include "Oscilloscope.h"


//**************************************
//Global variables

const int	MaxSamples = 8192;			//Buffer size
Oscilloscope	MyScope(MaxSamples);	//Allow for 1 second captures

float	BorderClr[3] =	{1, 1, 1};		//Default colour for borders
float	Ch1TrClr[3] =	{1, 1, 0};		//Default colour for channel 1 traces
float	GridClr[3] =	{1, 1, 1};		//Default colour for grid
float	TextClr[3] =	{0, 1, 0};		//Default colour for text
float	PauseClr[3] =	{1, 0, 0};		//Colour for "Paused" text

int		DispLines = 1;					//Draws lines between 2 points

float	CurrVerticalShift = 0;			//Current vertical shift (Volts)
float	CurrTriggerLevel = 0;			//Current trigger voltage (Volts)
OscAmpLevels	CurrAmpLevel = X1;		//Current amplification level (enumerated)

const int		TimeSettingsCount = 7;	//Number of time settings possible
struct TimeSettingsStruct {				//Structure holding time settings
	char	Desc[10];					//	Description (n sec per div)
	int	SamplesOnScreen;				//	Number of samples displayed on screen
} TimeSettings[TimeSettingsCount];
int		CurrTimeSetting = 6;			//Current time setting

float	CurrAtten = 1;					//Current attenuation (ex: 10 means 1V input displayed as 10V)
int		Paused = 0;						//Whether or not the oscilloscope is paused

float	Samples[MaxSamples];			//Array were data is actually stored
int		NumSamples = 0;

//End of global variables
//**************************************


//**************************************
//Function definitions

void	main(int argc, char **argv);
void	DrawMainWindow(void);
float	GetVPerDiv(void);
void	HandleNormalKeys(unsigned char key, int x, int y);
void	HandleSpecialKeys(int key, int x, int y);
void	IdleProcessing(void);
void	InitScope(void);
void	InitVars(void);
void	SaveData(void);
void	WriteText(char *Text, float height, float x, float y, float z);

//End of function definitions
//**************************************
