/* ------------------------------------------------------------------ This file is part of the Open Ephys GUI Copyright (C) 2014 Open Ephys ------------------------------------------------------------------ This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifndef NWBRECORDING_H #define NWBRECORDING_H #include <RecordingLib.h> #include "NWBFormat.h" namespace NWBRecording { class NWBRecordEngine : public RecordEngine { public: NWBRecordEngine(); ~NWBRecordEngine(); //Those are only the basic set of calls. Look at RecordEngine.cpp and RecordEngine.h for description on all possible hooks and the order they're called. String getEngineID() const override; void openFiles(File rootFolder, int experimentNumber, int recordingNumber) override; void closeFiles() override; void writeData(int writeChannel, int realChannel, const float* buffer, int size) override; void writeEvent(int eventIndex, const MidiMessage& event) override; void addSpikeElectrode(int index,const SpikeChannel* elec) override; void writeSpike(int electrodeIndex, const SpikeEvent* spike) override; void writeTimestampSyncText(uint16 sourceID, uint16 sourceIdx, int64 timestamp, float sourceSampleRate, String text) override; void resetChannels() override; void setParameter(EngineParameter& parameter) override; static RecordEngineManager* getEngineManager(); private: void resetChannels(bool resetSpikes); ScopedPointer<NWBFile> recordFile; Array<int> datasetIndexes; Array<int> writeChannelIndexes; Array<ContinuousGroup> continuousChannels; Array<const EventChannel*> eventChannels; Array<const SpikeChannel*> spikeChannels; HeapBlock<double> tsBuffer; size_t bufferSize; String identifierText; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(NWBRecordEngine); }; } #endif