Commit bac04899 authored by nfoy's avatar nfoy
Browse files

merge wip-gserrier-stim-generator

parents 4f383a8b aa25535a
......@@ -183,6 +183,7 @@ ADD_DEFINITIONS(-DOV_CMAKE_PATH_BIN="${CMAKE_INSTALL_FULL_BINDIR}")
ADD_DEFINITIONS(-DOV_CMAKE_PATH_DATA="${CMAKE_INSTALL_FULL_DATADIR}/openvibe")
ADD_DEFINITIONS(-DOV_CMAKE_PATH_LIB="${CMAKE_INSTALL_FULL_LIBDIR}")
ADD_SUBDIRECTORY("build-tool/")
# Traverse these directories and build their components
ADD_SUBDIRECTORY("common/")
ADD_SUBDIRECTORY("openvibe/")
......@@ -199,6 +200,8 @@ ADD_SUBDIRECTORY("documentation/") # needs to be the last since it uses the list
IF(openvibe-documentation)
ADD_DEPENDENCIES(openvibe-documentation openvibe-plugin-inspector)
ENDIF(openvibe-documentation)
ADD_DEPENDENCIES(openvibe-toolkit openvibe-stimulation-generator )
# make a copy of the dependency script, this is done so we can use the same launch scripts both in win install and win devel situations.
IF(WIN32)
INSTALL(PROGRAMS ${CMAKE_SOURCE_DIR}/scripts/win32-dependencies.cmd DESTINATION ${CMAKE_INSTALL_FULL_BINDIR} RENAME "openvibe-set-env.cmd")
......
# Add all the subdirs as projects of the named branch
OV_ADD_PROJECTS("BUILD_TOOL")
PROJECT(openvibe-stimulation-generator)
SET(PROJECT_VERSION_MAJOR ${OV_GLOBAL_VERSION_MAJOR})
SET(PROJECT_VERSION_MINOR ${OV_GLOBAL_VERSION_MINOR})
SET(PROJECT_VERSION_PATCH ${OV_GLOBAL_VERSION_PATCH})
SET(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH})
FILE(GLOB_RECURSE source_files src/*.cpp src/*.h src/*.inl)
ADD_EXECUTABLE(openvibe-stimulation-generator ${source_files})
if(UNIX)
SET(stim_generator_path "${CMAKE_CURRENT_BINARY_DIR}" CACHE INTERNAL "stim_generator_path")
else()
get_property(path_to_target TARGET openvibe-stimulation-generator PROPERTY LOCATION)
SET(stim_generator_path "${path_to_target}" CACHE INTERNAL "stim_generator_path")
endif()
# ---------------------------------
# Target macros
# Defines target operating system
# Defines target architecture
# Defines target compiler
# ---------------------------------
IF(WIN32)
ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE)
ADD_DEFINITIONS(-DTARGET_OS_Windows)
ADD_DEFINITIONS(-DTARGET_ARCHITECTURE_i386)
ADD_DEFINITIONS(-DTARGET_COMPILER_VisualStudio)
ENDIF(WIN32)
IF(UNIX)
# ADD_DEFINITIONS(-fvisibility=hidden) # This flag should be present... man gcc
ADD_DEFINITIONS(-g)
ADD_DEFINITIONS(-fnon-call-exceptions)
ADD_DEFINITIONS(-DTARGET_OS_Linux)
ADD_DEFINITIONS(-DTARGET_ARCHITECTURE_i386)
ADD_DEFINITIONS(-DTARGET_COMPILER_GCC)
ENDIF(UNIX)
#include "ovbt_sg_defines.h"
#include "ovbt_sg_file_generator_base.h"
#include <fstream>
using namespace std;
bool CCppCodeGenerator::openFile(const char* sFilename)
{
m_oFile.open(sFilename, ios::out | ios::trunc);
if(!m_oFile.is_open())
return false;
m_oFile << "#include \"toolkit/ovtk_all.h\"" << endl << endl;
m_oFile << "using namespace OpenViBE;" << endl;
m_oFile << "using namespace OpenViBE::Kernel;" << endl;
m_oFile << "using namespace OpenViBEToolkit;" << endl << endl << endl;
m_oFile << "boolean OpenViBEToolkit::initializeStimulationList(const IKernelContext& rKernelContext)" << endl;
m_oFile << "{" << endl;
m_oFile << "\tITypeManager& l_rTypeManager=rKernelContext.getTypeManager();" << endl << endl;
return true;
}
bool CCppCodeGenerator::appendStimulation(SStimulation &rStim)
{
m_oFile << "\tl_rTypeManager.registerEnumerationEntry(OV_TypeId_Stimulation, \""
<< rStim.m_sName
<< "\", "
<< rStim.m_sId
<< ");"
<< endl;
return true;
}
bool CCppCodeGenerator::closeFile(void)
{
m_oFile << endl << "\treturn true;" << endl;
m_oFile << "}" << endl;
m_oFile.close();
return true;
}
#include "ovbt_sg_defines.h"
#include "ovbt_sg_file_generator_base.h"
#include <fstream>
using namespace std;
bool CCppDefineGenerator::openFile(const char* sFilename)
{
m_oFile.open(sFilename, ios::out | ios::trunc);
if(!m_oFile.is_open())
return false;
m_oFile << "#ifndef __OpenViBEToolkit_Stimulations_Defines_H__" << endl;
m_oFile << "#define __OpenViBEToolkit_Stimulations_Defines_H__" << endl << endl;
return true;
}
bool CCppDefineGenerator::appendStimulation(SStimulation &rStim)
{
m_oFile << "#define " << rStim.m_sId << " " << rStim.m_sHexaCode << endl;
return true;
}
bool CCppDefineGenerator::closeFile(void)
{
m_oFile << endl << "#endif // __OpenViBEToolkit_Stimulations_Defines_H__" << endl;
m_oFile.close();
return true;
}
#ifndef DEFINES_H
#define DEFINES_H
#include <string>
struct SStimulation{
std::string m_sName;
std::string m_sId;
std::string m_sHexaCode;
};
#endif
#include "ovbt_sg_defines.h"
#include <fstream>
class CFileGeneratorBase{
public:
virtual bool openFile(const char* sFilename) =0;
virtual bool appendStimulation(SStimulation &rStim) =0;
virtual bool closeFile(void) =0;
protected:
std::ofstream m_oFile;
};
class CCppDefineGenerator: public CFileGeneratorBase{
public:
virtual bool openFile(const char* sFilename);
virtual bool appendStimulation(SStimulation &rStim);
virtual bool closeFile(void);
};
class CCppCodeGenerator: public CFileGeneratorBase{
public:
virtual bool openFile(const char* sFilename);
virtual bool appendStimulation(SStimulation &rStim);
virtual bool closeFile(void);
};
class CMatlabGenerator: public CFileGeneratorBase{
public:
virtual bool openFile(const char* sFilename);
virtual bool appendStimulation(SStimulation &rStim);
virtual bool closeFile(void);
};
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include "ovbt_sg_defines.h"
#include "ovbt_sg_file_generator_base.h"
using namespace std;
typedef enum{
CPP, MATLAB, PYTHON, LUA, UNKNOWN
}generation_type;
generation_type parse_argument(string option)
{
if(option == "--cpp"){
return CPP;
}
else if(option == "--matlab"){
return MATLAB;
}
else if(option == "--python"){
return PYTHON;
}
else if(option == "--lua"){
return LUA;
}
else{
return UNKNOWN;
}
}
int generate_generator_list(vector<CFileGeneratorBase*> & rList, generation_type rType, int argc, char** argv)
{
switch(rType)
{
case CPP:
{
if(argc < 4){
return -1;
}
CFileGeneratorBase* gen = new CCppDefineGenerator();
if(!gen->openFile(argv[3])){
cerr << "Unable to open " << argv[3] << endl;
return -1;
}
rList.push_back(gen);
gen = new CCppCodeGenerator();
if(!gen->openFile(argv[4])){
cerr << "Unable to open " << argv[4] << endl;
return -1;
}
rList.push_back(gen);
return 0;
}
case MATLAB:
{
CFileGeneratorBase* gen = new CMatlabGenerator();
if(!gen->openFile(argv[3])){
cerr << "Unable to open " << argv[3] << endl;
return -1;
}
rList.push_back(gen);
return 0;
}
case PYTHON:
case LUA:
case UNKNOWN:
default:
{
cerr << "Unhandle type. Fatal error" << endl;
return -1;
}
}
}
int main (int argc, char** argv)
{
if(argc < 3)
return -1;
generation_type l_eType = parse_argument(argv[1]);
vector<SStimulation> l_oStimulationList;
vector<CFileGeneratorBase*> l_oGeneratorList;
ifstream l_oStimulationFile(argv[2]);
string l_sName, l_sId, l_sHexaCode;
while(l_oStimulationFile >> l_sName >> l_sId >> l_sHexaCode)
{
SStimulation l_oTemp = {l_sName, l_sId, l_sHexaCode};
l_oStimulationList.push_back(l_oTemp);
}
if(generate_generator_list(l_oGeneratorList, l_eType, argc, argv)){
return -1;
}
//Now we generate all files that needs to be done
for(vector<SStimulation>::iterator it = l_oStimulationList.begin(); it != l_oStimulationList.end(); ++it)
{
SStimulation &l_oTemp = *it;
for(vector<CFileGeneratorBase*>::iterator it_gen = l_oGeneratorList.begin(); it_gen != l_oGeneratorList.end(); ++it_gen)
{
(*it_gen)->appendStimulation(l_oTemp);
}
}
for(vector<CFileGeneratorBase*>::iterator it_gen = l_oGeneratorList.begin(); it_gen != l_oGeneratorList.end(); ++it_gen)
{
(*it_gen)->closeFile();
}
return 0;
}
#include "ovbt_sg_defines.h"
#include "ovbt_sg_file_generator_base.h"
#include <fstream>
using namespace std;
string getBrutHexaCode(string l_oFormatedHexaCode)
{
string res = l_oFormatedHexaCode;
res.erase(res.begin(), res.begin()+2);
return res;
}
bool CMatlabGenerator::openFile(const char* sFilename)
{
m_oFile.open(sFilename, ios::out | ios::trunc);
if(!m_oFile.is_open())
return false;
m_oFile << "function OV_stimulations()" << endl << endl;
m_oFile << "global OVTK_StimulationId_LabelStart;"<< endl;
m_oFile << "OVTK_StimulationId_LabelStart = uint64(hex2dec('00008100'));"<< endl << endl;
m_oFile << "global OVTK_StimulationId_LabelEnd;"<< endl;
m_oFile << "OVTK_StimulationId_LabelEnd = uint64(hex2dec('000081ff'));"<< endl << endl;
return true;
}
bool CMatlabGenerator::appendStimulation(SStimulation &rStim)
{
m_oFile << "\tglobal " << rStim.m_sId << ";" << endl;
m_oFile << "\t" << rStim.m_sId << " = uint64(hex2dec('" << getBrutHexaCode(rStim.m_sHexaCode)<< "'));" << endl << endl;
return true;
}
bool CMatlabGenerator::closeFile(void)
{
m_oFile << "end" << endl;
m_oFile.close();
return true;
}
......@@ -121,7 +121,7 @@ boolean CAlgorithmClassifierOneVsAll::classify(const IFeatureVector& rFeatureVec
const uint32 l_ui32FeatureVectorSize=rFeatureVector.getSize();
for(size_t l_iClassifierCounter = 0 ; l_iClassifierCounter < m_oSubClassifierList.size() ; ++l_iClassifierCounter )
for(uint64 l_iClassifierCounter = 0 ; l_iClassifierCounter < m_oSubClassifierList.size() ; ++l_iClassifierCounter )
{
IAlgorithmProxy* l_pSubClassifier = this->m_oSubClassifierList[l_iClassifierCounter];
TParameterHandler < IMatrix* > ip_pFeatureVector(l_pSubClassifier->getInputParameter(OVTK_Algorithm_Classifier_InputParameterId_FeatureVector));
......@@ -148,7 +148,7 @@ boolean CAlgorithmClassifierOneVsAll::classify(const IFeatureVector& rFeatureVec
{
l_oClassificationVector.push_back(CClassifierOutput(static_cast<float64>(op_f64ClassificationStateClass), static_cast<IMatrix*>(op_pClassificationValues)));
}
this->getLogManager() << LogLevel_Debug << static_cast<int64>(l_iClassifierCounter) << " " << (float64)op_f64ClassificationStateClass << " " << (*op_pProbabilityValues)[0] << " " << (*op_pProbabilityValues)[1] << "\n";
this->getLogManager() << LogLevel_Debug << static_cast<int64>(l_iClassifierCounter) << " " << static_cast<float64>(op_f64ClassificationStateClass) << " " << static_cast<float64>(*op_pProbabilityValues)[0] << " " << static_cast<float64>(*op_pProbabilityValues)[1] << "\n";
}
//Now, we determine the best classification
......
......@@ -5,8 +5,21 @@ SET(PROJECT_VERSION_MINOR ${OV_GLOBAL_VERSION_MINOR})
SET(PROJECT_VERSION_PATCH ${OV_GLOBAL_VERSION_PATCH})
SET(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH})
add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/share/OV_stimulations.m
DEPENDS openvibe-stimulation-generator ${openvibe-toolkit_SOURCE_DIR}/share/stimulation_list.txt
COMMAND ${stim_generator_path}/openvibe-stimulation-generator
--matlab
${openvibe-toolkit_SOURCE_DIR}/share/stimulation_list.txt
${CMAKE_CURRENT_SOURCE_DIR}/share/OV_stimulations.m
COMMENT "Generating matlab stimulation sources..." )
add_custom_target(generate_matlab_stimulations_file DEPENDS share/OV_stimulations.m)
FILE(GLOB_RECURSE source_files src/*.cpp src/*.h src/*.inl)
ADD_LIBRARY(${PROJECT_NAME} SHARED ${source_files})
add_dependencies(openvibe-plugins-matlab generate_matlab_stimulations_file)
SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
......
This diff is collapsed.
......@@ -313,6 +313,9 @@ boolean CBoxAlgorithmMatlabScripting::initialize(void)
// executes the pre-run routine that defines the global identifiers for streams and stimulations codes
l_sCommand = CString("run '") + OpenViBE::Directories::getDataDir() + "/plugins/matlab/OV_define.m'";
if(!checkFailureRoutine(::engEvalString(m_pMatlabEngine, l_sCommand) == 0, "An error occurred while calling OV_define.m")) return false;
l_sCommand = CString("run '") + OpenViBE::Directories::getDataDir() + "/plugins/matlab/OV_stimulations.m'";
if(!checkFailureRoutine(::engEvalString(m_pMatlabEngine, l_sCommand) == 0, "An error occurred while calling OV_stimulations.m")) return false;
// executes the pre-run routine that construct the ov_box object
char l_sInputCount[32]; sprintf(l_sInputCount, "%i", this->getStaticBoxContext().getInputCount());
......
......@@ -6,6 +6,19 @@ SET(PROJECT_VERSION_MINOR ${OV_GLOBAL_VERSION_MINOR})
SET(PROJECT_VERSION_PATCH ${OV_GLOBAL_VERSION_PATCH})
SET(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH})
#We need to generate the stimulation files
add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/include/toolkit/ovtk_stimulations.h ${CMAKE_CURRENT_SOURCE_DIR}/src/ovtk_stimulations.cpp
DEPENDS openvibe-stimulation-generator ${CMAKE_CURRENT_SOURCE_DIR}/share/stimulation_list.txt
COMMAND ${stim_generator_path}/openvibe-stimulation-generator
--cpp
${CMAKE_CURRENT_SOURCE_DIR}/share/stimulation_list.txt
${CMAKE_CURRENT_SOURCE_DIR}/include/toolkit/ovtk_stimulations.h
${CMAKE_CURRENT_SOURCE_DIR}/src/ovtk_stimulations.cpp
COMMENT "Generating stimulation sources..." )
add_custom_target(generate_stimulations_file DEPENDS include/toolkit/ovtk_stimulations.h src/ovtk_stimulations.cpp)
FILE(GLOB_RECURSE source_files src/*.cpp src/*.h src/*.inl src/*.hpp include/*.h)
INCLUDE_DIRECTORIES(${openvibe-toolkit_SOURCE_DIR}/include/)
......@@ -16,7 +29,9 @@ INCLUDE_DIRECTORIES(${openvibe-toolkit_SOURCE_DIR}/include/toolkit/deprecated/re
INCLUDE_DIRECTORIES(${openvibe-toolkit_SOURCE_DIR}/include/toolkit/training)
INCLUDE_DIRECTORIES(${openvibe-toolkit_SOURCE_DIR}/include/toolkit/tools)
ADD_LIBRARY(${PROJECT_NAME} SHARED ${source_files})
ADD_LIBRARY(${PROJECT_NAME} SHARED ${source_files} ${CMAKE_CURRENT_SOURCE_DIR}/src/ovtk_stimulations.cpp)
add_dependencies(openvibe-toolkit generate_stimulations_file)
SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
......
......@@ -87,10 +87,14 @@
//___________________________________________________________________//
// //
namespace OpenViBEToolkit
{
OV_API OpenViBE::boolean initialize(const OpenViBE::Kernel::IKernelContext& rKernelContext);
OV_API OpenViBE::boolean uninitialize(const OpenViBE::Kernel::IKernelContext& rKernelContext);
//
OpenViBE::boolean initializeStimulationList(const OpenViBE::Kernel::IKernelContext& rKernelContext);
};
#endif // __OpenViBEToolkit_All_H__
#ifndef __OpenViBEToolkit_Defines_H__
#define __OpenViBEToolkit_Defines_H__
#include "ovtk_stimulations.h"
//___________________________________________________________________//
// //
// OpenViBE toolkit input and output type identifiers //
......@@ -60,241 +62,17 @@
//___________________________________________________________________//
// //
#define OVTK_StimulationId_ExperimentStart 0x00008001
#define OVTK_StimulationId_ExperimentStop 0x00008002
#define OVTK_StimulationId_SegmentStart 0x00008003
#define OVTK_StimulationId_SegmentStop 0x00008004
#define OVTK_StimulationId_TrialStart 0x00008005
#define OVTK_StimulationId_TrialStop 0x00008006
#define OVTK_StimulationId_BaselineStart 0x00008007
#define OVTK_StimulationId_BaselineStop 0x00008008
#define OVTK_StimulationId_RestStart 0x00008009
#define OVTK_StimulationId_RestStop 0x0000800a
#define OVTK_StimulationId_VisualStimulationStart 0x0000800b
#define OVTK_StimulationId_VisualStimulationStop 0x0000800c
#define OVTK_StimulationId_VisualSteadyStateStimulationStart 0x00008010
#define OVTK_StimulationId_VisualSteadyStateStimulationStop 0x00008011
#define OVTK_StimulationId_Button1_Pressed 0x00008012
#define OVTK_StimulationId_Button1_Released 0x00008013
#define OVTK_StimulationId_Button2_Pressed 0x00008014
#define OVTK_StimulationId_Button2_Released 0x00008015
#define OVTK_StimulationId_Button3_Pressed 0x00008016
#define OVTK_StimulationId_Button3_Released 0x00008017
#define OVTK_StimulationId_Button4_Pressed 0x00008018
#define OVTK_StimulationId_Button4_Released 0x00008019
#define OVTK_StimulationId_Label(i) 0x00008100|((i)&0xff)
#define OVTK_StimulationId_LabelStart 0x00008100
#define OVTK_StimulationId_Label_00 0x00008100
#define OVTK_StimulationId_Label_01 0x00008101
#define OVTK_StimulationId_Label_02 0x00008102
#define OVTK_StimulationId_Label_03 0x00008103
#define OVTK_StimulationId_Label_04 0x00008104
#define OVTK_StimulationId_Label_05 0x00008105
#define OVTK_StimulationId_Label_06 0x00008106
#define OVTK_StimulationId_Label_07 0x00008107
#define OVTK_StimulationId_Label_08 0x00008108
#define OVTK_StimulationId_Label_09 0x00008109
#define OVTK_StimulationId_Label_0A 0x0000810a
#define OVTK_StimulationId_Label_0B 0x0000810b
#define OVTK_StimulationId_Label_0C 0x0000810c
#define OVTK_StimulationId_Label_0D 0x0000810d
#define OVTK_StimulationId_Label_0E 0x0000810e
#define OVTK_StimulationId_Label_0F 0x0000810f
#define OVTK_StimulationId_Label_10 0x00008110
#define OVTK_StimulationId_Label_11 0x00008111
#define OVTK_StimulationId_Label_12 0x00008112
#define OVTK_StimulationId_Label_13 0x00008113
#define OVTK_StimulationId_Label_14 0x00008114
#define OVTK_StimulationId_Label_15 0x00008115
#define OVTK_StimulationId_Label_16 0x00008116
#define OVTK_StimulationId_Label_17 0x00008117
#define OVTK_StimulationId_Label_18 0x00008118
#define OVTK_StimulationId_Label_19 0x00008119
#define OVTK_StimulationId_Label_1A 0x0000811a
#define OVTK_StimulationId_Label_1B 0x0000811b
#define OVTK_StimulationId_Label_1C 0x0000811c
#define OVTK_StimulationId_Label_1D 0x0000811d
#define OVTK_StimulationId_Label_1E 0x0000811e
#define OVTK_StimulationId_Label_1F 0x0000811f
#define OVTK_StimulationId_LabelEnd 0x000081ff
#define OVTK_StimulationId_Train 0x00008201
#define OVTK_StimulationId_Beep 0x00008202
#define OVTK_StimulationId_DoubleBeep 0x00008203
#define OVTK_StimulationId_EndOfFile 0x00008204
#define OVTK_StimulationId_Target 0x00008205
#define OVTK_StimulationId_NonTarget 0x00008206
#define OVTK_StimulationId_TrainCompleted 0x00008207
#define OVTK_StimulationId_Reset 0x00008208
// These are low-order stimulations that may be required for some legacy communication
// channels like parallel port handling only 1 byte codes. The name and number of these stimuli exactly matches.
#define OVTK_StimulationId_NumberStart 0x00000000
#define OVTK_StimulationId_Number_00 0x00000000
#define OVTK_StimulationId_Number_01 0x00000001
#define OVTK_StimulationId_Number_02 0x00000002
#define OVTK_StimulationId_Number_03 0x00000003
#define OVTK_StimulationId_Number_04 0x00000004
#define OVTK_StimulationId_Number_05 0x00000005
#define OVTK_StimulationId_Number_06 0x00000006
#define OVTK_StimulationId_Number_07 0x00000007
#define OVTK_StimulationId_Number_08 0x00000008
#define OVTK_StimulationId_Number_09 0x00000009
#define OVTK_StimulationId_Number_0A 0x0000000a
#define OVTK_StimulationId_Number_0B 0x0000000b
#define OVTK_StimulationId_Number_0C 0x0000000c
#define OVTK_StimulationId_Number_0D 0x0000000d
#define OVTK_StimulationId_Number_0E 0x0000000e
#define OVTK_StimulationId_Number_0F 0x0000000f
#define OVTK_StimulationId_Number_10 0x00000010
#define OVTK_StimulationId_Number_11 0x00000011
#define OVTK_StimulationId_Number_12 0x00000012
#define OVTK_StimulationId_Number_13 0x00000013
#define OVTK_StimulationId_Number_14 0x00000014
#define OVTK_StimulationId_Number_15 0x00000015
#define OVTK_StimulationId_Number_16 0x00000016
#define OVTK_StimulationId_Number_17 0x00000017
#define OVTK_StimulationId_Number_18 0x00000018
#define OVTK_StimulationId_Number_19 0x00000019
#define OVTK_StimulationId_Number_1A 0x0000001a
#define OVTK_StimulationId_Number_1B 0x0000001b
#define OVTK_StimulationId_Number_1C 0x0000001c
#define OVTK_StimulationId_Number_1D 0x0000001d
#define OVTK_StimulationId_Number_1E 0x0000001e
#define OVTK_StimulationId_Number_1F 0x0000001f
#define OVTK_StimulationId_NumberEnd 0x000000ff
//___________________________________________________________________//
// //
// GDF file format stimulation identifiers //
//___________________________________________________________________//
// //
#define OVTK_GDF_Artifact_EOG_Large 0x101
#define OVTK_GDF_Artifact_ECG 0x102
#define OVTK_GDF_Artifact_EMG 0x103
#define OVTK_GDF_Artifact_Movement 0x104
#define OVTK_GDF_Artifact_Failing_Electrode 0x105
#define OVTK_GDF_Artifact_Sweat 0x106
#define OVTK_GDF_Artifact_50_60_Hz_Interference 0x107
#define OVTK_GDF_Artifact_Breathing 0x108
#define OVTK_GDF_Artifact_Pulse 0x109
#define OVTK_GDF_Artifact_EOG_Small 0x10A
#define OVTK_GDF_Calibration 0x10F
#define OVTK_GDF_EEG_Sleep_Splindles 0x111
#define OVTK_GDF_EEG_K_Complexes 0x112
#define OVTK_GDF_EEG_Saw_Tooth_Waves 0x113
#define OVTK_GDF_EEG_Idling_EEG_Eyes_Open 0x114
#define OVTK_GDF_EEG_Idling_EEG_Eyes_Closed 0x115
#define OVTK_GDF_EEG_Spike 0x116