init
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
|
||||
# Add all the subdirs as projects of the named branch
|
||||
OV_ADD_PROJECTS("APPLICATIONS_PLATFORM")
|
||||
|
||||
+120
@@ -0,0 +1,120 @@
|
||||
|
||||
IF(OV_DISABLE_GTK)
|
||||
MESSAGE(STATUS "Skipping Acquisition Server, no GTK")
|
||||
RETURN()
|
||||
ENDIF(OV_DISABLE_GTK)
|
||||
|
||||
PROJECT(openvibe-acquisition-server)
|
||||
|
||||
SET(PROJECT_VERSION ${OV_GLOBAL_VERSION_STRING})
|
||||
|
||||
# We call this first as some dependency getters have been coded to not find the libs on x64 until supported
|
||||
# ---------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
# ---------------------------------
|
||||
IF(WIN32)
|
||||
ADD_DEFINITIONS(-DWIN32_LEAN_AND_MEAN)
|
||||
ENDIF(WIN32)
|
||||
|
||||
|
||||
INCLUDE("FindOpenViBEContributions")
|
||||
|
||||
FILE(GLOB_RECURSE SRC_FILES src/*.cpp src/*.h src/*.inl include/*.h ${CMAKE_SOURCE_DIR}/contrib/common/contribAcquisitionServer.*)
|
||||
|
||||
IF(PATH_OPENVIBE_CONTRIBUTIONS)
|
||||
INCLUDE("${CMAKE_SOURCE_DIR}/contrib/common/contribAcquisitionServer.cmake")
|
||||
ENDIF(PATH_OPENVIBE_CONTRIBUTIONS)
|
||||
|
||||
SET(ADDITIONAL_PATH "${CMAKE_SOURCE_DIR}/plugins/server-extensions/")
|
||||
FILE(GLOB_RECURSE ADDITIONAL_SRC_FILES ${ADDITIONAL_PATH}/*.cpp ${ADDITIONAL_PATH}/*.h)
|
||||
SET(SRC_FILES "${SRC_FILES};${ADDITIONAL_SRC_FILES}")
|
||||
|
||||
ADD_EXECUTABLE(${PROJECT_NAME} ${SRC_FILES})
|
||||
TARGET_LINK_LIBRARIES(${PROJECT_NAME}
|
||||
openvibe-module-labstreamlayer)
|
||||
SET_PROPERTY(TARGET ${PROJECT_NAME} PROPERTY FOLDER ${APP_FOLDER})
|
||||
INCLUDE_DIRECTORIES("src/drivers")
|
||||
INCLUDE_DIRECTORIES("include")
|
||||
|
||||
# add include paths for non-contrib server plugins
|
||||
FILE(GLOB children ${ADDITIONAL_PATH}/*)
|
||||
FOREACH(FILENAME ${children})
|
||||
# MESSAGE("Testing ${FILENAME}")
|
||||
IF(IS_DIRECTORY ${FILENAME})
|
||||
# MESSAGE("Adding ${FILENAME}")
|
||||
INCLUDE_DIRECTORIES(${FILENAME})
|
||||
ENDIF(IS_DIRECTORY ${FILENAME})
|
||||
ENDFOREACH(FILENAME)
|
||||
|
||||
|
||||
|
||||
|
||||
INCLUDE("FindOpenViBE")
|
||||
INCLUDE("FindOpenViBECommon")
|
||||
INCLUDE("FindOpenViBEToolkit")
|
||||
INCLUDE("FindOpenViBEModuleEBML")
|
||||
INCLUDE("FindOpenViBEModuleSocket")
|
||||
INCLUDE("FindOpenViBEModuleSystem")
|
||||
INCLUDE("FindOpenViBEModuleFS")
|
||||
INCLUDE("FindThirdPartyGTK")
|
||||
INCLUDE("FindThirdPartyBoost_System")
|
||||
|
||||
IF(WIN32)
|
||||
# @FIXME CERT getting timeBeginPeriod() linker issues without this
|
||||
TARGET_LINK_LIBRARIES(${PROJECT_NAME} winmm)
|
||||
ENDIF(WIN32)
|
||||
|
||||
# These scripts will also add directives to copy the necessary bin dlls if any
|
||||
INCLUDE("FindThirdPartyActiCHampAPI")
|
||||
INCLUDE("FindThirdPartyBioSemiLabViewAPI")
|
||||
INCLUDE("FindThirdPartyEmotivAPI")
|
||||
INCLUDE("FindThirdPartyNeXus")
|
||||
INCLUDE("FindThirdPartyMCS")
|
||||
INCLUDE("FindThirdPartyMensiaAcquisition")
|
||||
INCLUDE("FindThirdPartyMicromed")
|
||||
INCLUDE("FindThirdPartyNeuroelectricsEnobio3G")
|
||||
INCLUDE("FindThirdPartyNeuroServoDeps")
|
||||
INCLUDE("FindThirdPartyThinkGearAPI")
|
||||
INCLUDE("FindThirdPartyTMSi")
|
||||
INCLUDE("FindThirdPartyUSBFirstAmpAPI")
|
||||
INCLUDE("FindThirdPartyLiveAmpAPI")
|
||||
|
||||
INCLUDE("FindThirdPartyOpenAL")
|
||||
INCLUDE("FindThirdPartyBoost")
|
||||
INCLUDE("FindThirdPartyPThread") # for Windows Fieldtrip
|
||||
INCLUDE("FindThirdPartyRT") # external stims shared memory needs this
|
||||
|
||||
INCLUDE("FindThirdPartyLSL")
|
||||
|
||||
IF(PATH_OPENVIBE_CONTRIBUTIONS)
|
||||
LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/contrib/cmake-modules")
|
||||
INCLUDE("${CMAKE_SOURCE_DIR}/contrib/common/contribAcquisitionServerLinkLibs.cmake")
|
||||
ENDIF(PATH_OPENVIBE_CONTRIBUTIONS)
|
||||
|
||||
IF(NOT(DISABLE_MENSIA_ACQUISITION_DRIVER))
|
||||
ADD_DEFINITIONS(-DTARGET_HasMensiaAcquisitionDriver)
|
||||
ENDIF()
|
||||
|
||||
|
||||
|
||||
# ----------------------
|
||||
# Generate launch script
|
||||
# ----------------------
|
||||
OV_INSTALL_LAUNCH_SCRIPT(SCRIPT_PREFIX "${PROJECT_NAME}" EXECUTABLE_NAME "${PROJECT_NAME}")
|
||||
|
||||
# -----------------------------
|
||||
# Install files
|
||||
# -----------------------------
|
||||
INSTALL(TARGETS ${PROJECT_NAME}
|
||||
RUNTIME DESTINATION ${DIST_BINDIR}
|
||||
LIBRARY DESTINATION ${DIST_LIBDIR}
|
||||
ARCHIVE DESTINATION ${DIST_LIBDIR})
|
||||
|
||||
CONFIGURE_FILE("share/interface.ui-base" "${CMAKE_CURRENT_BINARY_DIR}/interface.ui")
|
||||
|
||||
INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/interface.ui" DESTINATION ${DIST_DATADIR}/openvibe/applications/acquisition-server)
|
||||
INSTALL(DIRECTORY share/ DESTINATION ${DIST_DATADIR}/openvibe/applications/acquisition-server PATTERN "*-base" EXCLUDE)
|
||||
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
#pragma once
|
||||
|
||||
#include "ovas_base.h"
|
||||
|
||||
#include "../ovasCSettingsHelper.h"
|
||||
|
||||
#include "boost/variant.hpp"
|
||||
#include <deque>
|
||||
|
||||
/**
|
||||
* \brief Interface for acquisition server plugins
|
||||
*
|
||||
* Contains an interface to the acquisition server plugins. Any plugin must inherit from this class in order to be able to register with the acquisition server.
|
||||
*/
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace AcquisitionServer {
|
||||
class CAcquisitionServer;
|
||||
|
||||
class IAcquisitionServerPlugin
|
||||
{
|
||||
public:
|
||||
// Interface of the plugin. To develop a new plugin override any of the Hook functions in your implementation.
|
||||
|
||||
/// Hook called at the end of the AcquisitionServer constructor
|
||||
virtual void createHook() {}
|
||||
|
||||
/// Hook called at the end of the start() function of AcquisitionServer. At this point the device has been connected to,
|
||||
/// and signal properties should already be correct.
|
||||
/// This function should return false if start failed.
|
||||
virtual bool startHook(const std::vector<CString>& /*selectedChannelNames*/, const size_t /*sampling*/, const size_t /*nChannel*/,
|
||||
const size_t /*nSamplePerSentBlock*/) { return true; }
|
||||
|
||||
/// Hook called at the end of the stop() function of AcquisitionServer
|
||||
virtual void stopHook() {}
|
||||
|
||||
|
||||
/** \brief Hook called in the loop() function of AcquisitionServer
|
||||
*
|
||||
* This hook is called before sending the stimulations or signal to the connected clients.
|
||||
* It gets a reference to the current signal buffer and the stimulation set with its start and end dates.
|
||||
*
|
||||
* Note that the given input buffer may have more samples than what should be processed
|
||||
* per iteration. All operations on vPendingBuffer done in the hook should only consider
|
||||
* the first sampleCountSentPerBlock samples. The later samples should be left as-is
|
||||
* and will be provided on the next call.
|
||||
*/
|
||||
virtual void loopHook(std::deque<std::vector<float>>& /*pendingBuffer*/, CStimulationSet& /*stimulationSet*/, const uint64_t /*start*/,
|
||||
const uint64_t /*end*/, const uint64_t /*sampleTime*/) {}
|
||||
|
||||
/// Hook called at the end of the acceptNewConnection() function of AcquisitionServer
|
||||
virtual void acceptNewConnectionHook() {}
|
||||
|
||||
IAcquisitionServerPlugin(const Kernel::IKernelContext& ctx, const CString& name)
|
||||
: m_kernelCtx(ctx), m_settings(name, ctx.getConfigurationManager()) {}
|
||||
|
||||
virtual ~IAcquisitionServerPlugin() {}
|
||||
|
||||
const SettingsHelper& getSettingsHelper() const { return m_settings; }
|
||||
SettingsHelper& getSettingsHelper() { return m_settings; }
|
||||
|
||||
protected:
|
||||
const Kernel::IKernelContext& m_kernelCtx;
|
||||
SettingsHelper m_settings;
|
||||
};
|
||||
} // namespace AcquisitionServer
|
||||
} // namespace OpenViBE
|
||||
+510
@@ -0,0 +1,510 @@
|
||||
#pragma once
|
||||
|
||||
#include "ovas_base.h"
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace AcquisitionServer {
|
||||
class IHeader;
|
||||
|
||||
enum class EDriverFlag { IsUnstable, IsDeprecated };
|
||||
|
||||
/**
|
||||
* \class IDriverContext
|
||||
* \author Yann Renard (INRIA/IRISA)
|
||||
* \date 2009-10-12
|
||||
* \brief Base class for kernel functioanlities access from the driver classes
|
||||
* \sa IDriver
|
||||
*/
|
||||
class IDriverContext
|
||||
{
|
||||
public:
|
||||
|
||||
/**
|
||||
* \brief Destructor
|
||||
*/
|
||||
virtual ~IDriverContext() { }
|
||||
|
||||
/**
|
||||
* \brief Gets the kernel Log Manager
|
||||
* \return the kernel Log Manager
|
||||
* \sa Kernel::ILogManager
|
||||
*/
|
||||
virtual Kernel::ILogManager& getLogManager() const = 0;
|
||||
/**
|
||||
* \brief Gets the kernel Configuration Manager
|
||||
* \return the kernel Configuration Manager
|
||||
* \sa Kernel::IConfigurationManager
|
||||
*/
|
||||
virtual Kernel::IConfigurationManager& getConfigurationManager() const = 0;
|
||||
/**
|
||||
* \brief Gets connection status
|
||||
* \return \e true if the driver is connected
|
||||
* \return \e false if the driver is not connected
|
||||
* \sa isStarted
|
||||
*/
|
||||
virtual bool isConnected() const = 0;
|
||||
/**
|
||||
* \brief Gets acquisition status
|
||||
* \return \e true if acquisition is started
|
||||
* \return \e false if acquisition is stoped
|
||||
* \sa isConnected
|
||||
*/
|
||||
virtual bool isStarted() const = 0;
|
||||
/**
|
||||
* \brief Checks if impedance check is required (when available)
|
||||
* \return \e true if impedance check is required
|
||||
* \return \e false if impedance check is not required
|
||||
*
|
||||
* It is up to the driver to check whether impedance check is required by
|
||||
* the acquisition server or not. If this test is required, then the driver
|
||||
* should perform impedance measures while initialized but not yet started.
|
||||
*/
|
||||
virtual bool isImpedanceCheckRequested() const = 0;
|
||||
/**
|
||||
* \brief Gets drift sample count
|
||||
* \return \e the drift sample count
|
||||
* \sa correctDriftSampleCount
|
||||
*
|
||||
* This function returns the difference between the theorical
|
||||
* number of samples this driver should have sent so far and
|
||||
* the number of samples it actually sent. This drift sample
|
||||
* count is computed by the acquisition server and can be used
|
||||
* to correct a drifting device behavior.
|
||||
*
|
||||
* \note If this number is less than 0 then samples are missing
|
||||
* \note If this number if more than 0 then there are too much samples
|
||||
* \note If this number is exactly 0 then the driver sent the exact
|
||||
* number of samples it had to send
|
||||
*/
|
||||
virtual int64_t getDriftSampleCount() const = 0;
|
||||
/**
|
||||
* \brief Gets the drift sample count tolerance
|
||||
* \return \e the drift sample count tolerance
|
||||
*
|
||||
* Gets the tolerance configured for the acquisition server. This
|
||||
* tolerance is present to avoid numerous corrections on a drift
|
||||
* value that would oscillate in a small range around 0. In such case,
|
||||
* a correction in a way would probably turn in a correction in the
|
||||
* opposite way a few seconds later, resulting in crap measurements
|
||||
* because of irregular but valid source.
|
||||
*
|
||||
* If the actual drift is in the [-tolerance +tolerance] range,
|
||||
* better don't correct it.
|
||||
*/
|
||||
virtual int64_t getDriftToleranceSampleCount() const = 0;
|
||||
/**
|
||||
* \brief Gets the suggested drift correction sample count
|
||||
* \return \e the suggested drift correction sample count
|
||||
*
|
||||
* In case you don't want to manage how much samples should
|
||||
* be used to correct the drift, you could simply use this function. The
|
||||
* algorithm used to compute the returned value should be considered
|
||||
* as undefined. This computation could change over time and versions
|
||||
* of OpenViBE. That means the driver should not make any assumption
|
||||
* on the way of computing the actual value returned by this function.
|
||||
*/
|
||||
virtual int64_t getSuggestedDriftCorrectionSampleCount() const = 0;
|
||||
/**
|
||||
* \brief Corrects a drifting device
|
||||
* \return \e true in case of success
|
||||
* \return \e false in case of error
|
||||
* \sa getDriftSampleCount
|
||||
* \sa setInnerLatencySampleCount
|
||||
*
|
||||
* Some devices don't sent the number of samples they promised to
|
||||
* while requesting sampling rate. This can be for multiple reasons
|
||||
* but the most probable one is that the device does not have its
|
||||
* internal clock synchronized with the internal computer clock.
|
||||
* OpenViBE data being dated with a start / end time, it is important
|
||||
* for synchronisation purpose that all the theorical number of
|
||||
* samples per second is preserved.
|
||||
*
|
||||
* In case the difference between the theorical number of samples
|
||||
* this driver should have sent so far and the number of samples
|
||||
* it actually sent becomes too big, this function helps to
|
||||
* correct the drifting, removing or adding dummy samples.
|
||||
* In a strict signal processing point of view those samples
|
||||
* can't be considered as valid. However, this is the only way
|
||||
* to guarantee that the timings are preserved.
|
||||
*
|
||||
* \note Passing a negative value removes samples
|
||||
* \note Passing a positive value adds samples
|
||||
* \note Passing 0 does nothing
|
||||
* \note This function can be called several times if needed
|
||||
* but does not change what \ref getDriftSampleCount
|
||||
* returns until the next \ref IDriver::loop execution
|
||||
* \warning Please be careful when calling this function.
|
||||
* Consider the fact that there could be some drifting
|
||||
* in the device and ths OS-level driver itself, or even
|
||||
* in the communication pipeline to the prorprietary
|
||||
* acquisition software. As an OpenViBE driver developer,
|
||||
* you should allow an arbitrary small drifting (which
|
||||
* range depends of the actual driver you are creating).
|
||||
*/
|
||||
virtual bool correctDriftSampleCount(const int64_t nSample) = 0;
|
||||
/**
|
||||
* \brief Sets a fixed latency due to the driver implementation and / or hardware
|
||||
* \param nSample [in] : the number of samples for the inner latency
|
||||
* \return \e true in case of success
|
||||
* \return \e false in case of error
|
||||
*
|
||||
* Some drivers / hardware devices implement processes that delay the
|
||||
* overall acquisition stream. Such processes include for instance
|
||||
* sample buffering or temporal filtering. The delay induced by these
|
||||
* processes can not be known by the acquisition server in a generic way
|
||||
* and are usually not provided by the device manufacturer. An intelligent
|
||||
* setup based on hardware tagging could however induce a fair estimate of this
|
||||
* latency so that it can be injected in the drift correction process.
|
||||
* Driver developers will generally not have to care about this feature.
|
||||
* However, if it is important to have neurophysiologically relevant measures
|
||||
* (more particularly on ERPs) and it is know that the driver and / or hardware
|
||||
* has a latency, this latency compensation can be injected in the drift correction
|
||||
* process using the aforementionned function.
|
||||
*
|
||||
* \note Passing a positive value supposes the driver / hardware induce a delay which shall be corrected
|
||||
* \note Passing a negative value supposes the driver / hardware is able to predict and send future measures before they actually get measured (probably not recommended)
|
||||
* \note Passing 0 supposes both the driver and hardware are ideals and send samples immediately to the acquisition server as they happen on the scalp
|
||||
* \note Default configuration supposes both the driver and hardware are ideal, thus sets the inner latency to 0
|
||||
*
|
||||
* \sa getInnerLatencySampleCount
|
||||
*/
|
||||
virtual void setInnerLatencySampleCount(const int64_t nSample) = 0;
|
||||
/**
|
||||
* \brief Gets the fixed latency due to the driver implementation and / or hardware
|
||||
* \return \e The inner latency of the driver in sample count
|
||||
* \sa setInnerLatencySampleCount
|
||||
*/
|
||||
virtual int64_t getInnerLatencySampleCount() const = 0;
|
||||
|
||||
/**
|
||||
* \brief Updates impedance for a specific channel
|
||||
* \param index [in] : the index of the channel should be updated
|
||||
* \param impedance [in] : the impedance of the specified channel (in ohm)
|
||||
* \return \e true in case of success.
|
||||
* \return \e false in case of error.
|
||||
*
|
||||
* This can be used during initialization phase to check
|
||||
* if impedances are correct. This function should be connected
|
||||
* while the driver is initialized and not started.
|
||||
*
|
||||
* If \c impedance is -1, then the impedance is considered as "unknown / measuring"
|
||||
* If \c impedance is -2, then the impedance is considered as "unknown / not available"
|
||||
* If \c impedance is any other negative value, then the impedance is considered as "unknown"
|
||||
*/
|
||||
virtual bool updateImpedance(const size_t index, const double impedance) = 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* \class IDriverCallback
|
||||
* \author Yann Renard (INRIA/IRISA)
|
||||
* \date 2007-04-01
|
||||
* \brief Base class for all the OpenViBE acquisition server driver callbacks
|
||||
*
|
||||
* Objects derived from this class are called by any driver to provide
|
||||
* built sample buffers.
|
||||
*
|
||||
* \sa IDriver
|
||||
* \sa IDriver::loop
|
||||
*/
|
||||
class IDriverCallback
|
||||
{
|
||||
public:
|
||||
|
||||
/**
|
||||
* \brief Gives new sample buffer
|
||||
* \param samples [in] : a buffer containing all the samples
|
||||
*
|
||||
* This is used by the acquisition server to be notified when the
|
||||
* driver has finished to build the whole buffer of data to send.
|
||||
* This function is called by the driver during the \e IDriver::loop
|
||||
* and should give an array of \c nSamplesPerChannel x \c nChannel
|
||||
* organised by channel first.
|
||||
*
|
||||
* The caller retains the ownership of the samples pointer.
|
||||
*
|
||||
* \code
|
||||
* samples[0] is channel 0 sample 0
|
||||
* samples[1] is channel 0 sample 1
|
||||
* ...
|
||||
* samples[nSamplesPerChannel-1] is channel 0 sample nSamplesPerChannel-1
|
||||
* samples[nSamplesPerChannel ] is channel 1 sample 0
|
||||
* samples[nSamplesPerChannel+1] is channel 1 sample 1
|
||||
* ...
|
||||
* samples[i*nSamplesPerChannel+j] is channel i sample j
|
||||
* \endcode
|
||||
*
|
||||
* \sa IDriver::loop
|
||||
*/
|
||||
virtual void setSamples(const float* samples) = 0;
|
||||
|
||||
/**
|
||||
* \brief Gives new sample buffer
|
||||
* \param samples [in] : a buffer containing all the samples
|
||||
* \param size : size of buffer
|
||||
*
|
||||
* This is used by the acquisition server to be notified when the
|
||||
* driver has finished to build the whole buffer of data to send.
|
||||
* This function is called by the driver during the \e IDriver::loop
|
||||
* and should give an array of \c nSamplesPerChannel x \c nChannel
|
||||
* organised by channel first.
|
||||
*
|
||||
* The caller retains the ownership of the samples pointer.
|
||||
*
|
||||
* \code
|
||||
* samples[0] is channel 0 sample 0
|
||||
* samples[1] is channel 0 sample 1
|
||||
* ...
|
||||
* samples[nSamplesPerChannel-1] is channel 0 sample nSamplesPerChannel-1
|
||||
* samples[nSamplesPerChannel ] is channel 1 sample 0
|
||||
* samples[nSamplesPerChannel+1] is channel 1 sample 1
|
||||
* ...
|
||||
* samples[i*nSamplesPerChannel+j] is channel i sample j
|
||||
* \endcode
|
||||
*
|
||||
* \sa IDriver::loop
|
||||
*/
|
||||
virtual void setSamples(const float* samples, const size_t size) = 0;
|
||||
|
||||
/**
|
||||
* \brief Gives a new stimulation set corresponding to the last sample buffer
|
||||
* \param stimSet [in] : the stimulation set associated with the last sample buffer
|
||||
*
|
||||
* This is used by the acquisition server to be notified when the
|
||||
* driver has finished to build the whole buffer of data to send.
|
||||
* This function is called by the driver during the \e IDriver::loop
|
||||
* and immediatly after the IDriverCallback::setSamples function, even
|
||||
* if the stimulation set is empty.
|
||||
*
|
||||
* \warning The stimulation dates are relative to the
|
||||
* last buffer start time.
|
||||
*
|
||||
* \sa IDriver::loop
|
||||
*/
|
||||
virtual void setStimulationSet(const IStimulationSet& stimSet) = 0;
|
||||
|
||||
/**
|
||||
* \brief Destructor
|
||||
*/
|
||||
virtual ~IDriverCallback() { }
|
||||
};
|
||||
|
||||
/**
|
||||
* \class IDriver
|
||||
* \author Yann Renard (INRIA/IRISA)
|
||||
* \date 2007-04-01
|
||||
* \brief Base class for all the OpenViBE acquisition server drivers
|
||||
*
|
||||
* This class should be used by hardware driver developers in order
|
||||
* to add new peripherals to the OpenViBE acquisition server. This driver
|
||||
* is then used by the server to get cerebral activity measurments and to
|
||||
* send this measured activity to the platform so it can be processed.
|
||||
*
|
||||
* The behavior of the driver is splitted into 3 phases :
|
||||
* - configuration
|
||||
* - initialization / uninitialization
|
||||
* - acquisition start / stop
|
||||
*
|
||||
* The implemented driver could either have direct access to the hardware
|
||||
* or read the measurements from a proprietarry server, depending on the
|
||||
* hardware manufacturer choice. Thus, the configuration phase of this driver
|
||||
* should be able to provide the information OpenViBE needs that are
|
||||
* not present from the hardware manufacturer'.
|
||||
*
|
||||
* Important job for the driver is to give the acquisition server fixed
|
||||
* size measured buffers... This implies that if the hardware sends random
|
||||
* size buffers, sample per sample buffers, fixed length buffer but not the
|
||||
* size the acquisition server requested, it would be the driver's job to
|
||||
* rebuild correct buffers.
|
||||
*
|
||||
* \sa CAcquisitionServer
|
||||
*/
|
||||
class IDriver
|
||||
{
|
||||
public:
|
||||
|
||||
/**
|
||||
* \brief Constructor
|
||||
* \param ctx [in] : the driver context
|
||||
*/
|
||||
explicit IDriver(IDriverContext& ctx) : m_driverCtx(ctx) { }
|
||||
|
||||
/**
|
||||
* \brief Destructor
|
||||
*/
|
||||
virtual ~IDriver() { }
|
||||
|
||||
/** \name General purpose functions */
|
||||
//@{
|
||||
|
||||
/**
|
||||
* \brief Gets the driver name (usually the hardware name)
|
||||
* \return the driver name.
|
||||
*/
|
||||
virtual const char* getName() = 0;
|
||||
/**
|
||||
* \brief Tests if a flag is set for this driver
|
||||
* \param flag [in] : the flag to test
|
||||
* \return \e true if the tested flag is set
|
||||
* \return \e false if the tested flag is not set
|
||||
* \note Default implementation always returns false, meaning that no flag is set
|
||||
*/
|
||||
virtual bool isFlagSet(const EDriverFlag flag) const { return false; }
|
||||
|
||||
//@}
|
||||
/** \name Driver configuration */
|
||||
//@{
|
||||
|
||||
/**
|
||||
* \brief This function should tell whether the dirver is configurable or not
|
||||
* \return \e true if this driver is configurable.
|
||||
* \return \e false if this driver is not configurable.
|
||||
* \sa configure
|
||||
*/
|
||||
virtual bool isConfigurable() = 0;
|
||||
/**
|
||||
* \brief Requests the driver to configure itself
|
||||
* \return \e true if the configuration ended successfully
|
||||
* \return \e false if the configuration ended with an error
|
||||
*
|
||||
* This function requests the driver to configure itself. The acquisition
|
||||
* server never calls this function if \c isConfigurable returned \e false.
|
||||
* However, calling this reflects a lack of information from the
|
||||
* hardware itself or from the server that is provided by the hardware
|
||||
* manufacturer. The configure function should then ask the user
|
||||
* for missing information to be filled.
|
||||
*
|
||||
* Filling these information can be done any way you want... But
|
||||
* if the driver developer wants to use a GUI for this, it is
|
||||
* recommended to use Glade/GTK since the acquisition server
|
||||
* already uses this API. If you use Glade/GTK, you won't have to
|
||||
* perform API initialization ; this is done by the acquisition server
|
||||
* already. It is the responsability of the driver developer to
|
||||
* release any allocated GUI object after the configuration is done.
|
||||
*
|
||||
* \sa isConfigurable
|
||||
*/
|
||||
virtual bool configure() = 0;
|
||||
|
||||
//@}
|
||||
/** \name Initialization / uninitialization */
|
||||
//@{
|
||||
|
||||
/**
|
||||
* \brief Initializes the driver
|
||||
* \param nSamplePerSentBlock [in] : the number of samples to
|
||||
* send per channel per driver send operation.
|
||||
* \param callback [in] : the callback object to call when the buffer
|
||||
* are filled correctly.
|
||||
* \return \e true in case of success.
|
||||
* \return \e false in case of error.
|
||||
*
|
||||
* When called, this function should prepare the driver to receive
|
||||
* data from the hardware. This means doing everything from checking
|
||||
* the hardware is present, checking its configuration, getting header
|
||||
* information from it and so on. This function should return only when
|
||||
* it has a valid header to return to the acquisition server... For
|
||||
* some hardware, this could nead data sending request (so it gets basic
|
||||
* information), and then request data sending to stop...
|
||||
*
|
||||
* \sa uninitialize
|
||||
* \sa getHeader
|
||||
* \sa IHeader
|
||||
*/
|
||||
virtual bool initialize(const uint32_t nSamplePerSentBlock, IDriverCallback& callback) = 0;
|
||||
/**
|
||||
* \brief Uninitializes the driver
|
||||
* \return \e true in case of success.
|
||||
* \return \e false in case of error.
|
||||
*
|
||||
* This function disconnects any link to the hardware and frees any
|
||||
* allocated structures/objects related to the hardware. When this
|
||||
* is called, the driver may be re-configured and re-initialized
|
||||
* to start a new acquisition session.
|
||||
*/
|
||||
virtual bool uninitialize() = 0;
|
||||
/**
|
||||
* \brief Gets the header information for the session
|
||||
* \return the header information for the session
|
||||
*
|
||||
* The returned header is used by the acquisition server to send
|
||||
* encapsulated data to the platform at the beginning of the sending
|
||||
* process. This header should be filled by the information collected
|
||||
* from the hardware or the driver itself when configure is called.
|
||||
*
|
||||
* \sa IHeader
|
||||
*/
|
||||
virtual const IHeader* getHeader() = 0;
|
||||
|
||||
//@}
|
||||
/** \name Starting / Stopping acquisition */
|
||||
//@{
|
||||
|
||||
/**
|
||||
* \brief Starts acquisition for this driver
|
||||
* \return \e true in case of success.
|
||||
* \return \e false in case of error.
|
||||
*
|
||||
* This function is called by the acquistion server to notify the driver
|
||||
* that signal acquisiton should start... The driver should forward this
|
||||
* instruction to the hardware... The loop function is then called
|
||||
* repeatedly to receive data from the hardware and send it back to the
|
||||
* server.
|
||||
*
|
||||
* \sa loop
|
||||
* \sa stop
|
||||
*/
|
||||
virtual bool start() = 0;
|
||||
/**
|
||||
* \brief Stops acquisition for this driver
|
||||
* \return \e true in case of success.
|
||||
* \return \e false in case of error.
|
||||
*
|
||||
* This function is called by the acquistion server to notify the driver
|
||||
* that signal acquisiton should stop... The driver should forward this
|
||||
* instruction to the hardware... The loop function is then no more called
|
||||
* and the driver may be uninitialized to be re-configured.
|
||||
*
|
||||
* \sa start
|
||||
* \sa loop
|
||||
*/
|
||||
virtual bool stop() = 0;
|
||||
/**
|
||||
* \brief Requests data acquisition to be done
|
||||
* \return \e true in case of success.
|
||||
* \return \e false in case of error.
|
||||
*
|
||||
* This function is called repeatedly by the acquisition server when
|
||||
* the driver is correctly initialized and started. The driver's job
|
||||
* here is to receive measures from the hardware, build the buffers
|
||||
* according to the requested sampling count per channel (see \c initialize)
|
||||
* and send this built buffer to the provided callback object. The
|
||||
* server will then send these informations to the platform.
|
||||
*
|
||||
* During this loop function, the object passed as IDriverCallback at
|
||||
* the initialize phase should be ready to be notified of samples or
|
||||
* stimulations.
|
||||
*
|
||||
* \warning When implementing the driver, one should take care
|
||||
* of configuring stimulation dates so that they are relative
|
||||
* to the last buffer start time.
|
||||
*
|
||||
* \sa IDriverCallback::setSamples
|
||||
* \sa IDriverCallback::setStimulationSet
|
||||
*/
|
||||
virtual bool loop() = 0;
|
||||
|
||||
//@}
|
||||
|
||||
protected:
|
||||
|
||||
IDriverContext& m_driverCtx; ///< The driver context
|
||||
|
||||
private:
|
||||
|
||||
/**
|
||||
* \brief Default constructor can not be used because a context is needed
|
||||
*/
|
||||
IDriver();
|
||||
};
|
||||
} // namespace AcquisitionServer
|
||||
} // namespace OpenViBE
|
||||
+325
@@ -0,0 +1,325 @@
|
||||
#pragma once
|
||||
|
||||
#include "ovas_base.h"
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace AcquisitionServer {
|
||||
/**
|
||||
* \class IHeader
|
||||
* \author Yann Renard (INRIA/IRISA)
|
||||
* \date 2007-04-01
|
||||
* \brief Base class for an OpenViBE header container
|
||||
*
|
||||
* IHeader objects are used by IDriver objects to give all the header
|
||||
* information to the acquisition server. The IDriver developer may
|
||||
* implement his own IHeader derived class or use the one provided
|
||||
* with the acquisition server. To get a standard header, refer to
|
||||
* the \c CHeader class.
|
||||
*
|
||||
* The IHeader objects mainly consist in get/set/isSet functions
|
||||
* that allow user code to modify, read back and check state of some
|
||||
* single header information.
|
||||
*
|
||||
* \sa IDriver
|
||||
* \sa IDriver::getHeader
|
||||
* \sa CHeader
|
||||
*/
|
||||
class IHeader
|
||||
{
|
||||
public:
|
||||
|
||||
/** \name General purpose functions */
|
||||
//@{
|
||||
|
||||
/**
|
||||
* \brief Resets this header
|
||||
*
|
||||
* When called, this function resets all the header content to its
|
||||
* default values. Most of the is*Set will return \e false after
|
||||
* this call.
|
||||
*/
|
||||
virtual void reset() = 0;
|
||||
|
||||
//@}
|
||||
/** \name Experiment information */
|
||||
//@{
|
||||
|
||||
/**
|
||||
* \brief Sets the experiment identifier
|
||||
* \param experimentID [in] : the experiment identifier to send to
|
||||
* the OpenViBE platform.
|
||||
* \return \e true in case of success.
|
||||
* \return \e false in case of error.
|
||||
*
|
||||
* The experiment identifier may be used by the platform
|
||||
* to get details from a database, for example a description
|
||||
* of the experiment, what is done, where etc...
|
||||
*/
|
||||
virtual bool setExperimentID(const size_t experimentID) = 0;
|
||||
/**
|
||||
* \brief Sets the subject age
|
||||
* \param subjectAge [in] : the subject age in years
|
||||
* \return \e true in case of success.
|
||||
* \return \e false in case of error.
|
||||
*/
|
||||
virtual bool setSubjectAge(const size_t subjectAge) = 0;
|
||||
/**
|
||||
* \brief Sets the subject gender
|
||||
* \param subjectGender [in] : the subject gender
|
||||
* \return \e true in case of success.
|
||||
* \return \e false in case of error.
|
||||
*
|
||||
* The subject gender is given as an integer and should
|
||||
* be ISO 5218 conformant... Allowed values are :
|
||||
* - 0 : unknown
|
||||
* - 1 : male
|
||||
* - 2 : female
|
||||
* - 3 : not specified
|
||||
*
|
||||
* \note This values are defined in the OpenViBE toolkit.
|
||||
*/
|
||||
virtual bool setSubjectGender(const size_t subjectGender) = 0;
|
||||
/**
|
||||
* \brief Gets the experiment identifier
|
||||
* \return the experiement identifier.
|
||||
* \sa setExperimentID
|
||||
*/
|
||||
virtual size_t getExperimentID() const = 0;
|
||||
/**
|
||||
* \brief Gets the subject age
|
||||
* \return the subject age.
|
||||
* \sa setSubjectAge
|
||||
*/
|
||||
virtual size_t getSubjectAge() const = 0;
|
||||
/**
|
||||
* \brief Gets the subject gender
|
||||
* \return the subject gender.
|
||||
* \sa setSubjectGender
|
||||
*/
|
||||
virtual size_t getSubjectGender() const = 0;
|
||||
/**
|
||||
* \brief Tests if experiment identifier has been set
|
||||
* \return \e true if experiment identifier has been set since last \c reset.
|
||||
* \return \e false if experiment identifier has not been set.
|
||||
* \sa setExperimentID
|
||||
*/
|
||||
virtual bool isExperimentIDSet() const = 0;
|
||||
/**
|
||||
* \brief Tests if subject age has been set
|
||||
* \return \e true if the subject age has been set since last \c reset.
|
||||
* \return \e false if the subject age has not been set.
|
||||
* \sa setSubjectAge
|
||||
*/
|
||||
virtual bool isSubjectAgeSet() const = 0;
|
||||
/**
|
||||
* \brief Tests if subject gender has been set
|
||||
* \return \e true if the subject gender has been set since last \c reset.
|
||||
* \return \e false if the subject gender has not been set.
|
||||
* \sa setSubjectGender
|
||||
*/
|
||||
virtual bool isSubjectGenderSet() const = 0;
|
||||
|
||||
virtual void setImpedanceCheckRequested(const bool active) = 0;
|
||||
|
||||
virtual bool isImpedanceCheckRequested() const = 0;
|
||||
|
||||
/**
|
||||
* \brief Get impedance limit
|
||||
* \return \e the chosen impedance limit (ohms)
|
||||
*/
|
||||
virtual size_t getImpedanceLimit() const = 0;
|
||||
/**
|
||||
* \brief Set impedance limit
|
||||
* \param limit [in] : the new value for impedance limit (ohms)
|
||||
*/
|
||||
virtual void setImpedanceLimit(const size_t limit) = 0;
|
||||
|
||||
//@}
|
||||
/** \name Chanel information */
|
||||
//@{
|
||||
|
||||
/**
|
||||
* \brief Sets channel count for the recorded signal
|
||||
* \param nChannel [in] : the number of the channel for the recorder signal
|
||||
* \return \e true in case of success.
|
||||
* \return \e false in case of error.
|
||||
*
|
||||
* The number of channels will be used by the IDriver and the acquisition server
|
||||
* to calculate the sample buffer size (that is \c nSamplesPerChannel x \c nChannel).
|
||||
*/
|
||||
virtual bool setChannelCount(const size_t nChannel) = 0;
|
||||
/**
|
||||
* \brief Sets a channel' name
|
||||
* \param index [in] : the index of the channel which name should be set
|
||||
* \param name [in] : the new name for this channel
|
||||
* \return \e true in case of success.
|
||||
* \return \e false in case of error.
|
||||
* \note As soon as a channel name is set, all the yet-unset channel names are
|
||||
* considered to be set to empty string.
|
||||
*/
|
||||
virtual bool setChannelName(const size_t index, const char* name) = 0;
|
||||
/**
|
||||
* \brief Sets a channel' gain
|
||||
* \param index [in] : the index of the channel which gain should be set
|
||||
* \param gain [in] : the gain value for this channel
|
||||
* \return \e true in case of success.
|
||||
* \return \e false in case of error.
|
||||
* \note As soon as a channel gain is set, all the yet-unset channel gains are
|
||||
* considered to be set to 1.
|
||||
*
|
||||
* Gains are multiplicator coefficients that are used by the OpenViBE platform to
|
||||
* to transform measured values into physical dimension.
|
||||
*/
|
||||
virtual bool setChannelGain(const size_t index, const float gain) = 0;
|
||||
/**
|
||||
* \brief Sets a channel' measurement unit and its scaling factor
|
||||
* \param index [in] : the index of the channel which gain should be set
|
||||
* \param unit [in] : the unit
|
||||
* \param factor [in] : the scaling factor
|
||||
* \return \e true in case of success.
|
||||
* \return \e false in case of error.
|
||||
*
|
||||
* Measurement units (e.g. Volts, Litres, ...) are specified by size_t enums defined in the openvibe toolkit.
|
||||
* Scaling factors (megas, millis, ...) are specified similarly. To specify that the channel is in millivolts,
|
||||
* you set unit to volts and factor to millis. You get the list of supported enums from toolkit/ovtk_defines.h.
|
||||
*
|
||||
* Default unit is 'Unspecified' and default factor is code translating 1e00.
|
||||
*/
|
||||
virtual bool setChannelUnits(const size_t index, const size_t unit, const size_t factor) = 0;
|
||||
|
||||
/// \todo setChannelLocation
|
||||
// virtual bool setChannelLocation(const size_t index, const float channelLocationX, const float channelLocationY, const float channelLocationZ)=0;
|
||||
|
||||
/**
|
||||
* \brief Gets the number of channels for this header
|
||||
* \return the number of channels.
|
||||
* \sa setChannelCount
|
||||
*/
|
||||
virtual size_t getChannelCount() const = 0;
|
||||
/**
|
||||
* \brief Gets the name of a channel
|
||||
* \param index [in] : the index of the channel which name is wanted
|
||||
* \return the name of the \c index th channel if in the correct range
|
||||
* and name has been specified.
|
||||
* \return an empty string if in the correct range but name has not been specified.
|
||||
* \return an empty string when \c index is out of range.
|
||||
* \sa setChannelName
|
||||
*/
|
||||
virtual const char* getChannelName(const size_t index) const = 0;
|
||||
/**
|
||||
* \brief Gets the gain of a channel
|
||||
* \param index [in] : the index of the channel which gain is wanted
|
||||
* \return the gain of the \c index th channel if in the correct range
|
||||
* and gain has been specified.
|
||||
* \return 1 if in the correct range but gain has not been specified.
|
||||
* \return 0 when \c index is out of range.
|
||||
* \sa setChannelGain
|
||||
*/
|
||||
virtual float getChannelGain(const size_t index) const = 0;
|
||||
/**
|
||||
* \brief Gets a channel' measurement unit and its scaling factor
|
||||
* \param index [in] : the index of the channel which gain should be set
|
||||
* \param channelUnit [in] : the unit
|
||||
* \param channelFactor [in] : the scaling factor
|
||||
* \return \e true in case of success.
|
||||
* \return \e false in case of error. On false, the outputs will be set to default values.
|
||||
*
|
||||
* See setChannelUnits().
|
||||
*/
|
||||
virtual bool getChannelUnits(const size_t index, size_t& channelUnit, size_t& channelFactor) const = 0;
|
||||
/// \todo getChannelLocation
|
||||
// virtual getChannelLocation(const size_t index) const=0;
|
||||
/**
|
||||
* \brief Tests if channel count has been set
|
||||
* \return \e true if channel count has been set since last \c reset.
|
||||
* \return \e false if channel count has not been set.
|
||||
* \sa setChannelCount
|
||||
*/
|
||||
virtual bool isChannelCountSet() const = 0;
|
||||
/**
|
||||
* \brief Tests if channel name has been set at least once
|
||||
* \return \e true if channel name has been set at least once since last \c reset.
|
||||
* \return \e false if channel name has not been set.
|
||||
* \sa setChannelName
|
||||
*/
|
||||
virtual bool isChannelNameSet() const = 0;
|
||||
/**
|
||||
* \brief Tests if channel gain has been set at least once
|
||||
* \return \e true if channel gain has been set at least once since last \c reset.
|
||||
* \return \e false if channel gain has not been set.
|
||||
* \sa setChannelGain
|
||||
*/
|
||||
virtual bool isChannelGainSet() const = 0;
|
||||
/// \todo isChannelLocationSet
|
||||
// virtual bool isChannelLocationSet() const=0;
|
||||
/**
|
||||
* \brief Tests if channel unit has been set at least once
|
||||
* \return \e true if channel unit has been set at least once since last \c reset.
|
||||
* \return \e false if channel unit has not been set.
|
||||
* \sa setChannelGain
|
||||
*/
|
||||
virtual bool isChannelUnitSet() const = 0;
|
||||
|
||||
//@}
|
||||
/** \name Samples information */
|
||||
//@{
|
||||
|
||||
/**
|
||||
* \brief Sets measured signal sampling rate
|
||||
* \param sampling [in] : the sampling rate for the measured signal
|
||||
* \return \e true in case of success.
|
||||
* \return \e false in case of error.
|
||||
* \note the sampling rate is a global value. It can not be specified per channel.
|
||||
*/
|
||||
virtual bool setSamplingFrequency(const size_t sampling) = 0;
|
||||
/**
|
||||
* \brief Gets the sampling rate of the measured signal
|
||||
* \return the sampling rate of the measured signal
|
||||
* \sa setSamplingFrequency
|
||||
*/
|
||||
virtual size_t getSamplingFrequency() const = 0;
|
||||
/**
|
||||
* \brief Tests if sampling frequency has been set
|
||||
* \return \e true if sampling frequency has been set since last \c reset.
|
||||
* \return \e false if sampling frequency has not been set.
|
||||
* \sa setSamplingFrequency
|
||||
*/
|
||||
virtual bool isSamplingFrequencySet() const = 0;
|
||||
|
||||
//@}
|
||||
|
||||
/**
|
||||
* \brief Destructor
|
||||
*/
|
||||
virtual ~IHeader() { }
|
||||
|
||||
static void copy(IHeader& dst, const IHeader& src)
|
||||
{
|
||||
// Make sure that nothing lingers, this is mainly for channel units: we have no way to restore dst to an 'unset' state unless we reset
|
||||
dst.reset();
|
||||
|
||||
const size_t nChannel = src.getChannelCount();
|
||||
dst.setExperimentID(src.getExperimentID());
|
||||
dst.setSubjectAge(src.getSubjectAge());
|
||||
dst.setSubjectGender(src.getSubjectGender());
|
||||
dst.setChannelCount(src.getChannelCount());
|
||||
dst.setSamplingFrequency(src.getSamplingFrequency());
|
||||
dst.setChannelCount(src.getChannelCount());
|
||||
for (size_t i = 0; i < nChannel; ++i)
|
||||
{
|
||||
dst.setChannelName(i, src.getChannelName(i));
|
||||
dst.setChannelGain(i, src.getChannelGain(i));
|
||||
}
|
||||
if (src.isChannelUnitSet())
|
||||
{
|
||||
for (size_t i = 0; i < nChannel; ++i)
|
||||
{
|
||||
size_t unit = 0, factor = 0;
|
||||
src.getChannelUnits(i, unit, factor); // No need to test for error, will set defaults on fail
|
||||
dst.setChannelUnits(i, unit, factor);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
} // namespace AcquisitionServer
|
||||
} // namespace OpenViBE
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "ovas_defines.h"
|
||||
|
||||
#include <openvibe/ov_all.h>
|
||||
#include <toolkit/ovtk_all.h>
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
#pragma once
|
||||
|
||||
|
||||
#define OVAS_Impedance_NotAvailable -2
|
||||
#define OVAS_Impedance_Unknown -1
|
||||
#define OVAS_Impedance_Zero 0
|
||||
|
||||
//___________________________________________________________________//
|
||||
// //
|
||||
// Global defines //
|
||||
//___________________________________________________________________//
|
||||
// //
|
||||
|
||||
#ifdef TARGET_HAS_ThirdPartyOpenViBEPluginsGlobalDefines
|
||||
#include "ovp_global_defines.h"
|
||||
#endif // TARGET_HAS_ThirdPartyOpenViBEPluginsGlobalDefines
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
|
||||
#####################################################################################
|
||||
# OpenViBE application acquisition server configuration
|
||||
#####################################################################################
|
||||
AcquisitionServer_PluginsPatternLinux = ${Path_Lib}/libopenvibe-plugins-*-stream-codecs*.so
|
||||
AcquisitionServer_PluginsPatternWindows = ${Path_Bin}/openvibe-plugins-*-stream-codecs*.dll
|
||||
AcquisitionServer_Plugins = ${AcquisitionServer_PluginsPattern${OperatingSystem}}
|
||||
|
||||
AcquisitionServer_ShowUnstable = true
|
||||
AcquisitionServer_HostName = localhost
|
||||
|
||||
AcquisitionServer_DefaultDriver = ${AcquisitionServer_LastDriver}
|
||||
AcquisitionServer_DefaultSampleCountPerBuffer = ${AcquisitionServer_LastSampleCountPerBuffer}
|
||||
AcquisitionServer_DefaultConnectionPort = ${AcquisitionServer_LastConnectionPort}
|
||||
|
||||
AcquisitionServer_LastDriver = Generic oscillator
|
||||
AcquisitionServer_LastSampleCountPerBuffer = 32
|
||||
AcquisitionServer_LastConnectionPort = 1024
|
||||
|
||||
AcquisitionServer_DriftCorrectionPolicy = Disabled
|
||||
AcquisitionServer_JitterEstimationCountForDrift = 16
|
||||
AcquisitionServer_DriftToleranceDuration = 2
|
||||
AcquisitionServer_DriftInitialSkipPeriodMs = 0
|
||||
AcquisitionServer_OverSamplingFactor = 1
|
||||
AcquisitionServer_StartedDriverSleepDuration = 0
|
||||
AcquisitionServer_StoppedDriverSleepDuration = 100
|
||||
AcquisitionServer_DriverTimeoutDuration = 5000
|
||||
|
||||
AcquisitionServer_NaNReplacementPolicy = LastCorrectValue
|
||||
|
||||
AcquisitionServer_CheckImpedance = false
|
||||
AcquisitionServer_CheckImpedance_ColumnCount = 8
|
||||
AcquisitionServer_DefaultImpedanceLimit = 5000
|
||||
|
||||
AcquisitionServer_Plugin_ExternalStimulations_EnableExternalStimulations = 0
|
||||
AcquisitionServer_Plugin_ExternalStimulations_ExternalStimulationQueueName = openvibeExternalStimulations
|
||||
|
||||
AcquisitionServer_Plugin_LabStreamingLayerOutput_LSL_EnableLSLOutput = 0
|
||||
AcquisitionServer_Plugin_LabStreamingLayerOutput_LSL_MarkerStreamName = openvibeMarkers
|
||||
AcquisitionServer_Plugin_LabStreamingLayerOutput_LSL_SignalStreamName = openvibeSignal
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
Fp1
|
||||
Fp2
|
||||
F7
|
||||
F3
|
||||
Fz
|
||||
F4
|
||||
F8
|
||||
FC5
|
||||
FC1
|
||||
FC2
|
||||
FC6
|
||||
T7
|
||||
C3
|
||||
Cz
|
||||
C4
|
||||
T8
|
||||
TP9
|
||||
CP5
|
||||
CP1
|
||||
CP2
|
||||
CP6
|
||||
TP10
|
||||
P7
|
||||
P3
|
||||
Pz
|
||||
P4
|
||||
P8
|
||||
PO9
|
||||
O1
|
||||
Oz
|
||||
O2
|
||||
PO10
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
Fp1
|
||||
Fz
|
||||
F3
|
||||
F7
|
||||
FT9
|
||||
FC5
|
||||
FC1
|
||||
C3
|
||||
T7
|
||||
TP9
|
||||
CP5
|
||||
CP1
|
||||
Pz
|
||||
P3
|
||||
P7
|
||||
O1
|
||||
Oz
|
||||
O2
|
||||
P4
|
||||
P8
|
||||
TP10
|
||||
CP6
|
||||
CP2
|
||||
Cz
|
||||
C4
|
||||
T8
|
||||
FT10
|
||||
FC6
|
||||
FC2
|
||||
F4
|
||||
F8
|
||||
Fp2
|
||||
AF7
|
||||
AF3
|
||||
AFz
|
||||
F1
|
||||
F5
|
||||
FT7
|
||||
FC3
|
||||
FCz
|
||||
C1
|
||||
C5
|
||||
TP7
|
||||
CP3
|
||||
P1
|
||||
P5
|
||||
PO7
|
||||
PO3
|
||||
POz
|
||||
PO4
|
||||
PO8
|
||||
P6
|
||||
P2
|
||||
CPz
|
||||
CP4
|
||||
TP8
|
||||
C6
|
||||
C2
|
||||
FC4
|
||||
FT8
|
||||
F6
|
||||
F2
|
||||
AF4
|
||||
AF8
|
||||
+112
@@ -0,0 +1,112 @@
|
||||
Nz
|
||||
|
||||
FP1
|
||||
FPz
|
||||
FP2
|
||||
|
||||
AF7
|
||||
AF3
|
||||
AFz
|
||||
AF4
|
||||
AF8
|
||||
|
||||
F9
|
||||
F7
|
||||
F5
|
||||
F3
|
||||
F1
|
||||
Fz
|
||||
F2
|
||||
F4
|
||||
F6
|
||||
F8
|
||||
F10
|
||||
|
||||
FT9
|
||||
FT7
|
||||
FC5
|
||||
FC3
|
||||
FC1
|
||||
FCz
|
||||
FC2
|
||||
FC4
|
||||
FC6
|
||||
FT8
|
||||
FT10
|
||||
|
||||
A1
|
||||
T9
|
||||
T7
|
||||
C5
|
||||
C3
|
||||
C1
|
||||
Cz
|
||||
C2
|
||||
C4
|
||||
C6
|
||||
T8
|
||||
T10
|
||||
A2
|
||||
|
||||
TP9
|
||||
TP7
|
||||
CP5
|
||||
CP3
|
||||
CP1
|
||||
CPz
|
||||
CP2
|
||||
CP4
|
||||
CP6
|
||||
TP8
|
||||
TP10
|
||||
|
||||
P9
|
||||
P7
|
||||
P5
|
||||
P3
|
||||
P1
|
||||
Pz
|
||||
P2
|
||||
P4
|
||||
P6
|
||||
P8
|
||||
P10
|
||||
|
||||
PO7
|
||||
PO3
|
||||
POz
|
||||
PO4
|
||||
PO8
|
||||
|
||||
O1
|
||||
Oz
|
||||
O2
|
||||
|
||||
Iz
|
||||
|
||||
T3
|
||||
T5
|
||||
T4
|
||||
T6
|
||||
|
||||
EOG1
|
||||
EOG2
|
||||
EOG3
|
||||
EOG4
|
||||
|
||||
EMG1
|
||||
EMG2
|
||||
EMG3
|
||||
EMG4
|
||||
|
||||
ECG1
|
||||
ECG2
|
||||
ECG3
|
||||
ECG4
|
||||
|
||||
Aux1
|
||||
Aux2
|
||||
Aux3
|
||||
Aux4
|
||||
|
||||
Reference
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
+736
@@ -0,0 +1,736 @@
|
||||
<?xml version="1.0"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<object class="GtkAdjustment" id="adjustment_age">
|
||||
<property name="value">18</property>
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment_channel_count">
|
||||
<property name="value">8</property>
|
||||
<property name="lower">1</property>
|
||||
<property name="upper">271</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment_identifier">
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkWindow" id="dummy-window">
|
||||
<child>
|
||||
<object class="GtkTable" id="table1">
|
||||
<property name="visible">True</property>
|
||||
<property name="n_columns">2</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model_device_id">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model_gender">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unspecified</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">female</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">male</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unknown</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model_sampling_frequency">
|
||||
<columns>
|
||||
<!-- column-name Sampling -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">2048</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">4096</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">8192</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">16384</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model_speed_mode">
|
||||
<columns>
|
||||
<!-- column-name Sampling -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">1</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">2</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">3</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">4</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">5</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">6</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">7</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">8</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">9</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkDialog" id="openvibe-acquisition-server-settings">
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Device configuration</property>
|
||||
<property name="window_position">center</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="gravity">center</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_title">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">BioSemi ActiveTwo Mk I and II
|
||||
|
||||
Please refer to the device manual for correspondance
|
||||
(Speed Mode ~ Sampling frequency / max available channels)
|
||||
<span color="darkred">
|
||||
Device must be connected to get current setup
|
||||
and apply configuration.
|
||||
|
||||
Speed modes 0 to 3 are reserved for daisy chain modes,
|
||||
you should not use these for acquisition.
|
||||
</span></property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="border_width">8</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table2">
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">13</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="row_spacing">5</property>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">model_gender</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer1"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment_age</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment_identifier</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator3">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="y_padding">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Gender :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Age :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Identifier :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_device_id">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Device connection status:</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImage" id="image_status">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-no</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="model">model_sampling_frequency</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="cellrenderertext1"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">9</property>
|
||||
<property name="bottom_attach">10</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_device_type">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Device type:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_device_mark">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">- <i>unknown</i> -</property>
|
||||
<property name="use_markup">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator2">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">7</property>
|
||||
<property name="bottom_attach">8</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_battery_level">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Battery level:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_device_battery">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">- <i>unknown</i> -</property>
|
||||
<property name="use_markup">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_ex_channel">
|
||||
<property name="visible">True</property>
|
||||
<property name="xalign">0.51999998092651367</property>
|
||||
<property name="ypad">5</property>
|
||||
<property name="label" translatable="yes">Add 8 EX channels:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">12</property>
|
||||
<property name="bottom_attach">13</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="checkbutton_ex_channel">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="xalign">0.52999997138977051</property>
|
||||
<property name="yalign">0.51999998092651367</property>
|
||||
<property name="image_position">top</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">12</property>
|
||||
<property name="bottom_attach">13</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="label" translatable="yes">Sampling frequency:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">9</property>
|
||||
<property name="bottom_attach">10</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Number of channels:</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">11</property>
|
||||
<property name="bottom_attach">12</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment_channel_count</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">11</property>
|
||||
<property name="bottom_attach">12</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_speed_mode">
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="label" translatable="yes">Speed mode:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">8</property>
|
||||
<property name="bottom_attach">9</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_speed_mode">
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="model">model_speed_mode</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="cellrenderertext2"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">8</property>
|
||||
<property name="bottom_attach">9</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator4">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">10</property>
|
||||
<property name="bottom_attach">11</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_change_channel_names">
|
||||
<property name="label" translatable="yes">Change channel names</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator1">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area">
|
||||
<property name="visible">True</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_apply">
|
||||
<property name="label">gtk-apply</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_cancel">
|
||||
<property name="label">gtk-cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-10">button_apply</action-widget>
|
||||
<action-widget response="-6">button_cancel</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
<object class="GtkWindow" id="device-information">
|
||||
<property name="title" translatable="yes">BioSemi device information</property>
|
||||
<property name="window_position">center-on-parent</property>
|
||||
<property name="default_width">300</property>
|
||||
<property name="default_height">200</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table40">
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">7</property>
|
||||
<property name="n_columns">2</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label-window-description">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes"><b>BioSemi device information </b>
|
||||
Please make sure CMS/DRL stays in range during acquisition. If CMS is not in range, for safety
|
||||
purpose, any active electrode connected will be shut down and signals should not be
|
||||
used.
|
||||
The corresponding sample range will be tagged with OVTK_StimulationId_SegmentStart
|
||||
and OVTK_StimulationId_SegmentStop.
|
||||
Possible causes include broken wires, damaged cable isolation, bad connector contacts,
|
||||
defect IC inside the electrode.</property>
|
||||
<property name="use_markup">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="x_padding">2</property>
|
||||
<property name="y_padding">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator41">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label-battery-level-comment">
|
||||
<property name="visible">True</property>
|
||||
<property name="xpad">1</property>
|
||||
<property name="ypad">1</property>
|
||||
<property name="label" translatable="yes">Battery level:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox41">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="image-battery-level">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-no</property>
|
||||
<property name="icon-size">4</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label-battery-level">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">- <i>Device battery is low! </i> -</property>
|
||||
<property name="use_markup">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox42">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="image-CMS-status">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-no</property>
|
||||
<property name="icon-size">4</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label-CMS-status">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">- <i>unknown</i> -</property>
|
||||
<property name="use_markup">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label-CMS-status-comment">
|
||||
<property name="visible">True</property>
|
||||
<property name="xpad">1</property>
|
||||
<property name="ypad">1</property>
|
||||
<property name="label" translatable="yes">CMS/DRL status:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label-device-type-def">
|
||||
<property name="visible">True</property>
|
||||
<property name="xpad">1</property>
|
||||
<property name="ypad">1</property>
|
||||
<property name="label" translatable="yes">Device type:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label-device-type">
|
||||
<property name="visible">True</property>
|
||||
<property name="xpad">1</property>
|
||||
<property name="ypad">1</property>
|
||||
<property name="label" translatable="yes">- <i>unknown</i> -</property>
|
||||
<property name="use_markup">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator42">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label-error-message">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
||||
+966
@@ -0,0 +1,966 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<object class="GtkAdjustment" id="adjustment_active_shield_gain">
|
||||
<property name="upper">100</property>
|
||||
<property name="value">5</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment_age">
|
||||
<property name="upper">100</property>
|
||||
<property name="value">18</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment_bad_imp">
|
||||
<property name="upper">100000</property>
|
||||
<property name="value">10000</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment_channel_count">
|
||||
<property name="lower">1</property>
|
||||
<property name="upper">1024</property>
|
||||
<property name="value">4</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment_good_imp">
|
||||
<property name="upper">100000</property>
|
||||
<property name="value">5000</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment_identifier">
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkWindow" id="dummy-window">
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="n_columns">2</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model_adc_data_decimation">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">None</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Factor 2</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model_adc_data_filter">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Native</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Averaging x2</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model_device_id">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model_gender">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unspecified</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">female</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">male</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unknown</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model_mode">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Normal</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Active Shield</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Impedance</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Test</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model_physical_sampling_rate">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">10 kHz</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">50 kHz</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">100 kHz</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model_sampling_frequency">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">128</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">256</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">512</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">1024</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">2048</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">4096</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkDialog" id="openvibe-acquisition-server-settings">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Device configuration</property>
|
||||
<property name="window_position">center</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="gravity">center</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_title">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Brain Products actiCHamp
|
||||
|
||||
<span color="darkred">
|
||||
This driver uses software decimation
|
||||
to lower the sampling frequency to
|
||||
the value selected below.
|
||||
The signal is low-pass filtered with
|
||||
a FIR filter prior to downsampling.
|
||||
</span></property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImage" id="image_error_icon">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-dialog-error</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_error_message">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes"><span color="#d07005">The selected ActiCHamp device can not be accessed.
|
||||
The device is probably used by another program
|
||||
or has an older version of firmware.
|
||||
|
||||
Try un-plugging and re-plugging the device and if the
|
||||
problem persists please update the actiCHamp firmware.
|
||||
All required files and instructions can be downloaded from here:</span></property>
|
||||
<property name="use_markup">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_bp_actichamp_download_firmware">
|
||||
<property name="label" translatable="yes">Download ActiCHamp firmware from Brain Products</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">8</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="n_rows">18</property>
|
||||
<property name="n_columns">2</property>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model_gender</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer1"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment_age</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment_identifier</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_active_shield_gain">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="invisible_char_set">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment_active_shield_gain</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">11</property>
|
||||
<property name="bottom_attach">12</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_adc_data_decimation">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model_adc_data_decimation</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer7"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">10</property>
|
||||
<property name="bottom_attach">11</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_adc_data_filter">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model_adc_data_filter</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer6"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">9</property>
|
||||
<property name="bottom_attach">10</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_mode">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model_mode</property>
|
||||
<property name="active">1</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer4"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">8</property>
|
||||
<property name="bottom_attach">9</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model_sampling_frequency</property>
|
||||
<property name="active">0</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer2"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_device_id">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model_device_id</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer3"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment_channel_count</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator3">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">15</property>
|
||||
<property name="bottom_attach">16</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkToggleButton" id="togglebutton_module_1">
|
||||
<property name="label" translatable="yes">1 (1-32)</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkToggleButton" id="togglebutton_module_2">
|
||||
<property name="label" translatable="yes">2 (33-64)</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkToggleButton" id="togglebutton_module_3">
|
||||
<property name="label" translatable="yes">3 (65-96)</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkToggleButton" id="togglebutton_module_4">
|
||||
<property name="label" translatable="yes">4 (97-128</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkToggleButton" id="togglebutton_module_5">
|
||||
<property name="label" translatable="yes">5 (129-160)</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">16</property>
|
||||
<property name="bottom_attach">17</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="checkbutton_aux_channels">
|
||||
<property name="label" translatable="yes">Add the 8 auxilliary channels</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">17</property>
|
||||
<property name="bottom_attach">18</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Gender :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Age :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Identifier :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_active_shield_gain">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Active Shield Gain :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">11</property>
|
||||
<property name="bottom_attach">12</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_adc_data_decimation">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">ADC Data Decimation :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">10</property>
|
||||
<property name="bottom_attach">11</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_adc_data_filter">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">ADC Data Filter :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">9</property>
|
||||
<property name="bottom_attach">10</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_mode">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Mode :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">8</property>
|
||||
<property name="bottom_attach">9</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Sampling frequency :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_device_id">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Device :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Number of channels :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_modules">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Modules :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">16</property>
|
||||
<property name="bottom_attach">17</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_physical_sample_rate">
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model_physical_sampling_rate</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer5"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">7</property>
|
||||
<property name="bottom_attach">8</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_physical_sampling_rate">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Physical Sampling Rate :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">7</property>
|
||||
<property name="bottom_attach">8</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_good_imp">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Good impedance limit (Ohm) :</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">13</property>
|
||||
<property name="bottom_attach">14</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_bad_imp">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Bad impedance limit (Ohm) :</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">14</property>
|
||||
<property name="bottom_attach">15</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_good_imp">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment_good_imp</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">13</property>
|
||||
<property name="bottom_attach">14</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_bad_imp">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment_bad_imp</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">14</property>
|
||||
<property name="bottom_attach">15</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Enable impedance checking:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">12</property>
|
||||
<property name="bottom_attach">13</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="checkbutton_impedance">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">12</property>
|
||||
<property name="bottom_attach">13</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_change_channel_names">
|
||||
<property name="label" translatable="yes">Change channel names</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_apply">
|
||||
<property name="label">gtk-apply</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_cancel">
|
||||
<property name="label">gtk-cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-10">button_apply</action-widget>
|
||||
<action-widget response="-6">button_cancel</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
</interface>
|
||||
+1092
File diff suppressed because it is too large
Load Diff
+1068
File diff suppressed because it is too large
Load Diff
+739
@@ -0,0 +1,739 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<object class="GtkAdjustment" id="adjBadImpedanceLimit">
|
||||
<property name="lower">50</property>
|
||||
<property name="upper">100000</property>
|
||||
<property name="value">10000</property>
|
||||
<property name="step_increment">10</property>
|
||||
<property name="page_increment">100</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjGoodImpedanceLimit">
|
||||
<property name="lower">50</property>
|
||||
<property name="upper">10000</property>
|
||||
<property name="value">5000</property>
|
||||
<property name="step_increment">10</property>
|
||||
<property name="page_increment">100</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment1">
|
||||
<property name="upper">100</property>
|
||||
<property name="value">18</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment2">
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment3">
|
||||
<property name="lower">1</property>
|
||||
<property name="upper">64</property>
|
||||
<property name="value">64</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustmentAUX">
|
||||
<property name="upper">16</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustmentBipolar">
|
||||
<property name="upper">8</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">2</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustmentEEGch">
|
||||
<property name="lower">1</property>
|
||||
<property name="upper">64</property>
|
||||
<property name="value">32</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model1">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unspecified</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">female</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">male</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unknown</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model2">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">250</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model_physical_sampling_rate">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">250</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">500</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">1000</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkDialog" id="openvibe-acquisition-server-settings">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Device configuration</property>
|
||||
<property name="window_position">center</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="gravity">center</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="spacing">8</property>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_apply">
|
||||
<property name="label">gtk-apply</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_cancel">
|
||||
<property name="label">gtk-cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_title">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Brain Products LiveAmp
|
||||
|
||||
This version supports LiveAmp with 8, 16 and 32 channels.
|
||||
</property>
|
||||
<property name="justify">center</property>
|
||||
<attributes>
|
||||
<attribute name="foreground" value="#95b7451f451f"/>
|
||||
</attributes>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">8</property>
|
||||
<property name="spacing">8</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="n_rows">3</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model1</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer1"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment2</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Gender :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Age :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Identifier :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="n_rows">7</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkEntry" id="entrySerialNr">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="text" translatable="yes">054203-0077</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="lblSerialNumber">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Serial Nr.</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="lblSamplingFreq">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Sampling frequency:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustmentEEGch</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spbBtnAUXchn">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustmentAUX</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="lblEEGchannels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Number of EEG channels:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="lblNumberAUXchanels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Number of AUX channels:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model_physical_sampling_rate</property>
|
||||
<property name="active">0</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer2"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="checkbutton_acc">
|
||||
<property name="label" translatable="yes"> (include 3 accelerator channels)</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="lblACC">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Inlcude ACC channels</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="chkTriggers">
|
||||
<property name="label" translatable="yes"> (always included)</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="active">True</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="lblTrigers">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Include Triggers</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="lblBipolarChannels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Number of Bipolar channels</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_number_of_bipolar">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustmentBipolar</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table3">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label12">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes"><span size="larger" foreground="#602020">
|
||||
Note: 'Good' and 'Bad' impedance limit is used with active electrodes only.
|
||||
Impedances above 'Bad impedance limit' will be shown in red.
|
||||
Impedances below 'Good impedance limit' will be shown in green.
|
||||
Impedance between 'Good' and 'Bad' limit will be shown in yellow.
|
||||
</span></property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTable" id="table4">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="n_rows">3</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="lblEnableImpedanceChecking">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Enable impedance checking</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="checkbutton_impedance">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="lblGoodImpedanceLimit">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Good impedance limit (Ohm)</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_good_imp">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="invisible_char_set">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjGoodImpedanceLimit</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="lblBadImpedanceLimit">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Bad Impedance limit (Ohm)</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_bad_imp">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="invisible_char_set">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjBadImpedanceLimit</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">8</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator3">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">9</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-10">button_apply</action-widget>
|
||||
<action-widget response="-6">button_cancel</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
</interface>
|
||||
+768
@@ -0,0 +1,768 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<object class="GtkAdjustment" id="adjustment1">
|
||||
<property name="upper">100</property>
|
||||
<property name="value">18</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment2">
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment3">
|
||||
<property name="lower">1</property>
|
||||
<property name="upper">1024</property>
|
||||
<property name="value">4</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkWindow" id="dummy_window">
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="n_rows">8</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Sampling frequency :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model_sampling_frequency</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer_sampling_frequency"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_type">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Device type :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_number_of_channels">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Number of channels :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_type">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model_type</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer_type"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_number_of_channels">
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="invisible_char_set">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment3</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model_baud_rate">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">default</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">9 600</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">115 200</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">460 800</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model_bit_depth">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">default</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">8 bits</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">16 bits</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">24 bits</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model_gender">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unspecified</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">female</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">male</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unknown</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model_notch_filters">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">default</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">none</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">50Hz</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">60Hz</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model_preset">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Custom</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Discovery 24</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Atlantis 4x4</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Atlantis 2x2</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model_sampling_frequency">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">256</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">512</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">1024</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">2048</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model_type">
|
||||
<columns>
|
||||
<!-- column-name text -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Discovery</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Atlantis</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkDialog" id="openvibe-acquisition-server-settings">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Device configuration</property>
|
||||
<property name="window_position">center</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="gravity">center</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="spacing">8</property>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_apply">
|
||||
<property name="label">gtk-apply</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_cancel">
|
||||
<property name="label">gtk-cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_title">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Brainmaster Discovery / Atlantis
|
||||
|
||||
<small><span color="darkred">Attention : You should obtain a device passkey from Brainmaster
|
||||
in order to operate your device with OpenViBE</span></small></property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">8</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="n_rows">12</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Gender :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Age :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Identifier :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model_gender</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer_gender"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="invisible_char_set">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="invisible_char_set">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment2</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator3">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_device_preset">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Configuration preset :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_device_preset">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model_preset</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer_device_preset"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_device">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Device port :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_device">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer_device"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_baud_rate">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Baud rate :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_bit_depth">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Bit depth :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">7</property>
|
||||
<property name="bottom_attach">8</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_notch_filters">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Notch filter :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">8</property>
|
||||
<property name="bottom_attach">9</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_baud_rate">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model_baud_rate</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer_baud_rate"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_bit_depth">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model_bit_depth</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer_bit_depth"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">7</property>
|
||||
<property name="bottom_attach">8</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_notch_filters">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model_notch_filters</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer_notch_filters"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">8</property>
|
||||
<property name="bottom_attach">9</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">9</property>
|
||||
<property name="bottom_attach">10</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_device_serial">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Device Serial Nr :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">10</property>
|
||||
<property name="bottom_attach">11</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_device_passkey">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Device Passkey :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">11</property>
|
||||
<property name="bottom_attach">12</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="entry_device_serial">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="invisible_char_set">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">10</property>
|
||||
<property name="bottom_attach">11</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="entry_device_passkey">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="invisible_char_set">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">11</property>
|
||||
<property name="bottom_attach">12</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_change_channel_names">
|
||||
<property name="label" translatable="yes">Change channel names</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-10">button_apply</action-widget>
|
||||
<action-widget response="-6">button_cancel</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
</interface>
|
||||
+401
@@ -0,0 +1,401 @@
|
||||
<?xml version="1.0"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy project-wide -->
|
||||
<object class="GtkAdjustment" id="adjustment1">
|
||||
<property name="value">18</property>
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment2">
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment3">
|
||||
<property name="value">14</property>
|
||||
<property name="lower">14</property>
|
||||
<property name="upper">14</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model1">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unspecified</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">female</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">male</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unknown</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model2">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">128</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkDialog" id="openvibe-acquisition-server-settings">
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Device configuration</property>
|
||||
<property name="window_position">center</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="gravity">center</property>
|
||||
<property name="has_separator">False</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_title">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Emotiv EPOC
|
||||
|
||||
<small><span color="darkred">14 EEG channels
|
||||
128 Hz sampling rate
|
||||
|
||||
User ID is used for acquisition from multiple EPOC
|
||||
via different Acquisition Servers on the same computer.
|
||||
ID starts at 0 for the first headset connected
|
||||
Second headset has ID 1, etc.</span></small></property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="border_width">8</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table2">
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">3</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">model1</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer1"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment2</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Gender :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Age :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Identifier :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox1">
|
||||
<property name="visible">True</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label2">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Headset User ID:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_userid">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="adjustment">adjustment4</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="checkbutton_gyro">
|
||||
<property name="label" translatable="yes">Add 2 more channels for gyroscope</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_change_channel_names">
|
||||
<property name="label" translatable="yes">Change channel names</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator1">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label1">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Path to Emotiv Research SDK</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkFileChooserButton" id="filechooserbutton">
|
||||
<property name="visible">True</property>
|
||||
<property name="action">select-folder</property>
|
||||
<property name="title" translatable="yes">Path to Emotiv Research Edition SDK</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator2">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area">
|
||||
<property name="visible">True</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_apply">
|
||||
<property name="label">gtk-apply</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_cancel">
|
||||
<property name="label">gtk-cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-10">button_apply</action-widget>
|
||||
<action-widget response="-6">button_cancel</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
<object class="GtkWindow" id="dummy_window">
|
||||
<child>
|
||||
<object class="GtkTable" id="table1">
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">2</property>
|
||||
<property name="n_columns">2</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_number_of_channels">
|
||||
<property name="label" translatable="yes">Number of channels :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_frequency">
|
||||
<property name="label" translatable="yes">Sampling frequency :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_number_of_channels">
|
||||
<property name="can_focus">True</property>
|
||||
<property name="editable">False</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="adjustment">adjustment3</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_sampling_frequency">
|
||||
<property name="model">model2</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer2"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment4">
|
||||
<property name="upper">32</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
</interface>
|
||||
+406
@@ -0,0 +1,406 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<object class="GtkAdjustment" id="adjustment1">
|
||||
<property name="upper">100</property>
|
||||
<property name="value">18</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment2">
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment3">
|
||||
<property name="lower">1</property>
|
||||
<property name="upper">1024</property>
|
||||
<property name="value">4</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model1">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unspecified</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">female</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">male</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unknown</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model2">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">500</col>
|
||||
</row>
|
||||
<!--
|
||||
<row>
|
||||
<col id="0" translatable="yes">256</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">512</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">1024</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">2048</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">4096</col>
|
||||
</row>
|
||||
-->
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkDialog" id="openvibe-acquisition-server-settings">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Device configuration</property>
|
||||
<property name="window_position">center</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="gravity">center</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="spacing">8</property>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_apply">
|
||||
<property name="label">gtk-apply</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_cancel">
|
||||
<property name="label">gtk-cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_title">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Enobio 3G</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">8</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="n_rows">6</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model1</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer1"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment2</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Sampling frequency :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Number of channels :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Gender :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Age :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Identifier :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model2</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer2"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment3</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_address">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Mac address :</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="entry_address">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">•</property>
|
||||
<property name="text" translatable="yes">00:00:00:00:00:00</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_change_channel_names">
|
||||
<property name="label" translatable="yes">Change channel names</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-10">button_apply</action-widget>
|
||||
<action-widget response="-6">button_cancel</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
</interface>
|
||||
+478
@@ -0,0 +1,478 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<object class="GtkAdjustment" id="adjustment1">
|
||||
<property name="upper">100</property>
|
||||
<property name="value">18</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment2">
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment3">
|
||||
<property name="lower">1</property>
|
||||
<property name="upper">1024</property>
|
||||
<property name="value">4</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment4">
|
||||
<property name="lower">0</property>
|
||||
<property name="upper">86400</property>
|
||||
<property name="value">1</property>
|
||||
<property name="step_increment">0.0001</property>
|
||||
<property name="page_increment">1</property>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model1">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unspecified</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">female</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">male</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unknown</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model2">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">128</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">256</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">512</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">1000</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">1024</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">2048</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">4096</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">9600</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">19200</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">44100</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">48000</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkDialog" id="openvibe-acquisition-server-settings">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Device configuration</property>
|
||||
<property name="window_position">center</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="gravity">center</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="spacing">8</property>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_apply">
|
||||
<property name="label">gtk-apply</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_cancel">
|
||||
<property name="label">gtk-cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_title">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Generic Oscillator</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">8</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="n_rows">8</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model1</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer1"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment2</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Sampling frequency :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Number of channels :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Gender :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Age :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Identifier :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model2</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer2"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment3</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_send_stimulations">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Send periodical stimulations :</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="checkbutton_send_periodic_stimulations">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_stimulation_interval">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Stimulation interval (secs) :</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_stimulation_interval">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment4</property>
|
||||
<property name="snap_to_ticks">False</property>
|
||||
<property name="digits">4</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Check impedance :</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">7</property>
|
||||
<property name="bottom_attach">8</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="checkbutton_impedance">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">7</property>
|
||||
<property name="bottom_attach">8</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_change_channel_names">
|
||||
<property name="label" translatable="yes">Change channel names</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-10">button_apply</action-widget>
|
||||
<action-widget response="-6">button_cancel</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
</interface>
|
||||
+643
@@ -0,0 +1,643 @@
|
||||
<?xml version="1.0"?>
|
||||
<interface>
|
||||
<!-- interface-requires gtk+ 2.12 -->
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<object class="GtkAdjustment" id="adjustment1">
|
||||
<property name="value">18</property>
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment2">
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment3">
|
||||
<property name="value">4</property>
|
||||
<property name="lower">1</property>
|
||||
<property name="upper">1024</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment_sampling_frequency">
|
||||
<property name="value">256</property>
|
||||
<property name="lower">4</property>
|
||||
<property name="upper">4096</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkDialog" id="openvibe-acquisition-server-settings">
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Device configuration</property>
|
||||
<property name="window_position">center</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="gravity">center</property>
|
||||
<property name="has_separator">False</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_title">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Generic Raw File Reader</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="border_width">8</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table2">
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">12</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">model1</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer1"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment2</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Sampling frequency :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Number of channels :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Gender :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Age :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Identifier :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="combobox_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment_sampling_frequency</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment3</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator2">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_start_size">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Skip at start (bytes) :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">10</property>
|
||||
<property name="bottom_attach">11</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_header_size">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Skip header (bytes) :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">11</property>
|
||||
<property name="bottom_attach">12</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_footer_size">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Skip footer (bytes) :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">12</property>
|
||||
<property name="bottom_attach">13</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_sample_type">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Sample type :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">9</property>
|
||||
<property name="bottom_attach">10</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_endianness">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Endianness :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">8</property>
|
||||
<property name="bottom_attach">9</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_start_size">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="adjustment">adjustment_start_size</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">10</property>
|
||||
<property name="bottom_attach">11</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_header_size">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="adjustment">adjustment_header_size</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">11</property>
|
||||
<property name="bottom_attach">12</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_footer_size">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="adjustment">adjustment_footer_size</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">12</property>
|
||||
<property name="bottom_attach">13</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_sample_type">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">model_sample_type</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer4"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">9</property>
|
||||
<property name="bottom_attach">10</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_endianness">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">model_endianness</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer3"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">8</property>
|
||||
<property name="bottom_attach">9</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_filename">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Filename :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="entry_filename">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_speed_limit">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Limit speed :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">7</property>
|
||||
<property name="bottom_attach">8</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="checkbutton_limit_speed">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">7</property>
|
||||
<property name="bottom_attach">8</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_change_channel_names">
|
||||
<property name="label" translatable="yes">Change channel names</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator1">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area">
|
||||
<property name="visible">True</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_apply">
|
||||
<property name="label">gtk-apply</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_cancel">
|
||||
<property name="label">gtk-cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-10">button_apply</action-widget>
|
||||
<action-widget response="-6">button_cancel</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model1">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unspecified</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">female</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">male</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unknown</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model_endianness">
|
||||
<columns>
|
||||
<!-- column-name text -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Little endian</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Big endian</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model_sample_type">
|
||||
<columns>
|
||||
<!-- column-name text -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">8 bits unsigned integer</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">16 bits unsigned integer</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">32 bits unsigned integer</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">8 bits signed integer</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">16 bits signed integer</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">32 bits signed integer</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">32 bits float</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">64 bits float</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment_start_size">
|
||||
<property name="upper">1024</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment_header_size">
|
||||
<property name="upper">1024</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment_footer_size">
|
||||
<property name="upper">1024</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkWindow" id="window_dummy">
|
||||
<child>
|
||||
<object class="GtkTable" id="table_dummy">
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">3</property>
|
||||
<property name="n_columns">2</property>
|
||||
<child>
|
||||
<object class="GtkEntry" id="entry_host_name">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="text" translatable="yes">localhost</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_host_port">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="adjustment">adjustment4</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_host_port">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Connection host port</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_host_name">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Connection host name</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment4">
|
||||
<property name="upper">1024</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
</interface>
|
||||
+655
@@ -0,0 +1,655 @@
|
||||
<?xml version="1.0"?>
|
||||
<interface>
|
||||
<!-- interface-requires gtk+ 2.12 -->
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<object class="GtkAdjustment" id="adjustment1">
|
||||
<property name="value">18</property>
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment2">
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment3">
|
||||
<property name="value">4</property>
|
||||
<property name="lower">1</property>
|
||||
<property name="upper">1024</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment_sampling_frequency">
|
||||
<property name="value">256</property>
|
||||
<property name="lower">4</property>
|
||||
<property name="upper">4096</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkDialog" id="openvibe-acquisition-server-settings">
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Device configuration</property>
|
||||
<property name="window_position">center</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="gravity">center</property>
|
||||
<property name="has_separator">False</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_title">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Generic Raw File Reader</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="border_width">8</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table2">
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">13</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">model1</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer1"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment2</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Sampling frequency :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Number of channels :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Gender :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Age :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Identifier :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="combobox_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment_sampling_frequency</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment3</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator2">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_host_name">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Telnet host name</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_host_port">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Telnet host port</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">7</property>
|
||||
<property name="bottom_attach">8</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_host_port">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="adjustment">adjustment4</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">7</property>
|
||||
<property name="bottom_attach">8</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="entry_host_name">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="text" translatable="yes">localhost</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_endianness">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Endianness :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">9</property>
|
||||
<property name="bottom_attach">10</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_sample_type">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Sample type :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">10</property>
|
||||
<property name="bottom_attach">11</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_start_size">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Skip at start (bytes) :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">11</property>
|
||||
<property name="bottom_attach">12</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_header_size">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Skip header (bytes) :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">12</property>
|
||||
<property name="bottom_attach">13</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_footer_size">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Skip footer (bytes) :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">13</property>
|
||||
<property name="bottom_attach">14</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_sample_type">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">model_sample_type</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer4"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">10</property>
|
||||
<property name="bottom_attach">11</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_start_size">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="adjustment">adjustment_start_size</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">11</property>
|
||||
<property name="bottom_attach">12</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_header_size">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="adjustment">adjustment_header_size</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">12</property>
|
||||
<property name="bottom_attach">13</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_footer_size">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="adjustment">adjustment_footer_size</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">13</property>
|
||||
<property name="bottom_attach">14</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_endianness">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">model_endianness</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer3"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">9</property>
|
||||
<property name="bottom_attach">10</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_speed_limit">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Limit speed :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">8</property>
|
||||
<property name="bottom_attach">9</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="checkbutton_limit_speed">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">8</property>
|
||||
<property name="bottom_attach">9</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_change_channel_names">
|
||||
<property name="label" translatable="yes">Change channel names</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator1">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area">
|
||||
<property name="visible">True</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_apply">
|
||||
<property name="label">gtk-apply</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_cancel">
|
||||
<property name="label">gtk-cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-10">button_apply</action-widget>
|
||||
<action-widget response="-6">button_cancel</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model1">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unspecified</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">female</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">male</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unknown</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model_endianness">
|
||||
<columns>
|
||||
<!-- column-name text -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Little endian</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Big endian</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model_sample_type">
|
||||
<columns>
|
||||
<!-- column-name text -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">8 bits unsigned integer</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">16 bits unsigned integer</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">32 bits unsigned integer</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">8 bits signed integer</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">16 bits signed integer</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">32 bits signed integer</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">32 bits float</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">64 bits float</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment_start_size">
|
||||
<property name="upper">1024</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment_header_size">
|
||||
<property name="upper">1024</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment_footer_size">
|
||||
<property name="upper">1024</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkWindow" id="window_dummy">
|
||||
<child>
|
||||
<object class="GtkTable" id="table_dummy">
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">3</property>
|
||||
<property name="n_columns">2</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_filename">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Filename :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="entry_filename">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment4">
|
||||
<property name="upper">32767</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
</interface>
|
||||
+334
@@ -0,0 +1,334 @@
|
||||
<?xml version="1.0"?>
|
||||
<interface>
|
||||
<!-- interface-requires gtk+ 2.6 -->
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<object class="GtkAdjustment" id="adjustment1">
|
||||
<property name="value">18</property>
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment2">
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment3">
|
||||
<property name="value">1</property>
|
||||
<property name="lower">1</property>
|
||||
<property name="upper">1</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model1">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unspecified</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">female</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">male</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unknown</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model2">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">128</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">256</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">512</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">1024</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">2048</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">4096</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkDialog" id="openvibe-acquisition-server-settings">
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Device configuration</property>
|
||||
<property name="window_position">center</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="gravity">center</property>
|
||||
<property name="has_separator">False</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_title">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Generic Time Signal</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="border_width">8</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table2">
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">5</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">model1</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer1"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment2</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Sampling frequency :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Number of channels :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Gender :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Age :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Identifier :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">model2</property>
|
||||
<property name="active">0</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer2"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment3</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_change_channel_names">
|
||||
<property name="label" translatable="yes">Change channel names</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator1">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area">
|
||||
<property name="visible">True</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_apply">
|
||||
<property name="label">gtk-apply</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_cancel">
|
||||
<property name="label">gtk-cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-10">button_apply</action-widget>
|
||||
<action-widget response="-6">button_cancel</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
</interface>
|
||||
+509
@@ -0,0 +1,509 @@
|
||||
<?xml version="1.0"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<object class="GtkAdjustment" id="adjustment1">
|
||||
<property name="value">18</property>
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment2">
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment3">
|
||||
<property name="value">4</property>
|
||||
<property name="lower">1</property>
|
||||
<property name="upper">1024</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model1">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unspecified</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">female</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">male</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unknown</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model2">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">128</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">256</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">512</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">1024</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">2048</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">4096</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model3">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model4">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkDialog" id="openvibe-acquisition-server-settings">
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Device configuration</property>
|
||||
<property name="window_position">center</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="gravity">center</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_title">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">LabStreamingLayer (LSL)</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_desc1">
|
||||
<property name="visible">True</property>
|
||||
<property name="yalign">0.47999998927116394</property>
|
||||
<property name="label" translatable="yes">This driver only supports
|
||||
cf_float32 streams for signals and
|
||||
cf_int32 streams for markers
|
||||
|
||||
<small><span color='darkred'>LSL streams with nominal sampling rate of 0
|
||||
will automatically turn the fallback sampling rate
|
||||
(autodetect if empty or force it if set to a numerical value)</span></small></property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="border_width">8</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table2">
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">7</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">model1</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer1"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment2</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Gender :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Age :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Identifier :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_fallback_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="yalign">0.44999998807907104</property>
|
||||
<property name="label" translatable="yes">Fallback Sampling Frequency :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="entry_fallback_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_limit_speed">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Limit speed :</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="checkbutton_limit_speed">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_signal_stream">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Signal stream</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_signal_stream">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">model3</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer3"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_marker_stream">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">model4</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer4"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_marker_stream">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Marker stream</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_change_channel_names">
|
||||
<property name="label" translatable="yes">Change channel names</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator1">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area">
|
||||
<property name="visible">True</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_apply">
|
||||
<property name="label">gtk-apply</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_cancel">
|
||||
<property name="label">gtk-cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-10">button_apply</action-widget>
|
||||
<action-widget response="-6">button_cancel</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
<object class="GtkWindow" id="window_dummy">
|
||||
<child>
|
||||
<object class="GtkTable" id="table_dummy">
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">8</property>
|
||||
<property name="n_columns">2</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_number_of_channels">
|
||||
<property name="label" translatable="yes">Number of channels :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_number_of_channels">
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment3</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_frequency">
|
||||
<property name="label" translatable="yes">Sampling frequency :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_sampling_frequency">
|
||||
<property name="model">model2</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer2"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
||||
+486
@@ -0,0 +1,486 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<!-- interface-requires gtk+ 2.6 -->
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<object class="GtkAdjustment" id="adjustment1">
|
||||
<property name="upper">100</property>
|
||||
<property name="value">18</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment2">
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment3">
|
||||
<property name="lower">1</property>
|
||||
<property name="upper">136</property>
|
||||
<property name="value">136</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model1">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unspecified</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">female</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">male</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unknown</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model2">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">125</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">250</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">500</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">1000</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">2000</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">5000</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">10000</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">50000</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model_mode">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Normal</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Test</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkDialog" id="openvibe-acquisition-server-settings">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Device configuration</property>
|
||||
<property name="window_position">center</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="gravity">center</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="spacing">8</property>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_apply">
|
||||
<property name="label">gtk-apply</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_cancel">
|
||||
<property name="label">gtk-cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_title">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">MCS NVX amplifier</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">8</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="n_rows">8</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model1</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer1"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_mode">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model_mode</property>
|
||||
<property name="active">1</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer4"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">8</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment2</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Sampling frequency :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Number of channels :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Gender :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Age :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Identifier :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model2</property>
|
||||
<property name="active">0</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer2"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment3</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_data_mode">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Data mode:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="checkbutton_show_aux_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_show_aux_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Aux channels:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Check impedance :</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">7</property>
|
||||
<property name="bottom_attach">8</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="checkbutton_impedance">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">7</property>
|
||||
<property name="bottom_attach">8</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_change_channel_names">
|
||||
<property name="label" translatable="yes">Change channel names</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-10">button_apply</action-widget>
|
||||
<action-widget response="-6">button_cancel</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
</interface>
|
||||
+353
@@ -0,0 +1,353 @@
|
||||
<?xml version="1.0"?>
|
||||
<interface>
|
||||
<!-- interface-requires gtk+ 2.12 -->
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<object class="GtkAdjustment" id="adjustment1">
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment2">
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment3">
|
||||
<property name="upper">65535</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment4">
|
||||
<property name="value">1</property>
|
||||
<property name="lower">1</property>
|
||||
<property name="upper">1024</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model1">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">128</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">256</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">512</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">1024</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">2048</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">4096</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model2">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unspecified</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">female</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">male</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unknown</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkDialog" id="openvibe-acquisition-server-settings">
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Device configuration</property>
|
||||
<property name="window_position">center</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="gravity">center</property>
|
||||
<property name="has_separator">False</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_title">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Micromed SD LTM (through SystemPlus Evolution)</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="border_width">8</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table2">
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">3</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment2</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Age :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Identifier :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_host_port">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Connection host port</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_host_port">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment3</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator1">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="SW_EEG_BCI_Warning">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">The optional function of System PLUS Evolution
|
||||
"SW EEG BCI" is mandatory for the communication
|
||||
between the device and an external software to
|
||||
Micromed ( like OpenViBE) .</property>
|
||||
<property name="justify">fill</property>
|
||||
<property name="ellipsize">end</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area">
|
||||
<property name="visible">True</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_apply">
|
||||
<property name="label">gtk-apply</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_cancel">
|
||||
<property name="label">gtk-cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-10">button_apply</action-widget>
|
||||
<action-widget response="-6">button_cancel</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
<object class="GtkWindow" id="dummy-widgets">
|
||||
<child>
|
||||
<object class="GtkTable" id="table1">
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">10</property>
|
||||
<property name="n_columns">10</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_change_channel_names">
|
||||
<property name="label" translatable="yes">Change channel names</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">model1</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer1"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment4</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">model2</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer2"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="entry_host_name">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="max_length">15</property>
|
||||
<property name="invisible_char">•</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
||||
+333
@@ -0,0 +1,333 @@
|
||||
<?xml version="1.0"?>
|
||||
<interface>
|
||||
<!-- interface-requires gtk+ 2.6 -->
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<object class="GtkAdjustment" id="adjustment1">
|
||||
<property name="value">32</property>
|
||||
<property name="lower">1</property>
|
||||
<property name="upper">1024</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment2">
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment3">
|
||||
<property name="value">18</property>
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model1">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">128</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">256</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">512</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">1024</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">2048</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">4096</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model2">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unspecified</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">female</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">male</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unknown</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkDialog" id="openvibe-acquisition-server-settings">
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Device configuration</property>
|
||||
<property name="window_position">center</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="gravity">center</property>
|
||||
<property name="has_separator">False</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_title">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">MindMedia NeXus32B</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="border_width">8</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table2">
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">5</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">model1</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer1"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Identifier :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Age :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Gender :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Number of channels :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Sampling frequency :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment2</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment3</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">model2</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer2"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_change_channel_names">
|
||||
<property name="label" translatable="yes">Change channel names</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator1">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area">
|
||||
<property name="visible">True</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_apply">
|
||||
<property name="label">gtk-apply</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_cancel">
|
||||
<property name="label">gtk-cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-10">button_apply</action-widget>
|
||||
<action-widget response="-6">button_cancel</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
</interface>
|
||||
+433
@@ -0,0 +1,433 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<object class="GtkAdjustment" id="adjustment1">
|
||||
<property name="upper">100</property>
|
||||
<property name="value">18</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment2">
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment3">
|
||||
<property name="lower">1</property>
|
||||
<property name="upper">1</property>
|
||||
<property name="value">1</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model1">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unspecified</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">female</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">male</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unknown</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model2">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">2048</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkDialog" id="openvibe-acquisition-server-settings">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Device configuration</property>
|
||||
<property name="window_position">center</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="gravity">center</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="spacing">8</property>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_apply">
|
||||
<property name="label">gtk-apply</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_cancel">
|
||||
<property name="label">gtk-cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_title">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">NeuroServo</property>
|
||||
<property name="justify">center</property>
|
||||
<attributes>
|
||||
<attribute name="style" value="normal"/>
|
||||
<attribute name="size" value="200"/>
|
||||
</attributes>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_electrodes">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Signal(FP1) | Ref(FPz) | DRL(FP2)</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">8</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="n_rows">5</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model1</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer1"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment2</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Sampling frequency :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Number of channels :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Gender :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Age :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Identifier :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model2</property>
|
||||
<property name="active">0</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer2"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment3</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="checkbutton_automatic_shutdown">
|
||||
<property name="label" translatable="yes">Automatic Shutdown</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="tooltip_text" translatable="yes">Enable/Disable the device automatic shutdown feature on no head contact detection.</property>
|
||||
<property name="active">True</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="checkbutton_shutdown_on_driver_disconnect">
|
||||
<property name="label" translatable="yes">Shutdown on driver disconnect</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="tooltip_text" translatable="yes">Enable/Disable the device shutdown sent command on driver “Disconnect” button activation.</property>
|
||||
<property name="active">True</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="checkbutton_device_light_enable">
|
||||
<property name="label" translatable="yes">Device Light Enable</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="tooltip_text" translatable="yes">Enable/Disable the device brim light while the device is connected.</property>
|
||||
<property name="active">True</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">8</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes"><span size="smaller" foreground="#602020"> This device is transferring RAW data at rate of 2048Hz.
|
||||
(Same as sampling frequency)
|
||||
|
||||
To minimize sporadic automatic drift correction on data
|
||||
you should set the Drift Tolerance (ms) to 20 in
|
||||
Acquisition Server Preferences.
|
||||
|
||||
Be advised that the RAW data generated by this device
|
||||
has not been passed through a Notch filter.
|
||||
</span></property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">9</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-10">button_apply</action-widget>
|
||||
<action-widget response="-6">button_cancel</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
</interface>
|
||||
+418
@@ -0,0 +1,418 @@
|
||||
<?xml version="1.0"?>
|
||||
<interface>
|
||||
<!-- interface-requires gtk+ 2.12 -->
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<object class="GtkAdjustment" id="adjustment1">
|
||||
<property name="value">18</property>
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment2">
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment3">
|
||||
<property name="value">4</property>
|
||||
<property name="lower">1</property>
|
||||
<property name="upper">1024</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model2">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">512</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkDialog" id="openvibe-acquisition-server-settings">
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Device configuration</property>
|
||||
<property name="window_position">center</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="gravity">center</property>
|
||||
<property name="has_separator">False</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_title">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Neurosky Mindset</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="border_width">8</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table2">
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">6</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">model1</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer1"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment2</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Sampling frequency :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_number_of_channels">
|
||||
<property name="label" translatable="yes">Number of channels :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Gender :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Age :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Identifier :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">model2</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer2"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_number_of_channels">
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment3</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label1">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">COM Port</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_com_port">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">liststore1</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="cellrenderertext1"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_change_channel_names">
|
||||
<property name="label" translatable="yes">Change channel names</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_check_signal_quality">
|
||||
<property name="label" translatable="yes">Check Signal Quality</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator1">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="check_esense">
|
||||
<property name="label" translatable="yes">ESense (Meditation/Attention)</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="check_power">
|
||||
<property name="label" translatable="yes">Power (8 channels)</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="check_blink">
|
||||
<property name="label" translatable="yes">Blinks (As OVTK_GDF_Eye_Blink stimulation)</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="check_blink_strenght">
|
||||
<property name="label" translatable="yes">Blink Strength (1 channel with spikes)</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area">
|
||||
<property name="visible">True</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_apply">
|
||||
<property name="label">gtk-apply</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_cancel">
|
||||
<property name="label">gtk-cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-10">button_apply</action-widget>
|
||||
<action-widget response="-6">button_cancel</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model1">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unspecified</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">female</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">male</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unknown</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="liststore1">
|
||||
<columns>
|
||||
<!-- column-name com-port -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
</interface>
|
||||
+744
@@ -0,0 +1,744 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<object class="GtkAdjustment" id="adjustment1">
|
||||
<property name="upper">100</property>
|
||||
<property name="value">18</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment2">
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment3">
|
||||
<property name="lower">3</property>
|
||||
<property name="upper">3</property>
|
||||
<property name="value">3</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment4">
|
||||
<property name="lower">-500</property>
|
||||
<property name="upper">500</property>
|
||||
<property name="value">0</property>
|
||||
<property name="step_increment">0.01</property>
|
||||
<property name="page_increment">1</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment5">
|
||||
<property name="lower">0</property>
|
||||
<property name="upper">100</property>
|
||||
<property name="value">0.1</property>
|
||||
<property name="step_increment">0.01</property>
|
||||
<property name="page_increment">1</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment6">
|
||||
<property name="lower">0</property>
|
||||
<property name="upper">1</property>
|
||||
<property name="value">0.99</property>
|
||||
<property name="step_increment">0.001</property>
|
||||
<property name="page_increment">0.01</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment7">
|
||||
<property name="lower">0</property>
|
||||
<property name="upper">100</property>
|
||||
<property name="value">0.1</property>
|
||||
<property name="step_increment">0.01</property>
|
||||
<property name="page_increment">1</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment8">
|
||||
<property name="lower">0</property>
|
||||
<property name="upper">10000</property>
|
||||
<property name="value">3</property>
|
||||
<property name="step_increment">0.1</property>
|
||||
<property name="page_increment">1</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment9">
|
||||
<property name="lower">0</property>
|
||||
<property name="upper">100</property>
|
||||
<property name="value">0</property>
|
||||
<property name="step_increment">0.01</property>
|
||||
<property name="page_increment">0.1</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment10">
|
||||
<property name="lower">0</property>
|
||||
<property name="upper">10</property>
|
||||
<property name="value">0.5</property>
|
||||
<property name="step_increment">0.01</property>
|
||||
<property name="page_increment">0.1</property>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model1">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unspecified</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">female</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">male</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unknown</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model2">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">128</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">256</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">512</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">1000</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">1024</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">2048</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">4096</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">9600</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">19200</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">44100</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">48000</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model3">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Square</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Sine</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkDialog" id="openvibe-acquisition-server-settings">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Device configuration</property>
|
||||
<property name="window_position">center</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="gravity">center</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="spacing">8</property>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_apply">
|
||||
<property name="label">gtk-apply</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_cancel">
|
||||
<property name="label">gtk-cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_title">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Simulated Deviator</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">8</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="n_rows">7</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model1</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer1"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment2</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Sampling frequency :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Number of channels :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Gender :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Age :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Identifier :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model2</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer2"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">False</property>
|
||||
<property name="secondary_icon_sensitive">False</property>
|
||||
<property name="adjustment">adjustment3</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_send_stimulations">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Send periodical stimulations :</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="checkbutton_send_periodic_stimulations">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Check impedance :</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="checkbutton_impedance">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_offset">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Offset (Hz) :</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">7</property>
|
||||
<property name="bottom_attach">8</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_offset">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment4</property>
|
||||
<property name="snap_to_ticks">False</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">7</property>
|
||||
<property name="bottom_attach">8</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_spread">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Spread:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">8</property>
|
||||
<property name="bottom_attach">9</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_spread">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment5</property>
|
||||
<property name="snap_to_ticks">False</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">8</property>
|
||||
<property name="bottom_attach">9</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_maxdev">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Max dev (Hz):</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">9</property>
|
||||
<property name="bottom_attach">10</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_maxdev">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment8</property>
|
||||
<property name="snap_to_ticks">False</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">9</property>
|
||||
<property name="bottom_attach">10</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_pullback">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Pullback :</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">10</property>
|
||||
<property name="bottom_attach">11</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_pullback">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment6</property>
|
||||
<property name="snap_to_ticks">False</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">10</property>
|
||||
<property name="bottom_attach">11</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_update">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Update (s) :</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">11</property>
|
||||
<property name="bottom_attach">12</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_update">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment7</property>
|
||||
<property name="snap_to_ticks">False</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">11</property>
|
||||
<property name="bottom_attach">12</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_wavetype">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Wave type :</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">12</property>
|
||||
<property name="bottom_attach">13</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_wavetype">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model3</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer3"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">12</property>
|
||||
<property name="bottom_attach">13</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_freeze_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Freeze frequency (hz, avg) :</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">13</property>
|
||||
<property name="bottom_attach">14</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_freeze_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment9</property>
|
||||
<property name="snap_to_ticks">False</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">13</property>
|
||||
<property name="bottom_attach">14</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_freeze_duration">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Freeze duration (s) :</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">14</property>
|
||||
<property name="bottom_attach">15</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_freeze_duration">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment10</property>
|
||||
<property name="snap_to_ticks">False</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">14</property>
|
||||
<property name="bottom_attach">15</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_change_channel_names">
|
||||
<property name="label" translatable="yes">Change channel names</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-10">button_apply</action-widget>
|
||||
<action-widget response="-6">button_cancel</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
</interface>
|
||||
+448
@@ -0,0 +1,448 @@
|
||||
<?xml version="1.0"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<object class="GtkAdjustment" id="adjustment1">
|
||||
<property name="value">32</property>
|
||||
<property name="lower">1</property>
|
||||
<property name="upper">1024</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment2">
|
||||
<property name="value">18</property>
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment3">
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model1">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unspecified</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">female</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">male</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unknown</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model2">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">128</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">256</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">512</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">1024</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">2048</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">4096</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model3">
|
||||
<columns>
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkDialog" id="openvibe-acquisition-server-settings">
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Device configuration</property>
|
||||
<property name="window_position">center</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="gravity">center</property>
|
||||
<property name="has_separator">False</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_title">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">TMSI Refa32B</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="border_width">8</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table2">
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">6</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">model1</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer1"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Number of channels :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment2</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment3</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Sampling frequency :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Gender :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Age :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Identifier :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">model2</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer2"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_device">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">model3</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer3"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_device_master">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Device Master :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_change_channel_names">
|
||||
<property name="label" translatable="yes">Change channel names</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTable" id="table1">
|
||||
<property name="visible">True</property>
|
||||
<property name="n_columns">3</property>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow" id="scrolledwindow1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hscrollbar_policy">automatic</property>
|
||||
<property name="vscrollbar_policy">automatic</property>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="Device ListTree">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow" id="scrolledwindow2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hscrollbar_policy">automatic</property>
|
||||
<property name="vscrollbar_policy">automatic</property>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="Devices SlavesTree">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">2</property>
|
||||
<property name="right_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox1">
|
||||
<property name="visible">True</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_add_slave_device">
|
||||
<property name="label" translatable="yes">></property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="border_width">8</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_remove_slave_device">
|
||||
<property name="label" translatable="yes"><</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="border_width">8</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator1">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area">
|
||||
<property name="visible">True</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_apply">
|
||||
<property name="label">gtk-apply</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_cancel">
|
||||
<property name="label">gtk-cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-10">button_apply</action-widget>
|
||||
<action-widget response="-6">button_cancel</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
</interface>
|
||||
+738
@@ -0,0 +1,738 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<object class="GtkAdjustment" id="adjustment1">
|
||||
<property name="upper">1024</property>
|
||||
<property name="value">32</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment2">
|
||||
<property name="upper">100</property>
|
||||
<property name="value">18</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment3">
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment_eeg_channels">
|
||||
<property name="upper">1024</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkListStore" id="liststore_impedance_limit">
|
||||
<columns>
|
||||
<!-- column-name title -->
|
||||
<column type="gchararray"/>
|
||||
<!-- column-name value -->
|
||||
<column type="guint"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">2 kOhm</col>
|
||||
<col id="1">0</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">5 kOhm</col>
|
||||
<col id="1">1</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">10 kOhm</col>
|
||||
<col id="1">2</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">20 kOhm</col>
|
||||
<col id="1">3</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">50 kOhm</col>
|
||||
<col id="1">4</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">100 kOhm</col>
|
||||
<col id="1">5</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">200 kOhm</col>
|
||||
<col id="1">6</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="liststore_tmsi_connection_protocol">
|
||||
<columns>
|
||||
<!-- column-name Text -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkListStore" id="liststore_tmsi_devices">
|
||||
<columns>
|
||||
<!-- column-name Name -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model1">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unspecified</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">female</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">male</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unknown</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model2">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model3">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkDialog" id="openvibe-acquisition-server-settings">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Device configuration</property>
|
||||
<property name="window_position">center</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="gravity">center</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="spacing">8</property>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_apply">
|
||||
<property name="label">gtk-apply</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_cancel">
|
||||
<property name="label">gtk-cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_title">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes"><b>TMSi Universal Driver</b></property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label3">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">To set up the acquisition please set the controls in sequence.</property>
|
||||
<property name="use_markup">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">8</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="n_rows">14</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model1</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer1"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment2</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment3</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes"><span color="blue"><b>3</b></span> Sampling frequency :</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">7</property>
|
||||
<property name="bottom_attach">8</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Gender :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Age :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Identifier :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="tooltip_text" translatable="yes">How many samples per second will be acquired.
|
||||
Higher sampling frequency increases precision of EEG.</property>
|
||||
<property name="model">model2</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer2"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">7</property>
|
||||
<property name="bottom_attach">8</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_connection_protocol">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes"><span color="blue"><b>1</b></span> Connection Protocol</property>
|
||||
<property name="use_markup">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_tmsi_device">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes"><span color="blue"><b>2</b></span> Device :</property>
|
||||
<property name="use_markup">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_tmsi_connection_protocol">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">liststore_tmsi_connection_protocol</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="cellrenderertext_tmsi_connection_protocol"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_tmsi_device">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">liststore_tmsi_devices</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="cellrenderertext_tmsi_device"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label4">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes"><b>Subject Settings</b></property>
|
||||
<property name="use_markup">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label5">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">
|
||||
<b>Driver Settings</b></property>
|
||||
<property name="use_markup">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes"><span color="blue"><b>4</b></span> Number of EEG channels :</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">13</property>
|
||||
<property name="bottom_attach">14</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="has_tooltip">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment_eeg_channels</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">13</property>
|
||||
<property name="bottom_attach">14</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label8">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes"><b>Channel Settings</b></property>
|
||||
<property name="use_markup">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">12</property>
|
||||
<property name="bottom_attach">13</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_average_reference">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Use Common Average Reference</property>
|
||||
<property name="use_markup">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">8</property>
|
||||
<property name="bottom_attach">9</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="checkbutton_tmsi_average_reference">
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="has_tooltip">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Whether to use common average reference (CAR) or not. Using CAR greatly improves the quality of signal in regards to ambient and environmental noise.</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">8</property>
|
||||
<property name="bottom_attach">9</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label9">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">
|
||||
<b>Additional Settings</b></property>
|
||||
<property name="use_markup">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">9</property>
|
||||
<property name="bottom_attach">10</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_impedance_limit">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Impedance Limit :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">10</property>
|
||||
<property name="bottom_attach">11</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_tmsi_impedance_limit">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="has_tooltip">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Some TMSi amplifiers can measure impedance. When the electrodes are equipped with LEDs they will illuminate if their impedance is superior to the selected value. </property>
|
||||
<property name="model">liststore_impedance_limit</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="cellrenderertext1"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">10</property>
|
||||
<property name="bottom_attach">11</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Check impedance :</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">11</property>
|
||||
<property name="bottom_attach">12</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="checkbutton_impedance">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">11</property>
|
||||
<property name="bottom_attach">12</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label7">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">You can rename the EEG channels if you wish. Additional channels will
|
||||
always have their names set to names reported by the device.</property>
|
||||
<property name="use_markup">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_change_channel_names">
|
||||
<property name="label" translatable="yes">Change EEG channel names</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_tmsi_additional_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="tooltip_text" translatable="yes">Some TMSi amplifiers provide additional channels,
|
||||
such as Time signal, Accelerometer readings and
|
||||
others. You can activate each of these channels separately.</property>
|
||||
<property name="label" translatable="yes">Additional channels</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTable" id="table_tmsi_additional_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="n_columns">2</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-10">button_apply</action-widget>
|
||||
<action-widget response="-6">button_cancel</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
</interface>
|
||||
+210
@@ -0,0 +1,210 @@
|
||||
<?xml version="1.0"?>
|
||||
<interface>
|
||||
<object class="GtkDialog" id="channel-names">
|
||||
<property name="width_request">480</property>
|
||||
<property name="height_request">320</property>
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Choose electrode names...</property>
|
||||
<property name="window_position">GTK_WIN_POS_CENTER</property>
|
||||
<property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
|
||||
<property name="gravity">GDK_GRAVITY_CENTER</property>
|
||||
<property name="has_separator">False</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="border_width">8</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow" id="scrolledwindow_electrode_names">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
||||
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="treeview_electrode_names">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVButtonBox" id="vbuttonbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="layout_style">GTK_BUTTONBOX_CENTER</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_apply_channel_name">
|
||||
<property name="visible">True</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="image">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-go-forward</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_remove_channel_name">
|
||||
<property name="visible">True</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="image1">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-cancel</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow" id="scrolledwindow_channel_names">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
||||
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="treeview_channel_names">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area">
|
||||
<property name="visible">True</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="layout_style">GTK_BUTTONBOX_END</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_load">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="button_load_hbox">
|
||||
<property name="visible">True</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="button_load_image">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-open</property>
|
||||
<property name="icon_size">3</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="button_load_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Load...</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_save">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="button_save_hbox">
|
||||
<property name="visible">True</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="button_save_image">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-save-as</property>
|
||||
<property name="icon_size">3</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="button_save_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Save...</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_apply">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">gtk-apply</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_cancel">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">gtk-cancel</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="pack_type">GTK_PACK_END</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="0">button_apply_channel_name</action-widget>
|
||||
<action-widget response="0">button_remove_channel_name</action-widget>
|
||||
<action-widget response="1">button_load</action-widget>
|
||||
<action-widget response="2">button_save</action-widget>
|
||||
<action-widget response="-10">button_apply</action-widget>
|
||||
<action-widget response="-6">button_cancel</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
</interface>
|
||||
+438
@@ -0,0 +1,438 @@
|
||||
<?xml version="1.0"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<object class="GtkAdjustment" id="adjustment1">
|
||||
<property name="value">32</property>
|
||||
<property name="lower">1</property>
|
||||
<property name="upper">280</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment2">
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment3">
|
||||
<property name="value">18</property>
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment4">
|
||||
<property name="value">9879</property>
|
||||
<property name="lower">1</property>
|
||||
<property name="upper">32767</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment5">
|
||||
<property name="value">9877</property>
|
||||
<property name="lower">1</property>
|
||||
<property name="upper">32767</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model1">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unspecified</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">female</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">male</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">unknown</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model2">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">1000</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkDialog" id="openvibe-acquisition-server-settings">
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Device configuration</property>
|
||||
<property name="window_position">center</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="gravity">center</property>
|
||||
<property name="has_separator">False</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_title">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">EGI Net Amps 300 (through AmpServer)</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="border_width">8</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table">
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">7</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Identifier :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Age :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Gender :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_number_of_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Number of channels :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_identifier">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment2</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_age">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">adjustment3</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_gender">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">model1</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer1"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_stream_port">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">AmpServer stream port :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_command_port">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">AmpServer command port :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_stream_port">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="adjustment">adjustment4</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_command_port">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="adjustment">adjustment5</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_server_host_name">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">AmpServer host name :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="entry_host_name">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="text">localhost</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_change_channel_names">
|
||||
<property name="label" translatable="yes">Change channel names</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator1">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area">
|
||||
<property name="visible">True</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_apply">
|
||||
<property name="label">gtk-apply</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_cancel">
|
||||
<property name="label">gtk-cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-10">button_apply</action-widget>
|
||||
<action-widget response="-6">button_cancel</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
<object class="GtkWindow" id="dummy_window">
|
||||
<child>
|
||||
<object class="GtkTable" id="table1">
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">3</property>
|
||||
<property name="n_columns">3</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Sampling frequency :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_sampling_frequency">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">model2</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer2"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
||||
+827
@@ -0,0 +1,827 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy project-wide -->
|
||||
<object class="GtkAdjustment" id="adjustment1">
|
||||
<property name="lower">1024</property>
|
||||
<property name="upper">65535</property>
|
||||
<property name="value">9999</property>
|
||||
<property name="step_increment">1</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment_drift_1">
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment_drift_2">
|
||||
<property name="upper">100</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment_drift_tolerance">
|
||||
<property name="upper">1000</property>
|
||||
<property name="value">10</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment_jitter_measure_count">
|
||||
<property name="lower">1</property>
|
||||
<property name="upper">1000</property>
|
||||
<property name="value">10</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="adjustment_oversampling_factor">
|
||||
<property name="lower">1</property>
|
||||
<property name="upper">16</property>
|
||||
<property name="value">1</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="image_driver_properties">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-properties</property>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model-sample_count_per_sent_block">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">4</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">8</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">16</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">32</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">64</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">128</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">256</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">512</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model_drift_correction">
|
||||
<columns>
|
||||
<!-- column-name gchararray -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Let the driver decide</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Force</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Disable</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model_nan_replacement">
|
||||
<columns>
|
||||
<!-- column-name policy -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Replace with the last correct value</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Replace with 0</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">No replacement</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkWindow" id="openvibe-acquisition-server">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="title" translatable="yes">OpenViBE Acquisition Server v${PROJECT_VERSION}</property>
|
||||
<property name="resizable">False</property>
|
||||
<property name="window_position">center</property>
|
||||
<signal name="delete-event" handler="gtk_main_quit" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">8</property>
|
||||
<property name="spacing">2</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">2</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="n_rows">5</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="column_spacing">2</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_driver">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Driver :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_connection_port">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Connection port :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_sample_count_per_sent_block">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Sample count per sent block :</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_connection_port">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBoxEntry" id="combobox_sample_count_per_sent_block">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model-sample_count_per_sent_block</property>
|
||||
<property name="text_column">0</property>
|
||||
<child internal-child="entry">
|
||||
<object class="GtkEntry" id="comboboxentry-entry2">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_driver">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_configure">
|
||||
<property name="label">Driver Properties</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="image">image_driver_properties</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVSeparator" id="vseparator">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="padding">8</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVButtonBox" id="vbuttonbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">2</property>
|
||||
<property name="layout_style">spread</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_preference">
|
||||
<property name="label">gtk-preferences</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkToggleButton" id="togglebutton_connect">
|
||||
<property name="label">gtk-connect</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_play">
|
||||
<property name="label">gtk-media-play</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_stop">
|
||||
<property name="label">gtk-media-stop</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTable" id="table_drift">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="n_rows">2</property>
|
||||
<property name="n_columns">2</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_drift">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkProgressBar" id="progressbar_drift_1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">right-to-left</property>
|
||||
<property name="adjustment">adjustment_drift_1</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkProgressBar" id="progressbar_drift_2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="adjustment">adjustment_drift_2</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator3">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTable" id="table_status">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="n_rows">2</property>
|
||||
<property name="n_columns">2</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_status">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_connected_host_count">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkDialog" id="openvibe-acquisition-server-configuration">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Global Configuration</property>
|
||||
<property name="modal">True</property>
|
||||
<property name="window_position">center</property>
|
||||
<property name="type_hint">normal</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">2</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_title">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Acquisition Server
|
||||
Configuration </property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTable" id="table1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="n_rows">10</property>
|
||||
<property name="n_columns">2</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_oversampling_factor">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="xpad">2</property>
|
||||
<property name="label" translatable="yes">Oversampling Factor</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_select_only_named_channels">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="xpad">2</property>
|
||||
<property name="label" translatable="yes">Select only named channels</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_oversampling_factor">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment_oversampling_factor</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="checkbutton_channel_selection">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_jitter_measure_count">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="xpad">2</property>
|
||||
<property name="label" translatable="yes">Jitter Estimation Count For Drift</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_drift_tolerance">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="xpad">2</property>
|
||||
<property name="label" translatable="yes">Drift Tolerance (ms)</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_jitter_measure_count">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment_jitter_measure_count</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="spinbutton_drift_tolerance">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="secondary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">True</property>
|
||||
<property name="secondary_icon_sensitive">True</property>
|
||||
<property name="adjustment">adjustment_drift_tolerance</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator4">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_drift_correction">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="xpad">2</property>
|
||||
<property name="label" translatable="yes">Drift Correction</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_drift_correction">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model_drift_correction</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer2"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator5">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">8</property>
|
||||
<property name="bottom_attach">9</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_nan_replacement">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="xpad">2</property>
|
||||
<property name="label" translatable="yes">NaN value replacement</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">9</property>
|
||||
<property name="bottom_attach">10</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="combobox_nan_replacement">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">model_nan_replacement</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer_nan_replacement"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">9</property>
|
||||
<property name="bottom_attach">10</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator6">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_pluginsettingstitle">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Plugin Settings</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_ok">
|
||||
<property name="label">gtk-apply</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_cancel">
|
||||
<property name="label">gtk-cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTable" id="table-pluginsettings">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-10">button_ok</action-widget>
|
||||
<action-widget response="-6">button_cancel</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
</interface>
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
<OpenViBE-SettingsOverride>
|
||||
<SettingValue>Fp1;Fz;F3;F7;FT9;FC5;FC1;C3;T7;TP9;CP5;CP1;Pz;P3;P7;O1;Oz;O2;P4;P8;TP10;CP6;CP2;Cz;C4;T8;FT10;FC6;FC2;F4;F8;Fp2;AF7;AF3;AFz;F1;F5;FT7;FC3;FCz;C1;C5;TP7;CP3;P1;P5;PO7;PO3;POz;PO4;PO8;P6;P2;CPz;CP4;TP8;C6;C2;FC4;FT8;F6;F2;AF4;AF8;</SettingValue>
|
||||
</OpenViBE-SettingsOverride>
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
(sendCommand cmd_NumberOfAmps -1 -1 -1)
|
||||
(sendCommand cmd_SetPower 0 -1 0)
|
||||
(sendCommand cmd_SetPower 0 -1 1)
|
||||
(sendCommand cmd_GetAmpDetails 0 -1 -1)
|
||||
(sendCommand cmd_SetDecimatedRate 0 0 1000)
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 225 KiB |
BIN
Binary file not shown.
|
After Width: | Height: | Size: 76 KiB |
BIN
Binary file not shown.
|
After Width: | Height: | Size: 225 KiB |
BIN
Binary file not shown.
|
After Width: | Height: | Size: 225 KiB |
BIN
Binary file not shown.
|
After Width: | Height: | Size: 225 KiB |
+709
@@ -0,0 +1,709 @@
|
||||
/*
|
||||
* mCBioSemiActiveTwoBridge.cpp
|
||||
*
|
||||
* Copyright (c) 2012, Mensia Technologies SA. All rights reserved.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
This code implements the procedure described her:
|
||||
http://www.biosemi.com/faq/make_own_acquisition_software.htm
|
||||
*/
|
||||
|
||||
#ifdef TARGET_HAS_ThirdPartyBioSemiAPI
|
||||
#include "mCBridgeBioSemiActiveTwo.h"
|
||||
|
||||
#include <iostream>
|
||||
//debug
|
||||
#include <fstream>
|
||||
|
||||
#ifdef WIN32
|
||||
#ifndef WIN32_LEAN_AND_MEAN
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#endif
|
||||
#include <windows.h>
|
||||
#else
|
||||
// linux, mac
|
||||
#include <unistd.h>
|
||||
#endif // WIN32
|
||||
|
||||
#include <labview_dll.h>
|
||||
|
||||
//___________________________________________________________________//
|
||||
// //
|
||||
#ifdef _DEBUG
|
||||
#define __BioSemiBridgeLogConsole__(msg, ...) printf(msg, __VA_ARGS__)
|
||||
#else
|
||||
#define __BioSemiBridgeLogConsole__(msg, ...)
|
||||
#endif
|
||||
|
||||
//___________________________________________________________________//
|
||||
// //
|
||||
// Ring buffer must be large enough to hold at least a complete sample round
|
||||
// otherwise we wont be able to detect the length between 2 sync bytes and deduce channel count.
|
||||
// test gives 131072 bytes (32768 long) per read
|
||||
// it needs to be a multiple of 512
|
||||
#define BIOSEMI_ACTIVETWO_RINGBUFFERLONGCOUNT (32768*512)
|
||||
#define BIOSEMI_ACTIVETWO_RINGBUFFERBYTES (BIOSEMI_ACTIVETWO_RINGBUFFERLONGCOUNT*sizeof(int)) //67108864 bytes
|
||||
|
||||
// The control buffer is sent through USB_WRITE. It is a 64 bytes buffer.
|
||||
// First byte controls the start/stop filling of ring buffer; if Odd, it starts.
|
||||
// 2nd and 3rd byte are used for outgoing triggers.
|
||||
// byte 4-64 unused.
|
||||
#define BIOSEMI_ACTIVETWO_CONTROLBUFFERBYTES 64
|
||||
|
||||
// SYNC bytes pads the stream that sends a fixed number of bytes per read() independently of the channel count.
|
||||
#define BIOSEMI_ACTIVETWO_SYNCBYTES 0xffffff00
|
||||
|
||||
// the device can be configured by changing the speedmode "button" in front of the amplifier 0-9
|
||||
#define BIOSEMI_ACTIVETWO_SPEEDMODECOUNT 10
|
||||
|
||||
namespace BioSemi {
|
||||
/*
|
||||
AD-box model MK1
|
||||
|
||||
AD-box switch | Sample-rate | Pin channels + EX channels + Sensor channels
|
||||
***************|*****************|*********************************************
|
||||
0 | 2048 (2 kHz) | 256+0+0
|
||||
1 | 4096 (4 kHz) | 128+0+0
|
||||
2 | 8192 (8 kHz) | 64+0+0
|
||||
3 | 16384 (16 kHz) | 32+0+0
|
||||
4 | 2048 (2 kHz) | 232+8+7
|
||||
5 | 4096 (4 kHz) | 104+8+7
|
||||
6 | 8192 (8 kHz) | 40+8+7
|
||||
7 | 16384 (16 kHz) | 8+8+7
|
||||
8 (AIB-mode) | 2048 (2 kHz) | AIB-mode
|
||||
9 | Reserved | Reserved
|
||||
*/
|
||||
static uint32_t activeTwoMarkISpeedModeFrequency[BIOSEMI_ACTIVETWO_SPEEDMODECOUNT] = { 2048, 4096, 8192, 16384, 2048, 4096, 8192, 16384, 2048, 0 };
|
||||
|
||||
/*
|
||||
AD-box model MK2
|
||||
|
||||
AD-box switch | Sample-rate | Pin channels + EX channels + Sensor channels
|
||||
***************|*****************|*********************************************
|
||||
0 | 2048 (2 kHz) | >> Daisy-chain mode:
|
||||
1 | 4096 (4 kHz) | >> In speedmode 0 to 3, the AD-boxes work as up to 4 optical fiber 'daisy chained' boxes,
|
||||
2 | 8192 (8 kHz) | >> each with a maximum of 128+8 channels+sensors @ 2 kHz, speedmode switch = box number. (0=Box1, 1=Box2, 2=Box3, 3=Box4).
|
||||
3 | 16384 (16 kHz) | >> Daisy chain possibilities are not standard included in the base system price
|
||||
4 | 2048 (2 kHz) | 256+8+7
|
||||
5 | 4096 (4 kHz) | 128+8+7
|
||||
6 | 8192 (8 kHz) | 64+8+7
|
||||
7 | 16384 (16 kHz) | 32+8+7
|
||||
8 (AIB-mode) | 2048 (2 kHz) | 256+8+7+32AIB
|
||||
9 (ABR-mode) | 16384 (16 kHz) | 5
|
||||
*/
|
||||
static uint32_t activeTwoMarkIISpeedModeFrequency[BIOSEMI_ACTIVETWO_SPEEDMODECOUNT] = { 2048, 4096, 8192, 16384, 2048, 4096, 8192, 16384, 2048, 16384 };
|
||||
|
||||
static uint32_t* activeTwoSpeedModeFrequency[2] = { activeTwoMarkISpeedModeFrequency, activeTwoMarkIISpeedModeFrequency };
|
||||
|
||||
/*
|
||||
The ActiveTwo sends the following number of 32-bit words per sample:
|
||||
|
||||
Mk1:
|
||||
Speedmode 0 and 4: 258
|
||||
Speedmode 1 and 5: 130
|
||||
Speedmode 2 and 6: 66
|
||||
Speedmode 3 and 7: 34
|
||||
Speedmode 8: 290 (2+256+32)
|
||||
*/
|
||||
static uint32_t activeTwoMarkILongPerSample[BIOSEMI_ACTIVETWO_SPEEDMODECOUNT] = { 258, 130, 66, 34, 258, 130, 66, 34, 290, 0 };
|
||||
|
||||
/*
|
||||
Mk2:
|
||||
Speedmode 0, 1, 2 and 3: 610 (2+4*152)
|
||||
Speedmode 4: 282
|
||||
Speedmode 5: 154
|
||||
Speedmode 6: 90
|
||||
Speedmode 7: 58
|
||||
Speedmode 8: 314 (2+280+32)
|
||||
*/
|
||||
static uint32_t activeTwoMarkIILongPerSample[BIOSEMI_ACTIVETWO_SPEEDMODECOUNT] = { 610, 610, 610, 610, 282, 154, 90, 58, 314, 0 };
|
||||
|
||||
static uint32_t* activeTwoMarkLongPerSample[2] = { activeTwoMarkILongPerSample, activeTwoMarkIILongPerSample };
|
||||
/*
|
||||
The ActiveTwo sends the following number of 32-bit words per sample:
|
||||
|
||||
Mk1:
|
||||
Speedmode 0 and 4: 258
|
||||
Speedmode 1 and 5: 130
|
||||
Speedmode 2 and 6: 66
|
||||
Speedmode 3 and 7: 34
|
||||
Speedmode 8: 290 (2+256+32)
|
||||
*/
|
||||
static uint32_t activeTwoMarkIElectrodeChannelPerSample[BIOSEMI_ACTIVETWO_SPEEDMODECOUNT] = { 256, 128, 256, 34, 232, 104, 40, 8, 290, 0 };
|
||||
|
||||
/*
|
||||
The ActiveTwo sends the following number of 32-bit words per sample:
|
||||
|
||||
Mk2:
|
||||
Speedmode 0 and 4: 258
|
||||
Speedmode 1 and 5: 130
|
||||
Speedmode 2 and 6: 66
|
||||
Speedmode 3 and 7: 34
|
||||
Speedmode 8: 290 (2+256+32)
|
||||
*/
|
||||
static uint32_t activeTwoMarkIIElectrodeChannelPerSample[BIOSEMI_ACTIVETWO_SPEEDMODECOUNT] = { 256, 128, 256, 128, 256, 128, 64, 32, 314, 0 };
|
||||
|
||||
static uint32_t* activeTwoMarkElectrodeChannelPerSample[2] = { activeTwoMarkIElectrodeChannelPerSample, activeTwoMarkIIElectrodeChannelPerSample };
|
||||
|
||||
/*
|
||||
Mk2:
|
||||
Speedmode 0, 1, 2 and 3: 610 (2+4*152)
|
||||
Speedmode 4: 282
|
||||
Speedmode 5: 154
|
||||
Speedmode 6: 90
|
||||
Speedmode 7: 58
|
||||
Speedmode 8: 314 (2+280+32)
|
||||
*/
|
||||
static uint32_t activeTwoMarkIExChannelPerSample[BIOSEMI_ACTIVETWO_SPEEDMODECOUNT] = { 0, 0, 0, 0, 8, 8, 8, 8, 8, 8 };
|
||||
|
||||
/*
|
||||
Mk2:
|
||||
Speedmode 0, 1, 2 and 3: 610 (2+4*152)
|
||||
Speedmode 4: 282
|
||||
Speedmode 5: 154
|
||||
Speedmode 6: 90
|
||||
Speedmode 7: 58
|
||||
Speedmode 8: 314 (2+280+32)
|
||||
*/
|
||||
static uint32_t activeTwoMarkIIExChannelPerSample[BIOSEMI_ACTIVETWO_SPEEDMODECOUNT] = { 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 };
|
||||
|
||||
static uint32_t* activeTwoMarkExChannelPerSample[2] = { activeTwoMarkIExChannelPerSample, activeTwoMarkIIExChannelPerSample };
|
||||
} // namespace BioSemi
|
||||
|
||||
//___________________________________________________________________//
|
||||
// //
|
||||
namespace OpenViBE {
|
||||
|
||||
CBridgeBioSemiActiveTwo::CBridgeBioSemiActiveTwo()
|
||||
{
|
||||
m_buffers.resize(BIOSEMI_ACTIVETWO_RINGBUFFERBYTES, 0);
|
||||
m_controlBuffers.resize(BIOSEMI_ACTIVETWO_CONTROLBUFFERBYTES);
|
||||
m_lastError = BioSemiError_NoError;
|
||||
m_useEXChannels = false;
|
||||
}
|
||||
|
||||
CBridgeBioSemiActiveTwo::~CBridgeBioSemiActiveTwo() {}
|
||||
|
||||
//___________________________________________________________________//
|
||||
// //
|
||||
bool CBridgeBioSemiActiveTwo::isDeviceConnected()
|
||||
{
|
||||
m_hDevice = OPEN_DRIVER();
|
||||
if (m_hDevice == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
__BioSemiBridgeLogConsole__("Failed to open driver!\n");
|
||||
m_lastError = BioSemiError_OSOpenFailed;
|
||||
return false;
|
||||
}
|
||||
|
||||
Sleep(100);
|
||||
|
||||
if (!CLOSE_DRIVER(m_hDevice))
|
||||
{
|
||||
__BioSemiBridgeLogConsole__("device driver cannot be closed!!\n");
|
||||
m_lastError = BioSemiError_OSCloseFailed;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool CBridgeBioSemiActiveTwo::open()
|
||||
{
|
||||
m_lastRingBufferByteIdx = 0;
|
||||
m_consumptionByteIdx = 0;
|
||||
m_firstRead = true;
|
||||
|
||||
m_nTotalByteRead = 0;
|
||||
|
||||
m_nChannel = 0;
|
||||
m_nInitialChannel = 0;
|
||||
m_bridgeSyncedWithDevice = false;
|
||||
|
||||
m_triggers.clear();
|
||||
m_triggers.resize(16, false);
|
||||
m_epochStarted = false;
|
||||
m_cmsInRange = false;
|
||||
m_batteryLow = false;
|
||||
m_activeTwoMarkII = false;
|
||||
m_initialActiveTwoMarkII = false;
|
||||
m_speedMode = -1;
|
||||
m_initialSpeedmode = 0;
|
||||
|
||||
m_hDevice = OPEN_DRIVER();
|
||||
if (m_hDevice == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
__BioSemiBridgeLogConsole__("Failed to open driver!\n");
|
||||
m_lastError = BioSemiError_OSOpenFailed;
|
||||
return false;
|
||||
}
|
||||
|
||||
__BioSemiBridgeLogConsole__("Handle created, configuring...\n");
|
||||
|
||||
// TEMP for debug: log file written along with the LabView_DLL
|
||||
//BSIF_SET_LOG(true);
|
||||
|
||||
// default config
|
||||
//BSIF_SET_SYNC(true);
|
||||
//BSIF_SET_DEBUG(false);
|
||||
|
||||
// No stride
|
||||
//BSIF_SET_STRIDE_KB(0);
|
||||
//BSIF_SET_STRIDE_MS(0);
|
||||
|
||||
char bufferInfo[256];
|
||||
GET_DRIVER_INFO(bufferInfo, 256);
|
||||
__BioSemiBridgeLogConsole__("Driver Info: %s", bufferInfo);
|
||||
|
||||
__BioSemiBridgeLogConsole__("connecting ring buffer ...\n");
|
||||
READ_MULTIPLE_SWEEPS(m_hDevice, &m_buffers[0], BIOSEMI_ACTIVETWO_RINGBUFFERBYTES);
|
||||
|
||||
__BioSemiBridgeLogConsole__("device driver now opened.\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CBridgeBioSemiActiveTwo::start()
|
||||
{
|
||||
m_controlBuffers.clear();
|
||||
m_controlBuffers.resize(BIOSEMI_ACTIVETWO_CONTROLBUFFERBYTES);
|
||||
m_controlBuffers[0] = char(-1); // Odd number to start the filling of ring buffer
|
||||
|
||||
BOOL status = false;
|
||||
|
||||
status = USB_WRITE(m_hDevice, &m_controlBuffers[0]);
|
||||
if (!status)
|
||||
{
|
||||
__BioSemiBridgeLogConsole__("usb_write for enable handshake failed with [%i]\n", GetLastError());
|
||||
m_lastError = BioSemiError_EnableUSBHandshakeFailed;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Past this point, the ring buffer is constantly filled.
|
||||
return true;
|
||||
}
|
||||
|
||||
int CBridgeBioSemiActiveTwo::read()
|
||||
{
|
||||
int bytesRead;
|
||||
#if TARGET_ARCHITECTURE_x64
|
||||
long long currentRingBufferByteIdx;
|
||||
#else
|
||||
int currentRingBufferByteIdx;
|
||||
#endif
|
||||
const bool status = (READ_POINTER(m_hDevice, ¤tRingBufferByteIdx) != FALSE);
|
||||
|
||||
if (!status)
|
||||
{
|
||||
__BioSemiBridgeLogConsole__("READ_POINTER failed !!\n");
|
||||
m_lastError = BioSemiError_ReadPointerFailed;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (currentRingBufferByteIdx != m_lastRingBufferByteIdx)
|
||||
{
|
||||
bytesRead = currentRingBufferByteIdx - m_lastRingBufferByteIdx;
|
||||
|
||||
// ring buffer: we can loop indices
|
||||
if (bytesRead < 0)
|
||||
{
|
||||
bytesRead += BIOSEMI_ACTIVETWO_RINGBUFFERBYTES;
|
||||
__BioSemiBridgeLogConsole__("RING BUFFER IS ROLLING\n");
|
||||
}
|
||||
|
||||
//__BioSemiBridgeLogConsole__("READ_POINTER read %i bytes\n",l_iBytesRead);
|
||||
|
||||
m_nTotalByteRead += uint32_t(bytesRead);
|
||||
m_lastRingBufferByteIdx = currentRingBufferByteIdx;
|
||||
|
||||
// determine number of channels according to sync bytes
|
||||
// Two extra channels are leading the ADC data: before: channel 1 = sync (check for FFFFFF00) and channel 2 = Status
|
||||
// (see http://www.biosemi.com/faq/trigger_signals.htm), channels 3-258 are ADCs 1-256.
|
||||
|
||||
uint32_t firstSyncByte = -1;
|
||||
uint32_t nextSyncByte = -1;
|
||||
|
||||
// for loop over LONG values, not bytes
|
||||
for (int i = 0; i < bytesRead && !m_bridgeSyncedWithDevice; ++i)
|
||||
{
|
||||
if (*(reinterpret_cast<int*>(&m_buffers[i])) == BIOSEMI_ACTIVETWO_SYNCBYTES)
|
||||
{
|
||||
__BioSemiBridgeLogConsole__("sync detected at byte %i\n", i);
|
||||
if (firstSyncByte == -1) { firstSyncByte = i; }
|
||||
else
|
||||
{
|
||||
//second sync found, we can deduce the channel count: it's the number of longs in between
|
||||
nextSyncByte = i;
|
||||
m_nChannel = nextSyncByte - firstSyncByte;
|
||||
m_nChannel /= sizeof(int);
|
||||
m_nChannel -= 2;
|
||||
|
||||
|
||||
// we also initialize the status values for getSamplingFrequency
|
||||
const int statusChannelValue = *(reinterpret_cast<int*>(&m_buffers[firstSyncByte + sizeof(int)])); // status integer just after sync integer
|
||||
if (!this->updateStatusFromValue(statusChannelValue))
|
||||
{
|
||||
__BioSemiBridgeLogConsole__("something bad in latest status value !\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Bridge is synced, user can call status getters
|
||||
m_bridgeSyncedWithDevice = true;
|
||||
|
||||
//consuming all sync samples
|
||||
//this->consumeBytes(sizeof(int) * (getSampleCount() - m_nChannel - 1));
|
||||
|
||||
// The Handsake is complete; we can safely consume the corresponding data
|
||||
// channel# + SYNC (Status is consumed in updateStatusFromValue function)
|
||||
this->consumeBytes((m_nChannel + 1) * sizeof(int));
|
||||
|
||||
// fix number of channel
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!m_bridgeSyncedWithDevice)
|
||||
{
|
||||
__BioSemiBridgeLogConsole__("Cannot synchronize on current data, waiting for more.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
//debug
|
||||
/*fstream fs("C:/biosemi-buffer.data",fstream::app);
|
||||
fs<< "START----------------------------------------------";
|
||||
for (int i=0; i<l_iBytesRead; i+=4)
|
||||
fs << hex << *(reinterpret_cast<int*>(&m_buffers[i])) << std::endl;
|
||||
fs.close();
|
||||
fs<< "END----------------------------------------------";*/
|
||||
|
||||
if (m_firstRead)
|
||||
{
|
||||
m_nInitialChannel = m_useEXChannels ? m_nChannel + getEXChannelCount() : m_nChannel;
|
||||
m_initialSpeedmode = m_speedMode;
|
||||
m_initialActiveTwoMarkII = m_activeTwoMarkII;
|
||||
m_firstRead = false;
|
||||
|
||||
// Consume what remains of data
|
||||
// samples# - channel# - SYNC
|
||||
this->consumeBytes(sizeof(int) * (getSampleCount() - m_nChannel - 1));
|
||||
|
||||
m_nChannel = m_nChannel < getElectrodeChannelCount() ? m_nChannel : getElectrodeChannelCount();
|
||||
__BioSemiBridgeLogConsole__(
|
||||
"Bridge sync! Initial configuration is: %u channels | speedmode %u | Mark2 %u | Sample count %u | electrode channel count %u | EX channel count: %u \n",
|
||||
m_nInitialChannel, m_initialSpeedmode, m_initialActiveTwoMarkII, getSampleCount(), getElectrodeChannelCount(), getEXChannelCount());
|
||||
}
|
||||
return bytesRead;
|
||||
}
|
||||
|
||||
// nothing read
|
||||
//__BioSemiBridgeLogConsole__("READ_POINTER has nothing for us.\n)";
|
||||
return 0;
|
||||
}
|
||||
|
||||
//___________________________________________________________________//
|
||||
// //
|
||||
|
||||
bool CBridgeBioSemiActiveTwo::updateStatusFromValue(int value)
|
||||
{
|
||||
/*
|
||||
Bit 00 (LSB) Trigger Input 1 (High = trigger on)
|
||||
Bit 01 Trigger Input 2 (High = trigger on)
|
||||
Bit 02 Trigger Input 3 (High = trigger on)
|
||||
Bit 03 Trigger Input 4 (High = trigger on)
|
||||
Bit 04 Trigger Input 5 (High = trigger on)
|
||||
Bit 05 Trigger Input 6 (High = trigger on)
|
||||
Bit 06 Trigger Input 7 (High = trigger on)
|
||||
Bit 07 Trigger Input 8 (High = trigger on)
|
||||
Bit 08 Trigger Input 9 (High = trigger on)
|
||||
Bit 09 Trigger Input 10 (High = trigger on)
|
||||
Bit 10 Trigger Input 11 (High = trigger on)
|
||||
Bit 11 Trigger Input 12 (High = trigger on)
|
||||
Bit 12 Trigger Input 13 (High = trigger on)
|
||||
Bit 13 Trigger Input 14 (High = trigger on)
|
||||
Bit 14 Trigger Input 15 (High = trigger on)
|
||||
Bit 15 Trigger Input 16 (High = trigger on)
|
||||
Bit 16 High when new Epoch is started
|
||||
Bit 17 Speed bit 0
|
||||
Bit 18 Speed bit 1
|
||||
Bit 19 Speed bit 2
|
||||
Bit 20 High when CMS is within range ---> error in the documentation, it is the opposite
|
||||
Bit 21 Speed bit 3
|
||||
Bit 22 High when battery is low
|
||||
Bit 23 (MSB) High if ActiveTwo MK2
|
||||
*/
|
||||
//__BioSemiBridgeLogConsole__("status line value is [%#x]\n",value);
|
||||
// the status channel has 2 bytes padding (zeros), so we start at 0x100
|
||||
for (uint32_t t = 0; t < 16; ++t) { m_triggers[t] = (value & (0x100 << t)) != 0; }
|
||||
|
||||
m_epochStarted = (value & (0x100 << 16)) != 0;
|
||||
m_cmsInRange = !(value & (0x100 << 20)) != 0; // bit low = CM in range !
|
||||
m_batteryLow = (value & (0x100 << 22)) != 0;
|
||||
m_activeTwoMarkII = (value & (0x100 << 23)) != 0;
|
||||
m_speedMode = ((value & (0x100 << 17)) != 0) + (((value & (0x100 << 18)) != 0) << 1)
|
||||
+ (((value & (0x100 << 19)) != 0) << 2);
|
||||
// + (((value & (0x100 << 21))!= 0) << 3);
|
||||
|
||||
this->consumeBytes(sizeof(int));
|
||||
|
||||
// fail cases:
|
||||
if (!m_firstRead && m_activeTwoMarkII != m_initialActiveTwoMarkII)
|
||||
{
|
||||
__BioSemiBridgeLogConsole__("Device type changed during acquisition! Stream may have lost synchronization.\n");
|
||||
m_lastError = BioSemiError_DeviceTypeChanged;
|
||||
return false;
|
||||
}
|
||||
if (!m_firstRead && m_speedMode != m_initialSpeedmode)
|
||||
{
|
||||
__BioSemiBridgeLogConsole__("Speedmode changed during acquisition (%u > %u). Stream may have lost synchronization.\n", m_initialSpeedmode, m_speedMode);
|
||||
m_lastError = BioSemiError_SpeedmodeChanged;
|
||||
return false;
|
||||
}
|
||||
if (m_speedMode >= BIOSEMI_ACTIVETWO_SPEEDMODECOUNT)
|
||||
{
|
||||
__BioSemiBridgeLogConsole__("Invalid speedmode [%u].\n", m_speedMode);
|
||||
m_lastError = BioSemiError_InvalidSpeedmode;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
uint32_t CBridgeBioSemiActiveTwo::getSamplingFrequency() const { return BioSemi::activeTwoSpeedModeFrequency[(m_activeTwoMarkII ? 1 : 0)][m_speedMode]; }
|
||||
|
||||
//___________________________________________________________________//
|
||||
// //
|
||||
|
||||
bool CBridgeBioSemiActiveTwo::discard()
|
||||
{
|
||||
const uint32_t count = this->getAvailableSampleCount();
|
||||
for (uint32_t i = 0; i < count; ++i)
|
||||
{
|
||||
if (!this->consumeOneSamplePerChannel(nullptr, 0))
|
||||
{
|
||||
__BioSemiBridgeLogConsole__("the sample %u/%u [%u] cannot be discarded ! stopping discard.\n", i, count, m_consumptionByteIdx);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
uint32_t CBridgeBioSemiActiveTwo::getAvailableByteCount() const
|
||||
{
|
||||
if (m_lastRingBufferByteIdx > m_consumptionByteIdx) { return m_lastRingBufferByteIdx - m_consumptionByteIdx; }
|
||||
return m_lastRingBufferByteIdx + (BIOSEMI_ACTIVETWO_RINGBUFFERBYTES - m_consumptionByteIdx);
|
||||
}
|
||||
|
||||
uint32_t CBridgeBioSemiActiveTwo::getAvailableSampleCount()
|
||||
{
|
||||
if (!m_bridgeSyncedWithDevice) return 0;
|
||||
// this will be rounded
|
||||
return (this->getAvailableByteCount() / (sizeof(int) * getSampleCount()));
|
||||
}
|
||||
|
||||
void CBridgeBioSemiActiveTwo::consumeBytes(const uint32_t count)
|
||||
{
|
||||
/*fstream fs("C:/biosemi-consume.txt",fstream::app);
|
||||
fs <<dec<< count<< " : " << m_consumptionByteIdx << std::endl;
|
||||
fs.close();*/
|
||||
|
||||
m_consumptionByteIdx = (m_consumptionByteIdx + count) % BIOSEMI_ACTIVETWO_RINGBUFFERBYTES;
|
||||
}
|
||||
|
||||
bool CBridgeBioSemiActiveTwo::consumeOneSamplePerChannel(float* pSampleBuffer, uint32_t uiBufferValueCount)
|
||||
{
|
||||
// fail case: we can't consume if not yet sync'ed
|
||||
if (!m_bridgeSyncedWithDevice)
|
||||
{
|
||||
__BioSemiBridgeLogConsole__("Bridge is not synced with the device, cannot consume.\n");
|
||||
m_lastError = BioSemiError_NoSync;
|
||||
return false;
|
||||
}
|
||||
|
||||
//fail case: we do nothing if we cannot completly fill the user buffer
|
||||
if (this->getAvailableByteCount() < uiBufferValueCount * sizeof(int))
|
||||
{
|
||||
__BioSemiBridgeLogConsole__("Not enough data to complete user buffer. Waiting for next read & consume run.\n");
|
||||
m_lastError = BioSemiError_NotEnoughDataInBuffer;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* if(*(reinterpret_cast<int*>(&m_buffers[m_consumptionByteIdx])) != BIOSEMI_ACTIVETWO_SYNCBYTES)
|
||||
{
|
||||
__BioSemiBridgeLogConsole__("Lost sync at consume time ! byte index is [%i]\n",m_consumptionByteIdx);
|
||||
m_lastError = BioSemiError_SyncLost;
|
||||
return false;
|
||||
}
|
||||
*/
|
||||
/*
|
||||
the LongPerSample value gives the number of integers that the device sends per sample round.
|
||||
For example with the Mark II and a speedmode = 4, we have 282 Integers per sample.
|
||||
Say we have 8 channels connected, we end up with 282 integers with SYNC forward padding:
|
||||
- 273 SYNC
|
||||
- 1 Integer for the Status
|
||||
- 8 Integers for the 8 channels
|
||||
*/
|
||||
//this->consumeBytes(sizeof(int) * (getSampleCount() - m_nChannel - 1));
|
||||
|
||||
// We consume the integer from STATUS channel.
|
||||
const int value = *(reinterpret_cast<int*>(&m_buffers[m_consumptionByteIdx]));
|
||||
if (!this->updateStatusFromValue(value))
|
||||
{
|
||||
__BioSemiBridgeLogConsole__("something bad in latest status value !\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
// EEG channels fill the user buffer.
|
||||
if (pSampleBuffer != nullptr)
|
||||
{
|
||||
/*
|
||||
The receiver converts every 24-bit word from the AD-box into a 32-bit Signed Integer,
|
||||
by adding an extra zero Least Significant Byte to the ADC data.
|
||||
The 24-bit ADC output has an LSB value of 1/32th uV.
|
||||
The 32-bit Integer received for the USB interface has an LSB value of 1/32*1/256 = 1/8192th uV
|
||||
*/
|
||||
const float factor = 1.f / 8192;
|
||||
|
||||
uint32_t sampleLongConsumed = 0;
|
||||
uint32_t sampleInBuffer = 0;
|
||||
const uint32_t maxEEGChannel = isUseEXChannels() ? uiBufferValueCount - getEXChannelCount() : uiBufferValueCount;
|
||||
while (sampleInBuffer < maxEEGChannel)
|
||||
{
|
||||
const int iValue = *(reinterpret_cast<int*>(&m_buffers[m_consumptionByteIdx]));
|
||||
|
||||
// We don't add more samples that the number that should be displayed,
|
||||
// to avoid displaying an electrode channel instaed of an EX channel
|
||||
if (sampleInBuffer < m_nChannel) { pSampleBuffer[sampleInBuffer] = iValue * factor; }
|
||||
else
|
||||
{
|
||||
// If the number of requested channel is superior to the number of available channels, pad with 0
|
||||
pSampleBuffer[sampleInBuffer] = 0;
|
||||
}
|
||||
|
||||
sampleInBuffer++;
|
||||
sampleLongConsumed++;
|
||||
this->consumeBytes(sizeof(int));
|
||||
}
|
||||
if (m_useEXChannels)
|
||||
{
|
||||
// Consuming all sync samples until EX channels
|
||||
// ELECTRODE CHANNEL # - CHANNEL#
|
||||
this->consumeBytes(sizeof(int) * (getElectrodeChannelCount() - maxEEGChannel));
|
||||
while (sampleLongConsumed < maxEEGChannel + getEXChannelCount())
|
||||
{
|
||||
const int iValue = *(reinterpret_cast<int*>(&m_buffers[m_consumptionByteIdx]));
|
||||
if (sampleInBuffer < uiBufferValueCount)
|
||||
{
|
||||
pSampleBuffer[sampleInBuffer] = iValue * factor;
|
||||
sampleInBuffer++;
|
||||
}
|
||||
sampleLongConsumed++;
|
||||
this->consumeBytes(sizeof(int));
|
||||
}
|
||||
// Consuming all remaining samples (sensor channels)
|
||||
// SAMPLE# - ELECTRODE CHANNEL# - EX CHANNEL# - SYNC
|
||||
this->consumeBytes(sizeof(int) * (getSampleCount() - (getElectrodeChannelCount() + getEXChannelCount() + 1)));
|
||||
}
|
||||
else
|
||||
{
|
||||
// Consuming all sync samples plus EX and sensor channels
|
||||
// SAMPLE# - CHANNEL# - SYNC
|
||||
this->consumeBytes(sizeof(int) * (getSampleCount() - maxEEGChannel - 1));
|
||||
}
|
||||
}
|
||||
//if pSample == nullptr
|
||||
else
|
||||
{
|
||||
// Consuming all sync samples plus EX and sensor channels
|
||||
// SAMPLE# - CHANNEL# - SYNC
|
||||
this->consumeBytes(sizeof(int) * (getSampleCount() - 1));
|
||||
}
|
||||
/*if(*(reinterpret_cast<int*>(&m_buffers[m_consumptionByteIdx])) != BIOSEMI_ACTIVETWO_SYNCBYTES)
|
||||
{
|
||||
__BioSemiBridgeLogConsole__("Lost sync at consume time ! byte index is [%i]\n",m_consumptionByteIdx);
|
||||
m_lastError = BioSemiError_SyncLost;
|
||||
return false;
|
||||
}*/
|
||||
//this->consumeBytes(sizeof(int) * m_nChannel);
|
||||
|
||||
//__BioSemiBridgeLogConsole__("consumed "<<l_uiByteConsumed<<" bytes this round.\n";
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
uint32_t CBridgeBioSemiActiveTwo::getElectrodeChannelCount() const
|
||||
{
|
||||
if (!m_bridgeSyncedWithDevice) { return 0; }
|
||||
// this will be rounded
|
||||
return (BioSemi::activeTwoMarkElectrodeChannelPerSample[(m_activeTwoMarkII ? 1 : 0)][m_speedMode]);
|
||||
}
|
||||
|
||||
uint32_t CBridgeBioSemiActiveTwo::getEXChannelCount() const
|
||||
{
|
||||
if (!m_useEXChannels || !m_bridgeSyncedWithDevice) { return 0; }
|
||||
// this will be rounded
|
||||
return (BioSemi::activeTwoMarkExChannelPerSample[(m_activeTwoMarkII ? 1 : 0)][m_speedMode]);
|
||||
}
|
||||
|
||||
uint32_t CBridgeBioSemiActiveTwo::getSampleCount() const
|
||||
{
|
||||
if (!m_bridgeSyncedWithDevice) { return 0; }
|
||||
// this will be rounded
|
||||
return (BioSemi::activeTwoMarkLongPerSample[(m_activeTwoMarkII ? 1 : 0)][m_speedMode]);
|
||||
}
|
||||
|
||||
//___________________________________________________________________//
|
||||
// //
|
||||
|
||||
bool CBridgeBioSemiActiveTwo::stop()
|
||||
{
|
||||
//float bytesPerMsec = GET_BYTES_PER_MSEC();
|
||||
//__BioSemiBridgeLogConsole__("STATS: Bytes per ms: " << bytesPerMsec << std::endl;
|
||||
|
||||
// To stop, we disable the handshake
|
||||
m_controlBuffers.clear();
|
||||
m_controlBuffers.resize(BIOSEMI_ACTIVETWO_CONTROLBUFFERBYTES);
|
||||
m_controlBuffers[0] = 0; // stop byte
|
||||
|
||||
const BOOL status = USB_WRITE(m_hDevice, &m_controlBuffers[0]);
|
||||
if (!status)
|
||||
{
|
||||
__BioSemiBridgeLogConsole__("usb_write for disabling handshake failed with [%i]\n", GetLastError());
|
||||
m_lastError = BioSemiError_DisableUSBHandshakeFailed;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CBridgeBioSemiActiveTwo::close()
|
||||
{
|
||||
if (!CLOSE_DRIVER(m_hDevice))
|
||||
{
|
||||
__BioSemiBridgeLogConsole__("device driver cannot be closed!!\n");
|
||||
m_lastError = BioSemiError_OSCloseFailed;
|
||||
return false;
|
||||
}
|
||||
|
||||
__BioSemiBridgeLogConsole__("device driver now closed.\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace OpenViBE
|
||||
#endif // TARGET_HAS_ThirdPartyBioSemiAPI
|
||||
+136
@@ -0,0 +1,136 @@
|
||||
/*
|
||||
* ovasCDriverBioSemiActiveTwo.h
|
||||
*
|
||||
* Copyright (c) 2012, Mensia Technologies SA. All rights reserved.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef TARGET_HAS_ThirdPartyBioSemiAPI
|
||||
|
||||
#include <vector>
|
||||
#include <cstdint>
|
||||
|
||||
#define BIOSEMI_ACTIVETWO_MAXCHANNELCOUNT 256
|
||||
#define BIOSEMI_ACTIVETWO_EXCHANNELCOUNT 8
|
||||
|
||||
namespace OpenViBE {
|
||||
enum EBioSemiError
|
||||
{
|
||||
BioSemiError_NoError,
|
||||
|
||||
BioSemiError_OSOpenFailed,
|
||||
BioSemiError_OSCloseFailed,
|
||||
|
||||
BioSemiError_EnableUSBHandshakeFailed,
|
||||
BioSemiError_DisableUSBHandshakeFailed,
|
||||
|
||||
BioSemiError_ReadPointerFailed,
|
||||
|
||||
BioSemiError_DeviceTypeChanged,
|
||||
BioSemiError_SpeedmodeChanged,
|
||||
BioSemiError_InvalidSpeedmode,
|
||||
|
||||
BioSemiError_NoData,
|
||||
BioSemiError_NotEnoughDataInBuffer,
|
||||
BioSemiError_NoSync,
|
||||
BioSemiError_SyncLost,
|
||||
BioSemiError_BufferOverflow
|
||||
};
|
||||
|
||||
|
||||
class CBridgeBioSemiActiveTwo final
|
||||
{
|
||||
public:
|
||||
|
||||
CBridgeBioSemiActiveTwo();
|
||||
virtual ~CBridgeBioSemiActiveTwo();
|
||||
|
||||
bool isDeviceConnected();
|
||||
bool open();
|
||||
bool start();
|
||||
int read();
|
||||
bool discard();
|
||||
uint32_t getAvailableSampleCount();
|
||||
uint32_t getElectrodeChannelCount() const;
|
||||
uint32_t getEXChannelCount() const;
|
||||
uint32_t getSampleCount() const;
|
||||
uint32_t getSpeedMode() const { return m_speedMode; }
|
||||
size_t getChannelCount() const { return m_nChannel; }
|
||||
bool consumeOneSamplePerChannel(float* pSampleBuffer, uint32_t uiBufferValueCount);
|
||||
bool stop();
|
||||
bool close();
|
||||
|
||||
bool isSynced() const { return m_bridgeSyncedWithDevice; }
|
||||
|
||||
bool getTrigger(const uint32_t index) const { return (index > m_triggers.size() ? false : m_triggers[index]); }
|
||||
bool isCMSInRange() const { return m_cmsInRange; }
|
||||
bool isBatteryLow() const { return m_batteryLow; }
|
||||
bool isDeviceMarkII() const { return m_activeTwoMarkII; }
|
||||
uint32_t getSamplingFrequency() const;
|
||||
|
||||
uint32_t getLastError() const { return m_lastError; }
|
||||
|
||||
bool isUseEXChannels() const { return m_useEXChannels; }
|
||||
void setUseEXChannels(const bool useEXChannels) { m_useEXChannels = useEXChannels; }
|
||||
|
||||
protected:
|
||||
bool updateStatusFromValue(int value);
|
||||
uint32_t getAvailableByteCount() const;
|
||||
void consumeBytes(uint32_t count);
|
||||
|
||||
// Handle to the device
|
||||
void* m_hDevice = nullptr;
|
||||
// Ring buffer
|
||||
std::vector<char> m_buffers;
|
||||
// 64bits buffer for USB_WRITE operations
|
||||
std::vector<char> m_controlBuffers;
|
||||
|
||||
/* deduced from the SYNC channel on first read */
|
||||
bool m_firstRead = false;
|
||||
bool m_bridgeSyncedWithDevice = false;
|
||||
uint32_t m_nChannel = 0;
|
||||
uint32_t m_nInitialChannel = 0;
|
||||
|
||||
/* From Status channel */
|
||||
std::vector<bool> m_triggers;
|
||||
bool m_epochStarted = false;
|
||||
bool m_cmsInRange = false;
|
||||
bool m_batteryLow = false;
|
||||
bool m_activeTwoMarkII = false;
|
||||
bool m_initialActiveTwoMarkII = false;
|
||||
uint32_t m_speedMode = 0;
|
||||
uint32_t m_initialSpeedmode = 0;
|
||||
|
||||
// ring buffer indices
|
||||
#if TARGET_ARCHITECTURE_x64
|
||||
long long m_lastRingBufferByteIdx = 0; //Buffer filled up to this point in last read()
|
||||
#else
|
||||
uint32_t m_lastRingBufferByteIdx = 0; //Buffer filled up to this point in last read()]
|
||||
#endif
|
||||
uint32_t m_consumptionByteIdx = 0; //Next consume() should start here, it should ALWAYS be a SYNC byte.
|
||||
|
||||
// just for stats
|
||||
uint32_t m_nTotalByteRead = 0;
|
||||
uint32_t m_lastError = 0;
|
||||
bool m_useEXChannels = false;
|
||||
};
|
||||
} // namespace OpenViBE
|
||||
|
||||
|
||||
#endif // TARGET_HAS_ThirdPartyBioSemiAPI
|
||||
+147
@@ -0,0 +1,147 @@
|
||||
/*
|
||||
* ovasCConfigurationBioSemiActiveTwo.cpp
|
||||
*
|
||||
* Copyright (c) 2012, Mensia Technologies SA. All rights reserved.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifdef TARGET_HAS_ThirdPartyBioSemiAPI
|
||||
|
||||
#include "ovasCConfigurationBioSemiActiveTwo.h"
|
||||
#include "ovasIHeader.h"
|
||||
#include "mCBridgeBioSemiActiveTwo.h"
|
||||
|
||||
#include <system/ovCTime.h>
|
||||
|
||||
#include <cstring>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace AcquisitionServer {
|
||||
|
||||
static void gtk_combo_box_set_active_text(GtkComboBox* pComboBox, const gchar* sActiveText)
|
||||
{
|
||||
GtkTreeModel* treeModel = gtk_combo_box_get_model(pComboBox);
|
||||
GtkTreeIter it;
|
||||
int index = 0;
|
||||
gchar* entryName = nullptr;
|
||||
if (gtk_tree_model_get_iter_first(treeModel, &it))
|
||||
{
|
||||
do
|
||||
{
|
||||
gtk_tree_model_get(treeModel, &it, 0, &entryName, -1);
|
||||
if (std::string(entryName) == std::string(sActiveText))
|
||||
{
|
||||
gtk_combo_box_set_active(pComboBox, index);
|
||||
return;
|
||||
}
|
||||
index++;
|
||||
} while (gtk_tree_model_iter_next(treeModel, &it));
|
||||
}
|
||||
}
|
||||
|
||||
CConfigurationBioSemiActiveTwo::CConfigurationBioSemiActiveTwo(const char* gtkBuilderFilename, bool& useExChannels)
|
||||
: CConfigurationBuilder(gtkBuilderFilename), m_useEXChannels(useExChannels) {}
|
||||
|
||||
bool CConfigurationBioSemiActiveTwo::preConfigure()
|
||||
{
|
||||
if (!CConfigurationBuilder::preConfigure()) { return false; }
|
||||
|
||||
// deduced from connection to device, cannot be edited.
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(gtk_builder_get_object(m_builder, "combobox_sampling_frequency")), false);
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(gtk_builder_get_object(m_builder, "combobox_speed_mode")), false);
|
||||
|
||||
CBridgeBioSemiActiveTwo bridge;
|
||||
bool status = false;
|
||||
if (bridge.open() && bridge.start())
|
||||
{
|
||||
// to let the device send a first packet from which the bridge can deduce the SF and channel count
|
||||
System::Time::sleep(500);
|
||||
if (bridge.read() > 0)
|
||||
{
|
||||
gtk_image_set_from_stock(GTK_IMAGE(gtk_builder_get_object(m_builder, "image_status")),GTK_STOCK_YES, GTK_ICON_SIZE_BUTTON);
|
||||
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(gtk_builder_get_object(m_builder, "spinbutton_number_of_channels")), true);
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(gtk_builder_get_object(m_builder, "button_apply")), true);
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(gtk_builder_get_object(m_builder, "button_change_channel_names")), true);
|
||||
|
||||
// If this option is selected then 8 channels of the header are dedicated to the EX channels and they should be removed of the displayed channel count
|
||||
if (m_useEXChannels)
|
||||
{
|
||||
gtk_adjustment_set_value(
|
||||
GTK_ADJUSTMENT(gtk_builder_get_object(m_builder, "adjustment_channel_count")),
|
||||
gtk_adjustment_get_value(GTK_ADJUSTMENT(gtk_builder_get_object(m_builder, "adjustment_channel_count"))) - 8);
|
||||
}
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(gtk_builder_get_object(m_builder, "checkbutton_ex_channel")), true);
|
||||
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(m_builder, "checkbutton_ex_channel")), m_useEXChannels);
|
||||
|
||||
//Set maximum in function of the speedmode used
|
||||
gtk_adjustment_set_upper(GTK_ADJUSTMENT(gtk_builder_get_object(m_builder, "adjustment_channel_count")), bridge.getElectrodeChannelCount());
|
||||
|
||||
std::stringstream ss;
|
||||
ss << bridge.getSamplingFrequency();
|
||||
gtk_combo_box_set_active_text(GTK_COMBO_BOX(gtk_builder_get_object(m_builder, "combobox_sampling_frequency")), ss.str().c_str());
|
||||
|
||||
ss.str("");
|
||||
ss << bridge.getSpeedMode();
|
||||
gtk_combo_box_set_active_text(GTK_COMBO_BOX(gtk_builder_get_object(m_builder, "combobox_speed_mode")), ss.str().c_str());
|
||||
|
||||
gtk_label_set_markup(
|
||||
GTK_LABEL(gtk_builder_get_object(m_builder, "label_device_mark")),
|
||||
(bridge.isDeviceMarkII() ? "- <i>ActiveTwo Mark II</i> -" : "- <i>ActiveTwo Mark I</i> -"));
|
||||
gtk_label_set_markup(
|
||||
GTK_LABEL(gtk_builder_get_object(m_builder, "label_device_battery")),
|
||||
(bridge.isBatteryLow() ? "<span color=\"red\"><b>LOW BATTERY</b></span> -" : "<b>BATTERY OK</b>"));
|
||||
|
||||
// discard any data.
|
||||
bridge.discard();
|
||||
|
||||
status = true;
|
||||
}
|
||||
bridge.stop();
|
||||
bridge.close();
|
||||
}
|
||||
|
||||
if (!status)
|
||||
{
|
||||
gtk_combo_box_set_active_text(GTK_COMBO_BOX(gtk_builder_get_object(m_builder, "combobox_sampling_frequency")), "");
|
||||
gtk_combo_box_set_active_text(GTK_COMBO_BOX(gtk_builder_get_object(m_builder, "combobox_speed_mode")), "");
|
||||
gtk_image_set_from_stock(GTK_IMAGE(gtk_builder_get_object(m_builder, "image_status")),GTK_STOCK_NO, GTK_ICON_SIZE_BUTTON);
|
||||
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(gtk_builder_get_object(m_builder, "spinbutton_number_of_channels")), false);
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(gtk_builder_get_object(m_builder, "button_apply")), false);
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(gtk_builder_get_object(m_builder, "button_change_channel_names")), false);
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(gtk_builder_get_object(m_builder, "checkbutton_ex_channel")), false);
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CConfigurationBioSemiActiveTwo::postConfigure()
|
||||
{
|
||||
if (m_applyConfig)
|
||||
{
|
||||
m_useEXChannels = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(m_builder, "checkbutton_ex_channel"))) ? true : false;
|
||||
}
|
||||
|
||||
if (!CConfigurationBuilder::postConfigure()) { return false; }
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AcquisitionServer
|
||||
} // namespace OpenViBE
|
||||
#endif
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* ovasCConfigurationBioSemiActiveTwo.h
|
||||
*
|
||||
* Copyright (c) 2012, Mensia Technologies SA. All rights reserved.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301 USA
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#ifdef TARGET_HAS_ThirdPartyBioSemiAPI
|
||||
|
||||
#include "../ovasCConfigurationBuilder.h"
|
||||
#include <gtk/gtk.h>
|
||||
#include <vector>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace AcquisitionServer {
|
||||
class CConfigurationBioSemiActiveTwo final : public CConfigurationBuilder
|
||||
{
|
||||
public:
|
||||
|
||||
CConfigurationBioSemiActiveTwo(const char* gtkBuilderFilename, bool& useExChannels);
|
||||
|
||||
bool preConfigure() override;
|
||||
bool postConfigure() override;
|
||||
|
||||
protected:
|
||||
bool& m_useEXChannels;
|
||||
};
|
||||
} // namespace AcquisitionServer
|
||||
} // namespace OpenViBE
|
||||
|
||||
|
||||
#endif // TARGET_HAS_ThirdPartyBioSemiAPI
|
||||
+550
@@ -0,0 +1,550 @@
|
||||
/*
|
||||
* ovasCDriverBioSemiActiveTwo.cpp
|
||||
*
|
||||
* Copyright (c) 2012, Mensia Technologies SA. All rights reserved.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifdef TARGET_HAS_ThirdPartyBioSemiAPI
|
||||
|
||||
#include "ovasCDriverBioSemiActiveTwo.h"
|
||||
#include "ovasCConfigurationBioSemiActiveTwo.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
|
||||
#ifdef WIN32
|
||||
#include <windows.h>
|
||||
#else
|
||||
// linux, mac
|
||||
#include <unistd.h>
|
||||
#endif // WIN32
|
||||
|
||||
#include <toolkit/ovtk_all.h>
|
||||
#include <system/ovCTime.h>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace AcquisitionServer {
|
||||
|
||||
CDriverBioSemiActiveTwo::CDriverBioSemiActiveTwo(IDriverContext& ctx)
|
||||
: IDriver(ctx), m_settings("AcquisitionServer_Driver_BioSemiActiveTwo", m_driverCtx.getConfigurationManager())
|
||||
{
|
||||
m_header.setSamplingFrequency(2048);
|
||||
|
||||
// The amplifier can send up to 256+8 channels
|
||||
// as a request from BioSemi, we will make available the maximum channel count
|
||||
// User is able to select from 1 to MAX channels. If no data is present on the
|
||||
// corresponding channels, zeros will be sent.
|
||||
// The number of channels present in the data flow will still be displayed in
|
||||
// the driver configuration window. Previously selected value will be saved
|
||||
// with other settings.
|
||||
m_header.setChannelCount(BIOSEMI_ACTIVETWO_MAXCHANNELCOUNT + BIOSEMI_ACTIVETWO_EXCHANNELCOUNT);
|
||||
m_useEXChannel = true;
|
||||
|
||||
m_triggers.resize(16, false);
|
||||
|
||||
m_lastWarningTime = 0;
|
||||
m_startTime = 0;
|
||||
m_bCMCurrentlyInRange = true;
|
||||
m_bBatteryCurrentlyOk = true;
|
||||
|
||||
m_settings.add("Header", &m_header);
|
||||
m_settings.add("UseEXChannel", &m_useEXChannel);
|
||||
m_settings.load();
|
||||
m_bridge.setUseEXChannels(m_useEXChannel);
|
||||
}
|
||||
|
||||
void CDriverBioSemiActiveTwo::setupInformationWindow()
|
||||
{
|
||||
if (!m_infoWindow)
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Information window not allocated\n";
|
||||
return;
|
||||
}
|
||||
|
||||
std::lock_guard<std::mutex> lock(m_infoWindow->m_mutex);
|
||||
|
||||
m_infoWindow->m_builder = gtk_builder_new();
|
||||
if (!gtk_builder_add_from_file(m_infoWindow->m_builder, Directories::getDataDir() + "/applications/acquisition-server/interface-BioSemi-ActiveTwo.ui", nullptr))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "File not found: " << Directories::getDataDir() << "/applications/acquisition-server/interface-BioSemi-ActiveTwo.ui\n";
|
||||
return;
|
||||
}
|
||||
|
||||
gtk_label_set_markup(GTK_LABEL(gtk_builder_get_object(m_infoWindow->m_builder, "label-device-type")), (m_bridge.isDeviceMarkII() ? "- <i>ActiveTwo Mark II</i> -" : "- <i>ActiveTwo Mark I</i> -"));
|
||||
m_infoWindow->m_isCMSInRange = m_bridge.isCMSInRange();
|
||||
m_infoWindow->m_isBatteryLow = m_bridge.isBatteryLow();
|
||||
m_infoWindow->m_isChanged = true;
|
||||
gtk_widget_show_all(GTK_WIDGET(gtk_builder_get_object(m_infoWindow->m_builder, "device-information")));
|
||||
}
|
||||
|
||||
//___________________________________________________________________//
|
||||
// //
|
||||
|
||||
gint setup_information_window_callback(void* data)
|
||||
{
|
||||
CDriverBioSemiActiveTwo* pTmp = static_cast<CDriverBioSemiActiveTwo*>(data);
|
||||
|
||||
pTmp->setupInformationWindow();
|
||||
|
||||
return FALSE; // Don't run again
|
||||
}
|
||||
|
||||
gint information_window_callback(void* infoWindow)
|
||||
{
|
||||
if (!infoWindow)
|
||||
{
|
||||
// Not initialized yet?
|
||||
return TRUE;
|
||||
}
|
||||
SInformationWindow* window = reinterpret_cast<SInformationWindow*>(infoWindow);
|
||||
std::lock_guard<std::mutex> lock(reinterpret_cast<SInformationWindow*>(infoWindow)->m_mutex);
|
||||
// If nothing changed, directly return from the callback
|
||||
if (!window->m_isChanged) { return TRUE; }
|
||||
if (window->m_isAcquisitionEnded)
|
||||
{
|
||||
// If the acquisition is ended, delete the window
|
||||
gtk_widget_destroy(GTK_WIDGET(gtk_builder_get_object(window->m_builder, "device-information")));
|
||||
g_object_unref(window->m_builder);
|
||||
|
||||
// If we get here, we know that the other thread has passed uninitialize() and will no longer access Information Window.
|
||||
delete window;
|
||||
// The loop should now be stopped
|
||||
return FALSE;
|
||||
}
|
||||
if (window->m_isBatteryLow)
|
||||
{
|
||||
gtk_label_set_markup(GTK_LABEL(gtk_builder_get_object(window->m_builder, "label-battery-level")), "- <i>Device battery is low !</i> -");
|
||||
gtk_image_set_from_stock(GTK_IMAGE(gtk_builder_get_object(window->m_builder, "image-battery-level")), GTK_STOCK_NO, GTK_ICON_SIZE_BUTTON);
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_label_set_markup(GTK_LABEL(gtk_builder_get_object(window->m_builder, "label-battery-level")), "- <i> Device battery is ok </i> -");
|
||||
gtk_image_set_from_stock(GTK_IMAGE(gtk_builder_get_object(window->m_builder, "image-battery-level")), GTK_STOCK_YES, GTK_ICON_SIZE_BUTTON);
|
||||
}
|
||||
|
||||
if (window->m_isCMSInRange)
|
||||
{
|
||||
gtk_label_set_markup(GTK_LABEL(gtk_builder_get_object(window->m_builder, "label-CMS-status")), "- <i>CMS/DRL is in range </i> -");
|
||||
gtk_image_set_from_stock(GTK_IMAGE(gtk_builder_get_object(window->m_builder, "image-CMS-status")), GTK_STOCK_YES, GTK_ICON_SIZE_BUTTON);
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_label_set_markup(GTK_LABEL(gtk_builder_get_object(window->m_builder, "label-CMS-status")), "- <i>CMS/DRL is not in range </i> -");
|
||||
gtk_image_set_from_stock(GTK_IMAGE(gtk_builder_get_object(window->m_builder, "image-CMS-status")), GTK_STOCK_NO, GTK_ICON_SIZE_BUTTON);
|
||||
}
|
||||
gtk_label_set_markup(GTK_LABEL(gtk_builder_get_object(window->m_builder, "label-error-message")), (window->m_sErrorMessage).c_str());
|
||||
|
||||
window->m_isChanged = false;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool CDriverBioSemiActiveTwo::initialize(const uint32_t nSamplePerSentBlock, IDriverCallback& callback)
|
||||
{
|
||||
m_acquisitionStopped = false;
|
||||
|
||||
if (m_driverCtx.isConnected()) { return false; }
|
||||
|
||||
m_callback = &callback;
|
||||
|
||||
if (!m_bridge.open())
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Warning << "Could not open the device.\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!m_bridge.start())
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Warning << "Could not start the device.\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
// wait to be sure we get the first packet from which we deduce the actual channel count and other initial configuration.
|
||||
System::Time::sleep(500);
|
||||
|
||||
const int byteRead = m_bridge.read();
|
||||
if (byteRead < 0)
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "An error occured while reading first data packet from device !\n";
|
||||
m_bridge.close();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!m_bridge.discard()) // we discard the samples.
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "An error occured while dropping unused samples at initialization time.\n";
|
||||
m_bridge.close();
|
||||
return false;
|
||||
}
|
||||
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Bridge initialized with: [SF:" << m_bridge.getSamplingFrequency()
|
||||
<< "] [CH:" << m_bridge.getChannelCount()
|
||||
<< "] [MKII:" << m_bridge.isDeviceMarkII()
|
||||
<< "] [CMInRange:" << m_bridge.isCMSInRange()
|
||||
<< "] [LowBat:" << m_bridge.isBatteryLow() << "]\n";
|
||||
|
||||
if (m_bridge.isBatteryLow()) { m_driverCtx.getLogManager() << Kernel::LogLevel_Warning << "Device battery is low !\n"; }
|
||||
|
||||
// the sample buffer is resized to get samples from ALL channels even if the user selected
|
||||
// less channels. We will adjust the content when calling setSamples(...)
|
||||
// in case the user required more channels than the number available in the stream, we will
|
||||
// add 0-padding.
|
||||
const size_t nChannelInStream = m_bridge.getChannelCount();
|
||||
const size_t nChannelRequested = m_header.getChannelCount();
|
||||
m_samples.clear();
|
||||
m_samples.resize(nChannelRequested, 0);
|
||||
if (nChannelRequested > nChannelInStream)
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Warning <<
|
||||
"The required channel count cannot be reached in current device configuration (data stream contains " << m_bridge.getChannelCount() <<
|
||||
" channels). Please check the device speed mode and setup capabilities. Channels with no data will be filled with zeros.\n";
|
||||
}
|
||||
|
||||
m_nSample = 0;
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Driver initialized...\n";
|
||||
|
||||
//Check speed mode: speed modes 1, 2 and 3 should not be used for acquisition
|
||||
if (m_bridge.getSpeedMode() < 4)
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Speed modes 1 to 3 are designed to realize daisy chained montages, they should not be used for acquisition.";
|
||||
return false;
|
||||
}
|
||||
|
||||
// Rename EX channels after settings were saved
|
||||
if (m_bridge.isUseEXChannels())
|
||||
{
|
||||
int j = 1;
|
||||
for (size_t i = m_header.getChannelCount() - BIOSEMI_ACTIVETWO_EXCHANNELCOUNT; i < m_header.getChannelCount(); ++i, ++j)
|
||||
{
|
||||
m_header.setChannelName(i, ("EX " + std::to_string(j)).c_str());
|
||||
m_header.setChannelUnits(i, OVTK_UNIT_Volts, OVTK_FACTOR_Micro);
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Channel name: " << m_header.getChannelName(i) << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
m_infoWindow = new SInformationWindow();
|
||||
|
||||
// Initialize information window
|
||||
// n.b. do all gtk stuff from callbacks to avoid threading issues.
|
||||
gdk_threads_add_idle(setup_information_window_callback, this);
|
||||
|
||||
//Launch idle loop: update the information window in a separate glib thread
|
||||
gdk_threads_add_idle(information_window_callback, m_infoWindow);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CDriverBioSemiActiveTwo::start()
|
||||
{
|
||||
if (!m_driverCtx.isConnected() || m_driverCtx.isStarted()) { return false; }
|
||||
|
||||
m_startTime = System::Time::getTime();
|
||||
m_lastWarningTime = 0;
|
||||
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Acquisition started...\n";
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CDriverBioSemiActiveTwo::loop()
|
||||
{
|
||||
if (m_acquisitionStopped || !m_driverCtx.isConnected()) { return true; }
|
||||
|
||||
if (m_driverCtx.isStarted())
|
||||
{
|
||||
//size_t nChannelInStream = m_bridge.getChannelCount();
|
||||
const size_t nChannelRequested = m_header.getChannelCount();
|
||||
|
||||
//uint32_t max = (nChannelRequested > nChannelInStream) ? nChannelRequested : nChannelInStream;
|
||||
const uint32_t max = nChannelRequested;
|
||||
const int byteRead = m_bridge.read();
|
||||
if (byteRead > 0)
|
||||
{
|
||||
for (uint32_t i = 0; i < m_bridge.getAvailableSampleCount(); ++i)
|
||||
{
|
||||
// we consume one sample per channel, values are given in uV
|
||||
if (!m_bridge.consumeOneSamplePerChannel(&m_samples[0], max))
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_infoWindow->m_mutex);
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Something bad happened while consuming samples from device.\n";
|
||||
m_infoWindow->m_isChanged = true;
|
||||
m_infoWindow->m_sErrorMessage = "<span color=\"darkred\">Something bad happened while consuming samples from device.</span>\n";
|
||||
if (m_bridge.getLastError() == BioSemiError_SyncLost)
|
||||
{
|
||||
m_infoWindow->m_sErrorMessage += "\t <span color=\"darkred\"> Synchronization lost during acquisition. Fiber optic may be loose or damaged.</span>";
|
||||
m_driverCtx.getLogManager() << "\t >Synchronization lost during acquisition. Fiber optic may be loose or damaged.\n";
|
||||
}
|
||||
if (m_bridge.getLastError() == BioSemiError_BufferOverflow)
|
||||
{
|
||||
m_infoWindow->m_sErrorMessage += "\t <span color=\"darkred\"> Buffer overflow. Please check that you have enough CPU and memory available to run the acquisition server at full speed before retrying.</span>";
|
||||
m_driverCtx.getLogManager() << "\t > Buffer overflow. Please check that you have enough CPU and memory available to run the acquisition server at full speed before retrying.\n";
|
||||
}
|
||||
m_acquisitionStopped = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
// this call uses the header's channel count, so it will naturally take the first samples (not necessarily all channels).
|
||||
m_callback->setSamples(&m_samples[0], 1);
|
||||
|
||||
// triggers:
|
||||
// we simply send OVTK_StimulationId_Label_X where X is the trigger index between 1 and 16
|
||||
// We don't handle rising and falling edges.
|
||||
for (uint32_t j = 0; j < m_triggers.size(); ++j)
|
||||
{
|
||||
if (m_bridge.getTrigger(j) != m_triggers[j])
|
||||
{
|
||||
m_triggers[j] = m_bridge.getTrigger(j);
|
||||
const uint64_t date = (1LL << 32) / m_bridge.getSamplingFrequency(); // date is relative to the buffer start. I only have one sample in the buffer so it's fairly simple
|
||||
m_stimSet.appendStimulation(OVTK_StimulationId_Label(j+1), date, 0);
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Trigger " << j + 1 << "/16 has switched to " << m_triggers[j] << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
// "CMS/DRL in range" warning, once every 2 seconds max
|
||||
/*
|
||||
From: Coen (BioSemi):
|
||||
|
||||
The current flow via the DRL is constantly monitored by the safety circuitry inside the AD-box. The current flow is limited to 50 uA (IEC 601 safety limit).
|
||||
If the current runs into the limit, the CMS/DRL circuit cannot keep the Common Mode value within its normal working range, and the blue LED turns off.
|
||||
|
||||
The safety circuitry reacts on this error situation by shutting the power supply to ALL active electrodes off. Consequently, no meaningful signals can be measured so long as the blue LED is off.
|
||||
The circuit operation described above implies that any electrode can be the cause of a CM out of range error.
|
||||
Examples of errors are broken wires, bad connector contacts (pollution of connector with gel), defect IC inside the electrode,
|
||||
bare electrode wire contacting the subject (damaged cable isolation) etc.. For example, if one of the active electrode wires is broken,
|
||||
the electrode input circuit is not anymore biased correctly, and the input resistance may fall below its specified value of 10^12 Ohm.
|
||||
The resultant extra input current is detected by the CMS/DRL circuit, and the blue LED goes off.
|
||||
Save operation of the system is ensured because the power supply to the active electrodes is only restored if ALL electrodes connected to the subject work correctly.
|
||||
In other words, both cap en EX electrodes can in principle cause CM out of range errors.
|
||||
*/
|
||||
|
||||
bool warningDisplayed = false;
|
||||
if (!m_bridge.isCMSInRange())
|
||||
{
|
||||
// we print a warning message once every 2secs maximum
|
||||
if (System::Time::getTime() > m_lastWarningTime + 2000)
|
||||
{
|
||||
warningDisplayed = true;
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Warning << "(" << ((System::Time::getTime() - m_startTime) / 1000) << "') CMS/DRL is not in range. For safety purpose, any active electrode connected has been shut down and signals should not be used.\n";
|
||||
m_driverCtx.getLogManager() << "\t The corresponding sample range has been tagged with OVTK_StimulationId_SegmentStart and OVTK_StimulationId_SegmentStop.\n";
|
||||
m_driverCtx.getLogManager() << "\t Possible causes include broken wires, damaged cable isolation, bad connector contacts, defect IC inside the electrode.\n";
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_infoWindow->m_mutex);
|
||||
m_infoWindow->m_isCMSInRange = false;
|
||||
m_infoWindow->m_isChanged = true;
|
||||
}
|
||||
}
|
||||
|
||||
// the possibly incorrect sample range is tagged using OVTK_StimulationId_SegmentStart and OVTK_StimulationId_SegmentStop
|
||||
// CM is now not in range
|
||||
if (m_bCMCurrentlyInRange)
|
||||
{
|
||||
const uint64_t date = (1LL << 32) / m_bridge.getSamplingFrequency();
|
||||
m_stimSet.appendStimulation(OVTK_StimulationId_SegmentStart, date, 0);
|
||||
}
|
||||
m_bCMCurrentlyInRange = false;
|
||||
m_bCMSBackInRange = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// CMS/DRL is now back in range
|
||||
if (!m_bCMCurrentlyInRange)
|
||||
{
|
||||
m_lastCmsBackInRange = System::Time::getTime();
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "isCMSInRange \n";
|
||||
const uint64_t date = (1LL << 32) / m_bridge.getSamplingFrequency();
|
||||
m_stimSet.appendStimulation(OVTK_StimulationId_SegmentStop, date, 0);
|
||||
m_bCMCurrentlyInRange = true;
|
||||
}
|
||||
// CMS is considered "back in range" if it stayed in range for more than 500ms
|
||||
// -> avoids changing the gtk markup too often (which would not be readable for the user nor efficient)
|
||||
else if (!m_bCMSBackInRange && (System::Time::getTime() > m_lastCmsBackInRange + 100))
|
||||
{
|
||||
m_bCMSBackInRange = true;
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Info << "Back in range \n";
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_infoWindow->m_mutex);
|
||||
m_infoWindow->m_isCMSInRange = true;
|
||||
m_infoWindow->m_isChanged = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (m_bridge.isBatteryLow())
|
||||
{
|
||||
// we print a warning message once every 2secs maximum
|
||||
if (System::Time::getTime() > m_lastWarningTime + 2000)
|
||||
{
|
||||
warningDisplayed = true;
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Warning << "(" << ((System::Time::getTime() - m_startTime) / 1000) << "') Device battery is low !\n";
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_infoWindow->m_mutex);
|
||||
m_infoWindow->m_isBatteryLow = true;
|
||||
m_infoWindow->m_isChanged = true;
|
||||
}
|
||||
}
|
||||
m_bBatteryCurrentlyOk = false;
|
||||
m_bBatteryBackOk = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!m_bBatteryCurrentlyOk)
|
||||
{
|
||||
m_lastBatteryLow = System::Time::getTime();
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Warning << "(" << ((System::Time::getTime() - m_startTime) / 1000) << "') Device battery seems ok.\n";
|
||||
m_bBatteryCurrentlyOk = true;
|
||||
}
|
||||
// CMS is considered "back in range" if it stayed in range for more than 500ms
|
||||
// -> avoids changing the gtk markup too often (which would not be readable for the user nor efficient)
|
||||
else if (!m_bBatteryBackOk && (System::Time::getTime() > m_lastBatteryLow + 100))
|
||||
{
|
||||
m_bBatteryBackOk = true;
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Info << "Back in range \n";
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_infoWindow->m_mutex);
|
||||
m_infoWindow->m_isBatteryLow = false;
|
||||
m_infoWindow->m_isChanged = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (warningDisplayed) { m_lastWarningTime = System::Time::getTime(); }
|
||||
|
||||
m_callback->setStimulationSet(m_stimSet);
|
||||
m_stimSet.clear();
|
||||
}
|
||||
}
|
||||
if (byteRead < 0)
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "An error occured while reading data from device !\n";
|
||||
m_acquisitionStopped = true;
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_infoWindow->m_mutex);
|
||||
m_infoWindow->m_sErrorMessage = "<span color=\"darkred\">An error occured while reading data from device !</span>";
|
||||
m_infoWindow->m_isChanged = true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
m_driverCtx.correctDriftSampleCount(m_driverCtx.getSuggestedDriftCorrectionSampleCount());
|
||||
}
|
||||
else
|
||||
{
|
||||
// acquisition is not started, but device is.
|
||||
int byteRead = m_bridge.read();
|
||||
while (byteRead > 0)
|
||||
{
|
||||
if (!m_bridge.discard()) // we discard the samples.
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "An error occured while dropping samples.\n";
|
||||
m_acquisitionStopped = true;
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_infoWindow->m_mutex);
|
||||
m_infoWindow->m_sErrorMessage = "<span color=\"darkred\">An error occured while dropping samples.</span>";
|
||||
m_infoWindow->m_isChanged = true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
byteRead = m_bridge.read();
|
||||
}
|
||||
if (byteRead < 0)
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "An error occured while reading data from device (drop)!\n";
|
||||
m_acquisitionStopped = true;
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_infoWindow->m_mutex);
|
||||
m_infoWindow->m_sErrorMessage = "<span color=\"darkred\">An error occured while reading data from device (drop)!</span>";
|
||||
m_infoWindow->m_isChanged = true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CDriverBioSemiActiveTwo::stop()
|
||||
{
|
||||
if (!m_driverCtx.isConnected() || !m_driverCtx.isStarted()) { return false; }
|
||||
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Acquisition stopped...\n";
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CDriverBioSemiActiveTwo::uninitialize()
|
||||
{
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_infoWindow->m_mutex);
|
||||
|
||||
m_infoWindow->m_isChanged = true;
|
||||
m_infoWindow->m_isAcquisitionEnded = true;
|
||||
m_infoWindow = nullptr; // The callback will free the memory
|
||||
}
|
||||
|
||||
// Rename EX channels as "" so that the names are not saved as settings
|
||||
if (m_bridge.isUseEXChannels())
|
||||
{
|
||||
for (size_t i = m_header.getChannelCount() - m_bridge.getEXChannelCount(); i < m_header.getChannelCount(); ++i)
|
||||
{
|
||||
m_header.setChannelName(i, "");
|
||||
m_header.setChannelUnits(i, OVTK_UNIT_Volts, OVTK_FACTOR_Micro);
|
||||
}
|
||||
}
|
||||
|
||||
if (!m_driverCtx.isConnected() || m_driverCtx.isStarted()) { return false; }
|
||||
if (!m_bridge.close())
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Warning << "Could not close the device.\n";
|
||||
return false;
|
||||
}
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Info << "Driver uninitialized...\n";
|
||||
return true;
|
||||
}
|
||||
|
||||
//___________________________________________________________________//
|
||||
// //
|
||||
|
||||
bool CDriverBioSemiActiveTwo::configure()
|
||||
{
|
||||
CConfigurationBioSemiActiveTwo config(Directories::getDataDir() + "/applications/acquisition-server/interface-BioSemi-ActiveTwo.ui", m_useEXChannel);
|
||||
|
||||
if (config.configure(m_header))
|
||||
{
|
||||
m_bridge.setUseEXChannels(m_useEXChannel);
|
||||
if (m_bridge.isUseEXChannels()) { m_header.setChannelCount(m_header.getChannelCount() + BIOSEMI_ACTIVETWO_EXCHANNELCOUNT); }
|
||||
|
||||
m_settings.save();
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
/*
|
||||
size_t CDriverBioSemiActiveTwo::getChannelCount()
|
||||
{
|
||||
if(m_useEXChannel)
|
||||
{
|
||||
return m_header.getChannelCount() + m_bridge.getEXChannelCount();
|
||||
}
|
||||
else { return m_header.getChannelCount(); }
|
||||
}
|
||||
*/
|
||||
|
||||
} // namespace AcquisitionServer
|
||||
} // namespace OpenViBE
|
||||
#endif
|
||||
+129
@@ -0,0 +1,129 @@
|
||||
/*
|
||||
* ovasCDriverBioSemiActiveTwo.h
|
||||
*
|
||||
* Copyright (c) 2012, Mensia Technologies SA. All rights reserved.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301 USA
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#ifdef TARGET_HAS_ThirdPartyBioSemiAPI
|
||||
|
||||
#include "ovasIDriver.h"
|
||||
#include "../ovasCHeader.h"
|
||||
|
||||
#include "../ovasCSettingsHelper.h"
|
||||
#include "../ovasCSettingsHelperOperators.h"
|
||||
|
||||
#include "mCBridgeBioSemiActiveTwo.h"
|
||||
|
||||
#include "gtk/gtk.h"
|
||||
|
||||
#include <vector>
|
||||
#include <thread>
|
||||
#include <mutex>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace AcquisitionServer {
|
||||
/**
|
||||
* SInformationWindow: encapsulate the GtkBuilder used to build the window
|
||||
* and the information that we want to display in it.
|
||||
* The use of a structure allows to use a GLib idle loop.
|
||||
*/
|
||||
typedef struct SInformationWindow
|
||||
{
|
||||
SInformationWindow() {}
|
||||
// Builder of the window
|
||||
GtkBuilder* m_builder = nullptr;
|
||||
// When set to true, the idle loop is stopped and the window is destroyed
|
||||
bool m_isAcquisitionEnded = false;
|
||||
// Set to true when at least one of the acquisition window member changed
|
||||
bool m_isChanged = false;
|
||||
bool m_isCMSInRange = false;
|
||||
bool m_isBatteryLow = false;
|
||||
std::string m_sErrorMessage = "";
|
||||
|
||||
// The window is changed in a idle loop in function of m_isCMSInRange,
|
||||
// m_isBatteryLow and m_sErrorMessage that change in the driver loop
|
||||
// A mutex is necessary to secure the access to the data
|
||||
std::mutex m_mutex;
|
||||
} SInformationWindow;
|
||||
|
||||
/**
|
||||
* \class CDriverBioSemiActiveTwo
|
||||
* \author Mensia Technologies
|
||||
*/
|
||||
class CDriverBioSemiActiveTwo final : public IDriver
|
||||
{
|
||||
public:
|
||||
|
||||
explicit CDriverBioSemiActiveTwo(IDriverContext& ctx);
|
||||
void release() { delete this; }
|
||||
const char* getName() override { return "BioSemi Active Two (MkI and MkII)"; }
|
||||
|
||||
bool initialize(const uint32_t nSamplePerSentBlock, IDriverCallback& callback) override;
|
||||
bool uninitialize() override;
|
||||
|
||||
bool start() override;
|
||||
bool stop() override;
|
||||
bool loop() override;
|
||||
|
||||
bool isConfigurable() override { return true; }
|
||||
bool configure() override;
|
||||
const IHeader* getHeader() override { return &m_header; }
|
||||
//size_t getChannelCount();
|
||||
|
||||
// Called from gtk callback
|
||||
void setupInformationWindow();
|
||||
|
||||
protected:
|
||||
|
||||
SettingsHelper m_settings;
|
||||
|
||||
IDriverCallback* m_callback = nullptr;
|
||||
CHeader m_header;
|
||||
|
||||
std::vector<uint32_t> m_impedances;
|
||||
std::vector<float> m_samples;
|
||||
|
||||
CStimulationSet m_stimSet;
|
||||
|
||||
CBridgeBioSemiActiveTwo m_bridge;
|
||||
|
||||
std::vector<bool> m_triggers;
|
||||
uint64_t m_nSample = 0;
|
||||
|
||||
bool m_bCMCurrentlyInRange = false;
|
||||
bool m_bBatteryCurrentlyOk = false;
|
||||
uint32_t m_lastWarningTime = 0;
|
||||
// Used to determine for how long CMS was in range
|
||||
uint32_t m_lastCmsBackInRange = 0;
|
||||
uint32_t m_lastBatteryLow = 0;
|
||||
// True if CMS is in range for more than 100ms
|
||||
bool m_bCMSBackInRange = true;
|
||||
bool m_bBatteryBackOk = true;
|
||||
uint32_t m_startTime = 0;
|
||||
bool m_useEXChannel = false;
|
||||
// Set to true
|
||||
bool m_acquisitionStopped = false;
|
||||
|
||||
SInformationWindow* m_infoWindow = nullptr;
|
||||
};
|
||||
} // namespace AcquisitionServer
|
||||
} // namespace OpenViBE
|
||||
|
||||
|
||||
#endif // TARGET_HAS_ThirdPartyBioSemiAPI
|
||||
+258
@@ -0,0 +1,258 @@
|
||||
/*
|
||||
* ovasCConfigurationBrainProductsActiCHamp.cpp
|
||||
*
|
||||
* Copyright (c) 2012, Mensia Technologies SA. All rights reserved.
|
||||
* -- Rights transferred to Inria, contract signed 21.11.2014
|
||||
*
|
||||
*/
|
||||
|
||||
#if defined TARGET_HAS_ThirdPartyActiCHampAPI
|
||||
|
||||
#include "ovasCConfigurationBrainProductsActiCHamp.h"
|
||||
|
||||
#include "ovasIHeader.h"
|
||||
|
||||
#include <actichamp.h>
|
||||
#include <system/ovCTime.h>
|
||||
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <shellapi.h>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace AcquisitionServer {
|
||||
|
||||
static void DeviceChangedCB(GtkComboBox* /*comboBox*/, gpointer data)
|
||||
{
|
||||
reinterpret_cast<CConfigurationBrainProductsActiCHamp*>(data)->comboBoxDeviceChangedCB();
|
||||
}
|
||||
|
||||
static void ModuleToggledCB(GtkToggleButton* button, gpointer data)
|
||||
{
|
||||
reinterpret_cast<CConfigurationBrainProductsActiCHamp*>(data)->buttonModuleToggledCB(gtk_toggle_button_get_active(button) != 0);
|
||||
}
|
||||
|
||||
static void AUXChannelsToggledCB(GtkToggleButton* button, gpointer data)
|
||||
{
|
||||
reinterpret_cast<CConfigurationBrainProductsActiCHamp*>(data)->buttonAuxChannelsToggledCB(gtk_toggle_button_get_active(button) != 0);
|
||||
}
|
||||
|
||||
CConfigurationBrainProductsActiCHamp::CConfigurationBrainProductsActiCHamp(
|
||||
const char* gtkBuilderFilename, uint32_t& deviceID, uint32_t& mode, uint32_t& physicalSampling, uint32_t& adcDataFilter,
|
||||
uint32_t& adcDataDecimation, uint32_t& activeShieldGain, uint32_t& moduleEnabled, bool& useAuxChannels, uint32_t& goodImpedanceLimit,
|
||||
uint32_t& badImpedanceLimit)
|
||||
: CConfigurationBuilder(gtkBuilderFilename), m_deviceID(deviceID), m_mode(mode), m_physicalSampling(physicalSampling),
|
||||
m_adcDataFilter(adcDataFilter)
|
||||
, m_adcDataDecimation(adcDataDecimation), m_activeShieldGain(activeShieldGain), m_moduleEnabled(moduleEnabled), m_useAuxChannels(useAuxChannels)
|
||||
, m_goodImpedanceLimit(goodImpedanceLimit), m_badImpedanceLimit(badImpedanceLimit) {}
|
||||
|
||||
namespace {
|
||||
void open_url_brainproducts_download_actichamp_fw_cb(GtkWidget* /*widget*/, gpointer /*data*/)
|
||||
{
|
||||
ShellExecute(nullptr, nullptr, "http://www.brainproducts.com/files/public/downloads/actiCHamp_rev03_FW-Update.zip", nullptr, nullptr, SW_SHOW);
|
||||
}
|
||||
}
|
||||
|
||||
bool CConfigurationBrainProductsActiCHamp::preConfigure()
|
||||
{
|
||||
if (!CConfigurationBuilder::preConfigure()) { return false; }
|
||||
|
||||
m_imageErrorIcon = GTK_WIDGET(gtk_builder_get_object(m_builder, "image_error_icon"));
|
||||
m_labelErrorMessage = GTK_LABEL(gtk_builder_get_object(m_builder, "label_error_message"));
|
||||
m_buttonErrorDLLLink = GTK_BUTTON(gtk_builder_get_object(m_builder, "button_bp_actichamp_download_firmware"));
|
||||
m_comboBoxDeviceId = GTK_COMBO_BOX(gtk_builder_get_object(m_builder, "combobox_device_id"));
|
||||
m_comboBoxMode = GTK_COMBO_BOX(gtk_builder_get_object(m_builder, "combobox_mode"));
|
||||
m_comboBoxPhysicalSampleRate = GTK_COMBO_BOX(gtk_builder_get_object(m_builder, "combobox_physical_sample_rate"));
|
||||
m_comboBoxADCDataFilter = GTK_COMBO_BOX(gtk_builder_get_object(m_builder, "combobox_adc_data_filter"));
|
||||
m_comboBoxADCDataDecimation = GTK_COMBO_BOX(gtk_builder_get_object(m_builder, "combobox_adc_data_decimation"));
|
||||
m_buttonActiveShieldGain = GTK_SPIN_BUTTON(gtk_builder_get_object(m_builder, "spinbutton_active_shield_gain"));
|
||||
m_buttonUseAuxChannels = GTK_TOGGLE_BUTTON(gtk_builder_get_object(m_builder, "checkbutton_aux_channels"));
|
||||
m_buttonGoodImpedanceLimit = GTK_SPIN_BUTTON(gtk_builder_get_object(m_builder, "spinbutton_good_imp"));
|
||||
m_buttonBadImpedanceLimit = GTK_SPIN_BUTTON(gtk_builder_get_object(m_builder, "spinbutton_bad_imp"));
|
||||
|
||||
m_module1 = GTK_TOGGLE_BUTTON(gtk_builder_get_object(m_builder, "togglebutton_module_1"));
|
||||
m_module2 = GTK_TOGGLE_BUTTON(gtk_builder_get_object(m_builder, "togglebutton_module_2"));
|
||||
m_module3 = GTK_TOGGLE_BUTTON(gtk_builder_get_object(m_builder, "togglebutton_module_3"));
|
||||
m_module4 = GTK_TOGGLE_BUTTON(gtk_builder_get_object(m_builder, "togglebutton_module_4"));
|
||||
m_module5 = GTK_TOGGLE_BUTTON(gtk_builder_get_object(m_builder, "togglebutton_module_5"));
|
||||
|
||||
g_signal_connect(G_OBJECT(m_module1), "toggled", G_CALLBACK(ModuleToggledCB), this);
|
||||
g_signal_connect(G_OBJECT(m_module2), "toggled", G_CALLBACK(ModuleToggledCB), this);
|
||||
g_signal_connect(G_OBJECT(m_module3), "toggled", G_CALLBACK(ModuleToggledCB), this);
|
||||
g_signal_connect(G_OBJECT(m_module4), "toggled", G_CALLBACK(ModuleToggledCB), this);
|
||||
g_signal_connect(G_OBJECT(m_module5), "toggled", G_CALLBACK(ModuleToggledCB), this);
|
||||
|
||||
g_signal_connect(G_OBJECT(m_buttonUseAuxChannels), "toggled", G_CALLBACK(AUXChannelsToggledCB), this);
|
||||
g_signal_connect(G_OBJECT(m_buttonErrorDLLLink), "clicked", G_CALLBACK(open_url_brainproducts_download_actichamp_fw_cb), nullptr);
|
||||
|
||||
g_signal_connect(G_OBJECT(m_comboBoxDeviceId), "changed", G_CALLBACK(DeviceChangedCB), this);
|
||||
|
||||
const uint32_t nDevice = uint32_t(champGetCount());
|
||||
bool selected = false;
|
||||
|
||||
// autodetection of the connected device(s)
|
||||
for (uint32_t i = 0; i < nDevice; ++i)
|
||||
{
|
||||
gtk_combo_box_append_text(m_comboBoxDeviceId, ("Device " + std::to_string(i)).c_str());
|
||||
{
|
||||
if (m_deviceID == i)
|
||||
{
|
||||
gtk_combo_box_set_active(m_comboBoxDeviceId, i);
|
||||
selected = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (nDevice == 0) { gtk_spin_button_set_value(GTK_SPIN_BUTTON(m_nChannels), 0); }
|
||||
|
||||
if (!selected && nDevice != 0) { gtk_combo_box_set_active(m_comboBoxDeviceId, 0); }
|
||||
|
||||
gtk_combo_box_set_active(m_comboBoxMode, m_mode);
|
||||
gtk_combo_box_set_active(m_comboBoxPhysicalSampleRate, m_physicalSampling);
|
||||
gtk_combo_box_set_active(m_comboBoxADCDataFilter, m_adcDataFilter);
|
||||
gtk_combo_box_set_active(m_comboBoxADCDataDecimation, (m_adcDataDecimation == CHAMP_DECIMATION_2 ? 1 : 0));
|
||||
gtk_spin_button_set_value(m_buttonActiveShieldGain, m_activeShieldGain);
|
||||
gtk_spin_button_set_value(m_buttonGoodImpedanceLimit, m_goodImpedanceLimit);
|
||||
gtk_spin_button_set_value(m_buttonBadImpedanceLimit, m_badImpedanceLimit);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CConfigurationBrainProductsActiCHamp::postConfigure()
|
||||
{
|
||||
GTK_COMBO_BOX(gtk_builder_get_object(m_builder, "combobox_device"));
|
||||
|
||||
if (m_applyConfig)
|
||||
{
|
||||
gtk_spin_button_update(GTK_SPIN_BUTTON(m_buttonActiveShieldGain));
|
||||
gtk_spin_button_update(GTK_SPIN_BUTTON(m_buttonGoodImpedanceLimit));
|
||||
gtk_spin_button_update(GTK_SPIN_BUTTON(m_buttonBadImpedanceLimit));
|
||||
|
||||
m_deviceID = gtk_combo_box_get_active(m_comboBoxDeviceId);
|
||||
m_mode = gtk_combo_box_get_active(m_comboBoxMode);
|
||||
m_physicalSampling = gtk_combo_box_get_active(m_comboBoxPhysicalSampleRate);
|
||||
m_adcDataFilter = gtk_combo_box_get_active((m_comboBoxADCDataFilter));
|
||||
m_adcDataDecimation = ((gtk_combo_box_get_active(m_comboBoxADCDataDecimation) == 1) ? CHAMP_DECIMATION_2 : CHAMP_DECIMATION_0
|
||||
); // The decimation enum gives FACTOR_2 = 2 and not 1.
|
||||
m_activeShieldGain = uint32_t(gtk_spin_button_get_value(m_buttonActiveShieldGain));
|
||||
m_goodImpedanceLimit = uint32_t(gtk_spin_button_get_value(m_buttonGoodImpedanceLimit));
|
||||
m_badImpedanceLimit = uint32_t(gtk_spin_button_get_value(m_buttonBadImpedanceLimit));
|
||||
m_useAuxChannels = gtk_toggle_button_get_active(m_buttonUseAuxChannels) != 0;
|
||||
m_moduleEnabled = 0x01
|
||||
| (gtk_toggle_button_get_active(m_module1) ? 0x02 : 0x00)
|
||||
| (gtk_toggle_button_get_active(m_module2) ? 0x04 : 0x00)
|
||||
| (gtk_toggle_button_get_active(m_module3) ? 0x08 : 0x00)
|
||||
| (gtk_toggle_button_get_active(m_module4) ? 0x10 : 0x00)
|
||||
| (gtk_toggle_button_get_active(m_module5) ? 0x20 : 0x00);
|
||||
}
|
||||
|
||||
if (!CConfigurationBuilder::postConfigure()) { return false; }
|
||||
return true;
|
||||
}
|
||||
|
||||
void CConfigurationBrainProductsActiCHamp::comboBoxDeviceChangedCB()
|
||||
{
|
||||
void* handle = nullptr;
|
||||
const uint32_t deviceID = gtk_combo_box_get_active(m_comboBoxDeviceId);
|
||||
|
||||
// retry opening the device several times, as sometimes the champOpen fails for no reason
|
||||
|
||||
int retriesCount = 0;
|
||||
while (retriesCount++ < 1)
|
||||
{
|
||||
handle = champOpen(deviceID);
|
||||
if (handle == nullptr) { System::Time::sleep(500); }
|
||||
else { break; }
|
||||
}
|
||||
// Opens device
|
||||
if (handle != nullptr)
|
||||
{
|
||||
// Clear error messages
|
||||
gtk_widget_hide(m_imageErrorIcon);
|
||||
gtk_widget_hide(GTK_WIDGET(m_labelErrorMessage));
|
||||
gtk_widget_hide(GTK_WIDGET(m_buttonErrorDLLLink));
|
||||
|
||||
// Gets properties
|
||||
t_champProperty properties;
|
||||
champGetProperty(handle, &properties);
|
||||
|
||||
// Sets channel count
|
||||
//m_header->setSamplingFrequency(uint32_t(l_oProperties.Rate));
|
||||
//m_header->setChannelCount(l_oProperties.CountEeg + properties.CountAux);
|
||||
//gtk_spin_button_set_value(GTK_SPIN_BUTTON(m_nChannels), properties.CountEeg + properties.CountAux);
|
||||
|
||||
// The channel count is updated with the toggled button callbacks.
|
||||
m_header->setChannelCount(0);
|
||||
|
||||
// Gets modules
|
||||
t_champModules modules;
|
||||
champGetModules(handle, &modules);
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(m_module1), (modules.Present & 0x02) ? TRUE : FALSE);
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(m_module2), (modules.Present & 0x04) ? TRUE : FALSE);
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(m_module3), (modules.Present & 0x08) ? TRUE : FALSE);
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(m_module4), (modules.Present & 0x10) ? TRUE : FALSE);
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(m_module5), (modules.Present & 0x20) ? TRUE : FALSE);
|
||||
|
||||
|
||||
// Since the toggle_button method fires the event we have to clean up all boutons
|
||||
// and the channel count before actually activating the modules
|
||||
gtk_toggle_button_set_active(m_module1, FALSE);
|
||||
gtk_toggle_button_set_active(m_module2, FALSE);
|
||||
gtk_toggle_button_set_active(m_module3, FALSE);
|
||||
gtk_toggle_button_set_active(m_module4, FALSE);
|
||||
gtk_toggle_button_set_active(m_module5, FALSE);
|
||||
|
||||
gtk_spin_button_set_value(GTK_SPIN_BUTTON(m_nChannels), 0);
|
||||
|
||||
gtk_toggle_button_set_active(m_module1, (m_moduleEnabled & 0x02 && modules.Present & 0x02) ? TRUE : FALSE); // calls the moduleToggledCB.
|
||||
gtk_toggle_button_set_active(m_module2, (m_moduleEnabled & 0x04 && modules.Present & 0x04) ? TRUE : FALSE); // calls the moduleToggledCB.
|
||||
gtk_toggle_button_set_active(m_module3, (m_moduleEnabled & 0x08 && modules.Present & 0x08) ? TRUE : FALSE); // calls the moduleToggledCB.
|
||||
gtk_toggle_button_set_active(m_module4, (m_moduleEnabled & 0x10 && modules.Present & 0x10) ? TRUE : FALSE); // calls the moduleToggledCB.
|
||||
gtk_toggle_button_set_active(m_module5, (m_moduleEnabled & 0x20 && modules.Present & 0x20) ? TRUE : FALSE); // calls the moduleToggledCB.
|
||||
|
||||
//Aux channels
|
||||
gtk_toggle_button_set_active(m_buttonUseAuxChannels, m_useAuxChannels);
|
||||
|
||||
// TODO: champClose function returns an error code which is never ever checked,
|
||||
// closing a device can and does fail in some circumstances, but we can not really
|
||||
// do much about it.
|
||||
const int error = champClose(handle);
|
||||
if (error) { std::cerr << "Closing ActiCHamp device failed" << std::endl; }
|
||||
}
|
||||
else
|
||||
{
|
||||
// The device failed to open, we disable all of the controls and display an error message
|
||||
gtk_widget_show(m_imageErrorIcon);
|
||||
gtk_widget_show(GTK_WIDGET(m_labelErrorMessage));
|
||||
gtk_widget_show(GTK_WIDGET(m_buttonErrorDLLLink));
|
||||
|
||||
m_header->setChannelCount(0);
|
||||
gtk_spin_button_set_value(GTK_SPIN_BUTTON(m_nChannels), 0);
|
||||
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(m_module1), FALSE);
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(m_module2), FALSE);
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(m_module3), FALSE);
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(m_module4), FALSE);
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(m_module5), FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
void CConfigurationBrainProductsActiCHamp::buttonModuleToggledCB(const bool state)
|
||||
{
|
||||
const uint32_t nChannel = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(m_nChannels));
|
||||
// there is minimum 1 channel.
|
||||
if (state) { gtk_spin_button_set_value(GTK_SPIN_BUTTON(m_nChannels), nChannel + (nChannel == 1 ? 31 : 32)); }
|
||||
else { gtk_spin_button_set_value(GTK_SPIN_BUTTON(m_nChannels), nChannel - (nChannel == 1 ? 31 : 32)); }
|
||||
}
|
||||
|
||||
void CConfigurationBrainProductsActiCHamp::buttonAuxChannelsToggledCB(const bool state)
|
||||
{
|
||||
const uint32_t nChannel = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(m_nChannels));
|
||||
|
||||
if (state) { gtk_spin_button_set_value(GTK_SPIN_BUTTON(m_nChannels), nChannel + (nChannel == 1 ? 7 : 8)); }
|
||||
else { gtk_spin_button_set_value(GTK_SPIN_BUTTON(m_nChannels), nChannel - (nChannel == 1 ? 7 : 8)); }
|
||||
}
|
||||
|
||||
} // namespace AcquisitionServer
|
||||
} // namespace OpenViBE
|
||||
#endif // TARGET_HAS_ThirdPartyActiCHampAPI
|
||||
+69
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* ovasCConfigurationBrainProductsActiCHamp.h
|
||||
*
|
||||
* Copyright (c) 2012, Mensia Technologies SA. All rights reserved.
|
||||
* -- Rights transferred to Inria, contract signed 21.11.2014
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#if defined TARGET_HAS_ThirdPartyActiCHampAPI
|
||||
|
||||
#include "../ovasCConfigurationBuilder.h"
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace AcquisitionServer {
|
||||
class CConfigurationBrainProductsActiCHamp final : public CConfigurationBuilder
|
||||
{
|
||||
public:
|
||||
|
||||
CConfigurationBrainProductsActiCHamp(const char* gtkBuilderFilename, uint32_t& deviceID, uint32_t& mode, uint32_t& physicalSampling,
|
||||
uint32_t& adcDataFilter, uint32_t& adcDataDecimation, uint32_t& activeShieldGain, uint32_t& moduleEnabled,
|
||||
bool& useAuxChannels, uint32_t& goodImpedanceLimit, uint32_t& badImpedanceLimit);
|
||||
|
||||
bool preConfigure() override;
|
||||
bool postConfigure() override;
|
||||
|
||||
void comboBoxDeviceChangedCB();
|
||||
void buttonModuleToggledCB(bool state);
|
||||
void buttonAuxChannelsToggledCB(bool state);
|
||||
|
||||
protected:
|
||||
|
||||
uint32_t& m_deviceID;
|
||||
uint32_t& m_mode;
|
||||
uint32_t& m_physicalSampling;
|
||||
uint32_t& m_adcDataFilter;
|
||||
uint32_t& m_adcDataDecimation;
|
||||
uint32_t& m_activeShieldGain;
|
||||
uint32_t& m_moduleEnabled;
|
||||
bool& m_useAuxChannels;
|
||||
uint32_t& m_goodImpedanceLimit;
|
||||
uint32_t& m_badImpedanceLimit;
|
||||
|
||||
GtkWidget* m_imageErrorIcon = nullptr;
|
||||
GtkLabel* m_labelErrorMessage = nullptr;
|
||||
GtkButton* m_buttonErrorDLLLink = nullptr;
|
||||
GtkComboBox* m_comboBoxDeviceId = nullptr;
|
||||
GtkComboBox* m_comboBoxMode = nullptr;
|
||||
GtkComboBox* m_comboBoxPhysicalSampleRate = nullptr;
|
||||
GtkComboBox* m_comboBoxADCDataFilter = nullptr;
|
||||
GtkComboBox* m_comboBoxADCDataDecimation = nullptr;
|
||||
GtkSpinButton* m_buttonActiveShieldGain = nullptr;
|
||||
GtkToggleButton* m_buttonUseAuxChannels = nullptr;
|
||||
GtkSpinButton* m_buttonGoodImpedanceLimit = nullptr;
|
||||
GtkSpinButton* m_buttonBadImpedanceLimit = nullptr;
|
||||
|
||||
GtkToggleButton* m_module1 = nullptr;
|
||||
GtkToggleButton* m_module2 = nullptr;
|
||||
GtkToggleButton* m_module3 = nullptr;
|
||||
GtkToggleButton* m_module4 = nullptr;
|
||||
GtkToggleButton* m_module5 = nullptr;
|
||||
};
|
||||
} // namespace AcquisitionServer
|
||||
} // namespace OpenViBE
|
||||
|
||||
#endif // TARGET_HAS_ThirdPartyActiCHampAPI
|
||||
+777
@@ -0,0 +1,777 @@
|
||||
/*
|
||||
* ovasCDriverBrainProductsActiCHamp.cpp
|
||||
*
|
||||
* Copyright (c) 2012, Mensia Technologies SA. All rights reserved.
|
||||
* -- Rights transferred to Inria, contract signed 21.11.2014
|
||||
*
|
||||
*/
|
||||
|
||||
#if defined TARGET_HAS_ThirdPartyActiCHampAPI
|
||||
|
||||
#include "ovasCDriverBrainProductsActiCHamp.h"
|
||||
#include "ovasCConfigurationBrainProductsActiCHamp.h"
|
||||
|
||||
#include <toolkit/ovtk_all.h>
|
||||
#include <system/ovCTime.h>
|
||||
|
||||
#include <ActiChamp.h>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace AcquisitionServer {
|
||||
|
||||
namespace {
|
||||
typedef union
|
||||
{
|
||||
t_champDataModelAux ModelAux;
|
||||
t_champDataModel32 Model32;
|
||||
t_champDataModel64 Model64;
|
||||
t_champDataModel96 Model96;
|
||||
t_champDataModel128 Model128;
|
||||
t_champDataModel160 Model160;
|
||||
} UBuffer;
|
||||
|
||||
const uint32_t NB_MAX_BUFFER_IN_CACHE = 1000;
|
||||
UBuffer Buffer[NB_MAX_BUFFER_IN_CACHE];
|
||||
|
||||
// Low pass FIR filters before downsampling
|
||||
//
|
||||
// Computed with python and scipy
|
||||
// References :
|
||||
// http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.tofile.html
|
||||
// http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.firwin.html
|
||||
//
|
||||
// The following filters have roughly 50ms delay as described in "2.1.4 What is the
|
||||
// delay of a linear-phase FIR?" at http://www.dspguru.com/book/export/html/3 :
|
||||
// n = 500, Fs = 5000, delay = (n-1)/(2*Fs) = 0.04990
|
||||
// n = 1000, Fs = 10000, delay = (n-1)/(2*Fs) = 0.04995
|
||||
// n = 2500, Fs = 25000, delay = (n-1)/(2*Fs) = 0.04998
|
||||
// n = 5000, Fs = 50000, delay = (n-1)/(2*Fs) = 0.04999
|
||||
// n = 10000, Fs = 100000, delay = (n-1)/(2*Fs) = 0.049995
|
||||
//
|
||||
// In order to correct this delay, filtering should be done as a two steps process with a forward filter
|
||||
// followed by a backward filter. However, this leads to an n square complexity where a linear complexity is
|
||||
// sufficient in forward only filtering (using 100kHz input signal, n=10000 taps !)
|
||||
//
|
||||
// To avoid such complexity, it is chosen to antedate acquired samples by 50ms cheating the drift correction
|
||||
// process. Indeed, the acquisition server application monitors the drifting of the acquisition process and
|
||||
// corrects this drift upon demand. It is up to the driver to require this correction and it can be chosen not
|
||||
// to fit the 0 drift, but to fit an arbitrary fixed drift instead.
|
||||
//
|
||||
// The offset for this correction is stored in the m_nDriftOffsetSample variable
|
||||
|
||||
/* ---------------------------------------------------------------------------------------------------------------
|
||||
from scipy import signal
|
||||
N=500
|
||||
signal.firwin(N, cutoff=2048./(0.5*5000.), window='hamming').tofile("c:/openvibe/f64_5k_4096.bin")
|
||||
signal.firwin(N, cutoff=1024./(0.5*5000.), window='hamming').tofile("c:/openvibe/f64_5k_2048.bin")
|
||||
signal.firwin(N, cutoff= 512./(0.5*5000.), window='hamming').tofile("c:/openvibe/f64_5k_1024.bin")
|
||||
signal.firwin(N, cutoff= 256./(0.5*5000.), window='hamming').tofile("c:/openvibe/f64_5k_512.bin")
|
||||
signal.firwin(N, cutoff= 128./(0.5*5000.), window='hamming').tofile("c:/openvibe/f64_5k_256.bin")
|
||||
signal.firwin(N, cutoff= 64./(0.5*5000.), window='hamming').tofile("c:/openvibe/f64_5k_128.bin")
|
||||
|
||||
N=1000
|
||||
signal.firwin(N, cutoff=2048./(0.5*10000.), window='hamming').tofile("c:/openvibe/f64_10k_4096.bin")
|
||||
signal.firwin(N, cutoff=1024./(0.5*10000.), window='hamming').tofile("c:/openvibe/f64_10k_2048.bin")
|
||||
signal.firwin(N, cutoff= 512./(0.5*10000.), window='hamming').tofile("c:/openvibe/f64_10k_1024.bin")
|
||||
signal.firwin(N, cutoff= 256./(0.5*10000.), window='hamming').tofile("c:/openvibe/f64_10k_512.bin")
|
||||
signal.firwin(N, cutoff= 128./(0.5*10000.), window='hamming').tofile("c:/openvibe/f64_10k_256.bin")
|
||||
signal.firwin(N, cutoff= 64./(0.5*10000.), window='hamming').tofile("c:/openvibe/f64_10k_128.bin")
|
||||
|
||||
N=2500
|
||||
signal.firwin(N, cutoff=2048./(0.5*25000.), window='hamming').tofile("c:/openvibe/f64_25k_4096.bin")
|
||||
signal.firwin(N, cutoff=1024./(0.5*25000.), window='hamming').tofile("c:/openvibe/f64_25k_2048.bin")
|
||||
signal.firwin(N, cutoff= 512./(0.5*25000.), window='hamming').tofile("c:/openvibe/f64_25k_1024.bin")
|
||||
signal.firwin(N, cutoff= 256./(0.5*25000.), window='hamming').tofile("c:/openvibe/f64_25k_512.bin")
|
||||
signal.firwin(N, cutoff= 128./(0.5*25000.), window='hamming').tofile("c:/openvibe/f64_25k_256.bin")
|
||||
signal.firwin(N, cutoff= 64./(0.5*25000.), window='hamming').tofile("c:/openvibe/f64_25k_128.bin")
|
||||
|
||||
N=5000
|
||||
signal.firwin(N, cutoff=2048./(0.5*50000.), window='hamming').tofile("c:/openvibe/f64_50k_4096.bin")
|
||||
signal.firwin(N, cutoff=1024./(0.5*50000.), window='hamming').tofile("c:/openvibe/f64_50k_2048.bin")
|
||||
signal.firwin(N, cutoff= 512./(0.5*50000.), window='hamming').tofile("c:/openvibe/f64_50k_1024.bin")
|
||||
signal.firwin(N, cutoff= 256./(0.5*50000.), window='hamming').tofile("c:/openvibe/f64_50k_512.bin")
|
||||
signal.firwin(N, cutoff= 128./(0.5*50000.), window='hamming').tofile("c:/openvibe/f64_50k_256.bin")
|
||||
signal.firwin(N, cutoff= 64./(0.5*50000.), window='hamming').tofile("c:/openvibe/f64_50k_128.bin")
|
||||
|
||||
N=10000
|
||||
signal.firwin(N, cutoff=2048./(0.5*100000.), window='hamming').tofile("c:/openvibe/f64_100k_4096.bin")
|
||||
signal.firwin(N, cutoff=1024./(0.5*100000.), window='hamming').tofile("c:/openvibe/f64_100k_2048.bin")
|
||||
signal.firwin(N, cutoff= 512./(0.5*100000.), window='hamming').tofile("c:/openvibe/f64_100k_1024.bin")
|
||||
signal.firwin(N, cutoff= 256./(0.5*100000.), window='hamming').tofile("c:/openvibe/f64_100k_512.bin")
|
||||
signal.firwin(N, cutoff= 128./(0.5*100000.), window='hamming').tofile("c:/openvibe/f64_100k_256.bin")
|
||||
signal.firwin(N, cutoff= 64./(0.5*100000.), window='hamming').tofile("c:/openvibe/f64_100k_128.bin")
|
||||
--------------------------------------------------------------------------------------------------------------- */
|
||||
|
||||
bool loadFilter(const char* filename, std::vector<double>& vFilter)
|
||||
{
|
||||
FILE* file = fopen(filename, "rb");
|
||||
if (!file)
|
||||
{
|
||||
vFilter.clear();
|
||||
vFilter.push_back(1);
|
||||
return false;
|
||||
}
|
||||
fseek(file, 0, SEEK_END);
|
||||
const size_t len = ftell(file);
|
||||
fseek(file, 0, SEEK_SET);
|
||||
vFilter.resize(len / sizeof(double));
|
||||
fread(&vFilter[0], len, 1, file);
|
||||
fclose(file);
|
||||
return true;
|
||||
}
|
||||
} // namespace
|
||||
|
||||
CDriverBrainProductsActiCHamp::CDriverBrainProductsActiCHamp(IDriverContext& ctx)
|
||||
: IDriver(ctx), m_mode(CHAMP_MODE_ACTIVE_SHIELD), m_adcDataDecimation(CHAMP_DECIMATION_2)
|
||||
, m_activeShieldGain(5) // default value from pyCorder = 5/100
|
||||
, m_moduleEnabled(0xffffffff)
|
||||
{
|
||||
t_champVersion version;
|
||||
champGetVersion(nullptr, &version);
|
||||
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Got actiCHamp version (Dll:" << size_t(version.Dll) << ")\n";
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Number of attached devices : " << size_t(champGetCount()) << "\n";
|
||||
|
||||
m_header.setSamplingFrequency(512);
|
||||
m_header.setChannelCount(32);
|
||||
}
|
||||
|
||||
//___________________________________________________________________//
|
||||
// //
|
||||
|
||||
bool CDriverBrainProductsActiCHamp::initialize(const uint32_t /*nSamplePerSentBlock*/, IDriverCallback& callback)
|
||||
{
|
||||
if (m_driverCtx.isConnected()) { return false; }
|
||||
|
||||
// Opens device
|
||||
// We change the working directory to be sure to have ActiChamp.bit in it
|
||||
if (!SetCurrentDirectory(Directories::getBinDir()))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Can not change current working directory!" << m_deviceID << "\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
int count = 0;
|
||||
while (count++ < 5)
|
||||
{
|
||||
m_handle = champOpen(m_deviceID);
|
||||
if (m_handle == nullptr)
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Failed to open the device, retrying (" << count << ")" << "\n";
|
||||
System::Time::sleep(500);
|
||||
}
|
||||
else { break; }
|
||||
}
|
||||
|
||||
if (m_handle == nullptr)
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Can not open actiCHamp device id " << m_deviceID << "\n";
|
||||
return false;
|
||||
}
|
||||
// set back to previous working directory
|
||||
if (!SetCurrentDirectory(Directories::getDistRootDir()))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Can not change current working directory!" << m_deviceID << "\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
// Gets versions
|
||||
t_champVersion version;
|
||||
champGetVersion(m_handle, &version);
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Got actiCHamp version (Dll:" << size_t(version.Dll) << ", Driver:" <<
|
||||
size_t(version.Driver) << ", Cypress:" << size_t(version.Cypress) << ", Fpga:" << size_t(version.Fpga) << ", Msp430:" <<
|
||||
size_t(version.Msp430) << ")\n";
|
||||
|
||||
// Gets battery voltages
|
||||
t_champVoltages voltage;
|
||||
if (champGetVoltages(m_handle, &voltage))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Could not get voltages - Got error [" << getError() << "]\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
int state = 0;
|
||||
if (voltage.VDC < 5.5) { state = 1; }
|
||||
if (voltage.VDC < 5.2) { state = 2; }
|
||||
switch (state)
|
||||
{
|
||||
case 0: m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Battery level is fine (" << float(voltage.VDC) << ")\n";
|
||||
break;
|
||||
case 1: m_driverCtx.getLogManager() << Kernel::LogLevel_Warning << "Battery level is critical (" << float(voltage.VDC) << ")\n";
|
||||
break;
|
||||
case 2: m_driverCtx.getLogManager() << Kernel::LogLevel_ImportantWarning << "Battery level is bad (" << float(voltage.VDC) << ")\n";
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
// Gets and sets modules status
|
||||
t_champModules modules;
|
||||
champGetModules(m_handle, &modules);
|
||||
modules.Enabled = m_moduleEnabled;
|
||||
champSetModules(m_handle, &modules);
|
||||
champGetModules(m_handle, &modules);
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Got modules status : Present=" << modules.Present << " / Enabled=" << modules.Enabled << "\n";
|
||||
|
||||
// Active shield
|
||||
if (champSetActiveShieldGain(m_handle, m_activeShieldGain))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Could not set active shield gain - Got error [" << getError() << "]\n";
|
||||
champClose(m_handle);
|
||||
m_handle = nullptr;
|
||||
return false;
|
||||
}
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Active Shield Gain set to [" << m_activeShieldGain << "]\n";
|
||||
|
||||
// Sets settings to acquisition state
|
||||
t_champSettingsEx oSettings;
|
||||
oSettings.Mode = t_champMode(m_mode);
|
||||
oSettings.Rate = t_champRate(m_physicalSampling);
|
||||
oSettings.AdcFilter = t_champAdcFilter(m_adcDataFilter);
|
||||
oSettings.Decimation = t_champDecimation(m_adcDataDecimation);
|
||||
if (champSetSettingsEx(m_handle, &oSettings))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Could not set settings - Got error [" << getError() << "]\n";
|
||||
return false;
|
||||
}
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Acquisition Settings set to [Mode: " << m_mode << "] [PhysicalSamplingRate: " <<
|
||||
m_physicalSampling << "] [ADCDataFilter: " << m_adcDataFilter << "] [ADCDataDecimation: " << m_adcDataDecimation << "]\n";
|
||||
|
||||
// Gets properties
|
||||
t_champProperty properties;
|
||||
if (champGetProperty(m_handle, &properties))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Could not get properties - Got error [" << getError() << "]\n";
|
||||
champClose(m_handle);
|
||||
m_handle = nullptr;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Sets channel count
|
||||
// as the modules were set before according to the configuration, the property structure
|
||||
// contains the right number of channels.
|
||||
m_nEEG = properties.CountEeg;
|
||||
m_nAux = (m_useAuxChannels ? properties.CountAux : 0);
|
||||
m_nChannel = m_nEEG + m_nAux;
|
||||
if (m_nChannel == 0)
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "No channels were selected [EEG: " << m_nEEG << "] [AUX: " << m_nAux <<
|
||||
"]. Close device.\n";
|
||||
champClose(m_handle);
|
||||
m_handle = nullptr;
|
||||
return false;
|
||||
}
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Channel counts are [EEG: " << m_nEEG << "] [AUX: " << m_nAux << "]\n";
|
||||
|
||||
m_header.setChannelCount(m_nChannel);
|
||||
|
||||
m_impedances.resize(m_nEEG + 1);
|
||||
m_samples.resize(m_nChannel);
|
||||
m_resolutions.resize(m_nChannel);
|
||||
|
||||
m_physicalSamplingHz = uint32_t(properties.Rate);
|
||||
m_counterStep = (uint64_t(m_header.getSamplingFrequency()) << 32) / uint64_t(m_physicalSamplingHz);
|
||||
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Sampling rate in Hz [Physical: " << m_physicalSamplingHz << "] [Driver: " << m_header.
|
||||
getSamplingFrequency() << "]\n";
|
||||
|
||||
size_t j = 0;
|
||||
for (size_t i = 0; i < m_nEEG; i++, j++) { m_resolutions[j] = properties.ResolutionEeg * 1E6f; } // converts to µV
|
||||
for (size_t i = 0; i < m_nAux; i++, j++) { m_resolutions[j] = properties.ResolutionAux * 1E6f; } // converts to µV
|
||||
|
||||
//@TODO ue of i & j are normals ?
|
||||
j = 0;
|
||||
for (size_t i = 0; i < m_nEEG; i++, j++) { m_header.setChannelUnits(i, OVTK_UNIT_Volts, OVTK_FACTOR_Micro); }
|
||||
for (size_t i = 0; i < m_nAux; i++, j++) { m_header.setChannelUnits(i, OVTK_UNIT_Volts, OVTK_FACTOR_Micro); } // converts to µV
|
||||
|
||||
// Sets data pointers
|
||||
// the amplifier model is depending on the number of channels, always including AUX
|
||||
switch ((m_useAuxChannels ? m_nChannel : m_nChannel + 8))
|
||||
{
|
||||
case 8: m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Data Model is [AUX]\n";
|
||||
m_pAux = Buffer[0].ModelAux.Aux;
|
||||
m_eeg = nullptr; // Buffer[0].ModelAux.Main;
|
||||
m_triggers = &Buffer[0].ModelAux.Triggers;
|
||||
m_size = sizeof(Buffer[0].ModelAux);
|
||||
break;
|
||||
|
||||
case 32 + 8: m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Data Model is [Model32]\n";
|
||||
m_pAux = Buffer[0].Model32.Aux;
|
||||
m_eeg = Buffer[0].Model32.Main;
|
||||
m_triggers = &Buffer[0].Model32.Triggers;
|
||||
m_size = sizeof(Buffer[0].Model32);
|
||||
break;
|
||||
|
||||
case 64 + 8: m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Data Model is [Model64]\n";
|
||||
m_pAux = Buffer[0].Model64.Aux;
|
||||
m_eeg = Buffer[0].Model64.Main;
|
||||
m_triggers = &Buffer[0].Model64.Triggers;
|
||||
m_size = sizeof(Buffer[0].Model64);
|
||||
break;
|
||||
|
||||
case 96 + 8: m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Data Model is [Model96]\n";
|
||||
m_pAux = Buffer[0].Model96.Aux;
|
||||
m_eeg = Buffer[0].Model96.Main;
|
||||
m_triggers = &Buffer[0].Model96.Triggers;
|
||||
m_size = sizeof(Buffer[0].Model96);
|
||||
break;
|
||||
|
||||
case 128 + 8: m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Data Model is [Model128]\n";
|
||||
m_pAux = Buffer[0].Model128.Aux;
|
||||
m_eeg = Buffer[0].Model128.Main;
|
||||
m_triggers = &Buffer[0].Model128.Triggers;
|
||||
m_size = sizeof(Buffer[0].Model128);
|
||||
break;
|
||||
|
||||
case 160 + 8: m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Data Model is [Model160]\n";
|
||||
m_pAux = Buffer[0].Model160.Aux;
|
||||
m_eeg = Buffer[0].Model160.Main;
|
||||
m_triggers = &Buffer[0].Model160.Triggers;
|
||||
m_size = sizeof(Buffer[0].Model160);
|
||||
break;
|
||||
|
||||
default: m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Data Model unknown.\n";
|
||||
m_pAux = nullptr;
|
||||
m_eeg = nullptr;
|
||||
m_triggers = nullptr;
|
||||
m_size = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (m_size == 0)
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Unknown device model " << m_nEEG << " EEG channels / " << m_nAux <<
|
||||
" Auxiliary channels\n";
|
||||
champClose(m_handle);
|
||||
m_handle = nullptr;
|
||||
return false;
|
||||
}
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Device model " << m_nEEG << " EEG channels / " << m_nAux << " Auxiliary channels\n";
|
||||
|
||||
// Prepares low pass filter
|
||||
|
||||
#define __set_filter__(f,f_decim) \
|
||||
if(m_adcDataDecimation == CHAMP_DECIMATION_0) \
|
||||
{ \
|
||||
if(!loadFilter(Directories::getDataDir() + "/applications/acquisition-server/filters/" f ".bin", m_filters)) { m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Failed to load filter !\n"; } \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
if(!loadFilter(Directories::getDataDir() + "/applications/acquisition-server/filters/" f_decim ".bin", m_filters)) { m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Failed to load filter !\n"; } \
|
||||
}\
|
||||
valid = true;
|
||||
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Setting up the FIR filter for signal decimation (physical rate > driver rate).\n";
|
||||
|
||||
bool valid = false;
|
||||
switch (m_header.getSamplingFrequency())
|
||||
{
|
||||
case 128: switch (m_physicalSampling)
|
||||
{
|
||||
case CHAMP_RATE_10KHZ: __set_filter__("f64_10k_128", "f64_5k_128");
|
||||
break;
|
||||
case CHAMP_RATE_50KHZ: __set_filter__("f64_50k_128", "f64_25k_128");
|
||||
break;
|
||||
case CHAMP_RATE_100KHZ: __set_filter__("f64_100k_128", "f64_50k_128");
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 256: switch (m_physicalSampling)
|
||||
{
|
||||
case CHAMP_RATE_10KHZ: __set_filter__("f64_10k_256", "f64_5k_256");
|
||||
break;
|
||||
case CHAMP_RATE_50KHZ: __set_filter__("f64_50k_256", "f64_25k_256");
|
||||
break;
|
||||
case CHAMP_RATE_100KHZ: __set_filter__("f64_100k_256", "f64_50k_256");
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 512: switch (m_physicalSampling)
|
||||
{
|
||||
case CHAMP_RATE_10KHZ: __set_filter__("f64_10k_512", "f64_5k_512");
|
||||
break;
|
||||
case CHAMP_RATE_50KHZ: __set_filter__("f64_50k_512", "f64_25k_512");
|
||||
break;
|
||||
case CHAMP_RATE_100KHZ: __set_filter__("f64_100k_512", "f64_50k_512");
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 1024: switch (m_physicalSampling)
|
||||
{
|
||||
case CHAMP_RATE_10KHZ: __set_filter__("f64_10k_1024", "f64_5k_1024");
|
||||
break;
|
||||
case CHAMP_RATE_50KHZ: __set_filter__("f64_50k_1024", "f64_25k_1024");
|
||||
break;
|
||||
case CHAMP_RATE_100KHZ: __set_filter__("f64_100k_1024", "f64_50k_1024");
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 2048: switch (m_physicalSampling)
|
||||
{
|
||||
case CHAMP_RATE_10KHZ: __set_filter__("f64_10k_2048", "f64_5k_2048");
|
||||
break;
|
||||
case CHAMP_RATE_50KHZ: __set_filter__("f64_50k_2048", "f64_25k_2048");
|
||||
break;
|
||||
case CHAMP_RATE_100KHZ: __set_filter__("f64_100k_2048", "f64_50k_2048");
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 4096: switch (m_physicalSampling)
|
||||
{
|
||||
case CHAMP_RATE_10KHZ: __set_filter__("f64_10k_4096", "f64_5k_4096");
|
||||
break;
|
||||
case CHAMP_RATE_50KHZ: __set_filter__("f64_50k_4096", "f64_25k_4096");
|
||||
break;
|
||||
case CHAMP_RATE_100KHZ: __set_filter__("f64_100k_4096", "f64_50k_4096");
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
break;
|
||||
|
||||
default: break;
|
||||
}
|
||||
|
||||
#if 0
|
||||
__set_filter__("f64_none");
|
||||
__set_filter__("f64_10k_12");
|
||||
__set_filter__("f64_10k_256");
|
||||
#endif
|
||||
|
||||
#undef __set_filter__
|
||||
|
||||
if (!valid)
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Unhandled soft sampling frequency / physical sampling frequency configuration [" << m_header.
|
||||
getSamplingFrequency() << ", " << m_physicalSampling << "]\n";
|
||||
champClose(m_handle);
|
||||
m_handle = nullptr;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Prepares cache for filtering
|
||||
m_sampleCaches.clear();
|
||||
for (size_t i = 0; i < m_filters.size(); ++i) { m_sampleCaches.push_back(m_samples); }
|
||||
|
||||
m_callback = &callback;
|
||||
m_counter = 0;
|
||||
|
||||
// Setting the inner latency as described in the beginning of the file
|
||||
m_nDriftOffsetSample = int64_t(m_header.getSamplingFrequency() * 50) / 1000;
|
||||
m_driverCtx.setInnerLatencySampleCount(-m_nDriftOffsetSample);
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Driver inner latency set to 50ms to compensate FIR filtering.\n";
|
||||
|
||||
if (m_driverCtx.isImpedanceCheckRequested())
|
||||
{
|
||||
// Sets settings manually for impedance check
|
||||
t_champSettingsEx settings;
|
||||
settings.Mode = CHAMP_MODE_IMPEDANCE;
|
||||
settings.Rate = CHAMP_RATE_10KHZ;
|
||||
settings.AdcFilter = CHAMP_ADC_NATIVE;
|
||||
settings.Decimation = CHAMP_DECIMATION_0;
|
||||
if (champSetSettingsEx(m_handle, &settings))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Could not set settings - Got error [" << getError() << "]\n";
|
||||
champClose(m_handle);
|
||||
m_handle = nullptr;
|
||||
return false;
|
||||
}
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Impedance check is requested. Setting the acquisition to [CHAMP_MODE_IMPEDANCE].\n";
|
||||
|
||||
// Sets impedance setup manually
|
||||
t_champImpedanceSetup setup;
|
||||
setup.Good = m_goodImpedanceLimit;// 5000; // 5kOhm
|
||||
setup.Bad = m_badImpedanceLimit; //10000; // 10kOhm
|
||||
setup.LedsDisable = 0;
|
||||
setup.TimeOut = 5;
|
||||
if (champImpedanceSetSetup(m_handle, &setup))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Could not set impedance setup - Got error [" << getError() << "]\n";
|
||||
champClose(m_handle);
|
||||
m_handle = nullptr;
|
||||
return false;
|
||||
}
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Impedance limits are set to [GREEN < " << m_goodImpedanceLimit << "Ohm < YELLOW < " <<
|
||||
m_badImpedanceLimit << "Ohm < RED].\n";
|
||||
|
||||
// Gets/Sets impedance mode
|
||||
t_champImpedanceMode mode;
|
||||
if (champImpedanceGetMode(m_handle, &mode))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Could not get impedance mode - Got error [" << getError() << "]\n";
|
||||
champClose(m_handle);
|
||||
m_handle = nullptr;
|
||||
return false;
|
||||
}
|
||||
|
||||
mode.Splitter = mode.Splitters;
|
||||
if (champImpedanceSetMode(m_handle, &mode))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Could not set impedance mode - Got error [" << getError() << "]\n";
|
||||
champClose(m_handle);
|
||||
m_handle = nullptr;
|
||||
return false;
|
||||
}
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Impedance splitters set to [" << size_t(mode.Splitters) << "]\n";
|
||||
|
||||
// Starts impedance check
|
||||
if (champStart(m_handle))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Can not start device id " << m_deviceID << " - Got error [" << getError() << "]\n";
|
||||
champClose(m_handle);
|
||||
m_handle = nullptr;
|
||||
return false;
|
||||
}
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Impedance check started...\n";
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CDriverBrainProductsActiCHamp::start()
|
||||
{
|
||||
if (!m_driverCtx.isConnected() || m_driverCtx.isStarted()) { return false; }
|
||||
|
||||
if (m_driverCtx.isImpedanceCheckRequested()) { champStop(m_handle); }
|
||||
|
||||
// Sets settings to acquisition state
|
||||
t_champSettingsEx settings;
|
||||
settings.Mode = t_champMode(m_mode);
|
||||
settings.Rate = t_champRate(m_physicalSampling);
|
||||
settings.AdcFilter = t_champAdcFilter(m_adcDataFilter);
|
||||
settings.Decimation = t_champDecimation(m_adcDataDecimation);
|
||||
if (champSetSettingsEx(m_handle, &settings))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Could not set settings - Got error [" << getError() << "]\n";
|
||||
return false;
|
||||
}
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Acquisition Settings set to [Mode: " << m_mode << "] [PhysicalSamplingRate: " <<
|
||||
m_physicalSampling << "] [ADCDataFilter: " << m_adcDataFilter << "] [ADCDataDecimation: " << m_adcDataDecimation << "]\n";
|
||||
|
||||
// Starts acquisition
|
||||
if (champStart(m_handle))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Can not start device id " << m_deviceID << " - Got error [" << getError() << "]\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Acquisition started...\n";
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CDriverBrainProductsActiCHamp::loop()
|
||||
{
|
||||
if (!m_driverCtx.isConnected()) { return false; }
|
||||
|
||||
if (m_driverCtx.isStarted())
|
||||
{
|
||||
t_champDataStatus dataStatus;
|
||||
champGetDataStatus(m_handle, &dataStatus);
|
||||
//m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Status : Samples:" << size_t(l_oDataStatus.Samples) << " Errors:" << size_t(l_oDataStatus.Errors) << " Rate:" << float(l_oDataStatus.Rate) << " Speed:" << float(l_oDataStatus.Speed) << "\n";
|
||||
|
||||
// Reads all the data.
|
||||
// Buffers are aligned : with one call to champGetData we get as much buffers as possible
|
||||
int code;
|
||||
while ((code = champGetData(m_handle, &Buffer[0], m_size * NB_MAX_BUFFER_IN_CACHE)) > 0)
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Debug << "Received " << float(code) / m_size << " new buffers with champGetData.\n";
|
||||
|
||||
for (int buf = 0; buf < int(code / m_size); ++buf)
|
||||
{
|
||||
uint32_t i, j = 0;
|
||||
|
||||
// we find the good pointers (m_eeg and m_pAux being on the first buffer)
|
||||
// Size of an union in memory is the size of the biggest possible type
|
||||
signed int* aux = m_pAux + buf * (m_size / sizeof(signed int));
|
||||
signed int* eeg = m_eeg + buf * (m_size / sizeof(signed int));
|
||||
// m_driverCtx.getLogManager() << Kernel::LogLevel_Debug << "AUX ptr = " << (uint32_t)l_pAux << " EEG ptr = "<< (uint32_t)l_pEEG <<"\n";
|
||||
|
||||
// Scales data according to respective resolution
|
||||
for (i = 0; i < m_nEEG; i++, j++) { m_samples[j] = m_resolutions[j] * float(eeg[i]); }
|
||||
if (m_useAuxChannels) { for (i = 0; i < m_nAux; i++, j++) { m_samples[j] = m_resolutions[j] * float(aux[i]); } }
|
||||
//m_driverCtx.getLogManager() << Kernel::LogLevel_Debug << "Samples saved in cache.\n";
|
||||
|
||||
// Updates cache
|
||||
//m_sampleCaches.erase(m_sampleCaches.begin());
|
||||
m_sampleCaches.pop_front();
|
||||
m_sampleCaches.push_back(m_samples);
|
||||
m_nSample++;
|
||||
|
||||
// Downsamples and sends samples only when relevant
|
||||
m_counter += m_counterStep;
|
||||
if (m_counter >= (1LL << 32))
|
||||
{
|
||||
//m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Enough samples received to build a new buffer. Applying FIR filter.\n";
|
||||
m_counter -= (1LL << 32);
|
||||
|
||||
// Filters last samples
|
||||
for (i = 0; i < m_samples.size(); ++i)
|
||||
{
|
||||
m_samples[i] = 0;
|
||||
auto it = m_sampleCaches.begin();
|
||||
for (j = 0; j < m_filters.size(); ++j)
|
||||
{
|
||||
//m_samples[i]+=m_filters[j]*m_sampleCaches[j][i];
|
||||
m_samples[i] += float(m_filters[j] * (*it)[i]);
|
||||
++it;
|
||||
}
|
||||
}
|
||||
|
||||
//m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Samples ready for sending.\n";
|
||||
m_callback->setSamples(&m_samples[0], 1);
|
||||
m_callback->setStimulationSet(m_stimSet);
|
||||
m_stimSet.clear();
|
||||
|
||||
// Saves the date of this sample for further use with the triggers
|
||||
m_lastSampleDate += uint64_t((1LL << 32) / m_header.getSamplingFrequency());
|
||||
m_nSample = 0;
|
||||
//m_driverCtx.getLogManager() << Kernel::LogLevel_Debug << "Sending one sample.\n";
|
||||
}
|
||||
|
||||
//m_driverCtx.getLogManager() << Kernel::LogLevel_Debug << "Getting trigger...\n";
|
||||
|
||||
// we save the MyButton state and detect if it switched
|
||||
bool bSwitch = m_bMyButtonstate;
|
||||
uint32_t* trigger = m_triggers + buf * (m_size / sizeof(uint32_t));
|
||||
m_bMyButtonstate = ((*trigger & 0x80000000) >> 31) == 1;
|
||||
bSwitch = (bSwitch ? !m_bMyButtonstate : m_bMyButtonstate);
|
||||
|
||||
// Decomposes the trigger bytes:
|
||||
// Digital inputs (bits 0 - 7) + output (bits 8 - 15) state + 15 MSB reserved bits + MyButton bit (bit 31)
|
||||
// apply a mask to silence any modification on the output and reserved parts
|
||||
(*trigger) &= 0x800000ff;
|
||||
|
||||
// Now we can test for modification on the interesting part (input triggers and MyButton)
|
||||
if (*trigger != m_uiLastTriggers)
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Current input triggers state [";
|
||||
m_driverCtx.getLogManager() << ((*trigger & 0x00000001)) << " ";
|
||||
m_driverCtx.getLogManager() << ((*trigger & 0x00000002) >> 1) << " ";
|
||||
m_driverCtx.getLogManager() << ((*trigger & 0x00000004) >> 2) << " ";
|
||||
m_driverCtx.getLogManager() << ((*trigger & 0x00000008) >> 3) << " ";
|
||||
m_driverCtx.getLogManager() << ((*trigger & 0x00000010) >> 4) << " ";
|
||||
m_driverCtx.getLogManager() << ((*trigger & 0x00000020) >> 5) << " ";
|
||||
m_driverCtx.getLogManager() << ((*trigger & 0x00000040) >> 6) << " ";
|
||||
m_driverCtx.getLogManager() << ((*trigger & 0x00000080) >> 7) << "] MyButton [";
|
||||
m_driverCtx.getLogManager() << m_bMyButtonstate << "]\n";
|
||||
|
||||
// Every time that a trigger has changed, we send a stimulation.
|
||||
// code of stimulation = OVTK_StimulationId_LabelStart + value of the trigger bytes.
|
||||
// This supposes that the user knows the structure of the triggers bit by bit and can process it in a Lua box for example.
|
||||
// The value received is in [0-255]
|
||||
// The MyButton bit is set to 0 to ensure this range.
|
||||
|
||||
// The date is relative to the last buffer start time (cf the setSamples before setStimulationSet)
|
||||
const uint64_t date = m_nSample * (1LL << 32) / m_physicalSamplingHz;
|
||||
m_stimSet.appendStimulation(OVTK_StimulationId_Label((*trigger)&0x000000ff), date, 0);
|
||||
|
||||
// special case : MyButton
|
||||
// The MyButton trigger bit is too far in the trigger bytes to have a valid value
|
||||
// We use 2 dedicated stims OVTK_StimulationId_Button1_Pressed and OVTK_StimulationId_Button1_Released
|
||||
if (bSwitch)
|
||||
{
|
||||
m_stimSet.appendStimulation((m_bMyButtonstate ? OVTK_StimulationId_Button1_Pressed : OVTK_StimulationId_Button1_Released), date, 0);
|
||||
}
|
||||
}
|
||||
m_uiLastTriggers = *trigger;
|
||||
}
|
||||
}
|
||||
if (code < 0)
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "An error occured with last sample request - Got error [" << code << "]\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
// As described in at the beginning of this file, the drift
|
||||
// correction process is altered to consider the ~ 50ms delay
|
||||
// of the single way filtering process
|
||||
// Inner latency was set accordingly.
|
||||
m_driverCtx.correctDriftSampleCount(m_driverCtx.getSuggestedDriftCorrectionSampleCount());
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_driverCtx.isImpedanceCheckRequested())
|
||||
{
|
||||
// Reads impedances
|
||||
if (champImpedanceGetData(m_handle, &m_impedances[0], m_impedances.size() * sizeof(uint32_t)))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Warning << "Can not read impedances on device id " << m_deviceID << " - Got error [" <<
|
||||
getError() << "]\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
// Updates impedances
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Debug << "Impedances are [ ";
|
||||
for (size_t j = 0; j < m_nEEG; ++j)
|
||||
{
|
||||
m_driverCtx.updateImpedance(j, m_impedances[j]);
|
||||
m_driverCtx.getLogManager() << m_impedances[j] << " ";
|
||||
}
|
||||
m_driverCtx.getLogManager() << "\n";
|
||||
|
||||
// Drops data
|
||||
while ((champGetData(m_handle, &Buffer, m_size * NB_MAX_BUFFER_IN_CACHE)) > 0) { }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CDriverBrainProductsActiCHamp::stop()
|
||||
{
|
||||
if (!m_driverCtx.isConnected() || !m_driverCtx.isStarted()) { return false; }
|
||||
if (!m_driverCtx.isImpedanceCheckRequested()) { champStop(m_handle); }
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CDriverBrainProductsActiCHamp::uninitialize()
|
||||
{
|
||||
if (!m_driverCtx.isConnected() || m_driverCtx.isStarted()) { return false; }
|
||||
if (m_driverCtx.isImpedanceCheckRequested()) { champStop(m_handle); }
|
||||
|
||||
champClose(m_handle);
|
||||
m_handle = nullptr;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//___________________________________________________________________//
|
||||
// //
|
||||
|
||||
bool CDriverBrainProductsActiCHamp::configure()
|
||||
{
|
||||
CConfigurationBrainProductsActiCHamp config(Directories::getDataDir() + "/applications/acquisition-server/interface-BrainProducts-ActiCHamp.ui", m_deviceID,
|
||||
m_mode, m_physicalSampling, m_adcDataFilter, m_adcDataDecimation, m_activeShieldGain, m_moduleEnabled,
|
||||
m_useAuxChannels, m_goodImpedanceLimit, m_badImpedanceLimit);
|
||||
return config.configure(m_header);
|
||||
}
|
||||
|
||||
//___________________________________________________________________//
|
||||
// //
|
||||
|
||||
CString CDriverBrainProductsActiCHamp::getError(int* code) const
|
||||
{
|
||||
int iCode = 0;
|
||||
int* pCode = (code ? code : &iCode);
|
||||
if (!m_handle) { return ""; }
|
||||
char buffer[1024];
|
||||
buffer[0] = '\0';
|
||||
champGetError(m_handle, pCode, buffer, sizeof(buffer));
|
||||
return buffer;
|
||||
}
|
||||
|
||||
} // namespace AcquisitionServer
|
||||
} // namespace OpenViBE
|
||||
|
||||
#endif // TARGET_HAS_ThirdPartyActiCHampAPI
|
||||
+99
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
* ovasCDriverBrainProductsActiCHamp.h
|
||||
*
|
||||
* Copyright (c) 2012, Mensia Technologies SA. All rights reserved.
|
||||
* -- Rights transferred to Inria, contract signed 21.11.2014
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#if defined TARGET_HAS_ThirdPartyActiCHampAPI
|
||||
|
||||
#include "ovasIDriver.h"
|
||||
#include "../ovasCHeader.h"
|
||||
|
||||
#include <deque>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace AcquisitionServer {
|
||||
/**
|
||||
* \class CDriverBrainProductsActiCHamp
|
||||
* \author Mensia Technologies
|
||||
*/
|
||||
class CDriverBrainProductsActiCHamp final : public IDriver
|
||||
{
|
||||
public:
|
||||
|
||||
explicit CDriverBrainProductsActiCHamp(IDriverContext& ctx);
|
||||
void release() { delete this; }
|
||||
const char* getName() override { return "Brain Products actiCHamp"; }
|
||||
|
||||
bool initialize(const uint32_t nSamplePerSentBlock, IDriverCallback& callback) override;
|
||||
bool uninitialize() override;
|
||||
|
||||
bool start() override;
|
||||
bool stop() override;
|
||||
bool loop() override;
|
||||
|
||||
bool isConfigurable() override { return true; }
|
||||
bool configure() override;
|
||||
const IHeader* getHeader() override { return &m_header; }
|
||||
|
||||
CString getError(int* code = nullptr) const;
|
||||
|
||||
protected:
|
||||
|
||||
void* m_handle = nullptr;
|
||||
|
||||
IDriverCallback* m_callback = nullptr;
|
||||
CHeader m_header;
|
||||
|
||||
std::vector<uint32_t> m_impedances;
|
||||
std::vector<float> m_samples;
|
||||
std::vector<float> m_resolutions;
|
||||
//std::vector < std::vector < float > > m_sampleCaches;
|
||||
std::deque<std::vector<float>> m_sampleCaches;
|
||||
uint32_t m_sampleCacheIdx = 0;
|
||||
std::vector<double> m_filters;
|
||||
|
||||
CStimulationSet m_stimSet;
|
||||
|
||||
uint32_t m_deviceID = 0;
|
||||
uint32_t m_mode = 0;
|
||||
uint32_t m_physicalSampling = 0;
|
||||
uint32_t m_adcDataFilter = 0;
|
||||
uint32_t m_adcDataDecimation = 0;
|
||||
uint32_t m_activeShieldGain = 0;
|
||||
uint32_t m_moduleEnabled = 0;
|
||||
bool m_useAuxChannels = false;
|
||||
|
||||
uint32_t m_physicalSamplingHz = 0;
|
||||
|
||||
uint32_t m_nChannel = 0;
|
||||
uint32_t m_nEEG = 0;
|
||||
uint32_t m_nAux = 0;
|
||||
uint32_t m_nTriggersIn = 0;
|
||||
|
||||
uint64_t m_counter = 0;
|
||||
uint64_t m_counterStep = 0;
|
||||
uint64_t m_nSample = 0;
|
||||
int64_t m_nDriftOffsetSample = 0;
|
||||
|
||||
uint32_t m_goodImpedanceLimit = 5000;
|
||||
uint32_t m_badImpedanceLimit = 10000;
|
||||
|
||||
signed int* m_pAux = nullptr;
|
||||
signed int* m_eeg = nullptr;
|
||||
uint32_t* m_triggers = nullptr;
|
||||
uint32_t m_size = 0;
|
||||
|
||||
uint32_t m_uiLastTriggers = 0;
|
||||
uint64_t m_lastSampleDate = 0;
|
||||
|
||||
bool m_bMyButtonstate = false;
|
||||
};
|
||||
} // namespace AcquisitionServer
|
||||
} // namespace OpenViBE
|
||||
|
||||
#endif // TARGET_HAS_ThirdPartyActiCHampAPI
|
||||
+299
@@ -0,0 +1,299 @@
|
||||
/*
|
||||
* Brain Products Brainamp Series driver for OpenViBE
|
||||
* Copyright (C) 2010 INRIA - Author : Yann Renard
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include "ovasCConfigurationBrainProductsBrainampSeries.h"
|
||||
|
||||
#include "ovasIHeader.h"
|
||||
|
||||
#if defined TARGET_OS_Windows
|
||||
|
||||
#include "ovasCDriverBrainProductsBrainampSeries.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <windows.h>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace AcquisitionServer {
|
||||
|
||||
|
||||
static EParameter toIndex(const uint32_t value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case 1: return DecimationFactor_None;
|
||||
case 2: return DecimationFactor_2;
|
||||
case 4: return DecimationFactor_4;
|
||||
case 5: return DecimationFactor_5;
|
||||
case 8: return DecimationFactor_8;
|
||||
case 10: return DecimationFactor_10;
|
||||
default: return DecimationFactor_None;
|
||||
}
|
||||
}
|
||||
|
||||
static uint32_t toValue(const EParameter parameter)
|
||||
{
|
||||
switch (parameter)
|
||||
{
|
||||
case DecimationFactor_None: return 1;
|
||||
case DecimationFactor_2: return 2;
|
||||
case DecimationFactor_4: return 4;
|
||||
case DecimationFactor_5: return 5;
|
||||
case DecimationFactor_8: return 8;
|
||||
case DecimationFactor_10: return 10;
|
||||
default: return 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void ChannelDetailsPressedCB(GtkButton* /*button*/, void* data)
|
||||
{
|
||||
static_cast<CConfigurationBrainProductsBrainampSeries*>(data)->buttonChannelDetailsPressedCB();
|
||||
}
|
||||
|
||||
static void ComboboxDeviceChangedCB(GtkComboBox* /*comboBox*/, void* data)
|
||||
{
|
||||
static_cast<CConfigurationBrainProductsBrainampSeries*>(data)->comboBoxDeviceChangedCB();
|
||||
}
|
||||
|
||||
CConfigurationBrainProductsBrainampSeries::CConfigurationBrainProductsBrainampSeries(
|
||||
CDriverBrainProductsBrainampSeries& driver, const char* gtkBuilderFileName, uint32_t& usbIdx, uint32_t& decimationFactor,
|
||||
EParameter* channelSelected, EParameter* lowPassFilterFull, EParameter* resolutionFull, EParameter* dcCouplingFull,
|
||||
EParameter& lowPass, EParameter& resolution, EParameter& dcCoupling, EParameter& impedance)
|
||||
: CConfigurationBuilder(gtkBuilderFileName), m_driver(driver), m_usbIdx(usbIdx),
|
||||
m_decimationFactor(decimationFactor), m_channelSelected(channelSelected),
|
||||
m_lowPassFilterFull(lowPassFilterFull), m_resolutionFull(resolutionFull),
|
||||
m_dcCouplingFull(dcCouplingFull), m_lowPass(lowPass), m_resolution(resolution),
|
||||
m_dcCoupling(dcCoupling), m_impedance(impedance) {}
|
||||
|
||||
bool CConfigurationBrainProductsBrainampSeries::preConfigure()
|
||||
{
|
||||
if (!CConfigurationBuilder::preConfigure()) { return false; }
|
||||
|
||||
GtkComboBox* device = GTK_COMBO_BOX(gtk_builder_get_object(m_builder, "combobox_device"));
|
||||
GtkComboBox* lowPass = GTK_COMBO_BOX(gtk_builder_get_object(m_builder, "combobox_lowpass_filter"));
|
||||
GtkComboBox* decimation = GTK_COMBO_BOX(gtk_builder_get_object(m_builder, "combobox_decimation_factor"));
|
||||
GtkComboBox* resolution = GTK_COMBO_BOX(gtk_builder_get_object(m_builder, "combobox_resolution"));
|
||||
GtkComboBox* dcCoupling = GTK_COMBO_BOX(gtk_builder_get_object(m_builder, "combobox_dc_coupling"));
|
||||
GtkComboBox* impedance = GTK_COMBO_BOX(gtk_builder_get_object(m_builder, "combobox_impedance"));
|
||||
|
||||
g_signal_connect(gtk_builder_get_object(m_builder, "button_channel_details"), "pressed", G_CALLBACK(ChannelDetailsPressedCB), this);
|
||||
g_signal_connect(gtk_builder_get_object(m_builder, "combobox_device"), "changed", G_CALLBACK(ComboboxDeviceChangedCB), this);
|
||||
|
||||
char buffer[1024];
|
||||
int count = 0;
|
||||
bool selected = false;
|
||||
|
||||
// autodetection of the connected device(s)
|
||||
for (uint32_t i = 0; i < 16; ++i)
|
||||
{
|
||||
if (m_driver.getDeviceDetails(i, nullptr, nullptr))
|
||||
{
|
||||
sprintf(buffer, "USB port %i", i);
|
||||
gtk_combo_box_append_text(device, buffer);
|
||||
{
|
||||
if (m_usbIdx == i)
|
||||
{
|
||||
gtk_combo_box_set_active(device, count);
|
||||
selected = true;
|
||||
}
|
||||
}
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
if (!selected && count != 0) { gtk_combo_box_set_active(device, 0); }
|
||||
|
||||
gtk_combo_box_set_active(lowPass, m_lowPass);
|
||||
gtk_combo_box_set_active(decimation, toIndex(m_decimationFactor));
|
||||
gtk_combo_box_set_active(resolution, m_resolution);
|
||||
gtk_combo_box_set_active(dcCoupling, m_dcCoupling);
|
||||
gtk_combo_box_set_active(impedance, m_impedance);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CConfigurationBrainProductsBrainampSeries::postConfigure()
|
||||
{
|
||||
GtkComboBox* comboBox = GTK_COMBO_BOX(gtk_builder_get_object(m_builder, "combobox_device"));
|
||||
|
||||
if (m_applyConfig)
|
||||
{
|
||||
GtkComboBox* device = GTK_COMBO_BOX(gtk_builder_get_object(m_builder, "combobox_device"));
|
||||
GtkComboBox* lowPass = GTK_COMBO_BOX(gtk_builder_get_object(m_builder, "combobox_lowpass_filter"));
|
||||
GtkComboBox* decimation = GTK_COMBO_BOX(gtk_builder_get_object(m_builder, "combobox_decimation_factor"));
|
||||
GtkComboBox* resolution = GTK_COMBO_BOX(gtk_builder_get_object(m_builder, "combobox_resolution"));
|
||||
GtkComboBox* dcCoupling = GTK_COMBO_BOX(gtk_builder_get_object(m_builder, "combobox_dc_coupling"));
|
||||
GtkComboBox* impedance = GTK_COMBO_BOX(gtk_builder_get_object(m_builder, "combobox_impedance"));
|
||||
|
||||
uint32_t usbIdx = 0;
|
||||
const char* usbIndex = gtk_combo_box_get_active_text(device);
|
||||
if (usbIndex) { if (sscanf(usbIndex, "USB port %i", &usbIdx) == 1) { m_usbIdx = usbIdx; } }
|
||||
|
||||
m_lowPass = EParameter(gtk_combo_box_get_active(lowPass));
|
||||
m_decimationFactor = (toValue(EParameter(gtk_combo_box_get_active(decimation))));
|
||||
m_resolution = EParameter(gtk_combo_box_get_active(resolution));
|
||||
m_dcCoupling = EParameter(gtk_combo_box_get_active(dcCoupling));
|
||||
m_impedance = EParameter(gtk_combo_box_get_active(impedance));
|
||||
}
|
||||
|
||||
if (!CConfigurationBuilder::postConfigure()) { return false; }
|
||||
return true;
|
||||
}
|
||||
|
||||
void CConfigurationBrainProductsBrainampSeries::buttonChannelDetailsPressedCB()
|
||||
{
|
||||
GtkBuilder* builder = gtk_builder_new();
|
||||
gtk_builder_add_from_file(builder, m_gtkBuilderFilename.c_str(), nullptr);
|
||||
|
||||
GtkDialog* dialogChannelDetails = GTK_DIALOG(gtk_builder_get_object(builder, "dialog_channel_details"));
|
||||
GtkTable* dialogChannelDetailsTable = GTK_TABLE(gtk_builder_get_object(builder, "table_content"));
|
||||
|
||||
GtkTreeModel* treeModelLowPassFilterFull = GTK_TREE_MODEL(gtk_builder_get_object(builder, "model_lowpass_filter_full"));
|
||||
GtkTreeModel* treeModelResolutionFull = GTK_TREE_MODEL(gtk_builder_get_object(builder, "model_resolution_full"));
|
||||
GtkTreeModel* treeModelDcCouplingFull = GTK_TREE_MODEL(gtk_builder_get_object(builder, "model_dc_coupling_full"));
|
||||
|
||||
gtk_table_resize(dialogChannelDetailsTable, 1, 5);
|
||||
gtk_table_resize(dialogChannelDetailsTable, 1 + m_header->getChannelCount(), 5);
|
||||
for (size_t i = 1; i < 1 + m_header->getChannelCount(); ++i)
|
||||
{
|
||||
GtkLabel* widgetIdx = GTK_LABEL(gtk_label_new((std::to_string(i) + ":").c_str()));
|
||||
gtk_label_set_justify(widgetIdx, GTK_JUSTIFY_LEFT);
|
||||
gtk_widget_show(GTK_WIDGET(widgetIdx));
|
||||
|
||||
GtkLabel* widgetChannelName = GTK_LABEL(gtk_label_new(m_header->getChannelName(i-1)));
|
||||
gtk_label_set_justify(widgetChannelName, GTK_JUSTIFY_LEFT);
|
||||
// We hide this label as the channel name is not accurate
|
||||
// The update of the channel rename configuration (moved to the main application)
|
||||
// has broken this feature in the driver: real channel names are not passed to the driver
|
||||
// but are only kept at the server level. This problem should be adressed in future version.
|
||||
gtk_widget_hide(GTK_WIDGET(widgetChannelName));
|
||||
//::gtk_widget_show(GTK_WIDGET(l_pWidgetChannelName));
|
||||
|
||||
GtkBox* widgetChannel = GTK_BOX(gtk_hbox_new(false, 2));
|
||||
gtk_box_pack_start(widgetChannel, GTK_WIDGET(widgetIdx), true, true, 0);
|
||||
gtk_box_pack_start(widgetChannel, GTK_WIDGET(widgetChannelName), true, true, 0);
|
||||
gtk_widget_show(GTK_WIDGET(widgetChannel));
|
||||
gtk_table_attach_defaults(dialogChannelDetailsTable, GTK_WIDGET(widgetChannel), 0, 1, i, i + 1);
|
||||
|
||||
GtkToggleButton* widgetChannelSelected = GTK_TOGGLE_BUTTON(gtk_check_button_new());
|
||||
gtk_toggle_button_set_active(widgetChannelSelected, m_channelSelected[i - 1] == Channel_Selected);
|
||||
gtk_widget_show(GTK_WIDGET(widgetChannelSelected));
|
||||
gtk_table_attach_defaults(dialogChannelDetailsTable, GTK_WIDGET(widgetChannelSelected), 1, 2, i, i + 1);
|
||||
|
||||
GtkComboBox* widgetLowPassFilterFull = GTK_COMBO_BOX(gtk_combo_box_new_text());
|
||||
gtk_combo_box_set_model(widgetLowPassFilterFull, treeModelLowPassFilterFull);
|
||||
gtk_combo_box_set_active(widgetLowPassFilterFull, gint(m_lowPassFilterFull[i - 1] + 1));
|
||||
gtk_widget_show(GTK_WIDGET(widgetLowPassFilterFull));
|
||||
gtk_table_attach_defaults(dialogChannelDetailsTable, GTK_WIDGET(widgetLowPassFilterFull), 2, 3, i, i + 1);
|
||||
|
||||
GtkComboBox* widgetResolutionFull = GTK_COMBO_BOX(gtk_combo_box_new_text());
|
||||
gtk_combo_box_set_model(widgetResolutionFull, treeModelResolutionFull);
|
||||
gtk_combo_box_set_active(widgetResolutionFull, gint(m_resolutionFull[i - 1] + 1));
|
||||
gtk_widget_show(GTK_WIDGET(widgetResolutionFull));
|
||||
gtk_table_attach_defaults(dialogChannelDetailsTable, GTK_WIDGET(widgetResolutionFull), 3, 4, i, i + 1);
|
||||
|
||||
GtkComboBox* widgetDcCouplingFull = GTK_COMBO_BOX(gtk_combo_box_new_text());
|
||||
gtk_combo_box_set_model(widgetDcCouplingFull, treeModelDcCouplingFull);
|
||||
gtk_combo_box_set_active(widgetDcCouplingFull, gint(m_dcCouplingFull[i - 1] + 1));
|
||||
gtk_widget_show(GTK_WIDGET(widgetDcCouplingFull));
|
||||
gtk_table_attach_defaults(dialogChannelDetailsTable, GTK_WIDGET(widgetDcCouplingFull), 4, 5, i, i + 1);
|
||||
}
|
||||
|
||||
if (gtk_dialog_run(dialogChannelDetails) == GTK_RESPONSE_APPLY)
|
||||
{
|
||||
for (GList* list = dialogChannelDetailsTable->children; list; list = list->next)
|
||||
{
|
||||
GtkTableChild* tableChild = (GtkTableChild*)list->data;
|
||||
if (tableChild)
|
||||
{
|
||||
const gint i = tableChild->top_attach - 1;
|
||||
if (i >= 0)
|
||||
{
|
||||
switch (tableChild->left_attach)
|
||||
{
|
||||
case 1: m_channelSelected[i] = EParameter(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(tableChild->widget)));
|
||||
break;
|
||||
case 2: m_lowPassFilterFull[i] = EParameter(gtk_combo_box_get_active(GTK_COMBO_BOX(tableChild->widget)) - 1);
|
||||
break;
|
||||
case 3: m_resolutionFull[i] = EParameter(gtk_combo_box_get_active(GTK_COMBO_BOX(tableChild->widget)) - 1);
|
||||
break;
|
||||
case 4: m_dcCouplingFull[i] = EParameter(gtk_combo_box_get_active(GTK_COMBO_BOX(tableChild->widget)) - 1);
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
gtk_widget_hide(GTK_WIDGET(dialogChannelDetails));
|
||||
|
||||
g_object_unref(builder);
|
||||
}
|
||||
|
||||
void CConfigurationBrainProductsBrainampSeries::comboBoxDeviceChangedCB()
|
||||
{
|
||||
GtkComboBox* comboBoxDevice = GTK_COMBO_BOX(gtk_builder_get_object(m_builder, "combobox_device"));
|
||||
const char* usbIndex = gtk_combo_box_get_active_text(comboBoxDevice);
|
||||
if (usbIndex)
|
||||
{
|
||||
uint32_t usbIdx = -1;
|
||||
if (sscanf(usbIndex, "USB port %i", &usbIdx) == 1)
|
||||
{
|
||||
uint32_t amplifierType[4];
|
||||
uint32_t nAmplifier = 0;
|
||||
if (m_driver.getDeviceDetails(usbIdx, &nAmplifier, amplifierType))
|
||||
{
|
||||
bool correctMontage = true;
|
||||
m_header->setChannelCount(nAmplifier * 32);
|
||||
gtk_spin_button_set_value(GTK_SPIN_BUTTON(m_nChannels), nAmplifier * 32);
|
||||
|
||||
for (uint32_t i = 0; i < BrainAmp_MaximumAmplifierCount; ++i)
|
||||
{
|
||||
const std::string name = "label_multiamp_montage_" + std::to_string(i + 1);
|
||||
GtkLabel* multiampMontage = GTK_LABEL(gtk_builder_get_object(m_builder, name.c_str()));
|
||||
gtk_label_set_label(multiampMontage, getDeviceType(amplifierType[i]));
|
||||
if (i >= 1 && amplifierType[i - 1] == AmplifierType_None && amplifierType[i] != AmplifierType_None) { correctMontage = false; }
|
||||
}
|
||||
|
||||
GtkWidget* montageTable = GTK_WIDGET(gtk_builder_get_object(m_builder, "table_multiamp_montage"));
|
||||
GtkWidget* montageIcon = GTK_WIDGET(gtk_builder_get_object(m_builder, "image_montage_status_icon"));
|
||||
if (correctMontage)
|
||||
{
|
||||
const char* text = "The multi amplifier montage is correct";
|
||||
gtk_image_set_from_stock(GTK_IMAGE(montageIcon), GTK_STOCK_YES, GTK_ICON_SIZE_BUTTON);
|
||||
gtk_widget_set_tooltip_markup(montageIcon, text);
|
||||
gtk_widget_set_tooltip_markup(montageTable, text);
|
||||
}
|
||||
else
|
||||
{
|
||||
const char* text = "The multi amplifier montage is not correct - avoid empty slots before filled slots";
|
||||
gtk_image_set_from_stock(GTK_IMAGE(montageIcon), GTK_STOCK_NO, GTK_ICON_SIZE_BUTTON);
|
||||
gtk_widget_set_tooltip_markup(montageIcon, text);
|
||||
gtk_widget_set_tooltip_markup(montageTable, text);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace AcquisitionServer
|
||||
} // namespace OpenViBE
|
||||
#endif // TARGET_OS_Windows
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
* Brain Products Brainamp Series driver for OpenViBE
|
||||
* Copyright (C) 2010 INRIA - Author : Yann Renard
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "../ovasCConfigurationBuilder.h"
|
||||
|
||||
#if defined TARGET_OS_Windows
|
||||
|
||||
#include "ovas_defines_brainamp_series.h"
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace AcquisitionServer {
|
||||
class CDriverBrainProductsBrainampSeries;
|
||||
|
||||
class CConfigurationBrainProductsBrainampSeries final : public CConfigurationBuilder
|
||||
{
|
||||
public:
|
||||
|
||||
CConfigurationBrainProductsBrainampSeries(
|
||||
CDriverBrainProductsBrainampSeries& driver, const char* gtkBuilderFileName, uint32_t& usbIdx, uint32_t& decimationFactor,
|
||||
EParameter* channelSelected, EParameter* lowPassFilterFull, EParameter* resolutionFull, EParameter* dcCouplingFull,
|
||||
EParameter& lowPass, EParameter& resolution, EParameter& dcCoupling, EParameter& impedance);
|
||||
|
||||
bool preConfigure() override;
|
||||
bool postConfigure() override;
|
||||
|
||||
void buttonChannelDetailsPressedCB();
|
||||
void comboBoxDeviceChangedCB();
|
||||
|
||||
protected:
|
||||
|
||||
CDriverBrainProductsBrainampSeries& m_driver;
|
||||
uint32_t& m_usbIdx;
|
||||
uint32_t& m_decimationFactor;
|
||||
EParameter* m_channelSelected = nullptr;
|
||||
EParameter* m_lowPassFilterFull = nullptr;
|
||||
EParameter* m_resolutionFull = nullptr;
|
||||
EParameter* m_dcCouplingFull = nullptr;
|
||||
EParameter& m_lowPass;
|
||||
EParameter& m_resolution;
|
||||
EParameter& m_dcCoupling;
|
||||
EParameter& m_impedance;
|
||||
|
||||
// private:
|
||||
// GtkWidget* m_calibrateDialog = nullptr;
|
||||
// bool m_calibrationDone = false;
|
||||
};
|
||||
} // namespace AcquisitionServer
|
||||
} // namespace OpenViBE
|
||||
|
||||
#endif // TARGET_OS_Windows
|
||||
+621
@@ -0,0 +1,621 @@
|
||||
/*
|
||||
* Brain Products Brainamp Series driver for OpenViBE
|
||||
* Copyright (C) 2010 INRIA - Author : Yann Renard
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include "ovasCDriverBrainProductsBrainampSeries.h"
|
||||
|
||||
#if defined TARGET_OS_Windows
|
||||
|
||||
#include <toolkit/ovtk_all.h>
|
||||
|
||||
#include <system/ovCTime.h>
|
||||
|
||||
#include <list>
|
||||
|
||||
#include <windows.h>
|
||||
#include <WinIoCtl.h>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace AcquisitionServer {
|
||||
|
||||
char* CDriverBrainProductsBrainampSeries::getErrorMessage(const uint32_t error)
|
||||
{
|
||||
const uint32_t code = error & 0xffff;
|
||||
switch (code)
|
||||
{
|
||||
case 0: break;
|
||||
case 1: return
|
||||
"Connection between Brainamp and USB 2 Adapter / PCI is broken.\n"
|
||||
"Please check connectors, switch and battery power. After the\n"
|
||||
"connection is established and if you wish to continue the\n"
|
||||
"recording, please press the Start/Resume Recording button.\n"
|
||||
"If problem still persists, contact us at techsup@brainproducts.com";
|
||||
case 2: return
|
||||
"The voltage in the amplifier is too low!\n"
|
||||
"Check the batteries!";
|
||||
case 3: return
|
||||
"Could not establish communication with the amplifier.\n"
|
||||
"Check the connectors and the battery power!";
|
||||
case 4: return
|
||||
"Out of synch, Barker words missing!";
|
||||
case 5: return
|
||||
"Connection between USB 2 Adapter and Computer is broken.\n"
|
||||
"Monitoring or recording was interrupted. Please check\n"
|
||||
"the USB connectors. If problem still persists, contact\n"
|
||||
"us at techsup@brainproducts.com";
|
||||
default: return "Unknown Amplifier Error\n";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
const Kernel::ELogLevel LogLevel_TraceAPI = Kernel::LogLevel_None;
|
||||
|
||||
//___________________________________________________________________//
|
||||
// //
|
||||
|
||||
CDriverBrainProductsBrainampSeries::CDriverBrainProductsBrainampSeries(IDriverContext& ctx)
|
||||
: IDriver(ctx), m_settings("AcquisitionServer_Driver_BrainAmpSeries", m_driverCtx.getConfigurationManager()), m_headerAdapter(m_header, m_channelSelected)
|
||||
{
|
||||
// char* channelName[]={"Fp1", "Fp2", "F3", "F4", "C3", "C4", "P3", "P4", "O1", "O2", "F7", "F8", "T7", "T8", "P7", "P8", "Fz", "Cz", "Pz", "FC1", "FC2", "CP1", "CP2", "FC5", "FC6", "CP5", "CP6", "TP9", "TP10", "Eog", "Ekg1", "Ekg2", };
|
||||
//char* channelNameActiCap32 [] = { "Fp1", "Fp2", "F7", "F3", "Fz", "F4", "F8", "FC5", "FC1", "FC2", "FC6", "T7", "C3", "Cz", "C4", "T8", "TP9", "CP5", "CP1", "CP2", "CP6", "TP10", "P7", "P3", "Pz", "P4", "P8", "PO9", "O1", "Oz", "O2", "PO10" };
|
||||
//char* channelNameActiCap64 [] = {
|
||||
// "Fp1", "Fp2", "F7", "F3", "Fz", "F4", "F8", "FC5", "FC1", "FC2", "FC6", "T7", "C3", "Cz", "C4", "T8", "TP9", "CP5", "CP1", "CP2", "CP6", "TP10", "P7", "P3", "Pz", "P4", "P8", "PO9", "O1", "Oz", "O2", "PO10",
|
||||
// "AF7", "AF3", "AF4", "AF8", "F5", "F1", "F2", "F6", "FT9", "FT7", "FC3", "FC4", "FT8", "FT10", "C5", "C1", "C2", "C6", "TP7", "CP3", "CPz", "CP4", "TP8", "P5", "P1", "P2", "P6", "PO7", "PO3", "POz", "PO4", "PO8",
|
||||
//};
|
||||
char* channelNameActiCap128[] = {
|
||||
"Fp1", "Fp2", "F7", "F3", "Fz", "F4", "F8", "FC5", "FC1", "FC2", "FC6", "T7", "C3", "Cz", "C4", "T8", "TP9", "CP5", "CP1", "CP2", "CP6", "TP10", "P7",
|
||||
"P3", "Pz", "P4", "P8", "PO9", "O1", "Oz", "O2", "PO10",
|
||||
"AF7", "AF3", "AF4", "AF8", "F5", "F1", "F2", "F6", "FT9", "FT7", "FC3", "FC4", "FT8", "FT10", "C5", "C1", "C2", "C6", "TP7", "CP3", "CPz", "CP4",
|
||||
"TP8", "P5", "P1", "P2", "P6", "PO7", "PO3", "POz", "PO4", "PO8",
|
||||
"FPz", "F9", "AFF5h", "AFF1h", "AFF2h", "AFF6h", "F10", "FTT9h", "FTT7h", "FCC5h", "FCC3h", "FCC1h", "FCC2h", "FCC4h", "FCC6h", "FTT8h", "FTT10h",
|
||||
"TPP9h", "TPP7h", "CPP5h", "CPP3h", "CPP1h", "CPP2h", "CPP4h", "CPP6h", "TPP8h", "TPP10h", "POO9h", "POO1", "POO2", "POO10h", "Iz",
|
||||
"AFp1", "AFp2", "FFT9h", "FFT7h", "FFC5h", "FFC3h", "FFC1h", "FFC2h", "FFC4h", "FFC6h", "FFT8h", "FFT10h", "TTP7h", "CCP5h", "CCP3h", "CCP1h", "CCP2h",
|
||||
"CCP4h", "CCP6h", "TTP8h", "P9", "PPO9h", "PPO5h", "PPO1h", "PPO2h", "PPO6h", "PPO10h", "P10", "I1", "OI1h", "OI2h", "I2",
|
||||
};
|
||||
char** channelName = channelNameActiCap128;
|
||||
|
||||
uint32_t nAmplifier = 1;
|
||||
this->getDeviceDetails(m_usbIdx, &nAmplifier, nullptr);
|
||||
|
||||
m_header.setSamplingFrequency(500);
|
||||
m_header.setChannelCount(nAmplifier * 32);
|
||||
for (uint32_t i = 0; i < 256; ++i)
|
||||
{
|
||||
m_header.setChannelName(i, (i < sizeof(channelNameActiCap128) / sizeof(void*) ? channelName[i] : ""));
|
||||
m_channelSelected[i] = Channel_Selected;
|
||||
m_lowPassFilterFull[i] = Parameter_Default;
|
||||
m_resolutionFull[i] = Parameter_Default;
|
||||
m_dcCouplingFull[i] = Parameter_Default;
|
||||
}
|
||||
|
||||
for (uint32_t i = 0; i < 256; ++i) { m_header.setChannelUnits(i, OVTK_UNIT_Volts, OVTK_FACTOR_Micro); }
|
||||
|
||||
m_settings.add("Header", &m_header);
|
||||
m_settings.add("USBIndex", &m_usbIdx);
|
||||
m_settings.add("DecimationFactor", &m_decimationFactor);
|
||||
m_settings.add("ChannelSelected", m_channelSelected);
|
||||
m_settings.add("LowPassFilterFull", &m_lowPassFilterFull);
|
||||
m_settings.add("ResolutionFull", &m_resolutionFull);
|
||||
m_settings.add("DCCouplingFull", &m_dcCouplingFull);
|
||||
m_settings.add("LowPass", &m_lowPass);
|
||||
m_settings.add("Resolution", &m_resolution);
|
||||
m_settings.add("DCCoupling", &m_dcCoupling);
|
||||
m_settings.add("Impedance", &m_impedance);
|
||||
m_settings.load();
|
||||
}
|
||||
|
||||
//___________________________________________________________________//
|
||||
// //
|
||||
|
||||
bool CDriverBrainProductsBrainampSeries::initialize(const uint32_t nSamplePerSentBlock, IDriverCallback& callback)
|
||||
{
|
||||
// #define nSamplePerSentBlock 20*5
|
||||
|
||||
|
||||
if (m_driverCtx.isConnected()) { return false; }
|
||||
|
||||
// --
|
||||
const std::string name = "\\\\.\\BrainAmpUSB" + std::to_string(m_usbIdx);
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Info << "Preparing device [" << name << "]\n";
|
||||
|
||||
// -- Gets amplifiers type
|
||||
|
||||
uint32_t nAmplifier = BrainAmp_MaximumAmplifierCount;
|
||||
uint32_t types[BrainAmp_MaximumAmplifierCount];
|
||||
if (!this->getDeviceDetails(m_usbIdx, &nAmplifier, types))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Could not get amplifier(s) type - got error " << size_t(GetLastError()) << "\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < BrainAmp_MaximumAmplifierCount; ++i)
|
||||
{
|
||||
CString type(getDeviceType(types[i]));
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Info << " - Amplifier " << i + 1 << " : " << type << "\n";
|
||||
}
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Info << "Found " << nAmplifier << " amplifier(s)\n";
|
||||
|
||||
// -- Opens device
|
||||
|
||||
m_Device = ::CreateFile(name.c_str(), GENERIC_READ | GENERIC_WRITE, 0, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_WRITE_THROUGH, nullptr);
|
||||
if (m_Device == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Could not open device [" << name << "]\n";
|
||||
return false;
|
||||
}
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Info << "Opened device [" << name << "]\n";
|
||||
|
||||
// -- Gets driver version from device
|
||||
|
||||
char driverVersion[1024];
|
||||
uint32_t version = 0;
|
||||
m_driverCtx.getLogManager() << LogLevel_TraceAPI << "BRAINAMP_DRIVERVERSION\n";
|
||||
if (!DeviceIoControl(m_Device, BRAINAMP_DRIVERVERSION, nullptr, 0, &version, sizeof(version), &m_nBytesReturned, nullptr))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Could not get driver version from device - got error " << size_t(GetLastError()) << "\n";
|
||||
CloseHandle(m_Device);
|
||||
return false;
|
||||
}
|
||||
const uint32_t versionPatch = version % 10000;
|
||||
const uint32_t versionMinor = (version % 1000000) / 10000;
|
||||
const uint32_t versionMajor = (version) / 1000000;
|
||||
sprintf(driverVersion, "%i.%02i.%04i", versionMajor, versionMinor, versionPatch);
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Info << "Found driver version [" << CString(driverVersion) << "]\n";
|
||||
|
||||
// -- Gets serial number from device
|
||||
|
||||
char deviceSerialNumber[1024];
|
||||
uint32_t serialNumber = 0;
|
||||
m_driverCtx.getLogManager() << LogLevel_TraceAPI << "BRAINAMP_GET_SERIALNUMBER\n";
|
||||
if (!DeviceIoControl(m_Device, BRAINAMP_GET_SERIALNUMBER, nullptr, 0, &serialNumber, sizeof(serialNumber), &m_nBytesReturned,
|
||||
nullptr))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Could not get serial number from device - got error " << size_t(GetLastError()) << "\n";
|
||||
CloseHandle(m_Device);
|
||||
return false;
|
||||
}
|
||||
if (m_nBytesReturned != 0)
|
||||
{
|
||||
sprintf(deviceSerialNumber, "0x%08x", serialNumber);
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Info << "Found serial number [" << CString(deviceSerialNumber) << "]\n";
|
||||
}
|
||||
|
||||
// -- Sets callibration settings
|
||||
|
||||
m_deviceCalibrationSettings = new CBrainampCalibrationSettings;
|
||||
// m_deviceCalibrationSettings->waveForm=WaveForm_Ramp;
|
||||
// m_deviceCalibrationSettings->waveForm=WaveForm_Triangle;
|
||||
// m_deviceCalibrationSettings->waveForm=WaveForm_Square;
|
||||
m_deviceCalibrationSettings->waveForm = WaveForm_SineWave;
|
||||
m_deviceCalibrationSettings->frequency = 5;
|
||||
|
||||
m_driverCtx.getLogManager() << LogLevel_TraceAPI << "BRAINAMP_CALIBRATION_SETTINGS\n";
|
||||
if (!DeviceIoControl(m_Device, BRAINAMP_CALIBRATION_SETTINGS, m_deviceCalibrationSettings, sizeof(CBrainampCalibrationSettings), nullptr, 0,
|
||||
&m_nBytesReturned, nullptr))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Could not set calibration settings - got error " << size_t(GetLastError()) << "\n";
|
||||
CloseHandle(m_Device);
|
||||
return false;
|
||||
}
|
||||
|
||||
// -- Configures device according to what has been enterd in the configuration dialog
|
||||
|
||||
bool lowPassWarning = false;
|
||||
float resolution[] = { 0.1F, 0.5F, 10.0F, 152.6F };
|
||||
|
||||
m_deviceSetup = new CBrainampSetup;
|
||||
memset(m_deviceSetup, 0, sizeof(CBrainampSetup));
|
||||
m_deviceSetup->nChannel = m_headerAdapter.getChannelCount();
|
||||
m_deviceSetup->holdValue = 0x0; // Value without trigger
|
||||
m_deviceSetup->nSamplePerSentBlock = nSamplePerSentBlock * m_decimationFactor;
|
||||
m_deviceSetup->lowImpedance = uint8_t(m_impedance);
|
||||
for (size_t j = 0, i = 0; i < m_header.getChannelCount(); ++i)
|
||||
{
|
||||
if (m_channelSelected[i] == Channel_Selected)
|
||||
{
|
||||
// Should I care about j being greater than
|
||||
m_deviceSetup->channelLookup[j] = i;
|
||||
m_deviceSetup->lowPassFilter[j] =
|
||||
uint8_t(m_lowPassFilterFull[i] == Parameter_Default ? m_lowPass : m_lowPassFilterFull[i]); // 0 - 1000Hz, 1 - 250Hz
|
||||
m_deviceSetup->resolution[j] =
|
||||
uint8_t(m_resolutionFull[i] == Parameter_Default ? m_resolution
|
||||
: m_resolutionFull[i]); // 0 - 100 nV, 1 - 500 nV, 2 - 10 uV, 3 - 152.6 uV
|
||||
m_deviceSetup->dcCoupling[j] = uint8_t(m_dcCouplingFull[i] == Parameter_Default ? m_dcCoupling : m_dcCouplingFull[i]); // 0 - AC, 1 - DC
|
||||
|
||||
m_resolutionFactor[j] = resolution[m_deviceSetup->resolution[j]];
|
||||
|
||||
if (!lowPassWarning && m_decimationFactor != 1 && (m_lowPass == LowPass_1000 || m_lowPassFilterFull[i] == LowPass_1000))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Warning << "Using 1000 Hz low pass filter...\n";
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Warning << "Using a decimation factor of " << m_decimationFactor << " (resulting in " <<
|
||||
5000 / m_decimationFactor << " Hz sampling rate)\n";
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Warning << "This is probably not safe. Signal quality will suffer.\n";
|
||||
lowPassWarning = true;
|
||||
}
|
||||
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
m_driverCtx.getLogManager() << LogLevel_TraceAPI << "BRAINAMP_SETUP\n";
|
||||
if (!DeviceIoControl(m_Device, BRAINAMP_SETUP, m_deviceSetup, sizeof(CBrainampSetup), nullptr, 0, &m_nBytesReturned, nullptr))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Could not send setup parameters to device - got error " << size_t(GetLastError()) << "\n";
|
||||
CloseHandle(m_Device);
|
||||
return false;
|
||||
}
|
||||
|
||||
// -- Allocates sample array and intermediate buffer
|
||||
|
||||
m_sample = new float[m_headerAdapter.getChannelCount() * nSamplePerSentBlock];
|
||||
m_buffer = new int16_t[(m_headerAdapter.getChannelCount() + 1) * nSamplePerSentBlock * m_decimationFactor];
|
||||
if (!m_sample || !m_buffer)
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Could not allocate memory for sample array / intermediate buffer\n";
|
||||
delete [] m_sample;
|
||||
delete [] m_buffer;
|
||||
m_sample = nullptr;
|
||||
m_buffer = nullptr;
|
||||
CloseHandle(m_Device);
|
||||
return false;
|
||||
}
|
||||
|
||||
// -- Everything is up and ready to work
|
||||
|
||||
m_callback = &callback;
|
||||
m_nSamplePerSentBlock = nSamplePerSentBlock;
|
||||
m_marker = 0;
|
||||
|
||||
// -- Optionally starts impedance check
|
||||
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Impedance " << (m_driverCtx.isImpedanceCheckRequested() ? "will" : "won't") << " be checked\n";
|
||||
if (m_driverCtx.isImpedanceCheckRequested()) { if (!this->startImpedanceCheck()) { return false; } }
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CDriverBrainProductsBrainampSeries::start()
|
||||
{
|
||||
if (!m_driverCtx.isConnected() || m_driverCtx.isStarted()) { return false; }
|
||||
|
||||
// -- Optionally stops impedance check
|
||||
if (m_driverCtx.isImpedanceCheckRequested()) { if (!this->stopImpedanceCheck()) { return false; } }
|
||||
|
||||
// -- Configures pull up/down for triggers
|
||||
|
||||
uint16_t pullUp = 0;
|
||||
m_driverCtx.getLogManager() << LogLevel_TraceAPI << "BRAINAMP_DIGITALINPUT_PULL_UP\n";
|
||||
if (!DeviceIoControl(m_Device, BRAINAMP_DIGITALINPUT_PULL_UP, &pullUp, sizeof(pullUp), nullptr, 0, &m_nBytesReturned, nullptr))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Could not switch pull up\n";
|
||||
CloseHandle(m_Device);
|
||||
return false;
|
||||
}
|
||||
|
||||
// -- Starts acquisition
|
||||
|
||||
uint32_t type = uint32_t(AcquisitionType_EEG);
|
||||
// uint32_t type=uint32_t(AcquisitionType_TestSignal);
|
||||
m_driverCtx.getLogManager() << LogLevel_TraceAPI << "BRAINAMP_START\n";
|
||||
if (!DeviceIoControl(m_Device, BRAINAMP_START, &type, sizeof(uint32_t), nullptr, 0, &m_nBytesReturned, nullptr))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Could not start acquisition\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CDriverBrainProductsBrainampSeries::loop()
|
||||
{
|
||||
if (!m_driverCtx.isConnected()) { return false; }
|
||||
if (!m_driverCtx.isStarted() && !m_driverCtx.isImpedanceCheckRequested()) { return true; }
|
||||
|
||||
|
||||
// -- Gets error code from device
|
||||
|
||||
uint32_t error = 0;
|
||||
m_driverCtx.getLogManager() << LogLevel_TraceAPI << "BRAINAMP_ERROR_STATE\n";
|
||||
if (!DeviceIoControl(m_Device, BRAINAMP_ERROR_STATE, nullptr, 0, &error, sizeof(error), &m_nBytesReturned, nullptr))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Could not retrieve error state\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
// -- Checks error code
|
||||
|
||||
if (error != 0)
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Received error state " << error << " from device\n";
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Full error text :\n" << this->getErrorMessage(error) << "\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
// -- Loops until the buffer is read
|
||||
|
||||
do
|
||||
{
|
||||
// -- Reads intermediate buffer from device
|
||||
|
||||
if (!ReadFile(m_Device, m_buffer, (m_headerAdapter.getChannelCount() + 1) * m_nSamplePerSentBlock * m_decimationFactor * sizeof(int16_t),
|
||||
&m_nBytesReturned, nullptr))
|
||||
{
|
||||
const uint32_t lastError = GetLastError();
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Warning << "Could not read from device - Got error " << lastError << " "
|
||||
<< (lastError == ERROR_MORE_DATA ? "(buffer overflow)" : "") << "\n";
|
||||
return true;
|
||||
}
|
||||
|
||||
if (m_nBytesReturned == 0) { System::Time::sleep(2); }
|
||||
} while (m_nBytesReturned == 0);
|
||||
|
||||
#if 0
|
||||
// -- Gets buffer filling state
|
||||
|
||||
static uint32_t lastBufferFillingState=0;
|
||||
static uint32_t bufferFillingState=0;
|
||||
m_driverCtx.getLogManager() << LogLevel_TraceAPI << "BRAINAMP_BUFFERFILLING_STATE\n";
|
||||
if (!::DeviceIoControl(m_Device, BRAINAMP_BUFFERFILLING_STATE, nullptr, 0, &bufferFillingState, sizeof(bufferFillingState), &m_nBytesReturned, nullptr))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Could not retrieve buffer filling state\n";
|
||||
return false;
|
||||
}
|
||||
if(bufferFillingState!=lastBufferFillingState)
|
||||
{
|
||||
lastBufferFillingState=bufferFillingState;
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Info << "Buffer filling state : " << bufferFillingState << "\n";
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!m_driverCtx.isStarted())
|
||||
{
|
||||
// -- Converts the intermediate buffer in instant impedances
|
||||
const double scale = 1000 * (m_impedance == Impedance_High ? 2.1e-3 : 2.13219e-4);
|
||||
for (size_t i = 0; i < m_headerAdapter.getChannelCount(); ++i)
|
||||
{
|
||||
int16_t minValue = 32767;
|
||||
int16_t maxValue = -32767;
|
||||
int16_t* buffer = m_buffer + i;
|
||||
for (size_t j = 0; j < m_nSamplePerSentBlock * m_decimationFactor; ++j)
|
||||
{
|
||||
if (*buffer > maxValue) { maxValue = *buffer; }
|
||||
if (*buffer < minValue) { minValue = *buffer; }
|
||||
buffer += m_headerAdapter.getChannelCount() + 1;
|
||||
}
|
||||
m_impedances[i] = (maxValue - minValue) * scale - 1. + .5;
|
||||
}
|
||||
|
||||
// -- Backups this impedance in the impedance buffer and limit this buffer size
|
||||
|
||||
m_impedanceBuffers.push_back(m_impedances);
|
||||
if (m_impedanceBuffers.size() > m_impedanceCheckSignalFrequency) { m_impedanceBuffers.pop_front(); }
|
||||
|
||||
// -- Averages the impedances over last measures and send them to the acquisition server
|
||||
|
||||
for (size_t i = 0; i < m_headerAdapter.getChannelCount(); ++i)
|
||||
{
|
||||
double average = 0;
|
||||
for (auto it = m_impedanceBuffers.begin(); it != m_impedanceBuffers.end(); ++it) { average += (*it)[i]; }
|
||||
average /= m_impedanceBuffers.size();
|
||||
|
||||
m_driverCtx.updateImpedance(i, average);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// -- Converts the intermediate buffer in acquisition server convenient format
|
||||
|
||||
float* samples = m_sample;
|
||||
int16_t* buffer;
|
||||
for (size_t i = 0; i < m_headerAdapter.getChannelCount(); ++i)
|
||||
{
|
||||
buffer = m_buffer + i;
|
||||
for (size_t j = 0; j < m_nSamplePerSentBlock; ++j)
|
||||
{
|
||||
*samples = float(*buffer) * m_resolutionFactor[i];
|
||||
|
||||
samples += 1;
|
||||
buffer += m_decimationFactor * (m_headerAdapter.getChannelCount() + 1);
|
||||
}
|
||||
}
|
||||
|
||||
CStimulationSet stimSet;
|
||||
buffer = m_buffer + m_headerAdapter.getChannelCount();
|
||||
for (size_t j = 0; j < m_nSamplePerSentBlock * m_decimationFactor; ++j)
|
||||
{
|
||||
uint32_t marker = *buffer;
|
||||
marker ^= m_deviceSetup->holdValue;
|
||||
if (marker != m_marker)
|
||||
{
|
||||
m_marker = marker;
|
||||
stimSet.appendStimulation(OVTK_StimulationId_Label(m_marker), CTime(m_header.getSamplingFrequency() * m_decimationFactor, uint64_t(j)).time(),
|
||||
0);
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Got stim code " << m_marker << " at sample " << j << "\n";
|
||||
}
|
||||
buffer += m_headerAdapter.getChannelCount() + 1;
|
||||
}
|
||||
|
||||
// -- Sends data to the acquisition server
|
||||
|
||||
m_callback->setSamples(m_sample, m_nSamplePerSentBlock);
|
||||
m_callback->setStimulationSet(stimSet);
|
||||
m_driverCtx.correctDriftSampleCount(m_driverCtx.getSuggestedDriftCorrectionSampleCount());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CDriverBrainProductsBrainampSeries::stop()
|
||||
{
|
||||
if (!m_driverCtx.isConnected() || !m_driverCtx.isStarted()) { return false; }
|
||||
|
||||
// -- Stops acquisition
|
||||
|
||||
m_driverCtx.getLogManager() << LogLevel_TraceAPI << "BRAINAMP_STOP\n";
|
||||
if (!DeviceIoControl(m_Device, BRAINAMP_STOP, nullptr, 0, nullptr, 0, &m_nBytesReturned, nullptr))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Could not stop acquisition\n";
|
||||
}
|
||||
|
||||
// -- Optionally starts impedance check
|
||||
|
||||
if (m_driverCtx.isImpedanceCheckRequested()) { if (!this->startImpedanceCheck()) { return false; } }
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CDriverBrainProductsBrainampSeries::uninitialize()
|
||||
{
|
||||
if (!m_driverCtx.isConnected() || m_driverCtx.isStarted()) { return false; }
|
||||
|
||||
// -- Optionally stops impedance check
|
||||
|
||||
if (m_driverCtx.isImpedanceCheckRequested()) { if (!this->stopImpedanceCheck()) { return false; } }
|
||||
|
||||
// -- Deletes device setup object
|
||||
|
||||
delete m_deviceSetup;
|
||||
m_deviceSetup = nullptr;
|
||||
|
||||
// -- Closes handle to device
|
||||
|
||||
CloseHandle(m_Device);
|
||||
m_Device = nullptr;
|
||||
|
||||
// -- Deletes sample array and intermediate buffer
|
||||
|
||||
delete [] m_sample;
|
||||
delete [] m_buffer;
|
||||
m_sample = nullptr;
|
||||
m_buffer = nullptr;
|
||||
m_callback = nullptr;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//___________________________________________________________________//
|
||||
// //
|
||||
|
||||
bool CDriverBrainProductsBrainampSeries::startImpedanceCheck()
|
||||
{
|
||||
if (!m_driverCtx.isImpedanceCheckRequested()) { return true; }
|
||||
|
||||
// Configures impedance frequency
|
||||
|
||||
m_impedanceCheckSignalFrequency = 5000 / (m_nSamplePerSentBlock * m_decimationFactor);
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Trace << "Imepdance check sampling frequency set to " << m_impedanceCheckSignalFrequency << " Hz\n";
|
||||
|
||||
m_driverCtx.getLogManager() << LogLevel_TraceAPI << "BRAINAMP_IMPEDANCE_FREQUENCY\n";
|
||||
if (!DeviceIoControl(m_Device, BRAINAMP_IMPEDANCE_FREQUENCY, &m_impedanceCheckSignalFrequency, sizeof(uint32_t), nullptr, 0, &m_nBytesReturned, nullptr))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Could not set impedance frequency - got error " << size_t(GetLastError()) << "\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
// Starts acquiring impedance signal
|
||||
uint32_t type = uint32_t(AcquisitionType_Impedance);
|
||||
m_driverCtx.getLogManager() << LogLevel_TraceAPI << "BRAINAMP_START\n";
|
||||
if (!DeviceIoControl(m_Device, BRAINAMP_START, &type, sizeof(uint32_t), nullptr, 0, &m_nBytesReturned, nullptr))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Could not start acquisition\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
// Configures impedance group range
|
||||
uint32_t group = (m_impedance == Impedance_High ? 0 : 1);
|
||||
m_driverCtx.getLogManager() << LogLevel_TraceAPI << "BRAINAMP_IMPEDANCE_GROUPRANGE\n";
|
||||
if (!DeviceIoControl(m_Device, BRAINAMP_IMPEDANCE_GROUPRANGE, &group, sizeof(uint32_t), nullptr, 0, &m_nBytesReturned, nullptr))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Could set impedance group range\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
// Prepares impedance buffers
|
||||
|
||||
m_impedances.resize(m_headerAdapter.getChannelCount());
|
||||
m_impedanceBuffers.clear();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CDriverBrainProductsBrainampSeries::stopImpedanceCheck()
|
||||
{
|
||||
if (!m_driverCtx.isImpedanceCheckRequested()) { return true; }
|
||||
|
||||
// Stops impedance acquisition
|
||||
m_driverCtx.getLogManager() << LogLevel_TraceAPI << "BRAINAMP_STOP\n";
|
||||
if (!DeviceIoControl(m_Device, BRAINAMP_STOP, nullptr, 0, nullptr, 0, &m_nBytesReturned, nullptr))
|
||||
{
|
||||
m_driverCtx.getLogManager() << Kernel::LogLevel_Error << "Could not stop acquisition\n";
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//___________________________________________________________________//
|
||||
// //
|
||||
|
||||
bool CDriverBrainProductsBrainampSeries::configure()
|
||||
{
|
||||
CConfigurationBrainProductsBrainampSeries config(
|
||||
*this, Directories::getDataDir() + "/applications/acquisition-server/interface-BrainProducts-BrainampSeries.ui", m_usbIdx, m_decimationFactor,
|
||||
m_channelSelected, m_lowPassFilterFull, m_resolutionFull, m_dcCouplingFull, m_lowPass, m_resolution, m_dcCoupling, m_impedance);
|
||||
|
||||
config.configure(m_header);
|
||||
|
||||
m_settings.save();
|
||||
|
||||
m_header.setSamplingFrequency(5000 / m_decimationFactor);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CDriverBrainProductsBrainampSeries::getDeviceDetails(const uint32_t index, uint32_t* nAmplifier, uint32_t* amplifierType)
|
||||
{
|
||||
const char* name = ("\\\\.\\BrainAmpUSB" + std::to_string(index)).c_str();
|
||||
// -- Opens device
|
||||
void* device = ::CreateFile(name, GENERIC_READ | GENERIC_WRITE, 0, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_WRITE_THROUGH, nullptr);
|
||||
if (device == INVALID_HANDLE_VALUE) { return false; }
|
||||
|
||||
// -- Gets amplifiers type
|
||||
uint16_t type[BrainAmp_MaximumAmplifierCount];
|
||||
m_driverCtx.getLogManager() << LogLevel_TraceAPI << "BRAINAMP_AMPLIFIER_TYPE\n";
|
||||
if (!DeviceIoControl(device, BRAINAMP_AMPLIFIER_TYPE, nullptr, 0, type, sizeof(type), &m_nBytesReturned, nullptr))
|
||||
{
|
||||
CloseHandle(device);
|
||||
return false;
|
||||
}
|
||||
|
||||
// -- Closes device
|
||||
CloseHandle(device);
|
||||
|
||||
// -- Formats result
|
||||
size_t count = BrainAmp_MaximumAmplifierCount;
|
||||
for (size_t i = 0; i < BrainAmp_MaximumAmplifierCount; ++i)
|
||||
{
|
||||
if (amplifierType) { amplifierType[i] = type[i]; }
|
||||
if (count == BrainAmp_MaximumAmplifierCount && type[i] == AmplifierType_None) { count = i; }
|
||||
}
|
||||
if (nAmplifier) { *nAmplifier = count; }
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AcquisitionServer
|
||||
} // namespace OpenViBE
|
||||
#endif // TARGET_OS_Windows
|
||||
+142
@@ -0,0 +1,142 @@
|
||||
/*
|
||||
* Brain Products Brainamp Series driver for OpenViBE
|
||||
* Copyright (C) 2010 INRIA - Author : Yann Renard
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "ovasIDriver.h"
|
||||
#include "../ovasCHeader.h"
|
||||
|
||||
#include "../ovasCSettingsHelper.h"
|
||||
#include "../ovasCSettingsHelperOperators.h"
|
||||
|
||||
#if defined TARGET_OS_Windows
|
||||
|
||||
#include "ovas_defines_brainamp_series.h"
|
||||
|
||||
#include "ovasCConfigurationBrainProductsBrainampSeries.h"
|
||||
#include "ovasCHeaderAdapterBrainProductsBrainampSeries.h"
|
||||
|
||||
#include <vector>
|
||||
#include <list>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace AcquisitionServer {
|
||||
/**
|
||||
* \class CDriverBrainProductsBrainampSeries
|
||||
* \author Mensia Technologies
|
||||
*/
|
||||
class CDriverBrainProductsBrainampSeries final : public IDriver
|
||||
{
|
||||
public:
|
||||
|
||||
friend class CConfigurationBrainProductsBrainampSeries;
|
||||
|
||||
static char* getErrorMessage(uint32_t error);
|
||||
|
||||
explicit CDriverBrainProductsBrainampSeries(IDriverContext& ctx);
|
||||
void release() { delete this; }
|
||||
const char* getName() override { return "Brain Products BrainAmp Series"; }
|
||||
|
||||
bool initialize(const uint32_t nSamplePerSentBlock, IDriverCallback& callback) override;
|
||||
bool start() override;
|
||||
bool loop() override;
|
||||
bool stop() override;
|
||||
bool uninitialize() override;
|
||||
|
||||
bool startImpedanceCheck();
|
||||
bool stopImpedanceCheck();
|
||||
|
||||
bool isConfigurable() override { return true; }
|
||||
bool configure() override;
|
||||
const IHeader* getHeader() override { return &m_headerAdapter; }
|
||||
|
||||
protected:
|
||||
|
||||
bool getDeviceDetails(uint32_t index, uint32_t* nAmplifier, uint32_t* amplifierType);
|
||||
|
||||
SettingsHelper m_settings;
|
||||
|
||||
IDriverCallback* m_callback = nullptr;
|
||||
CHeader m_header;
|
||||
CHeaderAdapterBrainProductsBrainampSeries m_headerAdapter;
|
||||
|
||||
void* m_Device = nullptr;
|
||||
CBrainampSetup* m_deviceSetup = nullptr;
|
||||
CBrainampCalibrationSettings* m_deviceCalibrationSettings = nullptr;
|
||||
|
||||
uint32_t m_impedanceCheckSignalFrequency = 0;
|
||||
uint32_t m_decimationFactor = 10;
|
||||
uint32_t m_nSamplePerSentBlock = 0;
|
||||
float* m_sample = nullptr;
|
||||
int16_t* m_buffer = nullptr;
|
||||
uint16_t m_marker = 0;
|
||||
|
||||
std::list<std::vector<double>> m_impedanceBuffers;
|
||||
std::vector<double> m_impedances;
|
||||
|
||||
unsigned long m_nBytesReturned;
|
||||
|
||||
uint32_t m_usbIdx = 1;
|
||||
float m_resolutionFactor[256];
|
||||
EParameter m_channelSelected[256];
|
||||
EParameter m_lowPassFilterFull[256];
|
||||
EParameter m_resolutionFull[256];
|
||||
EParameter m_dcCouplingFull[256];
|
||||
EParameter m_lowPass = LowPass_250;
|
||||
EParameter m_resolution = Resolution_100nV;
|
||||
EParameter m_dcCoupling = DCCouping_AC;
|
||||
EParameter m_impedance = Impedance_Low;
|
||||
};
|
||||
|
||||
inline std::ostream& operator<<(std::ostream& out, const EParameter& var)
|
||||
{
|
||||
out << int(var);
|
||||
return out;
|
||||
}
|
||||
|
||||
inline std::istream& operator>>(std::istream& in, EParameter& var)
|
||||
{
|
||||
int tmp;
|
||||
in >> tmp;
|
||||
var = EParameter(tmp);
|
||||
return in;
|
||||
}
|
||||
|
||||
inline std::ostream& operator<<(std::ostream& out, const EParameter var[256])
|
||||
{
|
||||
for (int i = 0; i < 256; ++i) { out << int(var[i]) << " "; }
|
||||
return out;
|
||||
}
|
||||
|
||||
inline std::istream& operator>>(std::istream& in, EParameter var[256])
|
||||
{
|
||||
int tmp;
|
||||
for (int i = 0; i < 256; ++i)
|
||||
{
|
||||
in >> tmp;
|
||||
var[i] = EParameter(tmp);
|
||||
}
|
||||
|
||||
return in;
|
||||
}
|
||||
} // namespace AcquisitionServer
|
||||
} // namespace OpenViBE
|
||||
|
||||
#endif // TARGET_OS_Windows
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Brain Products Brainamp Series driver for OpenViBE
|
||||
* Copyright (C) 2010 INRIA - Author : Yann Renard
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include "ovasCHeaderAdapterBrainProductsBrainampSeries.h"
|
||||
|
||||
#if defined TARGET_OS_Windows
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace AcquisitionServer {
|
||||
|
||||
size_t CHeaderAdapterBrainProductsBrainampSeries::getChannelCount() const
|
||||
{
|
||||
size_t j = 0;
|
||||
for (size_t i = 0; i < m_header.getChannelCount(); ++i) { if (m_ChannelSelected[i] == Channel_Selected) { j++; } }
|
||||
return j;
|
||||
}
|
||||
|
||||
const char* CHeaderAdapterBrainProductsBrainampSeries::getChannelName(const size_t index) const
|
||||
{
|
||||
size_t j = 0;
|
||||
for (size_t i = 0; i < m_header.getChannelCount(); ++i)
|
||||
{
|
||||
if (m_ChannelSelected[i] == Channel_Selected)
|
||||
{
|
||||
if (j == index) { return m_header.getChannelName(i); }
|
||||
j++;
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
} // namespace AcquisitionServer
|
||||
} // namespace OpenViBE
|
||||
#endif // TARGET_OS_Windows
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Brain Products Brainamp Series driver for OpenViBE
|
||||
* Copyright (C) 2010 INRIA - Author : Yann Renard
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "../ovasCHeader.h"
|
||||
|
||||
#if defined TARGET_OS_Windows
|
||||
|
||||
#include "ovas_defines_brainamp_series.h"
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace AcquisitionServer {
|
||||
class CHeaderAdapterBrainProductsBrainampSeries final : public CHeaderAdapter
|
||||
{
|
||||
public:
|
||||
|
||||
CHeaderAdapterBrainProductsBrainampSeries(IHeader& adaptedHeader, EParameter* channelSelected)
|
||||
: CHeaderAdapter(adaptedHeader), m_ChannelSelected(channelSelected) {}
|
||||
|
||||
bool setChannelCount(const size_t /*nChannel*/) override { return false; }
|
||||
bool setChannelName(const size_t /*index*/, const char* /*name*/) override { return false; }
|
||||
|
||||
size_t getChannelCount() const override;
|
||||
const char* getChannelName(const size_t index) const override;
|
||||
|
||||
EParameter* m_ChannelSelected = nullptr;
|
||||
};
|
||||
} // namespace AcquisitionServer
|
||||
} // namespace OpenViBE
|
||||
|
||||
#endif // TARGET_OS_Windows
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user