From b6ae1c6a5e62f4d81dce255b534aae3f25040576 Mon Sep 17 00:00:00 2001
From: jsiegle <jsiegle@mit.edu>
Date: Sat, 15 Jun 2013 15:11:38 -0400
Subject: [PATCH] Spikes are now written to disk through the SpikeDisplayCanvas

---
 Source/Processors/SpikeDetector.cpp                    |  2 ++
 Source/Processors/Visualization/SpikeDisplayCanvas.cpp | 10 +++++++++-
 Source/Processors/Visualization/SpikeDisplayCanvas.h   |  1 +
 Source/Processors/Visualization/SpikeObject.cpp        |  5 +----
 Source/Processors/Visualization/SpikeObject.h          |  2 +-
 5 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/Source/Processors/SpikeDetector.cpp b/Source/Processors/SpikeDetector.cpp
index 48d8c18b0..7ee4348b5 100755
--- a/Source/Processors/SpikeDetector.cpp
+++ b/Source/Processors/SpikeDetector.cpp
@@ -333,6 +333,8 @@ void SpikeDetector::addSpikeEvent(SpikeObject* s, MidiBuffer& eventBuffer, int p
 
     // std::cout << "Adding spike event for index " << peakIndex << std::endl;
 
+    s->eventType = SPIKE_EVENT_CODE;
+
     int numBytes = packSpike(s, spikeBuffer, 256);
 
     eventBuffer.addEvent(spikeBuffer, numBytes, peakIndex);
diff --git a/Source/Processors/Visualization/SpikeDisplayCanvas.cpp b/Source/Processors/Visualization/SpikeDisplayCanvas.cpp
index a1654099d..cf904d769 100755
--- a/Source/Processors/Visualization/SpikeDisplayCanvas.cpp
+++ b/Source/Processors/Visualization/SpikeDisplayCanvas.cpp
@@ -416,6 +416,9 @@ SpikePlot::SpikePlot(SpikeDisplayCanvas* sdc, int elecNum, int p, String name_)
         rangeButtons.add(rangeButton);
     }
 
+    spikeBuffer = new uint8_t[MAX_SPIKE_BUFFER_LEN]; // MAX_SPIKE_BUFFER_LEN defined in SpikeObject.h
+
+
 }
 
 SpikePlot::~SpikePlot()
@@ -536,7 +539,12 @@ void SpikePlot::closeFile()
 void SpikePlot::writeSpike(const SpikeObject& s)
 {
 
-    // write spike to the file
+
+    packSpike(&s, spikeBuffer, 256);
+
+    fwrite(spikeBuffer, 1, 256, file);
+
+
 }
 
 String SpikePlot::generateHeader()
diff --git a/Source/Processors/Visualization/SpikeDisplayCanvas.h b/Source/Processors/Visualization/SpikeDisplayCanvas.h
index b9ba2eccb..ade7bd6c8 100755
--- a/Source/Processors/Visualization/SpikeDisplayCanvas.h
+++ b/Source/Processors/Visualization/SpikeDisplayCanvas.h
@@ -236,6 +236,7 @@ private:
     FILE* file;
     String filename;
     File dataDirectory;
+    uint8_t* spikeBuffer;
 
 };
 
diff --git a/Source/Processors/Visualization/SpikeObject.cpp b/Source/Processors/Visualization/SpikeObject.cpp
index c2665d123..bb7ce020b 100755
--- a/Source/Processors/Visualization/SpikeObject.cpp
+++ b/Source/Processors/Visualization/SpikeObject.cpp
@@ -27,16 +27,13 @@
 #include "time.h"
 
 // Simple method for serializing a SpikeObject into a string of bytes
-int packSpike(SpikeObject* s, uint8_t* buffer, int bufferSize)
+int packSpike(const SpikeObject* s, uint8_t* buffer, int bufferSize)
 {
 
     //int reqBytes = 1 + 4 + 2 + 2 + 2 + 2 * s->nChannels * s->nSamples + 2 * s->nChannels * 2;
 
     int idx = 0;
 
-    s->eventType = SPIKE_EVENT_CODE;
-
-
     memcpy(buffer+idx, &(s->eventType), 1);
     idx += 1;
 
diff --git a/Source/Processors/Visualization/SpikeObject.h b/Source/Processors/Visualization/SpikeObject.h
index 1bd73f2ec..5a71b9e5b 100755
--- a/Source/Processors/Visualization/SpikeObject.h
+++ b/Source/Processors/Visualization/SpikeObject.h
@@ -68,7 +68,7 @@ struct SpikeObject
 };
 
 /** Simple method for serializing a SpikeObject into a string of bytes, returns true is the packaged spike buffer is valid */
-int packSpike(SpikeObject* s, uint8_t* buffer, int bufferLength);
+int packSpike(const SpikeObject* s, uint8_t* buffer, int bufferLength);
 
 /** Simple method for deserializing a string of bytes into a Spike object, returns true is the provided spike buffer is valid */
 bool unpackSpike(SpikeObject* s, const uint8_t* buffer, int bufferLength);
-- 
GitLab