2021-10-14 13:47:35 +02:00

82 lines
2.6 KiB
C++
Executable File

#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 <thread>
#include <mutex>
#include <condition_variable>
#include <sys/timeb.h>
#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<CString>& selectedChannelNames, const size_t sampling, const size_t nChannel, const size_t nSamplePerSentBlock) override;
void stopHook() override;
void loopHook(std::deque<std::vector<float>>& 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<SExternalStimulation> 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<std::thread> m_ESthreadPtr;
bool m_IsESThreadRunning = false;
std::mutex m_es_mutex;
std::condition_variable m_esAvailable;
};
} // namespace Plugins
} // namespace AcquisitionServer
} // namespace OpenViBE