diff --git a/Builds/Linux/build/pipetest.bit b/Builds/Linux/build/pipetest.bit new file mode 100644 index 0000000000000000000000000000000000000000..366b41de0b4be0eab002bd1cf8969fdd82bbbf77 Binary files /dev/null and b/Builds/Linux/build/pipetest.bit differ diff --git a/Source/Processors/DataThreads/DataThread.cpp b/Source/Processors/DataThreads/DataThread.cpp index dd83b847c237fe7672fceedc8ffd7da0d43e3e2f..034d66ac93e64582e14ae996c9762ef7f1bd6c60 100644 --- a/Source/Processors/DataThreads/DataThread.cpp +++ b/Source/Processors/DataThreads/DataThread.cpp @@ -55,6 +55,9 @@ void DataThread::run() { } DataBuffer* DataThread::getBufferAddress() { + + std::cout << "Setting buffer address to " << dataBuffer << std::endl; + return dataBuffer; } diff --git a/Source/Processors/DataThreads/FPGAThread.cpp b/Source/Processors/DataThreads/FPGAThread.cpp index 8e0384c6085b41daeb3f46ed608d2f0fc5c90ce3..9a6b77667fd0f2c9d2030e3c082d4b0f2af927d5 100644 --- a/Source/Processors/DataThreads/FPGAThread.cpp +++ b/Source/Processors/DataThreads/FPGAThread.cpp @@ -55,27 +55,48 @@ FPGAThread::FPGAThread(SourceNode* sn) : DataThread(sn), std::cout << "FPGA interface initialized." << std::endl; + std::cout << "DataBuffer address is " << dataBuffer << std::endl; + dataBuffer = new DataBuffer(32, 10000); - startThread(); + std::cout << "DataBuffer address is " << dataBuffer << std::endl; + + //deviceFound = true; + + //startThread(); } FPGAThread::~FPGAThread() { - stopThread(500); - std::cout << "FPGA interface destroyed." << std::endl; // probably not the best way to do this: - delete dataBuffer; + deleteAndZero(dataBuffer); delete dev; dev = 0; - dataBuffer = 0; } +bool FPGAThread::startAcquisition() +{ + startThread(); + + //isTransmitting = true; + + return true; +} + +bool FPGAThread::stopAcquisition() +{ + if (isThreadRunning()) { + signalThreadShouldExit(); + } + + return true; +} + bool FPGAThread::updateBuffer() { dev->ReadFromPipeOut(0xA0, sizeof(pBuffer), pBuffer); @@ -107,7 +128,8 @@ bool FPGAThread::updateBuffer() { j += 3; //thisSample[n] = float( hi - 256)/256; - thisSample[n] = float(float(hi)*256 + lo - 32768)/32768; + uint16 samp = ((hi << 8) + lo); + thisSample[n] = (float(samp) - 32768.0f)/92768.0f; } dataBuffer->addToBuffer(thisSample,1); @@ -115,6 +137,7 @@ bool FPGAThread::updateBuffer() { j++; // keep scanning for timecodes } + return true; } diff --git a/Source/Processors/DataThreads/FPGAThread.h b/Source/Processors/DataThreads/FPGAThread.h index bc87154493ad0f60ecbee271ecad010113f9cda7..810ee5f5acf9eef39ad75c95c2025ad8abf20ba7 100644 --- a/Source/Processors/DataThreads/FPGAThread.h +++ b/Source/Processors/DataThreads/FPGAThread.h @@ -55,8 +55,8 @@ public: ~FPGAThread(); bool foundInputSource() {return true;} - bool startAcquisition() {return true;} - bool stopAcquisition() {return true;} + bool startAcquisition(); + bool stopAcquisition(); int getNumChannels() {return 32;} float getSampleRate() {return 25000.0;} @@ -69,12 +69,10 @@ private: int m_u32SegmentSize; - unsigned char pBuffer[500000]; // request a 1MB block of data + unsigned char pBuffer[50000]; // request a 1MB block of data bool isRunning; - DataBuffer* dataBuffer; - float thisSample[32]; int numchannels; diff --git a/Source/Processors/ProcessorGraph.cpp b/Source/Processors/ProcessorGraph.cpp index b690742cd4c8d816e04c9b313da5954c7f0a0de2..33b5fa2e99160e4f3868822987fb18d9a3373906 100644 --- a/Source/Processors/ProcessorGraph.cpp +++ b/Source/Processors/ProcessorGraph.cpp @@ -305,7 +305,8 @@ GenericProcessor* ProcessorGraph::createProcessorFromDescription(String& descrip if (processorType.equalsIgnoreCase("Sources")) { if (subProcessorType.equalsIgnoreCase("Intan Demo Board") || - subProcessorType.equalsIgnoreCase("File Reader")) { + subProcessorType.equalsIgnoreCase("File Reader") || + subProcessorType.equalsIgnoreCase("Custom FPGA")) { // only one Intan Demo Board at a time, please if (!processorWithSameNameExists(subProcessorType)) { @@ -330,6 +331,7 @@ GenericProcessor* ProcessorGraph::createProcessorFromDescription(String& descrip } else if (processorType.equalsIgnoreCase("Filters")) { if (subProcessorType.equalsIgnoreCase("Bandpass Filter")) { + std::cout << "Creating a new filter." << std::endl; processor = new FilterNode(); diff --git a/Source/Processors/SourceNode.cpp b/Source/Processors/SourceNode.cpp index e22db7a14f7720cc7b432ce45ef06bcb51293873..37c6fd713269f862f77c643eab14086ecaca63e2 100644 --- a/Source/Processors/SourceNode.cpp +++ b/Source/Processors/SourceNode.cpp @@ -30,6 +30,9 @@ SourceNode::SourceNode(const String& name_) dataThread(0), inputBuffer(0), sourceCheckInterval(2000), wasDisabled(true) { + + std::cout << "creating source node." << std::endl; + if (getName().equalsIgnoreCase("Intan Demo Board")) { dataThread = new IntanThread(this); } else if (getName().equalsIgnoreCase("Custom FPGA")) { @@ -61,7 +64,9 @@ void SourceNode::updateSettings() { if (inputBuffer == 0 && dataThread != 0) { + inputBuffer = dataThread->getBufferAddress(); + std::cout << "Input buffer address is " << inputBuffer << std::endl; } } diff --git a/Source/Processors/Visualization/LfpDisplayCanvas.cpp b/Source/Processors/Visualization/LfpDisplayCanvas.cpp index 7e7a9251e8b33883698a0887ba87a4fd18a4e315..54ce9160e9b29eff65374dc9255a6646d83ce4e2 100644 --- a/Source/Processors/Visualization/LfpDisplayCanvas.cpp +++ b/Source/Processors/Visualization/LfpDisplayCanvas.cpp @@ -26,7 +26,7 @@ LfpDisplayCanvas::LfpDisplayCanvas(LfpDisplayNode* n) : processor(n), xBuffer(0), yBuffer(0), plotHeight(40), selectedChan(-1), screenBufferIndex(0), - timebase(1.0f), displayGain(5.0f), displayBufferIndex(0) + timebase(1.0f), displayGain(15.0f), displayBufferIndex(0) { nChans = processor->getNumInputs(); diff --git a/Source/UI/ProcessorList.cpp b/Source/UI/ProcessorList.cpp index 405b0eed98c0ebd65f23e7a7b850d08214f5479f..df249380f26ca5d6a3f7ad241771ff172c75eaa6 100644 --- a/Source/UI/ProcessorList.cpp +++ b/Source/UI/ProcessorList.cpp @@ -53,7 +53,7 @@ ProcessorList::ProcessorList() : isDragging(false), ProcessorListItem* sources = new ProcessorListItem("Sources"); sources->addSubItem(new ProcessorListItem("Intan Demo Board")); sources->addSubItem(new ProcessorListItem("Signal Generator")); - //sources->addSubItem(new ProcessorListItem("Custom FPGA")); + sources->addSubItem(new ProcessorListItem("Custom FPGA")); sources->addSubItem(new ProcessorListItem("File Reader")); sources->addSubItem(new ProcessorListItem("Event Generator"));