Skip to content
Snippets Groups Projects
Commit fc9a0cb2 authored by jsiegle's avatar jsiegle
Browse files

Updated event passing code

parent ce76f2a9
No related branches found
No related tags found
No related merge requests found
......@@ -28,6 +28,9 @@ private:
AbstractFifo abstractFifo;
AudioSampleBuffer buffer;
int numChans;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (DataBuffer);
};
......
......@@ -31,7 +31,10 @@ DataThread::DataThread(SourceNode* s) : Thread ("Data Thread"), dataBuffer(0)
setPriority(10);
}
DataThread::~DataThread() {}
DataThread::~DataThread()
{
deleteAndZero(dataBuffer);
}
void DataThread::run() {
......
......@@ -64,6 +64,11 @@ public:
SourceNode* sn;
private:
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (DataThread);
};
......
......@@ -69,7 +69,7 @@ void EventNode::process(AudioSampleBuffer &buffer,
if (accumulator > getSampleRate()/Hz)
{
//std::cout << "Adding message." << std::endl;
addEvent(midiMessages, 10, i);
addEvent(midiMessages, TTL, i);
accumulator = 0;
}
......
......@@ -88,17 +88,16 @@ void GenericProcessor::resetConnections()
wasConnected = false;
}
void GenericProcessor::setNumSamples(MidiBuffer& midiMessages, int numberToAdd) {
void GenericProcessor::setNumSamples(MidiBuffer& midiMessages, int sampleIndex) {
uint8 data[2];
data[0] = numberToAdd >> 8; // most-significant byte
data[1] = numberToAdd & 0xFF; // least-significant byte
data[0] = BUFFER_SIZE; // most-significant byte
data[1] = nodeId; // least-significant byte
midiMessages.addEvent(data, // spike data
sizeof(data), // total bytes
-1); // sample index
2, // total bytes
sampleIndex); // sample index
}
......@@ -118,13 +117,13 @@ int GenericProcessor::getNumSamples(MidiBuffer& midiMessages) {
while (i.getNextEvent (message, samplePosition)) {
int numbytes = message.getRawDataSize();
uint8* dataptr = message.getRawData();
uint8* dataptr = message.getRawData();
if (message.getTimeStamp() < 0)
numRead = (*dataptr<<8) + *(dataptr+1);
if (*dataptr == BUFFER_SIZE)
{
numRead = message.getTimeStamp();
}
}
}
return numRead;
......@@ -321,18 +320,11 @@ int GenericProcessor::checkForEvents(MidiBuffer& midiMessages)
while (i.getNextEvent (message, samplePosition)) {
int numbytes = message.getRawDataSize();
uint8* dataptr = message.getRawData();
//int numbytes = message.getRawDataSize();
uint8* dataptr = message.getRawData();
//std::cout << " Bytes received: " << numbytes << std::endl;
//std::cout << " Message timestamp = " << message.getTimeStamp() << std::endl;
handleEvent(*dataptr, message);
if (message.getTimeStamp() >= 0)
{
int value = (*dataptr<<8) + *(dataptr+1);
//std::cout << " " << value << std::endl;
return value;
}
}
}
......@@ -341,12 +333,21 @@ int GenericProcessor::checkForEvents(MidiBuffer& midiMessages)
}
void GenericProcessor::addEvent(MidiBuffer& midiMessages, int numberToAdd, int sampleNum)
void GenericProcessor::addEvent(MidiBuffer& midiMessages,
uint8 type,
int sampleNum,
uint8 eventId,
uint8 eventChannel,
uint8 numBytes,
uint8* eventData)
{
uint8 data[2];
uint8 data[4+numBytes];
data[0] = numberToAdd >> 8; // most-significant byte
data[1] = numberToAdd & 0xFF; // least-significant byte
data[0] = type; // event type
data[1] = nodeId; // processor ID
data[2] = eventId; // event ID
data[3] = eventChannel; // event channel
memcpy(&data[4], eventData, numBytes);
midiMessages.addEvent(data, // spike data
sizeof(data), // total bytes
......
......@@ -158,17 +158,33 @@ public:
virtual bool stillHasSource() {return true;}
bool isEnabled;
bool wasConnected;
virtual AudioSampleBuffer* getContinuousBuffer() {return 0;}
virtual MidiBuffer* getEventBuffer() {return 0;}
int nextAvailableChannel;
int checkForEvents(MidiBuffer& mb);
void addEvent(MidiBuffer& mb, int a, int b);
bool isEnabled;
bool wasConnected;
// event buffers
virtual int checkForEvents(MidiBuffer& mb);
virtual void addEvent(MidiBuffer& mb,
uint8 type,
int sampleNum,
uint8 eventID = 0,
uint8 eventChannel = 0,
uint8 numBytes = 0,
uint8* data = 0);
virtual void handleEvent(int eventType, MidiMessage& event) {}
enum eventTypes
{
BUFFER_SIZE = 0,
PARAMETER_CHANGE = 1,
TTL = 2,
SPIKE = 3
};
int saveOrder;
int loadOrder;
......@@ -202,15 +218,15 @@ public:
virtual void generateDefaultChannelNames(StringArray&);
virtual void update(); // default node updating
virtual void updateSettings() {};
virtual void updateSettings() {} // custom node updating
int nodeId;
private:
void processBlock (AudioSampleBuffer &buffer, MidiBuffer &midiMessages);
const String name;
int nodeId;
int getNumSamples(MidiBuffer&);
void setNumSamples(MidiBuffer&, int);
......
......@@ -100,6 +100,7 @@ void LfpDisplayNode::setParameter (int parameterIndex, float newValue)
void LfpDisplayNode::process(AudioSampleBuffer &buffer, MidiBuffer &midiMessages, int& nSamples)
{
// 1. place any new samples into the displayBuffer
int samplesLeft = displayBuffer->getNumSamples() - displayBufferIndex;
if (nSamples < samplesLeft)
......
......@@ -27,7 +27,7 @@
SourceNode::SourceNode(const String& name_)
: GenericProcessor(name_),
dataThread(0),
dataThread(0), inputBuffer(0),
sourceCheckInterval(2000), wasDisabled(true)
{
if (getName().equalsIgnoreCase("Intan Demo Board")) {
......@@ -55,14 +55,14 @@ SourceNode::SourceNode(const String& name_)
SourceNode::~SourceNode()
{
//if (dataThread != 0)
// deleteAndZero(dataThread);
//config->removeDataSource(this);
}
void SourceNode::updateSettings()
{
if (inputBuffer == 0 && dataThread != 0)
{
inputBuffer = dataThread->getBufferAddress();
}
}
......@@ -122,7 +122,6 @@ void SourceNode::timerCallback()
//stopTimer(); // check for input source every two seconds
enabledState(true);
GenericEditor* ed = getEditor();
//ed->enable();
getEditorViewport()->makeEditorVisible(ed);
}
} else {
......@@ -130,7 +129,6 @@ void SourceNode::timerCallback()
std::cout << "No input source found." << std::endl;
enabledState(false);
GenericEditor* ed = getEditor();
//ed->disable();
getEditorViewport()->makeEditorVisible(ed);
}
}
......@@ -161,29 +159,6 @@ bool SourceNode::enable() {
stopTimer();
// bool return_code = true;
// if (getName().equalsIgnoreCase("Intan Demo Board")) {
// dataThread = new IntanThread();
// inputBuffer = dataThread->getBufferAddress();
// return_code = dataThread->threadStarted();
// if (!return_code)
// deleteAndZero(dataThread);
// } else if (getName().equalsIgnoreCase("Custom FPGA")) {
// dataThread = new FPGAThread();
// inputBuffer = dataThread->getBufferAddress();
// } else if (getName().equalsIgnoreCase("File Reader")) {
// dataThread = new FileReaderThread();
// inputBuffer = dataThread->getBufferAddress();
// }
// return return_code;
}
bool SourceNode::disable() {
......@@ -217,22 +192,14 @@ void SourceNode::acquisitionStopped()
}
void SourceNode::process(AudioSampleBuffer &outputBuffer,
MidiBuffer &midiMessages,
void SourceNode::process(AudioSampleBuffer &buffer,
MidiBuffer &events,
int& nSamples)
{
//std::cout << "Source node processing." << std::endl;
//std::cout << outputBuffer.getNumChannels() << " " << outputBuffer.getNumSamples() << std::endl;
outputBuffer.clear();
nSamples = inputBuffer->readAllFromBuffer(outputBuffer,outputBuffer.getNumSamples());
// //setNumSamples(numRead); // write the total number of samples
// setNumSamples(midiMessages, numRead);
//std::cout << numRead << std::endl;
//addMidiEvent(midiMessages,10, 10);
buffer.clear();
nSamples = inputBuffer->readAllFromBuffer(buffer,buffer.getNumSamples());
}
......
......@@ -31,8 +31,6 @@
/**
--UNDER CONSTRUCTION--
Detects spikes in a continuous signal and outputs events containing the spike data.
@see GenericProcessor, SpikeDetectorEditor
......
......@@ -92,6 +92,12 @@ void LfpDisplayCanvas::update()
if (nChans < 200 && nChans > 0)
screenBuffer->setSize(nChans, 10000);
//sampleRate = processor->getSampleRate();
screenBuffer->clear();
repaint();
totalHeight = (plotHeight+yBuffer)*nChans + yBuffer;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment