API reference

Detailed documentation is available here: Cannot resolve file macro, invalid file name or id..

Code walkthrough

The Emotiv Engine Client API provides an event-driven managed wrapper around the the Emotiv Engine in DotNetEmotivSDK.dll.

EmoEngineClient class
The EmoEngineClient class interacts with Emotiv's EmoEngine class in two distinct ways.
  • Polling for neuroheadset device state, which is reported in EmoState instances. A worker thread polls the ProcessEvents(Int32) method.
  • Polling for realtime electrode data from the neuroheadset device, which is reported in dictionaries. A worker thread polls the GetData(UInt32) method.

Call the StartEmoEngine method to start the engine's ProcessEvents(Int32) worker thread.
Call the StartDataPolling method to start the engine's GetData(UInt32) worker thread.
Subscribe to the PropertyChanged event to be notified when an EmoEngineClient property changes value. To get realtime data, check the Buffer property in your PropertyChanged event handler. For example, this is how the NeuroDataControl handles the PropertyChanged event:

void emoEngineClient_PropertyChanged( object sender, PropertyChangedEventArgs e )
{
    if( e.PropertyName == "Buffer" )
    {
        EmoEngineClient emoEngineClient = sender as EmoEngineClient;

        lock( emoEngineClient.Buffer.ChannelData.SyncRoot )
        {
            foreach( KeyValuePair<EdkDll.EE_DataChannel_t, double[]> kvp in emoEngineClient.Buffer.ChannelData )
            {
                if( this._timeSeriesControlDictionary.ContainsKey( kvp.Key ) )
                {
                    EdkDll.EE_DataChannel_t channel = kvp.Key;

                    double[] data = kvp.Value;

                    this._timeSeriesControlDictionary[channel].UpdateDisplay( data );
                }
            }
        }
    }
}


SampleBuffer class
The SampleBuffer class collects samples of electrode data from the Emotiv neuroheadset's realtime data stream and saves them in a SampleBufferDictionary.

The neuroheadset periodically sends data frames of electrode measurements and reference signals. The engine's DataGetSamplingRate(UInt32) property determines how fast data frames arrive. This value is typically 128Hz.

Each frame contains data for the channels specified in the EE_DataChannel_t enumeration. Currently, each data frame comprises 14 channels of electrode data and 11 channels of reference and other signals.

Use the ChannelData property to access data frames in the sample buffer. Synchronize access to the SampleBufferDictionary class by using the lock statement and the SyncRoot property.

ChannelContext class
The ChannelContext class provides a collection of properties for a data channel.
  • AddToBuffer: Boolean indicating that the data channel is included in the SampleBuffer.
  • RemoveDCBias: Boolean indicating that any DC bias in the data channel is removed.
  • IsElectrodeChannel: Boolean indicating that the data channel holds electrode data.
  • ComputeFFT: Boolean indicating that a Fast Fourier Transform (FFT) is computed for the data channel.
  • ContactQuality: A EE_EEG_ContactQuality_t that indicates the signal quality of the data channel.
The EmoEngineClient class creates a default collection of channel contexts in the PopulateChannelContexts method.

EmotivState class
The EmotivState class provides property wrappers around the EmoState methods. EmotivState wraps EmoState methods with CLR properties, which enables data binding in the visualization layer.

Realtime data from the neuroheadset maps to EmoEngineClientLibrary data channels in the InputChannelToDataChannelMap property.

EmoEngineControlLibrary namespace

TimeSeriesControl
The TimeSeriesControl class is a lightweight WPF control that displays a buffer of double data.

NeuroDataControl
The NeuroDataControl class displays realtime electrode data from the Emotiv neuroheadset.

Last edited Nov 14, 2013 at 12:45 AM by JimGalasyn, version 13

Comments

sina370 Nov 17, 2013 at 9:14 AM 
hi , i need to take the each electrode data after computing FFT and and display them in a text file , how its possible to get all those data from your library.
thanks