/*
  ==============================================================================

    SourceNode.h
    Created: 7 May 2011 5:07:14pm
    Author:  jsiegle

  ==============================================================================
*/

#ifndef __SOURCENODE_H_DCE798F1__
#define __SOURCENODE_H_DCE798F1__

#include "../../JuceLibraryCode/JuceHeader.h"
#include <ftdi.h>
#include <stdio.h>
#include "DataThreads/DataBuffer.h"
#include "DataThreads/IntanThread.h"
#include "DataThreads/FPGAThread.h"
#include "DataThreads/FileReaderThread.h"
#include "GenericProcessor.h"
#include "../UI/UIComponent.h"

class SourceNode : public GenericProcessor,
				   public Timer

{
public:
	
	// real member functions:
	SourceNode(const String& name);
	~SourceNode();

	void enabledState(bool t);

	//void setName(const String name_);
	
	void prepareToPlay (double sampleRate, int estimatedSamplesPerBlock);
	void releaseResources();
	void process(AudioSampleBuffer &buffer, MidiBuffer &midiMessages, int& nSamples);

	void setParameter (int parameterIndex, float newValue);

	void setConfiguration(Configuration* cf);

	float getSampleRate();

	// void setSourceNode(GenericProcessor* sn);
	// void setDestNode(GenericProcessor* dn);

	AudioProcessorEditor* createEditor();
	bool hasEditor() const {return true;}

	bool enable();
	bool disable();

	bool isSource() {return true;}

	void acquisitionStopped();
	
private:

	int sourceCheckInterval;

	//const String name;
	void timerCallback();

	DataThread* dataThread;
	DataBuffer* inputBuffer;

	int* numSamplesInThisBuffer;

	JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SourceNode);

};


#endif  // __SOURCENODE_H_DCE798F1__