#pragma once /** * \brief Acquisition Server plugin adding the capability to receive stimulations from external sources * * \author Anton Andreev * \author Jozef Legeny * * \note This plugin is deprecated. The users are recommended to use the TCP Tagging plugin instead. (11.05.2016) * */ #include #include #include #include #include "ovasIAcquisitionServerPlugin.h" namespace OpenViBE { namespace AcquisitionServer { class CAcquisitionServer; namespace Plugins { class CPluginExternalStimulations final : public IAcquisitionServerPlugin { // Plugin interface public: explicit CPluginExternalStimulations(const Kernel::IKernelContext& ctx); ~CPluginExternalStimulations() override {} bool startHook(const std::vector& selectedChannelNames, const size_t sampling, const size_t nChannel, const size_t nSamplePerSentBlock) override; void stopHook() override; void loopHook(std::deque>& vPendingBuffer, CStimulationSet& stimulationSet, const uint64_t start, const uint64_t end, const uint64_t sampleTime) override; void acceptNewConnectionHook() override { m_ExternalStimulations.clear(); } // Plugin implementation struct SExternalStimulation { uint64_t timestamp; uint64_t identifier; }; void addExternalStimulations(CStimulationSet* ss, Kernel::ILogManager& logm, const uint64_t start, const uint64_t end); void readExternalStimulations(); //void acquireExternalStimulationsVRPN(CStimulationSet* ss, Kernel::ILogManager& logm, uint64_t start, uint64_t end); struct timeb m_CTStartTime; //time when the acquisition process started in local computer time std::vector m_ExternalStimulations; bool m_IsExternalStimulationsEnabled = false; CString m_ExternalStimulationsQueueName; bool setExternalStimulationsEnabled(bool active); bool isExternalStimulationsEnabled() const { return m_IsExternalStimulationsEnabled; } // Debugging of external stimulations int m_DebugStimulationsLost = 0; int m_DebugExternalStimulationsSent = 0; int m_DebugCurrentReadIPCStimulations = 0; int m_DebugStimulationsReceivedEarlier = 0; int m_DebugStimulationsReceivedLate = 0; int m_DebugStimulationsReceivedWrongSize = 0; int m_DebugStimulationsBuffered = 0; //added for acquiring external stimulations std::unique_ptr m_ESthreadPtr; bool m_IsESThreadRunning = false; std::mutex m_es_mutex; std::condition_variable m_esAvailable; }; } // namespace Plugins } // namespace AcquisitionServer } // namespace OpenViBE