<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.bci2000.org/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kgoering</id>
	<title>BCI2000 Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.bci2000.org/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kgoering"/>
	<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php/Special:Contributions/Kgoering"/>
	<updated>2026-06-30T17:10:14Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7567</id>
		<title>User Reference:gNautilus</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7567"/>
		<updated>2015-07-31T19:04:15Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Source Code Revisions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Synopsis==&lt;br /&gt;
The g.Nautilus is a biopotential amplifier with wireless transmission technology with either wet or dry electrodes. It reads in up to 32 signal channels and 8 trigger channels.&lt;br /&gt;
&lt;br /&gt;
==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/core/SignalSource/g.NautilusSource&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
===Author===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com) University of Kansas&lt;br /&gt;
&lt;br /&gt;
===Version History===&lt;br /&gt;
Version 1.0: July 2015&lt;br /&gt;
*Supports a single g.Nautilus&lt;br /&gt;
*Referencing by any channel&lt;br /&gt;
*Supports filters&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: 4928&lt;br /&gt;
*Tested under: 4942&lt;br /&gt;
*Known to compile under: 4942&lt;br /&gt;
*Broken since: N/A&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
The g.Nautilus is a wireless headset by g.tec, and is the first in their product line to use g.NEEDaccess exclusively for realtime access.  This documentation explains the parameterization and specifics on how to set up the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of right now, g.Nautilus is only supported by Windows 7 with 32 bit and newer. g.Nautiulus can only be built using Visual Studio on Windows.&lt;br /&gt;
&lt;br /&gt;
Install g.NEEDaccess_Sever on a 32bit machine. Ensure the device is charged and connected to the base station (refer to the included documentation for help with this).  Start BCI2000 with the gNautilusSource module.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
* &#039;&#039;&#039;SourceCh&#039;&#039;&#039; represents the total number of channels to be logged from the source module.&lt;br /&gt;
* &#039;&#039;&#039;SampleBlockSize&#039;&#039;&#039; should be set equal to the size of the sample block pulled from the device. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt; 25 and up found to work best during testing for 250Hz&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SampleRate&#039;&#039;&#039; determines the rate at which the device samples data. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Only the following sample rates are currently supported by the API: 250Hz and 500Hz.&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;ChannelNames&#039;&#039;&#039; is a convenience parameter.  Name channels here and they can be referenced by these names later.&lt;br /&gt;
* &#039;&#039;&#039;SourceChOffset&#039;&#039;&#039; should be set to a list of &amp;quot;0&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;SourceChGain&#039;&#039;&#039; should be set to a list of &amp;quot;1&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDMaster&#039;&#039;&#039; is the serial number identifier of the master g.Nautilus device.  This serial can be found on the physical device and is typically in a &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDs&#039;&#039;&#039; is a list of device serials (typically in &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format) which corresponds to the devices to record channels from.  One of these serials must be specified as the master device in the &amp;quot;DeviceIDMaster&amp;quot; parameter.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Device slaving has not been tested. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;RefChList&#039;&#039;&#039; is a list of channels which can act as &amp;quot;Reference&amp;quot; channels for each device.  If left blank, no channel will be used as a reference, and the raw signal will be recorded in the output.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;If specifying reference channels, there must be one reference channel per device specified in &amp;quot;DeviceIDs&amp;quot; in the same order. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SourceChList&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;SourceBufferSize&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;EnableAccelerationData&#039;&#039;&#039; is a toggle button to enable acceleration data and store them in synchronous states AccelerationX1, AcceleratioY1, and AccelerationZ1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record acceleration data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableCounterInput&#039;&#039;&#039; is a toggle button to enable the counter data and store it in the synchronous state Counter1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record counter data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableLinkQuality&#039;&#039;&#039; is a toggle button to enable the link quality data and store it in the synchronous state LinkQuality1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record link quality data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableBatteryLevel&#039;&#039;&#039; is a toggle button to enable the battery level data and store it in the synchronous state Battery1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record battery level data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableDigitalInputs&#039;&#039;&#039; is a toggle button to enable both digital input ports and store them in synchronous states DigitalInput1 - DigitalInput8.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record digital input, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableValidationIndicator&#039;&#039;&#039; is a toggle button to enable validation data and store it in the synchronous state Validation1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record validation data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Trigger Channels==&lt;br /&gt;
===Acceleration===&lt;br /&gt;
Acceleration is stored in three separate states with the axis labeled, i.e. the acceleration on the x-axis is stored in AccelerationX1.&lt;br /&gt;
The g.Nautilus records the acceleration between -6g and 6g. It is then translated into a value between 0 and 65535 with the equation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\lfloor((acceleration + 6) / 12) * 65535\rfloor&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus if the acceleration was 0 then the state would have the value 32767.&lt;br /&gt;
&lt;br /&gt;
===Counter===&lt;br /&gt;
Counter is a value that is constantly increasing in value and then repeats starting at 0. It is stored in Counter1.&lt;br /&gt;
&lt;br /&gt;
===Link Quality===&lt;br /&gt;
Link quality is a value between 0 and 100. It is stored in LinkQuality1. When link quality falls bellow 10% the first time, BCI2000 will give a warning.&lt;br /&gt;
&lt;br /&gt;
===Battery Level===&lt;br /&gt;
Battery level is a value between 0 and 100. It is stored in Battery1. When battery falls bellow 10%, BCI2000 will give a warning and again when it falls below 5%.&lt;br /&gt;
&lt;br /&gt;
===Digital Input===&lt;br /&gt;
Digital input port is on the Base Station. The value is between 0 and 255 and then separated into to a binary number which is then saved in a state with the corresponding number of the bit, i.e. bit 5 is stored in DigitalInput5.&lt;br /&gt;
&lt;br /&gt;
[[File:gNautilusDigitalInput.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Validation Indicator===&lt;br /&gt;
Validation indicator is a value of 0 or 1. It is stored in Validation1. If it is 0, then the data may not be valid. If it is 1, the data is valid.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Filters]], [[Contributions:ADCs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7566</id>
		<title>User Reference:gNautilus</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7566"/>
		<updated>2015-07-31T19:02:51Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Functional Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Synopsis==&lt;br /&gt;
The g.Nautilus is a biopotential amplifier with wireless transmission technology with either wet or dry electrodes. It reads in up to 32 signal channels and 8 trigger channels.&lt;br /&gt;
&lt;br /&gt;
==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/core/SignalSource/g.NautilusSource&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
===Author===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com) University of Kansas&lt;br /&gt;
&lt;br /&gt;
===Version History===&lt;br /&gt;
Version 1.0: July 2015&lt;br /&gt;
*Supports a single g.Nautilus&lt;br /&gt;
*Referencing by any channel&lt;br /&gt;
*Supports filters&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: N/A&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
The g.Nautilus is a wireless headset by g.tec, and is the first in their product line to use g.NEEDaccess exclusively for realtime access.  This documentation explains the parameterization and specifics on how to set up the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of right now, g.Nautilus is only supported by Windows 7 with 32 bit and newer. g.Nautiulus can only be built using Visual Studio on Windows.&lt;br /&gt;
&lt;br /&gt;
Install g.NEEDaccess_Sever on a 32bit machine. Ensure the device is charged and connected to the base station (refer to the included documentation for help with this).  Start BCI2000 with the gNautilusSource module.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
* &#039;&#039;&#039;SourceCh&#039;&#039;&#039; represents the total number of channels to be logged from the source module.&lt;br /&gt;
* &#039;&#039;&#039;SampleBlockSize&#039;&#039;&#039; should be set equal to the size of the sample block pulled from the device. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt; 25 and up found to work best during testing for 250Hz&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SampleRate&#039;&#039;&#039; determines the rate at which the device samples data. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Only the following sample rates are currently supported by the API: 250Hz and 500Hz.&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;ChannelNames&#039;&#039;&#039; is a convenience parameter.  Name channels here and they can be referenced by these names later.&lt;br /&gt;
* &#039;&#039;&#039;SourceChOffset&#039;&#039;&#039; should be set to a list of &amp;quot;0&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;SourceChGain&#039;&#039;&#039; should be set to a list of &amp;quot;1&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDMaster&#039;&#039;&#039; is the serial number identifier of the master g.Nautilus device.  This serial can be found on the physical device and is typically in a &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDs&#039;&#039;&#039; is a list of device serials (typically in &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format) which corresponds to the devices to record channels from.  One of these serials must be specified as the master device in the &amp;quot;DeviceIDMaster&amp;quot; parameter.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Device slaving has not been tested. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;RefChList&#039;&#039;&#039; is a list of channels which can act as &amp;quot;Reference&amp;quot; channels for each device.  If left blank, no channel will be used as a reference, and the raw signal will be recorded in the output.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;If specifying reference channels, there must be one reference channel per device specified in &amp;quot;DeviceIDs&amp;quot; in the same order. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SourceChList&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;SourceBufferSize&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;EnableAccelerationData&#039;&#039;&#039; is a toggle button to enable acceleration data and store them in synchronous states AccelerationX1, AcceleratioY1, and AccelerationZ1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record acceleration data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableCounterInput&#039;&#039;&#039; is a toggle button to enable the counter data and store it in the synchronous state Counter1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record counter data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableLinkQuality&#039;&#039;&#039; is a toggle button to enable the link quality data and store it in the synchronous state LinkQuality1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record link quality data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableBatteryLevel&#039;&#039;&#039; is a toggle button to enable the battery level data and store it in the synchronous state Battery1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record battery level data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableDigitalInputs&#039;&#039;&#039; is a toggle button to enable both digital input ports and store them in synchronous states DigitalInput1 - DigitalInput8.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record digital input, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableValidationIndicator&#039;&#039;&#039; is a toggle button to enable validation data and store it in the synchronous state Validation1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record validation data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Trigger Channels==&lt;br /&gt;
===Acceleration===&lt;br /&gt;
Acceleration is stored in three separate states with the axis labeled, i.e. the acceleration on the x-axis is stored in AccelerationX1.&lt;br /&gt;
The g.Nautilus records the acceleration between -6g and 6g. It is then translated into a value between 0 and 65535 with the equation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\lfloor((acceleration + 6) / 12) * 65535\rfloor&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus if the acceleration was 0 then the state would have the value 32767.&lt;br /&gt;
&lt;br /&gt;
===Counter===&lt;br /&gt;
Counter is a value that is constantly increasing in value and then repeats starting at 0. It is stored in Counter1.&lt;br /&gt;
&lt;br /&gt;
===Link Quality===&lt;br /&gt;
Link quality is a value between 0 and 100. It is stored in LinkQuality1. When link quality falls bellow 10% the first time, BCI2000 will give a warning.&lt;br /&gt;
&lt;br /&gt;
===Battery Level===&lt;br /&gt;
Battery level is a value between 0 and 100. It is stored in Battery1. When battery falls bellow 10%, BCI2000 will give a warning and again when it falls below 5%.&lt;br /&gt;
&lt;br /&gt;
===Digital Input===&lt;br /&gt;
Digital input port is on the Base Station. The value is between 0 and 255 and then separated into to a binary number which is then saved in a state with the corresponding number of the bit, i.e. bit 5 is stored in DigitalInput5.&lt;br /&gt;
&lt;br /&gt;
[[File:gNautilusDigitalInput.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Validation Indicator===&lt;br /&gt;
Validation indicator is a value of 0 or 1. It is stored in Validation1. If it is 0, then the data may not be valid. If it is 1, the data is valid.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Filters]], [[Contributions:ADCs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7561</id>
		<title>User Reference:gNautilus</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7561"/>
		<updated>2015-07-31T16:03:24Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Location */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Synopsis==&lt;br /&gt;
The g.Nautilus is a biopotential amplifier with wireless transmission technology with either wet or dry electrodes. It reads in up to 32 signal channels and 8 trigger channels.&lt;br /&gt;
&lt;br /&gt;
==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/core/SignalSource/g.NautilusSource&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
===Author===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com) University of Kansas&lt;br /&gt;
&lt;br /&gt;
===Version History===&lt;br /&gt;
Version 1.0: July 2015&lt;br /&gt;
*Supports a single g.Nautilus&lt;br /&gt;
*Referencing by any channel&lt;br /&gt;
*Supports filters&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: N/A&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
The g.Nautilus is a wireless headset by g.tec, and is the first in their product line to use g.NEEDaccess exclusively for realtime access.  This documentation explains the parameterization and specifics on how to set up the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of right now, g.Nautilus is only supported by Windows 7 and newer versions. g.Nautiulus can only be built using Visual Studio on Windows.&lt;br /&gt;
&lt;br /&gt;
Ensure the device is charged and connected to the base station (refer to the included documentation for help with this).  Start BCI2000 with the gNautilusSource module.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
* &#039;&#039;&#039;SourceCh&#039;&#039;&#039; represents the total number of channels to be logged from the source module.&lt;br /&gt;
* &#039;&#039;&#039;SampleBlockSize&#039;&#039;&#039; should be set equal to the size of the sample block pulled from the device. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt; 25 and up found to work best during testing for 250Hz&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SampleRate&#039;&#039;&#039; determines the rate at which the device samples data. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Only the following sample rates are currently supported by the API: 250Hz and 500Hz.&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;ChannelNames&#039;&#039;&#039; is a convenience parameter.  Name channels here and they can be referenced by these names later.&lt;br /&gt;
* &#039;&#039;&#039;SourceChOffset&#039;&#039;&#039; should be set to a list of &amp;quot;0&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;SourceChGain&#039;&#039;&#039; should be set to a list of &amp;quot;1&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDMaster&#039;&#039;&#039; is the serial number identifier of the master g.Nautilus device.  This serial can be found on the physical device and is typically in a &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDs&#039;&#039;&#039; is a list of device serials (typically in &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format) which corresponds to the devices to record channels from.  One of these serials must be specified as the master device in the &amp;quot;DeviceIDMaster&amp;quot; parameter.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Device slaving has not been tested. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;RefChList&#039;&#039;&#039; is a list of channels which can act as &amp;quot;Reference&amp;quot; channels for each device.  If left blank, no channel will be used as a reference, and the raw signal will be recorded in the output.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;If specifying reference channels, there must be one reference channel per device specified in &amp;quot;DeviceIDs&amp;quot; in the same order. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SourceChList&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;SourceBufferSize&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;EnableAccelerationData&#039;&#039;&#039; is a toggle button to enable acceleration data and store them in synchronous states AccelerationX1, AcceleratioY1, and AccelerationZ1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record acceleration data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableCounterInput&#039;&#039;&#039; is a toggle button to enable the counter data and store it in the synchronous state Counter1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record counter data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableLinkQuality&#039;&#039;&#039; is a toggle button to enable the link quality data and store it in the synchronous state LinkQuality1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record link quality data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableBatteryLevel&#039;&#039;&#039; is a toggle button to enable the battery level data and store it in the synchronous state Battery1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record battery level data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableDigitalInputs&#039;&#039;&#039; is a toggle button to enable both digital input ports and store them in synchronous states DigitalInput1 - DigitalInput8.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record digital input, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableValidationIndicator&#039;&#039;&#039; is a toggle button to enable validation data and store it in the synchronous state Validation1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record validation data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Trigger Channels==&lt;br /&gt;
===Acceleration===&lt;br /&gt;
Acceleration is stored in three separate states with the axis labeled, i.e. the acceleration on the x-axis is stored in AccelerationX1.&lt;br /&gt;
The g.Nautilus records the acceleration between -6g and 6g. It is then translated into a value between 0 and 65535 with the equation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\lfloor((acceleration + 6) / 12) * 65535\rfloor&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus if the acceleration was 0 then the state would have the value 32767.&lt;br /&gt;
&lt;br /&gt;
===Counter===&lt;br /&gt;
Counter is a value that is constantly increasing in value and then repeats starting at 0. It is stored in Counter1.&lt;br /&gt;
&lt;br /&gt;
===Link Quality===&lt;br /&gt;
Link quality is a value between 0 and 100. It is stored in LinkQuality1. When link quality falls bellow 10% the first time, BCI2000 will give a warning.&lt;br /&gt;
&lt;br /&gt;
===Battery Level===&lt;br /&gt;
Battery level is a value between 0 and 100. It is stored in Battery1. When battery falls bellow 10%, BCI2000 will give a warning and again when it falls below 5%.&lt;br /&gt;
&lt;br /&gt;
===Digital Input===&lt;br /&gt;
Digital input port is on the Base Station. The value is between 0 and 255 and then separated into to a binary number which is then saved in a state with the corresponding number of the bit, i.e. bit 5 is stored in DigitalInput5.&lt;br /&gt;
&lt;br /&gt;
[[File:gNautilusDigitalInput.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Validation Indicator===&lt;br /&gt;
Validation indicator is a value of 0 or 1. It is stored in Validation1. If it is 0, then the data may not be valid. If it is 1, the data is valid.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Filters]], [[Contributions:ADCs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7560</id>
		<title>User Reference:gNautilus</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7560"/>
		<updated>2015-07-31T15:48:52Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Author */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Synopsis==&lt;br /&gt;
The g.Nautilus is a biopotential amplifier with wireless transmission technology with either wet or dry electrodes. It reads in up to 32 signal channels and 8 trigger channels.&lt;br /&gt;
&lt;br /&gt;
==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/core/SignalSource/gNautilus&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
===Author===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com) University of Kansas&lt;br /&gt;
&lt;br /&gt;
===Version History===&lt;br /&gt;
Version 1.0: July 2015&lt;br /&gt;
*Supports a single g.Nautilus&lt;br /&gt;
*Referencing by any channel&lt;br /&gt;
*Supports filters&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: N/A&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
The g.Nautilus is a wireless headset by g.tec, and is the first in their product line to use g.NEEDaccess exclusively for realtime access.  This documentation explains the parameterization and specifics on how to set up the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of right now, g.Nautilus is only supported by Windows 7 and newer versions. g.Nautiulus can only be built using Visual Studio on Windows.&lt;br /&gt;
&lt;br /&gt;
Ensure the device is charged and connected to the base station (refer to the included documentation for help with this).  Start BCI2000 with the gNautilusSource module.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
* &#039;&#039;&#039;SourceCh&#039;&#039;&#039; represents the total number of channels to be logged from the source module.&lt;br /&gt;
* &#039;&#039;&#039;SampleBlockSize&#039;&#039;&#039; should be set equal to the size of the sample block pulled from the device. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt; 25 and up found to work best during testing for 250Hz&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SampleRate&#039;&#039;&#039; determines the rate at which the device samples data. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Only the following sample rates are currently supported by the API: 250Hz and 500Hz.&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;ChannelNames&#039;&#039;&#039; is a convenience parameter.  Name channels here and they can be referenced by these names later.&lt;br /&gt;
* &#039;&#039;&#039;SourceChOffset&#039;&#039;&#039; should be set to a list of &amp;quot;0&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;SourceChGain&#039;&#039;&#039; should be set to a list of &amp;quot;1&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDMaster&#039;&#039;&#039; is the serial number identifier of the master g.Nautilus device.  This serial can be found on the physical device and is typically in a &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDs&#039;&#039;&#039; is a list of device serials (typically in &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format) which corresponds to the devices to record channels from.  One of these serials must be specified as the master device in the &amp;quot;DeviceIDMaster&amp;quot; parameter.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Device slaving has not been tested. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;RefChList&#039;&#039;&#039; is a list of channels which can act as &amp;quot;Reference&amp;quot; channels for each device.  If left blank, no channel will be used as a reference, and the raw signal will be recorded in the output.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;If specifying reference channels, there must be one reference channel per device specified in &amp;quot;DeviceIDs&amp;quot; in the same order. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SourceChList&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;SourceBufferSize&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;EnableAccelerationData&#039;&#039;&#039; is a toggle button to enable acceleration data and store them in synchronous states AccelerationX1, AcceleratioY1, and AccelerationZ1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record acceleration data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableCounterInput&#039;&#039;&#039; is a toggle button to enable the counter data and store it in the synchronous state Counter1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record counter data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableLinkQuality&#039;&#039;&#039; is a toggle button to enable the link quality data and store it in the synchronous state LinkQuality1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record link quality data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableBatteryLevel&#039;&#039;&#039; is a toggle button to enable the battery level data and store it in the synchronous state Battery1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record battery level data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableDigitalInputs&#039;&#039;&#039; is a toggle button to enable both digital input ports and store them in synchronous states DigitalInput1 - DigitalInput8.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record digital input, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableValidationIndicator&#039;&#039;&#039; is a toggle button to enable validation data and store it in the synchronous state Validation1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record validation data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Trigger Channels==&lt;br /&gt;
===Acceleration===&lt;br /&gt;
Acceleration is stored in three separate states with the axis labeled, i.e. the acceleration on the x-axis is stored in AccelerationX1.&lt;br /&gt;
The g.Nautilus records the acceleration between -6g and 6g. It is then translated into a value between 0 and 65535 with the equation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\lfloor((acceleration + 6) / 12) * 65535\rfloor&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus if the acceleration was 0 then the state would have the value 32767.&lt;br /&gt;
&lt;br /&gt;
===Counter===&lt;br /&gt;
Counter is a value that is constantly increasing in value and then repeats starting at 0. It is stored in Counter1.&lt;br /&gt;
&lt;br /&gt;
===Link Quality===&lt;br /&gt;
Link quality is a value between 0 and 100. It is stored in LinkQuality1. When link quality falls bellow 10% the first time, BCI2000 will give a warning.&lt;br /&gt;
&lt;br /&gt;
===Battery Level===&lt;br /&gt;
Battery level is a value between 0 and 100. It is stored in Battery1. When battery falls bellow 10%, BCI2000 will give a warning and again when it falls below 5%.&lt;br /&gt;
&lt;br /&gt;
===Digital Input===&lt;br /&gt;
Digital input port is on the Base Station. The value is between 0 and 255 and then separated into to a binary number which is then saved in a state with the corresponding number of the bit, i.e. bit 5 is stored in DigitalInput5.&lt;br /&gt;
&lt;br /&gt;
[[File:gNautilusDigitalInput.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Validation Indicator===&lt;br /&gt;
Validation indicator is a value of 0 or 1. It is stored in Validation1. If it is 0, then the data may not be valid. If it is 1, the data is valid.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Filters]], [[Contributions:ADCs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=Contributions:ADCs&amp;diff=7559</id>
		<title>Contributions:ADCs</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=Contributions:ADCs&amp;diff=7559"/>
		<updated>2015-07-31T15:48:21Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following data acquisition filters are available in the [[Contributions:Contents|Contributions]] section of BCI2000:&lt;br /&gt;
&lt;br /&gt;
*[[Contributions:AmpServerProADC]]: Interface to the EGI AmpServerPro.&lt;br /&gt;
*[[Contributions:BioRadioADC]]: Interface to the BioRadio amplifer.&lt;br /&gt;
*[[Contributions:Biosemi2ADC]]: Interface to the Biosemi amplifier.&lt;br /&gt;
*[[Contributions:Blackrock]]: Interface Blackrock devices through CereLink.&lt;br /&gt;
*[[Contributions:B-Alert]]: Interface to B-Alert brain monitoring systems.&lt;br /&gt;
*[[Contributions:DAS_ADC]]: Interface to MeasurementComputing AD cards.&lt;br /&gt;
*[[Contributions:DTADC]]: Interface to Data Translation boards.&lt;br /&gt;
*[[Contributions:Emotiv]]: Interface to the Emotiv EPOC.&lt;br /&gt;
*[[Contributions:FieldTripBufferSource]]: Interface to the FieldTrip buffer.&lt;br /&gt;
*[[Contributions:FilePlayback]]: A source module that replays sessions from recorded data files.&lt;br /&gt;
*[[Contributions:gHIamp]]: Interface to the gHIamp.&lt;br /&gt;
*[[Contributions:gNautilus]]: Interface to the gNautilus bypassing the server&lt;br /&gt;
*[[Contributions:gNautilusNEEDAccess]]: Interface to the gNautilus via g.NEEDAccess.&lt;br /&gt;
*[[Contributions:MicromedADC]]: Interface to the Micromed EEG system.&lt;br /&gt;
*[[Contributions:ModularEEG]]: Interface to the ModularEEG system.&lt;br /&gt;
*[[Contributions:Neuralynx]]: Interface to Neuralynx systems&lt;br /&gt;
*[[Contributions:NIADC]]: Interface to National Instruments boards.&lt;br /&gt;
*[[Contributions:NIDAQ-MX]]: Interface to National Instruments boards using the MX driver.&lt;br /&gt;
*[[Contributions:NIDAQLogger]]: Interface to multiple National Instruments DAQ boards using MX driver (INPUT ONLY).&lt;br /&gt;
*[[Contributions:NIDAQFilter]]: Interface to multiple National Instruments DAQ boards using MX driver (OUTPUT ONLY).&lt;br /&gt;
*[[Contributions:NeuroscanADC]]: Neuroscan Acquire socket protocol client.&lt;br /&gt;
*[[Contributions:NeuroscanAccessSDK]]: Interface to Neuroscan Direct Access SDK.&lt;br /&gt;
*[[Contributions:NeuroSky]]: Interface to Neurosky MindSet.&lt;br /&gt;
*[[Contributions:NicoletOne]]: Interface to NicoletOne nEEG series amplifiers.&lt;br /&gt;
*[[Contributions:ctfneurod]]: CTF RealTime to Neuroscan Acquire relay.&lt;br /&gt;
*[[Contributions:RDAClientADC]]: Brain Vision RDA socket protocol client.&lt;br /&gt;
*[[Contributions:TDTADC]]: Interface to Tucker-Davis Pentusa systems.&lt;br /&gt;
*[[Contributions:TMSiADC]]: Interface to TMSi Refa and Porti systems.&lt;br /&gt;
*[[Contributions:vAmpADC]]: Interface to Brain Products V-amp systems.&lt;br /&gt;
*[[Contributions:EnobioADC]]: Interface to Enobio sensor.&lt;br /&gt;
*[[Contributions:DSISerial]]: Interface to Dry Sensor Interface (DSI) EEG systems by Wearable Sensing.&lt;br /&gt;
*[[Contributions:MicRecorderFilter]]: Interface to the system soundcard, logging audio input.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Filters]], [[Contributions:How to use a Contributed Source Module]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contents]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7558</id>
		<title>User Reference:gNautilus</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7558"/>
		<updated>2015-07-31T15:46:57Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Functional Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Synopsis==&lt;br /&gt;
The g.Nautilus is a biopotential amplifier with wireless transmission technology with either wet or dry electrodes. It reads in up to 32 signal channels and 8 trigger channels.&lt;br /&gt;
&lt;br /&gt;
==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/core/SignalSource/gNautilus&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
===Author===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com)&lt;br /&gt;
===Version History===&lt;br /&gt;
Version 1.0: July 2015&lt;br /&gt;
*Supports a single g.Nautilus&lt;br /&gt;
*Referencing by any channel&lt;br /&gt;
*Supports filters&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: N/A&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
The g.Nautilus is a wireless headset by g.tec, and is the first in their product line to use g.NEEDaccess exclusively for realtime access.  This documentation explains the parameterization and specifics on how to set up the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of right now, g.Nautilus is only supported by Windows 7 and newer versions. g.Nautiulus can only be built using Visual Studio on Windows.&lt;br /&gt;
&lt;br /&gt;
Ensure the device is charged and connected to the base station (refer to the included documentation for help with this).  Start BCI2000 with the gNautilusSource module.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
* &#039;&#039;&#039;SourceCh&#039;&#039;&#039; represents the total number of channels to be logged from the source module.&lt;br /&gt;
* &#039;&#039;&#039;SampleBlockSize&#039;&#039;&#039; should be set equal to the size of the sample block pulled from the device. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt; 25 and up found to work best during testing for 250Hz&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SampleRate&#039;&#039;&#039; determines the rate at which the device samples data. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Only the following sample rates are currently supported by the API: 250Hz and 500Hz.&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;ChannelNames&#039;&#039;&#039; is a convenience parameter.  Name channels here and they can be referenced by these names later.&lt;br /&gt;
* &#039;&#039;&#039;SourceChOffset&#039;&#039;&#039; should be set to a list of &amp;quot;0&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;SourceChGain&#039;&#039;&#039; should be set to a list of &amp;quot;1&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDMaster&#039;&#039;&#039; is the serial number identifier of the master g.Nautilus device.  This serial can be found on the physical device and is typically in a &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDs&#039;&#039;&#039; is a list of device serials (typically in &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format) which corresponds to the devices to record channels from.  One of these serials must be specified as the master device in the &amp;quot;DeviceIDMaster&amp;quot; parameter.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Device slaving has not been tested. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;RefChList&#039;&#039;&#039; is a list of channels which can act as &amp;quot;Reference&amp;quot; channels for each device.  If left blank, no channel will be used as a reference, and the raw signal will be recorded in the output.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;If specifying reference channels, there must be one reference channel per device specified in &amp;quot;DeviceIDs&amp;quot; in the same order. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SourceChList&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;SourceBufferSize&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;EnableAccelerationData&#039;&#039;&#039; is a toggle button to enable acceleration data and store them in synchronous states AccelerationX1, AcceleratioY1, and AccelerationZ1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record acceleration data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableCounterInput&#039;&#039;&#039; is a toggle button to enable the counter data and store it in the synchronous state Counter1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record counter data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableLinkQuality&#039;&#039;&#039; is a toggle button to enable the link quality data and store it in the synchronous state LinkQuality1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record link quality data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableBatteryLevel&#039;&#039;&#039; is a toggle button to enable the battery level data and store it in the synchronous state Battery1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record battery level data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableDigitalInputs&#039;&#039;&#039; is a toggle button to enable both digital input ports and store them in synchronous states DigitalInput1 - DigitalInput8.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record digital input, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableValidationIndicator&#039;&#039;&#039; is a toggle button to enable validation data and store it in the synchronous state Validation1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record validation data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Trigger Channels==&lt;br /&gt;
===Acceleration===&lt;br /&gt;
Acceleration is stored in three separate states with the axis labeled, i.e. the acceleration on the x-axis is stored in AccelerationX1.&lt;br /&gt;
The g.Nautilus records the acceleration between -6g and 6g. It is then translated into a value between 0 and 65535 with the equation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\lfloor((acceleration + 6) / 12) * 65535\rfloor&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus if the acceleration was 0 then the state would have the value 32767.&lt;br /&gt;
&lt;br /&gt;
===Counter===&lt;br /&gt;
Counter is a value that is constantly increasing in value and then repeats starting at 0. It is stored in Counter1.&lt;br /&gt;
&lt;br /&gt;
===Link Quality===&lt;br /&gt;
Link quality is a value between 0 and 100. It is stored in LinkQuality1. When link quality falls bellow 10% the first time, BCI2000 will give a warning.&lt;br /&gt;
&lt;br /&gt;
===Battery Level===&lt;br /&gt;
Battery level is a value between 0 and 100. It is stored in Battery1. When battery falls bellow 10%, BCI2000 will give a warning and again when it falls below 5%.&lt;br /&gt;
&lt;br /&gt;
===Digital Input===&lt;br /&gt;
Digital input port is on the Base Station. The value is between 0 and 255 and then separated into to a binary number which is then saved in a state with the corresponding number of the bit, i.e. bit 5 is stored in DigitalInput5.&lt;br /&gt;
&lt;br /&gt;
[[File:gNautilusDigitalInput.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Validation Indicator===&lt;br /&gt;
Validation indicator is a value of 0 or 1. It is stored in Validation1. If it is 0, then the data may not be valid. If it is 1, the data is valid.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Filters]], [[Contributions:ADCs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7557</id>
		<title>User Reference:gNautilus</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7557"/>
		<updated>2015-07-31T15:36:51Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Digital Input */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Synopsis==&lt;br /&gt;
The g.Nautilus is a biopotential amplifier with wireless transmission technology with either wet or dry electrodes. It reads in up to 32 signal channels and 8 trigger channels.&lt;br /&gt;
&lt;br /&gt;
==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/core/SignalSource/gNautilus&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
===Author===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com)&lt;br /&gt;
===Version History===&lt;br /&gt;
Version 1.0: July 2015&lt;br /&gt;
*Supports a single g.Nautilus&lt;br /&gt;
*Referencing by any channel&lt;br /&gt;
*Supports filters&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: N/A&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
The g.Nautilus is a wireless headset by g.tec, and is the first in their product line to use g.NEEDaccess exclusively for realtime access.  This documentation explains the parameterization and specifics on how to set up the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of right now, g.Nautilus is only supported by Windows 7 and newer versions. g.Nautiulus can only be built using Visual Studio on Windows.&lt;br /&gt;
&lt;br /&gt;
Ensure the device is charged and connected to the base station (refer to the included documentation for help with this).  Start BCI2000 with the gNautilus source module.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
* &#039;&#039;&#039;SourceCh&#039;&#039;&#039; represents the total number of channels to be logged from the source module.&lt;br /&gt;
* &#039;&#039;&#039;SampleBlockSize&#039;&#039;&#039; should be set equal to the size of the sample block pulled from the device. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt; 25 and up found to work best during testing for 250Hz&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SampleRate&#039;&#039;&#039; determines the rate at which the device samples data. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Only the following sample rates are currently supported by the API: 250Hz and 500Hz.&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;ChannelNames&#039;&#039;&#039; is a convenience parameter.  Name channels here and they can be referenced by these names later.&lt;br /&gt;
* &#039;&#039;&#039;SourceChOffset&#039;&#039;&#039; should be set to a list of &amp;quot;0&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;SourceChGain&#039;&#039;&#039; should be set to a list of &amp;quot;1&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDMaster&#039;&#039;&#039; is the serial number identifier of the master g.Nautilus device.  This serial can be found on the physical device and is typically in a &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDs&#039;&#039;&#039; is a list of device serials (typically in &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format) which corresponds to the devices to record channels from.  One of these serials must be specified as the master device in the &amp;quot;DeviceIDMaster&amp;quot; parameter.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Device slaving has not been tested. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;RefChList&#039;&#039;&#039; is a list of channels which can act as &amp;quot;Reference&amp;quot; channels for each device.  If left blank, no channel will be used as a reference, and the raw signal will be recorded in the output.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;If specifying reference channels, there must be one reference channel per device specified in &amp;quot;DeviceIDs&amp;quot; in the same order. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SourceChList&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;SourceBufferSize&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;EnableAccelerationData&#039;&#039;&#039; is a toggle button to enable acceleration data and store them in synchronous states AccelerationX1, AcceleratioY1, and AccelerationZ1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record acceleration data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableCounterInput&#039;&#039;&#039; is a toggle button to enable the counter data and store it in the synchronous state Counter1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record counter data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableLinkQuality&#039;&#039;&#039; is a toggle button to enable the link quality data and store it in the synchronous state LinkQuality1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record link quality data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableBatteryLevel&#039;&#039;&#039; is a toggle button to enable the battery level data and store it in the synchronous state Battery1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record battery level data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableDigitalInputs&#039;&#039;&#039; is a toggle button to enable both digital input ports and store them in synchronous states DigitalInput1 - DigitalInput8.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record digital input, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableValidationIndicator&#039;&#039;&#039; is a toggle button to enable validation data and store it in the synchronous state Validation1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record validation data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Trigger Channels==&lt;br /&gt;
===Acceleration===&lt;br /&gt;
Acceleration is stored in three separate states with the axis labeled, i.e. the acceleration on the x-axis is stored in AccelerationX1.&lt;br /&gt;
The g.Nautilus records the acceleration between -6g and 6g. It is then translated into a value between 0 and 65535 with the equation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\lfloor((acceleration + 6) / 12) * 65535\rfloor&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus if the acceleration was 0 then the state would have the value 32767.&lt;br /&gt;
&lt;br /&gt;
===Counter===&lt;br /&gt;
Counter is a value that is constantly increasing in value and then repeats starting at 0. It is stored in Counter1.&lt;br /&gt;
&lt;br /&gt;
===Link Quality===&lt;br /&gt;
Link quality is a value between 0 and 100. It is stored in LinkQuality1. When link quality falls bellow 10% the first time, BCI2000 will give a warning.&lt;br /&gt;
&lt;br /&gt;
===Battery Level===&lt;br /&gt;
Battery level is a value between 0 and 100. It is stored in Battery1. When battery falls bellow 10%, BCI2000 will give a warning and again when it falls below 5%.&lt;br /&gt;
&lt;br /&gt;
===Digital Input===&lt;br /&gt;
Digital input port is on the Base Station. The value is between 0 and 255 and then separated into to a binary number which is then saved in a state with the corresponding number of the bit, i.e. bit 5 is stored in DigitalInput5.&lt;br /&gt;
&lt;br /&gt;
[[File:gNautilusDigitalInput.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Validation Indicator===&lt;br /&gt;
Validation indicator is a value of 0 or 1. It is stored in Validation1. If it is 0, then the data may not be valid. If it is 1, the data is valid.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Filters]], [[Contributions:ADCs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7556</id>
		<title>User Reference:gNautilus</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7556"/>
		<updated>2015-07-31T15:36:41Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Digital Input */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Synopsis==&lt;br /&gt;
The g.Nautilus is a biopotential amplifier with wireless transmission technology with either wet or dry electrodes. It reads in up to 32 signal channels and 8 trigger channels.&lt;br /&gt;
&lt;br /&gt;
==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/core/SignalSource/gNautilus&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
===Author===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com)&lt;br /&gt;
===Version History===&lt;br /&gt;
Version 1.0: July 2015&lt;br /&gt;
*Supports a single g.Nautilus&lt;br /&gt;
*Referencing by any channel&lt;br /&gt;
*Supports filters&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: N/A&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
The g.Nautilus is a wireless headset by g.tec, and is the first in their product line to use g.NEEDaccess exclusively for realtime access.  This documentation explains the parameterization and specifics on how to set up the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of right now, g.Nautilus is only supported by Windows 7 and newer versions. g.Nautiulus can only be built using Visual Studio on Windows.&lt;br /&gt;
&lt;br /&gt;
Ensure the device is charged and connected to the base station (refer to the included documentation for help with this).  Start BCI2000 with the gNautilus source module.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
* &#039;&#039;&#039;SourceCh&#039;&#039;&#039; represents the total number of channels to be logged from the source module.&lt;br /&gt;
* &#039;&#039;&#039;SampleBlockSize&#039;&#039;&#039; should be set equal to the size of the sample block pulled from the device. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt; 25 and up found to work best during testing for 250Hz&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SampleRate&#039;&#039;&#039; determines the rate at which the device samples data. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Only the following sample rates are currently supported by the API: 250Hz and 500Hz.&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;ChannelNames&#039;&#039;&#039; is a convenience parameter.  Name channels here and they can be referenced by these names later.&lt;br /&gt;
* &#039;&#039;&#039;SourceChOffset&#039;&#039;&#039; should be set to a list of &amp;quot;0&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;SourceChGain&#039;&#039;&#039; should be set to a list of &amp;quot;1&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDMaster&#039;&#039;&#039; is the serial number identifier of the master g.Nautilus device.  This serial can be found on the physical device and is typically in a &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDs&#039;&#039;&#039; is a list of device serials (typically in &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format) which corresponds to the devices to record channels from.  One of these serials must be specified as the master device in the &amp;quot;DeviceIDMaster&amp;quot; parameter.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Device slaving has not been tested. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;RefChList&#039;&#039;&#039; is a list of channels which can act as &amp;quot;Reference&amp;quot; channels for each device.  If left blank, no channel will be used as a reference, and the raw signal will be recorded in the output.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;If specifying reference channels, there must be one reference channel per device specified in &amp;quot;DeviceIDs&amp;quot; in the same order. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SourceChList&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;SourceBufferSize&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;EnableAccelerationData&#039;&#039;&#039; is a toggle button to enable acceleration data and store them in synchronous states AccelerationX1, AcceleratioY1, and AccelerationZ1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record acceleration data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableCounterInput&#039;&#039;&#039; is a toggle button to enable the counter data and store it in the synchronous state Counter1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record counter data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableLinkQuality&#039;&#039;&#039; is a toggle button to enable the link quality data and store it in the synchronous state LinkQuality1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record link quality data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableBatteryLevel&#039;&#039;&#039; is a toggle button to enable the battery level data and store it in the synchronous state Battery1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record battery level data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableDigitalInputs&#039;&#039;&#039; is a toggle button to enable both digital input ports and store them in synchronous states DigitalInput1 - DigitalInput8.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record digital input, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableValidationIndicator&#039;&#039;&#039; is a toggle button to enable validation data and store it in the synchronous state Validation1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record validation data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Trigger Channels==&lt;br /&gt;
===Acceleration===&lt;br /&gt;
Acceleration is stored in three separate states with the axis labeled, i.e. the acceleration on the x-axis is stored in AccelerationX1.&lt;br /&gt;
The g.Nautilus records the acceleration between -6g and 6g. It is then translated into a value between 0 and 65535 with the equation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\lfloor((acceleration + 6) / 12) * 65535\rfloor&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus if the acceleration was 0 then the state would have the value 32767.&lt;br /&gt;
&lt;br /&gt;
===Counter===&lt;br /&gt;
Counter is a value that is constantly increasing in value and then repeats starting at 0. It is stored in Counter1.&lt;br /&gt;
&lt;br /&gt;
===Link Quality===&lt;br /&gt;
Link quality is a value between 0 and 100. It is stored in LinkQuality1. When link quality falls bellow 10% the first time, BCI2000 will give a warning.&lt;br /&gt;
&lt;br /&gt;
===Battery Level===&lt;br /&gt;
Battery level is a value between 0 and 100. It is stored in Battery1. When battery falls bellow 10%, BCI2000 will give a warning and again when it falls below 5%.&lt;br /&gt;
&lt;br /&gt;
===Digital Input===&lt;br /&gt;
Digital input port is on the Base Station. The value is between 0 and 255 and then separated into to a binary number which is then saved in a state with the corresponding number of the bit, i.e. bit 5 is stored in DigitalInput5.&lt;br /&gt;
[[File:gNautilusDigitalInput.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Validation Indicator===&lt;br /&gt;
Validation indicator is a value of 0 or 1. It is stored in Validation1. If it is 0, then the data may not be valid. If it is 1, the data is valid.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Filters]], [[Contributions:ADCs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=File:GNautilusDigitalInput.jpg&amp;diff=7555</id>
		<title>File:GNautilusDigitalInput.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=File:GNautilusDigitalInput.jpg&amp;diff=7555"/>
		<updated>2015-07-31T15:35:55Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: The pin assignment of the digital input for the g.Nautilus device.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The pin assignment of the digital input for the g.Nautilus device.&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7554</id>
		<title>User Reference:gNautilus</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7554"/>
		<updated>2015-07-31T15:24:54Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Synopsis==&lt;br /&gt;
The g.Nautilus is a biopotential amplifier with wireless transmission technology with either wet or dry electrodes. It reads in up to 32 signal channels and 8 trigger channels.&lt;br /&gt;
&lt;br /&gt;
==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/core/SignalSource/gNautilus&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
===Author===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com)&lt;br /&gt;
===Version History===&lt;br /&gt;
Version 1.0: July 2015&lt;br /&gt;
*Supports a single g.Nautilus&lt;br /&gt;
*Referencing by any channel&lt;br /&gt;
*Supports filters&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: N/A&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
The g.Nautilus is a wireless headset by g.tec, and is the first in their product line to use g.NEEDaccess exclusively for realtime access.  This documentation explains the parameterization and specifics on how to set up the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of right now, g.Nautilus is only supported by Windows 7 and newer versions. g.Nautiulus can only be built using Visual Studio on Windows.&lt;br /&gt;
&lt;br /&gt;
Ensure the device is charged and connected to the base station (refer to the included documentation for help with this).  Start BCI2000 with the gNautilus source module.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
* &#039;&#039;&#039;SourceCh&#039;&#039;&#039; represents the total number of channels to be logged from the source module.&lt;br /&gt;
* &#039;&#039;&#039;SampleBlockSize&#039;&#039;&#039; should be set equal to the size of the sample block pulled from the device. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt; 25 and up found to work best during testing for 250Hz&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SampleRate&#039;&#039;&#039; determines the rate at which the device samples data. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Only the following sample rates are currently supported by the API: 250Hz and 500Hz.&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;ChannelNames&#039;&#039;&#039; is a convenience parameter.  Name channels here and they can be referenced by these names later.&lt;br /&gt;
* &#039;&#039;&#039;SourceChOffset&#039;&#039;&#039; should be set to a list of &amp;quot;0&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;SourceChGain&#039;&#039;&#039; should be set to a list of &amp;quot;1&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDMaster&#039;&#039;&#039; is the serial number identifier of the master g.Nautilus device.  This serial can be found on the physical device and is typically in a &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDs&#039;&#039;&#039; is a list of device serials (typically in &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format) which corresponds to the devices to record channels from.  One of these serials must be specified as the master device in the &amp;quot;DeviceIDMaster&amp;quot; parameter.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Device slaving has not been tested. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;RefChList&#039;&#039;&#039; is a list of channels which can act as &amp;quot;Reference&amp;quot; channels for each device.  If left blank, no channel will be used as a reference, and the raw signal will be recorded in the output.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;If specifying reference channels, there must be one reference channel per device specified in &amp;quot;DeviceIDs&amp;quot; in the same order. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SourceChList&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;SourceBufferSize&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;EnableAccelerationData&#039;&#039;&#039; is a toggle button to enable acceleration data and store them in synchronous states AccelerationX1, AcceleratioY1, and AccelerationZ1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record acceleration data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableCounterInput&#039;&#039;&#039; is a toggle button to enable the counter data and store it in the synchronous state Counter1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record counter data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableLinkQuality&#039;&#039;&#039; is a toggle button to enable the link quality data and store it in the synchronous state LinkQuality1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record link quality data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableBatteryLevel&#039;&#039;&#039; is a toggle button to enable the battery level data and store it in the synchronous state Battery1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record battery level data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableDigitalInputs&#039;&#039;&#039; is a toggle button to enable both digital input ports and store them in synchronous states DigitalInput1 - DigitalInput8.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record digital input, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableValidationIndicator&#039;&#039;&#039; is a toggle button to enable validation data and store it in the synchronous state Validation1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record validation data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Trigger Channels==&lt;br /&gt;
===Acceleration===&lt;br /&gt;
Acceleration is stored in three separate states with the axis labeled, i.e. the acceleration on the x-axis is stored in AccelerationX1.&lt;br /&gt;
The g.Nautilus records the acceleration between -6g and 6g. It is then translated into a value between 0 and 65535 with the equation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\lfloor((acceleration + 6) / 12) * 65535\rfloor&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus if the acceleration was 0 then the state would have the value 32767.&lt;br /&gt;
&lt;br /&gt;
===Counter===&lt;br /&gt;
Counter is a value that is constantly increasing in value and then repeats starting at 0. It is stored in Counter1.&lt;br /&gt;
&lt;br /&gt;
===Link Quality===&lt;br /&gt;
Link quality is a value between 0 and 100. It is stored in LinkQuality1. When link quality falls bellow 10% the first time, BCI2000 will give a warning.&lt;br /&gt;
&lt;br /&gt;
===Battery Level===&lt;br /&gt;
Battery level is a value between 0 and 100. It is stored in Battery1. When battery falls bellow 10%, BCI2000 will give a warning and again when it falls below 5%.&lt;br /&gt;
&lt;br /&gt;
===Digital Input===&lt;br /&gt;
Digital input port is on the Base Station. The value is between 0 and 255 and then separated into to a binary number which is then saved in a state with the corresponding number of the bit, i.e. bit 5 is stored in DigitalInput5.&lt;br /&gt;
&lt;br /&gt;
===Validation Indicator===&lt;br /&gt;
Validation indicator is a value of 0 or 1. It is stored in Validation1. If it is 0, then the data may not be valid. If it is 1, the data is valid.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Filters]], [[Contributions:ADCs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7553</id>
		<title>User Reference:gNautilus</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7553"/>
		<updated>2015-07-31T15:24:25Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Synopsis==&lt;br /&gt;
The g.Nautilus is a biopotential amplifier with wireless transmission technology with either wet or dry electrodes. It reads in up to 32 signal channels and 8 trigger channels.&lt;br /&gt;
&lt;br /&gt;
==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/core/SignalSource/gNautilus&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
===Author===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com)&lt;br /&gt;
===Version History===&lt;br /&gt;
Version 1.0: July 2015&lt;br /&gt;
*Supports a single g.Nautilus&lt;br /&gt;
*Referencing by any channel&lt;br /&gt;
*Supports filters&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: N/A&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
The g.Nautilus is a wireless headset by g.tec, and is the first in their product line to use g.NEEDaccess exclusively for realtime access.  This documentation explains the parameterization and specifics on how to set up the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of right now, g.Nautilus is only supported by Windows 7 and newer versions. g.Nautiulus can only be built using Visual Studio on Windows.&lt;br /&gt;
&lt;br /&gt;
Ensure the device is charged and connected to the base station (refer to the included documentation for help with this).  Start BCI2000 with the gNautilus source module.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
* &#039;&#039;&#039;SourceCh&#039;&#039;&#039; represents the total number of channels to be logged from the source module.&lt;br /&gt;
* &#039;&#039;&#039;SampleBlockSize&#039;&#039;&#039; should be set equal to the size of the sample block pulled from the device. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt; 25 and up found to work best during testing for 250Hz&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SampleRate&#039;&#039;&#039; determines the rate at which the device samples data. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Only the following sample rates are currently supported by the API: 250Hz and 500Hz.&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;ChannelNames&#039;&#039;&#039; is a convenience parameter.  Name channels here and they can be referenced by these names later.&lt;br /&gt;
* &#039;&#039;&#039;SourceChOffset&#039;&#039;&#039; should be set to a list of &amp;quot;0&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;SourceChGain&#039;&#039;&#039; should be set to a list of &amp;quot;1&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDMaster&#039;&#039;&#039; is the serial number identifier of the master g.Nautilus device.  This serial can be found on the physical device and is typically in a &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDs&#039;&#039;&#039; is a list of device serials (typically in &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format) which corresponds to the devices to record channels from.  One of these serials must be specified as the master device in the &amp;quot;DeviceIDMaster&amp;quot; parameter.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Device slaving has not been tested. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;RefChList&#039;&#039;&#039; is a list of channels which can act as &amp;quot;Reference&amp;quot; channels for each amp.  If left blank, no channel will be used as a reference, and the raw signal will be recorded in the output.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;If specifying reference channels, there must be one reference channel per device specified in &amp;quot;DeviceIDs&amp;quot; in the same order. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SourceChList&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;SourceBufferSize&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;EnableAccelerationData&#039;&#039;&#039; is a toggle button to enable acceleration data and store them in synchronous states AccelerationX1, AcceleratioY1, and AccelerationZ1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record acceleration data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableCounterInput&#039;&#039;&#039; is a toggle button to enable the counter data and store it in the synchronous state Counter1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record counter data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableLinkQuality&#039;&#039;&#039; is a toggle button to enable the link quality data and store it in the synchronous state LinkQuality1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record link quality data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableBatteryLevel&#039;&#039;&#039; is a toggle button to enable the battery level data and store it in the synchronous state Battery1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record battery level data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableDigitalInputs&#039;&#039;&#039; is a toggle button to enable both digital input ports and store them in synchronous states DigitalInput1 - DigitalInput8.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record digital input, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableValidationIndicator&#039;&#039;&#039; is a toggle button to enable validation data and store it in the synchronous state Validation1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record validation data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Trigger Channels==&lt;br /&gt;
===Acceleration===&lt;br /&gt;
Acceleration is stored in three separate states with the axis labeled, i.e. the acceleration on the x-axis is stored in AccelerationX1.&lt;br /&gt;
The g.Nautilus records the acceleration between -6g and 6g. It is then translated into a value between 0 and 65535 with the equation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\lfloor((acceleration + 6) / 12) * 65535\rfloor&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus if the acceleration was 0 then the state would have the value 32767.&lt;br /&gt;
&lt;br /&gt;
===Counter===&lt;br /&gt;
Counter is a value that is constantly increasing in value and then repeats starting at 0. It is stored in Counter1.&lt;br /&gt;
&lt;br /&gt;
===Link Quality===&lt;br /&gt;
Link quality is a value between 0 and 100. It is stored in LinkQuality1. When link quality falls bellow 10% the first time, BCI2000 will give a warning.&lt;br /&gt;
&lt;br /&gt;
===Battery Level===&lt;br /&gt;
Battery level is a value between 0 and 100. It is stored in Battery1. When battery falls bellow 10%, BCI2000 will give a warning and again when it falls below 5%.&lt;br /&gt;
&lt;br /&gt;
===Digital Input===&lt;br /&gt;
Digital input port is on the Base Station. The value is between 0 and 255 and then separated into to a binary number which is then saved in a state with the corresponding number of the bit, i.e. bit 5 is stored in DigitalInput5.&lt;br /&gt;
&lt;br /&gt;
===Validation Indicator===&lt;br /&gt;
Validation indicator is a value of 0 or 1. It is stored in Validation1. If it is 0, then the data may not be valid. If it is 1, the data is valid.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Filters]], [[Contributions:ADCs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7552</id>
		<title>User Reference:gNautilus</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7552"/>
		<updated>2015-07-31T15:23:33Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Digital Input */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Synopsis==&lt;br /&gt;
The g.Nautilus is a biopotential amplifier with wireless transmission technology with either wet or dry electrodes. It reads in up to 32 signal channels and 8 trigger channels.&lt;br /&gt;
&lt;br /&gt;
==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/core/SignalSource/gNautilus&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
===Author===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com)&lt;br /&gt;
===Version History===&lt;br /&gt;
Version 1.0: July 2015&lt;br /&gt;
*Supports a single g.Nautilus&lt;br /&gt;
*Referencing by any channel&lt;br /&gt;
*Supports filters&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: N/A&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
The g.Nautilus is a wireless headset by g.tec, and is the first in their product line to use g.NEEDaccess exclusively for realtime access.  This documentation explains the parameterization and specifics on how to set up the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of right now, g.Nautilus is only supported by Windows 7 and newer versions. g.Nautiulus can only be built using Visual Studio on Windows.&lt;br /&gt;
&lt;br /&gt;
Ensure the device is charged and connected to the base station (refer to the included documentation for help with this).  Start BCI2000 with the gNautilus source module.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
* &#039;&#039;&#039;SourceCh&#039;&#039;&#039; represents the total number of channels to be logged from the source module.&lt;br /&gt;
* &#039;&#039;&#039;SampleBlockSize&#039;&#039;&#039; should be set equal to the size of the sample block pulled from the device. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt; 25 and up found to work best during testing for 250Hz&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SampleRate&#039;&#039;&#039; determines the rate at which the device samples data. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Only the following sample rates are currently supported by the API: 250Hz and 500Hz.&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;ChannelNames&#039;&#039;&#039; is a convenience parameter.  Name channels here and they can be referenced by these names later.&lt;br /&gt;
* &#039;&#039;&#039;SourceChOffset&#039;&#039;&#039; should be set to a list of &amp;quot;0&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;SourceChGain&#039;&#039;&#039; should be set to a list of &amp;quot;1&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDMaster&#039;&#039;&#039; is the serial number identifier of the master g.Nautilus device.  This serial can be found on the physical device and is typically in a &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDs&#039;&#039;&#039; is a list of device serials (typically in &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format) which corresponds to the devices to record channels from.  One of these serials must be specified as the master device in the &amp;quot;DeviceIDMaster&amp;quot; parameter.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Device slaving is not yet supported by the module OR the g.HIamp C API. -- This parameter only exists for future compatibility. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;RefChList&#039;&#039;&#039; is a list of channels which can act as &amp;quot;Reference&amp;quot; channels for each amp.  If left blank, no channel will be used as a reference, and the raw signal will be recorded in the output.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;If specifying reference channels, there must be one reference channel per device specified in &amp;quot;DeviceIDs&amp;quot; in the same order. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SourceChList&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;SourceBufferSize&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;EnableAccelerationData&#039;&#039;&#039; is a toggle button to enable acceleration data and store them in synchronous states AccelerationX1, AcceleratioY1, and AccelerationZ1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record acceleration data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableCounterInput&#039;&#039;&#039; is a toggle button to enable the counter data and store it in the synchronous state Counter1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record counter data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableLinkQuality&#039;&#039;&#039; is a toggle button to enable the link quality data and store it in the synchronous state LinkQuality1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record link quality data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableBatteryLevel&#039;&#039;&#039; is a toggle button to enable the battery level data and store it in the synchronous state Battery1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record battery level data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableDigitalInputs&#039;&#039;&#039; is a toggle button to enable both digital input ports and store them in synchronous states DigitalInput1 - DigitalInput8.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record digital input, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableValidationIndicator&#039;&#039;&#039; is a toggle button to enable validation data and store it in the synchronous state Validation1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record validation data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Trigger Channels==&lt;br /&gt;
===Acceleration===&lt;br /&gt;
Acceleration is stored in three separate states with the axis labeled, i.e. the acceleration on the x-axis is stored in AccelerationX1.&lt;br /&gt;
The g.Nautilus records the acceleration between -6g and 6g. It is then translated into a value between 0 and 65535 with the equation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\lfloor((acceleration + 6) / 12) * 65535\rfloor&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus if the acceleration was 0 then the state would have the value 32767.&lt;br /&gt;
&lt;br /&gt;
===Counter===&lt;br /&gt;
Counter is a value that is constantly increasing in value and then repeats starting at 0. It is stored in Counter1.&lt;br /&gt;
&lt;br /&gt;
===Link Quality===&lt;br /&gt;
Link quality is a value between 0 and 100. It is stored in LinkQuality1. When link quality falls bellow 10% the first time, BCI2000 will give a warning.&lt;br /&gt;
&lt;br /&gt;
===Battery Level===&lt;br /&gt;
Battery level is a value between 0 and 100. It is stored in Battery1. When battery falls bellow 10%, BCI2000 will give a warning and again when it falls below 5%.&lt;br /&gt;
&lt;br /&gt;
===Digital Input===&lt;br /&gt;
Digital input port is on the Base Station. The value is between 0 and 255 and then separated into to a binary number which is then saved in a state with the corresponding number of the bit, i.e. bit 5 is stored in DigitalInput5.&lt;br /&gt;
&lt;br /&gt;
===Validation Indicator===&lt;br /&gt;
Validation indicator is a value of 0 or 1. It is stored in Validation1. If it is 0, then the data may not be valid. If it is 1, the data is valid.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Filters]], [[Contributions:ADCs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7551</id>
		<title>User Reference:gNautilus</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7551"/>
		<updated>2015-07-31T15:21:30Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Trigger Channels */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Synopsis==&lt;br /&gt;
The g.Nautilus is a biopotential amplifier with wireless transmission technology with either wet or dry electrodes. It reads in up to 32 signal channels and 8 trigger channels.&lt;br /&gt;
&lt;br /&gt;
==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/core/SignalSource/gNautilus&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
===Author===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com)&lt;br /&gt;
===Version History===&lt;br /&gt;
Version 1.0: July 2015&lt;br /&gt;
*Supports a single g.Nautilus&lt;br /&gt;
*Referencing by any channel&lt;br /&gt;
*Supports filters&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: N/A&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
The g.Nautilus is a wireless headset by g.tec, and is the first in their product line to use g.NEEDaccess exclusively for realtime access.  This documentation explains the parameterization and specifics on how to set up the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of right now, g.Nautilus is only supported by Windows 7 and newer versions. g.Nautiulus can only be built using Visual Studio on Windows.&lt;br /&gt;
&lt;br /&gt;
Ensure the device is charged and connected to the base station (refer to the included documentation for help with this).  Start BCI2000 with the gNautilus source module.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
* &#039;&#039;&#039;SourceCh&#039;&#039;&#039; represents the total number of channels to be logged from the source module.&lt;br /&gt;
* &#039;&#039;&#039;SampleBlockSize&#039;&#039;&#039; should be set equal to the size of the sample block pulled from the device. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt; 25 and up found to work best during testing for 250Hz&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SampleRate&#039;&#039;&#039; determines the rate at which the device samples data. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Only the following sample rates are currently supported by the API: 250Hz and 500Hz.&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;ChannelNames&#039;&#039;&#039; is a convenience parameter.  Name channels here and they can be referenced by these names later.&lt;br /&gt;
* &#039;&#039;&#039;SourceChOffset&#039;&#039;&#039; should be set to a list of &amp;quot;0&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;SourceChGain&#039;&#039;&#039; should be set to a list of &amp;quot;1&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDMaster&#039;&#039;&#039; is the serial number identifier of the master g.Nautilus device.  This serial can be found on the physical device and is typically in a &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDs&#039;&#039;&#039; is a list of device serials (typically in &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format) which corresponds to the devices to record channels from.  One of these serials must be specified as the master device in the &amp;quot;DeviceIDMaster&amp;quot; parameter.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Device slaving is not yet supported by the module OR the g.HIamp C API. -- This parameter only exists for future compatibility. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;RefChList&#039;&#039;&#039; is a list of channels which can act as &amp;quot;Reference&amp;quot; channels for each amp.  If left blank, no channel will be used as a reference, and the raw signal will be recorded in the output.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;If specifying reference channels, there must be one reference channel per device specified in &amp;quot;DeviceIDs&amp;quot; in the same order. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SourceChList&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;SourceBufferSize&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;EnableAccelerationData&#039;&#039;&#039; is a toggle button to enable acceleration data and store them in synchronous states AccelerationX1, AcceleratioY1, and AccelerationZ1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record acceleration data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableCounterInput&#039;&#039;&#039; is a toggle button to enable the counter data and store it in the synchronous state Counter1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record counter data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableLinkQuality&#039;&#039;&#039; is a toggle button to enable the link quality data and store it in the synchronous state LinkQuality1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record link quality data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableBatteryLevel&#039;&#039;&#039; is a toggle button to enable the battery level data and store it in the synchronous state Battery1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record battery level data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableDigitalInputs&#039;&#039;&#039; is a toggle button to enable both digital input ports and store them in synchronous states DigitalInput1 - DigitalInput8.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record digital input, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableValidationIndicator&#039;&#039;&#039; is a toggle button to enable validation data and store it in the synchronous state Validation1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record validation data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Trigger Channels==&lt;br /&gt;
===Acceleration===&lt;br /&gt;
Acceleration is stored in three separate states with the axis labeled, i.e. the acceleration on the x-axis is stored in AccelerationX1.&lt;br /&gt;
The g.Nautilus records the acceleration between -6g and 6g. It is then translated into a value between 0 and 65535 with the equation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\lfloor((acceleration + 6) / 12) * 65535\rfloor&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus if the acceleration was 0 then the state would have the value 32767.&lt;br /&gt;
&lt;br /&gt;
===Counter===&lt;br /&gt;
Counter is a value that is constantly increasing in value and then repeats starting at 0. It is stored in Counter1.&lt;br /&gt;
&lt;br /&gt;
===Link Quality===&lt;br /&gt;
Link quality is a value between 0 and 100. It is stored in LinkQuality1. When link quality falls bellow 10% the first time, BCI2000 will give a warning.&lt;br /&gt;
&lt;br /&gt;
===Battery Level===&lt;br /&gt;
Battery level is a value between 0 and 100. It is stored in Battery1. When battery falls bellow 10%, BCI2000 will give a warning and again when it falls below 5%.&lt;br /&gt;
&lt;br /&gt;
===Digital Input===&lt;br /&gt;
&lt;br /&gt;
===Validation Indicator===&lt;br /&gt;
Validation indicator is a value of 0 or 1. It is stored in Validation1. If it is 0, then the data may not be valid. If it is 1, the data is valid.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Filters]], [[Contributions:ADCs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7550</id>
		<title>User Reference:gNautilus</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7550"/>
		<updated>2015-07-31T15:15:46Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Acceleration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Synopsis==&lt;br /&gt;
The g.Nautilus is a biopotential amplifier with wireless transmission technology with either wet or dry electrodes. It reads in up to 32 signal channels and 8 trigger channels.&lt;br /&gt;
&lt;br /&gt;
==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/core/SignalSource/gNautilus&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
===Author===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com)&lt;br /&gt;
===Version History===&lt;br /&gt;
Version 1.0: July 2015&lt;br /&gt;
*Supports a single g.Nautilus&lt;br /&gt;
*Referencing by any channel&lt;br /&gt;
*Supports filters&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: N/A&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
The g.Nautilus is a wireless headset by g.tec, and is the first in their product line to use g.NEEDaccess exclusively for realtime access.  This documentation explains the parameterization and specifics on how to set up the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of right now, g.Nautilus is only supported by Windows 7 and newer versions. g.Nautiulus can only be built using Visual Studio on Windows.&lt;br /&gt;
&lt;br /&gt;
Ensure the device is charged and connected to the base station (refer to the included documentation for help with this).  Start BCI2000 with the gNautilus source module.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
* &#039;&#039;&#039;SourceCh&#039;&#039;&#039; represents the total number of channels to be logged from the source module.&lt;br /&gt;
* &#039;&#039;&#039;SampleBlockSize&#039;&#039;&#039; should be set equal to the size of the sample block pulled from the device. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt; 25 and up found to work best during testing for 250Hz&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SampleRate&#039;&#039;&#039; determines the rate at which the device samples data. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Only the following sample rates are currently supported by the API: 250Hz and 500Hz.&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;ChannelNames&#039;&#039;&#039; is a convenience parameter.  Name channels here and they can be referenced by these names later.&lt;br /&gt;
* &#039;&#039;&#039;SourceChOffset&#039;&#039;&#039; should be set to a list of &amp;quot;0&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;SourceChGain&#039;&#039;&#039; should be set to a list of &amp;quot;1&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDMaster&#039;&#039;&#039; is the serial number identifier of the master g.Nautilus device.  This serial can be found on the physical device and is typically in a &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDs&#039;&#039;&#039; is a list of device serials (typically in &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format) which corresponds to the devices to record channels from.  One of these serials must be specified as the master device in the &amp;quot;DeviceIDMaster&amp;quot; parameter.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Device slaving is not yet supported by the module OR the g.HIamp C API. -- This parameter only exists for future compatibility. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;RefChList&#039;&#039;&#039; is a list of channels which can act as &amp;quot;Reference&amp;quot; channels for each amp.  If left blank, no channel will be used as a reference, and the raw signal will be recorded in the output.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;If specifying reference channels, there must be one reference channel per device specified in &amp;quot;DeviceIDs&amp;quot; in the same order. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SourceChList&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;SourceBufferSize&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;EnableAccelerationData&#039;&#039;&#039; is a toggle button to enable acceleration data and store them in synchronous states AccelerationX1, AcceleratioY1, and AccelerationZ1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record acceleration data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableCounterInput&#039;&#039;&#039; is a toggle button to enable the counter data and store it in the synchronous state Counter1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record counter data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableLinkQuality&#039;&#039;&#039; is a toggle button to enable the link quality data and store it in the synchronous state LinkQuality1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record link quality data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableBatteryLevel&#039;&#039;&#039; is a toggle button to enable the battery level data and store it in the synchronous state Battery1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record battery level data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableDigitalInputs&#039;&#039;&#039; is a toggle button to enable both digital input ports and store them in synchronous states DigitalInput1 - DigitalInput8.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record digital input, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableValidationIndicator&#039;&#039;&#039; is a toggle button to enable validation data and store it in the synchronous state Validation1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record validation data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Trigger Channels==&lt;br /&gt;
===Acceleration===&lt;br /&gt;
Acceleration is stored in three separate states with the axis labeled, i.e. the acceleration on the x-axis is stored in AccelerationX1.&lt;br /&gt;
The g.Nautilus records the acceleration between -6g and 6g. It is then translated into a value between 0 and 65535 with the equation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\lfloor((acceleration + 6) / 12) * 65535\rfloor&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus if the acceleration was 0 then the state would have the value&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Filters]], [[Contributions:ADCs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7549</id>
		<title>User Reference:gNautilus</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7549"/>
		<updated>2015-07-31T15:13:58Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Acceleration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Synopsis==&lt;br /&gt;
The g.Nautilus is a biopotential amplifier with wireless transmission technology with either wet or dry electrodes. It reads in up to 32 signal channels and 8 trigger channels.&lt;br /&gt;
&lt;br /&gt;
==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/core/SignalSource/gNautilus&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
===Author===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com)&lt;br /&gt;
===Version History===&lt;br /&gt;
Version 1.0: July 2015&lt;br /&gt;
*Supports a single g.Nautilus&lt;br /&gt;
*Referencing by any channel&lt;br /&gt;
*Supports filters&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: N/A&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
The g.Nautilus is a wireless headset by g.tec, and is the first in their product line to use g.NEEDaccess exclusively for realtime access.  This documentation explains the parameterization and specifics on how to set up the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of right now, g.Nautilus is only supported by Windows 7 and newer versions. g.Nautiulus can only be built using Visual Studio on Windows.&lt;br /&gt;
&lt;br /&gt;
Ensure the device is charged and connected to the base station (refer to the included documentation for help with this).  Start BCI2000 with the gNautilus source module.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
* &#039;&#039;&#039;SourceCh&#039;&#039;&#039; represents the total number of channels to be logged from the source module.&lt;br /&gt;
* &#039;&#039;&#039;SampleBlockSize&#039;&#039;&#039; should be set equal to the size of the sample block pulled from the device. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt; 25 and up found to work best during testing for 250Hz&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SampleRate&#039;&#039;&#039; determines the rate at which the device samples data. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Only the following sample rates are currently supported by the API: 250Hz and 500Hz.&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;ChannelNames&#039;&#039;&#039; is a convenience parameter.  Name channels here and they can be referenced by these names later.&lt;br /&gt;
* &#039;&#039;&#039;SourceChOffset&#039;&#039;&#039; should be set to a list of &amp;quot;0&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;SourceChGain&#039;&#039;&#039; should be set to a list of &amp;quot;1&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDMaster&#039;&#039;&#039; is the serial number identifier of the master g.Nautilus device.  This serial can be found on the physical device and is typically in a &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDs&#039;&#039;&#039; is a list of device serials (typically in &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format) which corresponds to the devices to record channels from.  One of these serials must be specified as the master device in the &amp;quot;DeviceIDMaster&amp;quot; parameter.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Device slaving is not yet supported by the module OR the g.HIamp C API. -- This parameter only exists for future compatibility. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;RefChList&#039;&#039;&#039; is a list of channels which can act as &amp;quot;Reference&amp;quot; channels for each amp.  If left blank, no channel will be used as a reference, and the raw signal will be recorded in the output.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;If specifying reference channels, there must be one reference channel per device specified in &amp;quot;DeviceIDs&amp;quot; in the same order. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SourceChList&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;SourceBufferSize&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;EnableAccelerationData&#039;&#039;&#039; is a toggle button to enable acceleration data and store them in synchronous states AccelerationX1, AcceleratioY1, and AccelerationZ1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record acceleration data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableCounterInput&#039;&#039;&#039; is a toggle button to enable the counter data and store it in the synchronous state Counter1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record counter data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableLinkQuality&#039;&#039;&#039; is a toggle button to enable the link quality data and store it in the synchronous state LinkQuality1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record link quality data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableBatteryLevel&#039;&#039;&#039; is a toggle button to enable the battery level data and store it in the synchronous state Battery1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record battery level data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableDigitalInputs&#039;&#039;&#039; is a toggle button to enable both digital input ports and store them in synchronous states DigitalInput1 - DigitalInput8.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record digital input, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableValidationIndicator&#039;&#039;&#039; is a toggle button to enable validation data and store it in the synchronous state Validation1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record validation data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Trigger Channels==&lt;br /&gt;
===Acceleration===&lt;br /&gt;
Acceleration is stored in three separate states with the axis labeled, i.e. the acceleration on the x-axis is stored in AccelerationX1.&lt;br /&gt;
The g.Nautilus records the acceleration between -6g and 6g. It is then translated into a value between 0 and 65535 with the equation&lt;br /&gt;
&amp;lt;math&amp;gt;acceleration + 6 / 12 * 65535&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Filters]], [[Contributions:ADCs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7548</id>
		<title>User Reference:gNautilus</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7548"/>
		<updated>2015-07-31T15:13:42Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Trigger Channels */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Synopsis==&lt;br /&gt;
The g.Nautilus is a biopotential amplifier with wireless transmission technology with either wet or dry electrodes. It reads in up to 32 signal channels and 8 trigger channels.&lt;br /&gt;
&lt;br /&gt;
==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/core/SignalSource/gNautilus&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
===Author===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com)&lt;br /&gt;
===Version History===&lt;br /&gt;
Version 1.0: July 2015&lt;br /&gt;
*Supports a single g.Nautilus&lt;br /&gt;
*Referencing by any channel&lt;br /&gt;
*Supports filters&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: N/A&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
The g.Nautilus is a wireless headset by g.tec, and is the first in their product line to use g.NEEDaccess exclusively for realtime access.  This documentation explains the parameterization and specifics on how to set up the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of right now, g.Nautilus is only supported by Windows 7 and newer versions. g.Nautiulus can only be built using Visual Studio on Windows.&lt;br /&gt;
&lt;br /&gt;
Ensure the device is charged and connected to the base station (refer to the included documentation for help with this).  Start BCI2000 with the gNautilus source module.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
* &#039;&#039;&#039;SourceCh&#039;&#039;&#039; represents the total number of channels to be logged from the source module.&lt;br /&gt;
* &#039;&#039;&#039;SampleBlockSize&#039;&#039;&#039; should be set equal to the size of the sample block pulled from the device. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt; 25 and up found to work best during testing for 250Hz&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SampleRate&#039;&#039;&#039; determines the rate at which the device samples data. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Only the following sample rates are currently supported by the API: 250Hz and 500Hz.&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;ChannelNames&#039;&#039;&#039; is a convenience parameter.  Name channels here and they can be referenced by these names later.&lt;br /&gt;
* &#039;&#039;&#039;SourceChOffset&#039;&#039;&#039; should be set to a list of &amp;quot;0&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;SourceChGain&#039;&#039;&#039; should be set to a list of &amp;quot;1&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDMaster&#039;&#039;&#039; is the serial number identifier of the master g.Nautilus device.  This serial can be found on the physical device and is typically in a &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDs&#039;&#039;&#039; is a list of device serials (typically in &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format) which corresponds to the devices to record channels from.  One of these serials must be specified as the master device in the &amp;quot;DeviceIDMaster&amp;quot; parameter.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Device slaving is not yet supported by the module OR the g.HIamp C API. -- This parameter only exists for future compatibility. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;RefChList&#039;&#039;&#039; is a list of channels which can act as &amp;quot;Reference&amp;quot; channels for each amp.  If left blank, no channel will be used as a reference, and the raw signal will be recorded in the output.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;If specifying reference channels, there must be one reference channel per device specified in &amp;quot;DeviceIDs&amp;quot; in the same order. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SourceChList&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;SourceBufferSize&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;EnableAccelerationData&#039;&#039;&#039; is a toggle button to enable acceleration data and store them in synchronous states AccelerationX1, AcceleratioY1, and AccelerationZ1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record acceleration data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableCounterInput&#039;&#039;&#039; is a toggle button to enable the counter data and store it in the synchronous state Counter1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record counter data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableLinkQuality&#039;&#039;&#039; is a toggle button to enable the link quality data and store it in the synchronous state LinkQuality1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record link quality data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableBatteryLevel&#039;&#039;&#039; is a toggle button to enable the battery level data and store it in the synchronous state Battery1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record battery level data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableDigitalInputs&#039;&#039;&#039; is a toggle button to enable both digital input ports and store them in synchronous states DigitalInput1 - DigitalInput8.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record digital input, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableValidationIndicator&#039;&#039;&#039; is a toggle button to enable validation data and store it in the synchronous state Validation1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record validation data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Trigger Channels==&lt;br /&gt;
===Acceleration===&lt;br /&gt;
Acceleration is stored in three separate states with the axis labeled, i.e. the acceleration on the x-axis is stored in AccelerationX1.&lt;br /&gt;
The g.Nautilus records the acceleration between -6g and 6g. It is then translated into a value between 0 and 65535 with the equation&lt;br /&gt;
&amp;lt;math&amp;gt;acceleration + 6 / 12 * 65535&amp;lt;\math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Filters]], [[Contributions:ADCs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7547</id>
		<title>User Reference:gNautilus</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7547"/>
		<updated>2015-07-31T15:12:57Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Future Work */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Synopsis==&lt;br /&gt;
The g.Nautilus is a biopotential amplifier with wireless transmission technology with either wet or dry electrodes. It reads in up to 32 signal channels and 8 trigger channels.&lt;br /&gt;
&lt;br /&gt;
==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/core/SignalSource/gNautilus&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
===Author===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com)&lt;br /&gt;
===Version History===&lt;br /&gt;
Version 1.0: July 2015&lt;br /&gt;
*Supports a single g.Nautilus&lt;br /&gt;
*Referencing by any channel&lt;br /&gt;
*Supports filters&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: N/A&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
The g.Nautilus is a wireless headset by g.tec, and is the first in their product line to use g.NEEDaccess exclusively for realtime access.  This documentation explains the parameterization and specifics on how to set up the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of right now, g.Nautilus is only supported by Windows 7 and newer versions. g.Nautiulus can only be built using Visual Studio on Windows.&lt;br /&gt;
&lt;br /&gt;
Ensure the device is charged and connected to the base station (refer to the included documentation for help with this).  Start BCI2000 with the gNautilus source module.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
* &#039;&#039;&#039;SourceCh&#039;&#039;&#039; represents the total number of channels to be logged from the source module.&lt;br /&gt;
* &#039;&#039;&#039;SampleBlockSize&#039;&#039;&#039; should be set equal to the size of the sample block pulled from the device. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt; 25 and up found to work best during testing for 250Hz&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SampleRate&#039;&#039;&#039; determines the rate at which the device samples data. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Only the following sample rates are currently supported by the API: 250Hz and 500Hz.&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;ChannelNames&#039;&#039;&#039; is a convenience parameter.  Name channels here and they can be referenced by these names later.&lt;br /&gt;
* &#039;&#039;&#039;SourceChOffset&#039;&#039;&#039; should be set to a list of &amp;quot;0&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;SourceChGain&#039;&#039;&#039; should be set to a list of &amp;quot;1&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDMaster&#039;&#039;&#039; is the serial number identifier of the master g.Nautilus device.  This serial can be found on the physical device and is typically in a &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDs&#039;&#039;&#039; is a list of device serials (typically in &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format) which corresponds to the devices to record channels from.  One of these serials must be specified as the master device in the &amp;quot;DeviceIDMaster&amp;quot; parameter.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Device slaving is not yet supported by the module OR the g.HIamp C API. -- This parameter only exists for future compatibility. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;RefChList&#039;&#039;&#039; is a list of channels which can act as &amp;quot;Reference&amp;quot; channels for each amp.  If left blank, no channel will be used as a reference, and the raw signal will be recorded in the output.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;If specifying reference channels, there must be one reference channel per device specified in &amp;quot;DeviceIDs&amp;quot; in the same order. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SourceChList&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;SourceBufferSize&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;EnableAccelerationData&#039;&#039;&#039; is a toggle button to enable acceleration data and store them in synchronous states AccelerationX1, AcceleratioY1, and AccelerationZ1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record acceleration data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableCounterInput&#039;&#039;&#039; is a toggle button to enable the counter data and store it in the synchronous state Counter1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record counter data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableLinkQuality&#039;&#039;&#039; is a toggle button to enable the link quality data and store it in the synchronous state LinkQuality1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record link quality data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableBatteryLevel&#039;&#039;&#039; is a toggle button to enable the battery level data and store it in the synchronous state Battery1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record battery level data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableDigitalInputs&#039;&#039;&#039; is a toggle button to enable both digital input ports and store them in synchronous states DigitalInput1 - DigitalInput8.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record digital input, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableValidationIndicator&#039;&#039;&#039; is a toggle button to enable validation data and store it in the synchronous state Validation1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record validation data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Trigger Channels==&lt;br /&gt;
===Acceleration===&lt;br /&gt;
Acceleration is stored in three separate states with the axis labeled, i.e. the acceleration on the x-axis is stored in AccelerationX1.&lt;br /&gt;
The g.Nautilus records the acceleration between -6g and 6g. It is then translated into a value between 0 and 65535 with the equation&lt;br /&gt;
math{acceleration + 6 / 12 * 65535}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Filters]], [[Contributions:ADCs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7546</id>
		<title>User Reference:gNautilus</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7546"/>
		<updated>2015-07-31T15:09:16Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Synopsis==&lt;br /&gt;
The g.Nautilus is a biopotential amplifier with wireless transmission technology with either wet or dry electrodes. It reads in up to 32 signal channels and 8 trigger channels.&lt;br /&gt;
&lt;br /&gt;
==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/core/SignalSource/gNautilus&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
===Author===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com)&lt;br /&gt;
===Version History===&lt;br /&gt;
Version 1.0: July 2015&lt;br /&gt;
*Supports a single g.Nautilus&lt;br /&gt;
*Referencing by any channel&lt;br /&gt;
*Supports filters&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: N/A&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
The g.Nautilus is a wireless headset by g.tec, and is the first in their product line to use g.NEEDaccess exclusively for realtime access.  This documentation explains the parameterization and specifics on how to set up the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of right now, g.Nautilus is only supported by Windows 7 and newer versions. g.Nautiulus can only be built using Visual Studio on Windows.&lt;br /&gt;
&lt;br /&gt;
Ensure the device is charged and connected to the base station (refer to the included documentation for help with this).  Start BCI2000 with the gNautilus source module.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
* &#039;&#039;&#039;SourceCh&#039;&#039;&#039; represents the total number of channels to be logged from the source module.&lt;br /&gt;
* &#039;&#039;&#039;SampleBlockSize&#039;&#039;&#039; should be set equal to the size of the sample block pulled from the device. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt; 25 and up found to work best during testing for 250Hz&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SampleRate&#039;&#039;&#039; determines the rate at which the device samples data. &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Only the following sample rates are currently supported by the API: 250Hz and 500Hz.&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;ChannelNames&#039;&#039;&#039; is a convenience parameter.  Name channels here and they can be referenced by these names later.&lt;br /&gt;
* &#039;&#039;&#039;SourceChOffset&#039;&#039;&#039; should be set to a list of &amp;quot;0&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;SourceChGain&#039;&#039;&#039; should be set to a list of &amp;quot;1&amp;quot;s -- one 0 for each channel as indicated by SourceCh, separated by spaces.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDMaster&#039;&#039;&#039; is the serial number identifier of the master g.Nautilus device.  This serial can be found on the physical device and is typically in a &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.&lt;br /&gt;
* &#039;&#039;&#039;DeviceIDs&#039;&#039;&#039; is a list of device serials (typically in &amp;quot;&#039;&#039;&#039;NB-20XX.XX.XX&#039;&#039;&#039;&amp;quot; format) which corresponds to the devices to record channels from.  One of these serials must be specified as the master device in the &amp;quot;DeviceIDMaster&amp;quot; parameter.  This parameter can also be set to &amp;quot;&#039;&#039;&#039;auto&#039;&#039;&#039;&amp;quot; if there is only one g.Nautilus device connected to the machine.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Device slaving is not yet supported by the module OR the g.HIamp C API. -- This parameter only exists for future compatibility. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;RefChList&#039;&#039;&#039; is a list of channels which can act as &amp;quot;Reference&amp;quot; channels for each amp.  If left blank, no channel will be used as a reference, and the raw signal will be recorded in the output.  &amp;lt;br/&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;NOTE:&#039;&#039;&#039; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;If specifying reference channels, there must be one reference channel per device specified in &amp;quot;DeviceIDs&amp;quot; in the same order. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SourceChList&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;FilterType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchEnabled&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchHighPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchLowPass&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchModelOrder&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;NotchType&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;SourceBufferSize&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;EnableAccelerationData&#039;&#039;&#039; is a toggle button to enable acceleration data and store them in synchronous states AccelerationX1, AcceleratioY1, and AccelerationZ1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record acceleration data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableCounterInput&#039;&#039;&#039; is a toggle button to enable the counter data and store it in the synchronous state Counter1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record counter data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableLinkQuality&#039;&#039;&#039; is a toggle button to enable the link quality data and store it in the synchronous state LinkQuality1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record link quality data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableBatteryLevel&#039;&#039;&#039; is a toggle button to enable the battery level data and store it in the synchronous state Battery1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record battery level data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableDigitalInputs&#039;&#039;&#039; is a toggle button to enable both digital input ports and store them in synchronous states DigitalInput1 - DigitalInput8.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record digital input, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;EnableValidationIndicator&#039;&#039;&#039; is a toggle button to enable validation data and store it in the synchronous state Validation1.&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039; &amp;lt;span style= &amp;quot;text-decoration: underline;&amp;quot;&amp;gt; To record validation data, at least one analog channel must also be recorded. &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
*Autoconfiguration!&lt;br /&gt;
*Parametrization of Sensitivity&lt;br /&gt;
*Selective Channel Acquisition&lt;br /&gt;
*Digital Input as States&lt;br /&gt;
*Head Mounted Accelerometer input as States&lt;br /&gt;
*Signal quality indicator states&lt;br /&gt;
*Battery life check&lt;br /&gt;
*BCI2000 Integrated impedance check mode&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Filters]], [[Contributions:ADCs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7545</id>
		<title>User Reference:gNautilus</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7545"/>
		<updated>2015-07-31T14:58:56Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Functional Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Synopsis==&lt;br /&gt;
The g.Nautilus is a biopotential amplifier with wireless transmission technology with either wet or dry electrodes. It reads in up to 32 signal channels and 8 trigger channels.&lt;br /&gt;
&lt;br /&gt;
==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/core/SignalSource/gNautilus&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
===Author===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com)&lt;br /&gt;
===Version History===&lt;br /&gt;
Version 1.0: July 2015&lt;br /&gt;
*Supports a single g.Nautilus&lt;br /&gt;
*Referencing by any channel&lt;br /&gt;
*Supports filters&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: N/A&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
The g.Nautilus is a wireless headset by g.tec, and is the first in their product line to use g.NEEDaccess exclusively for realtime access.  This documentation explains the parameterization and specifics on how to set up the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of right now, g.Nautilus is only supported by Windows 7 and newer versions. g.Nautiulus can only be built using Visual Studio on Windows.&lt;br /&gt;
&lt;br /&gt;
Ensure the device is charged and connected to the base station (refer to the included documentation for help with this).  Start BCI2000 with the gNautilus source module.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
The following parameters are available for configuring the Blackrock source module. You will find these parameters in the Source -- Signal Properties section. &lt;br /&gt;
&lt;br /&gt;
===SourceCh===&lt;br /&gt;
The g.Nautilus claims to support 64 channels via its API.  The module has only been tested up to 32 channels.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; If less than 32 channels are acquired, only the first SourceCh channels will be acquired from.&lt;br /&gt;
&lt;br /&gt;
===SamplingRate===&lt;br /&gt;
Only the following sample rates are currently supported by the API: 250 Hz and 500 Hz.&lt;br /&gt;
&lt;br /&gt;
===SampleBlockSize===&lt;br /&gt;
Sample block size must be set to an integer multiple of the minimum sample block size corresponding to the current SamplingRate.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of V0.5, and g.NEEDAccess BETA 7XX, a SampleBlockSize set to the minimum block size results in non-realtime operation.  Please specify a multiple of at least 2 * minimum block size.&lt;br /&gt;
&lt;br /&gt;
*250 Hz -- 8 samples per block (block length of 32 ms, system clocked at 31.25 Hz)&lt;br /&gt;
*500 Hz -- 15 samples per block (block length of 30 ms, system clocked at 33.33 Hz)&lt;br /&gt;
&lt;br /&gt;
===ChannelNames===&lt;br /&gt;
Leave this blank and channels are numbered.  See Operator Log for information about correct channel names.&lt;br /&gt;
&lt;br /&gt;
===HostIP, HostPort, LocalIP, LocalPort===&lt;br /&gt;
This defines the UDP connection to the GDSDataServer.  If the service is running on your machine (see services.msc), the GDSDataServer will be listening to UDP packets on port 50223 (Default) at localhost (127.0.0.1).  By default, the server will send messages to the listening process (localhost -- 127.0.0.1) on port 50224.  The defaults here will be used in most circumstances.  Consult your network administrator if your acquisition system is different.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Ensure UDP communications on port 50223 and 50224 are unblocked and uninterrupted by any firewalls between the server and the client.&lt;br /&gt;
&lt;br /&gt;
===NautilusSN===&lt;br /&gt;
This is the &amp;quot;name&amp;quot; of the device to acquire from.  The serial number on the base-station is used here (Format: NB-20XX.YY.ZZ).  Check the operator log for discovered devices and troubleshooting hints.&lt;br /&gt;
&lt;br /&gt;
===NetworkChannel===&lt;br /&gt;
Channels 11-18 are available for communicating with several g.Nautilus devices in the same room.  In order to ensure uninterrupted connections, use different NetworkChannel settings for each g.Nautilus in the room.  &lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
*Autoconfiguration!&lt;br /&gt;
*Parametrization of Sensitivity&lt;br /&gt;
*Selective Channel Acquisition&lt;br /&gt;
*Digital Input as States&lt;br /&gt;
*Head Mounted Accelerometer input as States&lt;br /&gt;
*Signal quality indicator states&lt;br /&gt;
*Battery life check&lt;br /&gt;
*BCI2000 Integrated impedance check mode&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Filters]], [[Contributions:ADCs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7544</id>
		<title>User Reference:gNautilus</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7544"/>
		<updated>2015-07-31T14:58:39Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Functional Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Synopsis==&lt;br /&gt;
The g.Nautilus is a biopotential amplifier with wireless transmission technology with either wet or dry electrodes. It reads in up to 32 signal channels and 8 trigger channels.&lt;br /&gt;
&lt;br /&gt;
==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/core/SignalSource/gNautilus&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
===Author===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com)&lt;br /&gt;
===Version History===&lt;br /&gt;
Version 1.0: July 2015&lt;br /&gt;
*Supports a single g.Nautilus&lt;br /&gt;
*Referencing by any channel&lt;br /&gt;
*Supports filters&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: N/A&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
The g.Nautilus is a wireless headset by g.tec, and is the first in their product line to use g.NEEDaccess exclusively for realtime access.  This documentation explains the parameterization and specifics on how to set up the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of right now, g.Nautilus is only support by Windows 7 and newer versions. g.Nautiulus can only be built using Visual Studio on Windows.&lt;br /&gt;
&lt;br /&gt;
Ensure the device is charged and connected to the base station (refer to the included documentation for help with this).  Start BCI2000 with the gNautilus source module.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
The following parameters are available for configuring the Blackrock source module. You will find these parameters in the Source -- Signal Properties section. &lt;br /&gt;
&lt;br /&gt;
===SourceCh===&lt;br /&gt;
The g.Nautilus claims to support 64 channels via its API.  The module has only been tested up to 32 channels.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; If less than 32 channels are acquired, only the first SourceCh channels will be acquired from.&lt;br /&gt;
&lt;br /&gt;
===SamplingRate===&lt;br /&gt;
Only the following sample rates are currently supported by the API: 250 Hz and 500 Hz.&lt;br /&gt;
&lt;br /&gt;
===SampleBlockSize===&lt;br /&gt;
Sample block size must be set to an integer multiple of the minimum sample block size corresponding to the current SamplingRate.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of V0.5, and g.NEEDAccess BETA 7XX, a SampleBlockSize set to the minimum block size results in non-realtime operation.  Please specify a multiple of at least 2 * minimum block size.&lt;br /&gt;
&lt;br /&gt;
*250 Hz -- 8 samples per block (block length of 32 ms, system clocked at 31.25 Hz)&lt;br /&gt;
*500 Hz -- 15 samples per block (block length of 30 ms, system clocked at 33.33 Hz)&lt;br /&gt;
&lt;br /&gt;
===ChannelNames===&lt;br /&gt;
Leave this blank and channels are numbered.  See Operator Log for information about correct channel names.&lt;br /&gt;
&lt;br /&gt;
===HostIP, HostPort, LocalIP, LocalPort===&lt;br /&gt;
This defines the UDP connection to the GDSDataServer.  If the service is running on your machine (see services.msc), the GDSDataServer will be listening to UDP packets on port 50223 (Default) at localhost (127.0.0.1).  By default, the server will send messages to the listening process (localhost -- 127.0.0.1) on port 50224.  The defaults here will be used in most circumstances.  Consult your network administrator if your acquisition system is different.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Ensure UDP communications on port 50223 and 50224 are unblocked and uninterrupted by any firewalls between the server and the client.&lt;br /&gt;
&lt;br /&gt;
===NautilusSN===&lt;br /&gt;
This is the &amp;quot;name&amp;quot; of the device to acquire from.  The serial number on the base-station is used here (Format: NB-20XX.YY.ZZ).  Check the operator log for discovered devices and troubleshooting hints.&lt;br /&gt;
&lt;br /&gt;
===NetworkChannel===&lt;br /&gt;
Channels 11-18 are available for communicating with several g.Nautilus devices in the same room.  In order to ensure uninterrupted connections, use different NetworkChannel settings for each g.Nautilus in the room.  &lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
*Autoconfiguration!&lt;br /&gt;
*Parametrization of Sensitivity&lt;br /&gt;
*Selective Channel Acquisition&lt;br /&gt;
*Digital Input as States&lt;br /&gt;
*Head Mounted Accelerometer input as States&lt;br /&gt;
*Signal quality indicator states&lt;br /&gt;
*Battery life check&lt;br /&gt;
*BCI2000 Integrated impedance check mode&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Filters]], [[Contributions:ADCs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7543</id>
		<title>User Reference:gNautilus</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7543"/>
		<updated>2015-07-31T14:56:44Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Versioning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Synopsis==&lt;br /&gt;
The g.Nautilus is a biopotential amplifier with wireless transmission technology with either wet or dry electrodes. It reads in up to 32 signal channels and 8 trigger channels.&lt;br /&gt;
&lt;br /&gt;
==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/core/SignalSource/gNautilus&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
===Author===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com)&lt;br /&gt;
===Version History===&lt;br /&gt;
Version 1.0: July 2015&lt;br /&gt;
*Supports a single g.Nautilus&lt;br /&gt;
*Referencing by any channel&lt;br /&gt;
*Supports filters&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: N/A&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
The g.Nautilus is a wireless headset by g.tec, and is the first in their product line to use g.NEEDaccess exclusively for realtime access.  This documentation explains the parameterization and specifics on how to set up the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of the time of writing, this module is at release V0.5.  As such, it is not necessarily feature complete.  The current g.NEEDAccess API BETA 7XX has not implemented all functionality that will eventually be supported in this module.  Also, timing is pretty awful.  As of right now, the acquisition module is not recommended for real-time closed-loop use with BCI2000.&lt;br /&gt;
&lt;br /&gt;
===Configuration===&lt;br /&gt;
Install g.NEEDAccess on your machine, along with necessary g.tec drivers.  Ensure the GDSDataServer is running by checking in services.msc.  You&#039;ll need your HASP dongle in order to to access g.NEEDAccess[http://www.reactiongifs.com/r/fgwtf.gif .]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of right now, g.NEEDAccess BETA 7XX appears to only support Windows 7+ 64 bit operating systems.  As such, a 64 bit build of BCI2000 is required to make the g.Nautilus binary.  g.Nautiulus can only be built using Visual Studio on Windows.&lt;br /&gt;
&lt;br /&gt;
Ensure the device is charged and connected to the base station (refer to the included documentation for help with this).  Start BCI2000 with the gNautilus source module.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
The following parameters are available for configuring the Blackrock source module. You will find these parameters in the Source -- Signal Properties section. &lt;br /&gt;
&lt;br /&gt;
===SourceCh===&lt;br /&gt;
The g.Nautilus claims to support 64 channels via its API.  The module has only been tested up to 32 channels.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; If less than 32 channels are acquired, only the first SourceCh channels will be acquired from.&lt;br /&gt;
&lt;br /&gt;
===SamplingRate===&lt;br /&gt;
Only the following sample rates are currently supported by the API: 250 Hz and 500 Hz.&lt;br /&gt;
&lt;br /&gt;
===SampleBlockSize===&lt;br /&gt;
Sample block size must be set to an integer multiple of the minimum sample block size corresponding to the current SamplingRate.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of V0.5, and g.NEEDAccess BETA 7XX, a SampleBlockSize set to the minimum block size results in non-realtime operation.  Please specify a multiple of at least 2 * minimum block size.&lt;br /&gt;
&lt;br /&gt;
*250 Hz -- 8 samples per block (block length of 32 ms, system clocked at 31.25 Hz)&lt;br /&gt;
*500 Hz -- 15 samples per block (block length of 30 ms, system clocked at 33.33 Hz)&lt;br /&gt;
&lt;br /&gt;
===ChannelNames===&lt;br /&gt;
Leave this blank and channels are numbered.  See Operator Log for information about correct channel names.&lt;br /&gt;
&lt;br /&gt;
===HostIP, HostPort, LocalIP, LocalPort===&lt;br /&gt;
This defines the UDP connection to the GDSDataServer.  If the service is running on your machine (see services.msc), the GDSDataServer will be listening to UDP packets on port 50223 (Default) at localhost (127.0.0.1).  By default, the server will send messages to the listening process (localhost -- 127.0.0.1) on port 50224.  The defaults here will be used in most circumstances.  Consult your network administrator if your acquisition system is different.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Ensure UDP communications on port 50223 and 50224 are unblocked and uninterrupted by any firewalls between the server and the client.&lt;br /&gt;
&lt;br /&gt;
===NautilusSN===&lt;br /&gt;
This is the &amp;quot;name&amp;quot; of the device to acquire from.  The serial number on the base-station is used here (Format: NB-20XX.YY.ZZ).  Check the operator log for discovered devices and troubleshooting hints.&lt;br /&gt;
&lt;br /&gt;
===NetworkChannel===&lt;br /&gt;
Channels 11-18 are available for communicating with several g.Nautilus devices in the same room.  In order to ensure uninterrupted connections, use different NetworkChannel settings for each g.Nautilus in the room.  &lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
*Autoconfiguration!&lt;br /&gt;
*Parametrization of Sensitivity&lt;br /&gt;
*Selective Channel Acquisition&lt;br /&gt;
*Digital Input as States&lt;br /&gt;
*Head Mounted Accelerometer input as States&lt;br /&gt;
*Signal quality indicator states&lt;br /&gt;
*Battery life check&lt;br /&gt;
*BCI2000 Integrated impedance check mode&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Filters]], [[Contributions:ADCs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7542</id>
		<title>User Reference:gNautilus</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7542"/>
		<updated>2015-07-31T14:54:54Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Location */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Synopsis==&lt;br /&gt;
The g.Nautilus is a biopotential amplifier with wireless transmission technology with either wet or dry electrodes. It reads in up to 32 signal channels and 8 trigger channels.&lt;br /&gt;
&lt;br /&gt;
==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/core/SignalSource/gNautilus&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
===Author===&lt;br /&gt;
Griffin Milsap (griffin.milsap@gmail.com)&lt;br /&gt;
===Version History===&lt;br /&gt;
*V0.5 -- Analog Signal Acquisition&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: 4727&lt;br /&gt;
*Tested under: 4727&lt;br /&gt;
*Known to compile under: 4727&lt;br /&gt;
*Broken since: N/A&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
The g.Nautilus is a wireless headset by g.tec, and is the first in their product line to use g.NEEDaccess exclusively for realtime access.  This documentation explains the parameterization and specifics on how to set up the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of the time of writing, this module is at release V0.5.  As such, it is not necessarily feature complete.  The current g.NEEDAccess API BETA 7XX has not implemented all functionality that will eventually be supported in this module.  Also, timing is pretty awful.  As of right now, the acquisition module is not recommended for real-time closed-loop use with BCI2000.&lt;br /&gt;
&lt;br /&gt;
===Configuration===&lt;br /&gt;
Install g.NEEDAccess on your machine, along with necessary g.tec drivers.  Ensure the GDSDataServer is running by checking in services.msc.  You&#039;ll need your HASP dongle in order to to access g.NEEDAccess[http://www.reactiongifs.com/r/fgwtf.gif .]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of right now, g.NEEDAccess BETA 7XX appears to only support Windows 7+ 64 bit operating systems.  As such, a 64 bit build of BCI2000 is required to make the g.Nautilus binary.  g.Nautiulus can only be built using Visual Studio on Windows.&lt;br /&gt;
&lt;br /&gt;
Ensure the device is charged and connected to the base station (refer to the included documentation for help with this).  Start BCI2000 with the gNautilus source module.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
The following parameters are available for configuring the Blackrock source module. You will find these parameters in the Source -- Signal Properties section. &lt;br /&gt;
&lt;br /&gt;
===SourceCh===&lt;br /&gt;
The g.Nautilus claims to support 64 channels via its API.  The module has only been tested up to 32 channels.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; If less than 32 channels are acquired, only the first SourceCh channels will be acquired from.&lt;br /&gt;
&lt;br /&gt;
===SamplingRate===&lt;br /&gt;
Only the following sample rates are currently supported by the API: 250 Hz and 500 Hz.&lt;br /&gt;
&lt;br /&gt;
===SampleBlockSize===&lt;br /&gt;
Sample block size must be set to an integer multiple of the minimum sample block size corresponding to the current SamplingRate.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of V0.5, and g.NEEDAccess BETA 7XX, a SampleBlockSize set to the minimum block size results in non-realtime operation.  Please specify a multiple of at least 2 * minimum block size.&lt;br /&gt;
&lt;br /&gt;
*250 Hz -- 8 samples per block (block length of 32 ms, system clocked at 31.25 Hz)&lt;br /&gt;
*500 Hz -- 15 samples per block (block length of 30 ms, system clocked at 33.33 Hz)&lt;br /&gt;
&lt;br /&gt;
===ChannelNames===&lt;br /&gt;
Leave this blank and channels are numbered.  See Operator Log for information about correct channel names.&lt;br /&gt;
&lt;br /&gt;
===HostIP, HostPort, LocalIP, LocalPort===&lt;br /&gt;
This defines the UDP connection to the GDSDataServer.  If the service is running on your machine (see services.msc), the GDSDataServer will be listening to UDP packets on port 50223 (Default) at localhost (127.0.0.1).  By default, the server will send messages to the listening process (localhost -- 127.0.0.1) on port 50224.  The defaults here will be used in most circumstances.  Consult your network administrator if your acquisition system is different.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Ensure UDP communications on port 50223 and 50224 are unblocked and uninterrupted by any firewalls between the server and the client.&lt;br /&gt;
&lt;br /&gt;
===NautilusSN===&lt;br /&gt;
This is the &amp;quot;name&amp;quot; of the device to acquire from.  The serial number on the base-station is used here (Format: NB-20XX.YY.ZZ).  Check the operator log for discovered devices and troubleshooting hints.&lt;br /&gt;
&lt;br /&gt;
===NetworkChannel===&lt;br /&gt;
Channels 11-18 are available for communicating with several g.Nautilus devices in the same room.  In order to ensure uninterrupted connections, use different NetworkChannel settings for each g.Nautilus in the room.  &lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
*Autoconfiguration!&lt;br /&gt;
*Parametrization of Sensitivity&lt;br /&gt;
*Selective Channel Acquisition&lt;br /&gt;
*Digital Input as States&lt;br /&gt;
*Head Mounted Accelerometer input as States&lt;br /&gt;
*Signal quality indicator states&lt;br /&gt;
*Battery life check&lt;br /&gt;
*BCI2000 Integrated impedance check mode&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Filters]], [[Contributions:ADCs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7541</id>
		<title>User Reference:gNautilus</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gNautilus&amp;diff=7541"/>
		<updated>2015-07-31T14:54:40Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Synopsis */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Synopsis==&lt;br /&gt;
The g.Nautilus is a biopotential amplifier with wireless transmission technology with either wet or dry electrodes. It reads in up to 32 signal channels and 8 trigger channels.&lt;br /&gt;
&lt;br /&gt;
==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/contrib/SignalSource/gNautilus&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
===Author===&lt;br /&gt;
Griffin Milsap (griffin.milsap@gmail.com)&lt;br /&gt;
===Version History===&lt;br /&gt;
*V0.5 -- Analog Signal Acquisition&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: 4727&lt;br /&gt;
*Tested under: 4727&lt;br /&gt;
*Known to compile under: 4727&lt;br /&gt;
*Broken since: N/A&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
The g.Nautilus is a wireless headset by g.tec, and is the first in their product line to use g.NEEDaccess exclusively for realtime access.  This documentation explains the parameterization and specifics on how to set up the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of the time of writing, this module is at release V0.5.  As such, it is not necessarily feature complete.  The current g.NEEDAccess API BETA 7XX has not implemented all functionality that will eventually be supported in this module.  Also, timing is pretty awful.  As of right now, the acquisition module is not recommended for real-time closed-loop use with BCI2000.&lt;br /&gt;
&lt;br /&gt;
===Configuration===&lt;br /&gt;
Install g.NEEDAccess on your machine, along with necessary g.tec drivers.  Ensure the GDSDataServer is running by checking in services.msc.  You&#039;ll need your HASP dongle in order to to access g.NEEDAccess[http://www.reactiongifs.com/r/fgwtf.gif .]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of right now, g.NEEDAccess BETA 7XX appears to only support Windows 7+ 64 bit operating systems.  As such, a 64 bit build of BCI2000 is required to make the g.Nautilus binary.  g.Nautiulus can only be built using Visual Studio on Windows.&lt;br /&gt;
&lt;br /&gt;
Ensure the device is charged and connected to the base station (refer to the included documentation for help with this).  Start BCI2000 with the gNautilus source module.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
The following parameters are available for configuring the Blackrock source module. You will find these parameters in the Source -- Signal Properties section. &lt;br /&gt;
&lt;br /&gt;
===SourceCh===&lt;br /&gt;
The g.Nautilus claims to support 64 channels via its API.  The module has only been tested up to 32 channels.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; If less than 32 channels are acquired, only the first SourceCh channels will be acquired from.&lt;br /&gt;
&lt;br /&gt;
===SamplingRate===&lt;br /&gt;
Only the following sample rates are currently supported by the API: 250 Hz and 500 Hz.&lt;br /&gt;
&lt;br /&gt;
===SampleBlockSize===&lt;br /&gt;
Sample block size must be set to an integer multiple of the minimum sample block size corresponding to the current SamplingRate.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of V0.5, and g.NEEDAccess BETA 7XX, a SampleBlockSize set to the minimum block size results in non-realtime operation.  Please specify a multiple of at least 2 * minimum block size.&lt;br /&gt;
&lt;br /&gt;
*250 Hz -- 8 samples per block (block length of 32 ms, system clocked at 31.25 Hz)&lt;br /&gt;
*500 Hz -- 15 samples per block (block length of 30 ms, system clocked at 33.33 Hz)&lt;br /&gt;
&lt;br /&gt;
===ChannelNames===&lt;br /&gt;
Leave this blank and channels are numbered.  See Operator Log for information about correct channel names.&lt;br /&gt;
&lt;br /&gt;
===HostIP, HostPort, LocalIP, LocalPort===&lt;br /&gt;
This defines the UDP connection to the GDSDataServer.  If the service is running on your machine (see services.msc), the GDSDataServer will be listening to UDP packets on port 50223 (Default) at localhost (127.0.0.1).  By default, the server will send messages to the listening process (localhost -- 127.0.0.1) on port 50224.  The defaults here will be used in most circumstances.  Consult your network administrator if your acquisition system is different.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Ensure UDP communications on port 50223 and 50224 are unblocked and uninterrupted by any firewalls between the server and the client.&lt;br /&gt;
&lt;br /&gt;
===NautilusSN===&lt;br /&gt;
This is the &amp;quot;name&amp;quot; of the device to acquire from.  The serial number on the base-station is used here (Format: NB-20XX.YY.ZZ).  Check the operator log for discovered devices and troubleshooting hints.&lt;br /&gt;
&lt;br /&gt;
===NetworkChannel===&lt;br /&gt;
Channels 11-18 are available for communicating with several g.Nautilus devices in the same room.  In order to ensure uninterrupted connections, use different NetworkChannel settings for each g.Nautilus in the room.  &lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
*Autoconfiguration!&lt;br /&gt;
*Parametrization of Sensitivity&lt;br /&gt;
*Selective Channel Acquisition&lt;br /&gt;
*Digital Input as States&lt;br /&gt;
*Head Mounted Accelerometer input as States&lt;br /&gt;
*Signal quality indicator states&lt;br /&gt;
*Battery life check&lt;br /&gt;
*BCI2000 Integrated impedance check mode&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Filters]], [[Contributions:ADCs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=Contributions:gNautilusNEEDAccess&amp;diff=7540</id>
		<title>Contributions:gNautilusNEEDAccess</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=Contributions:gNautilusNEEDAccess&amp;diff=7540"/>
		<updated>2015-07-31T14:50:47Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: Created page with &amp;quot;==Synopsis== The g.Nautilus acquisition module enables signal acquisition from the g.Nautilus device via the g.NEEDaccess API.  ==Location== http://{{SERVERNAME}}/svn/trunk/sr...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Synopsis==&lt;br /&gt;
The g.Nautilus acquisition module enables signal acquisition from the g.Nautilus device via the g.NEEDaccess API.&lt;br /&gt;
&lt;br /&gt;
==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/contrib/SignalSource/gNautilus&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
===Author===&lt;br /&gt;
Griffin Milsap (griffin.milsap@gmail.com)&lt;br /&gt;
===Version History===&lt;br /&gt;
*V0.5 -- Analog Signal Acquisition&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: 4727&lt;br /&gt;
*Tested under: 4727&lt;br /&gt;
*Known to compile under: 4727&lt;br /&gt;
*Broken since: N/A&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
The g.Nautilus is a wireless headset by g.tec, and is the first in their product line to use g.NEEDaccess exclusively for realtime access.  This documentation explains the parameterization and specifics on how to set up the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of the time of writing, this module is at release V0.5.  As such, it is not necessarily feature complete.  The current g.NEEDAccess API BETA 7XX has not implemented all functionality that will eventually be supported in this module.  Also, timing is pretty awful.  As of right now, the acquisition module is not recommended for real-time closed-loop use with BCI2000.&lt;br /&gt;
&lt;br /&gt;
===Configuration===&lt;br /&gt;
Install g.NEEDAccess on your machine, along with necessary g.tec drivers.  Ensure the GDSDataServer is running by checking in services.msc.  You&#039;ll need your HASP dongle in order to to access g.NEEDAccess[http://www.reactiongifs.com/r/fgwtf.gif .]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of right now, g.NEEDAccess BETA 7XX appears to only support Windows 7+ 64 bit operating systems.  As such, a 64 bit build of BCI2000 is required to make the g.Nautilus binary.  g.Nautiulus can only be built using Visual Studio on Windows.&lt;br /&gt;
&lt;br /&gt;
Ensure the device is charged and connected to the base station (refer to the included documentation for help with this).  Start BCI2000 with the gNautilus source module.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
The following parameters are available for configuring the Blackrock source module. You will find these parameters in the Source -- Signal Properties section. &lt;br /&gt;
&lt;br /&gt;
===SourceCh===&lt;br /&gt;
The g.Nautilus claims to support 64 channels via its API.  The module has only been tested up to 32 channels.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; If less than 32 channels are acquired, only the first SourceCh channels will be acquired from.&lt;br /&gt;
&lt;br /&gt;
===SamplingRate===&lt;br /&gt;
Only the following sample rates are currently supported by the API: 250 Hz and 500 Hz.&lt;br /&gt;
&lt;br /&gt;
===SampleBlockSize===&lt;br /&gt;
Sample block size must be set to an integer multiple of the minimum sample block size corresponding to the current SamplingRate.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; As of V0.5, and g.NEEDAccess BETA 7XX, a SampleBlockSize set to the minimum block size results in non-realtime operation.  Please specify a multiple of at least 2 * minimum block size.&lt;br /&gt;
&lt;br /&gt;
*250 Hz -- 8 samples per block (block length of 32 ms, system clocked at 31.25 Hz)&lt;br /&gt;
*500 Hz -- 15 samples per block (block length of 30 ms, system clocked at 33.33 Hz)&lt;br /&gt;
&lt;br /&gt;
===ChannelNames===&lt;br /&gt;
Leave this blank and channels are numbered.  See Operator Log for information about correct channel names.&lt;br /&gt;
&lt;br /&gt;
===HostIP, HostPort, LocalIP, LocalPort===&lt;br /&gt;
This defines the UDP connection to the GDSDataServer.  If the service is running on your machine (see services.msc), the GDSDataServer will be listening to UDP packets on port 50223 (Default) at localhost (127.0.0.1).  By default, the server will send messages to the listening process (localhost -- 127.0.0.1) on port 50224.  The defaults here will be used in most circumstances.  Consult your network administrator if your acquisition system is different.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Ensure UDP communications on port 50223 and 50224 are unblocked and uninterrupted by any firewalls between the server and the client.&lt;br /&gt;
&lt;br /&gt;
===NautilusSN===&lt;br /&gt;
This is the &amp;quot;name&amp;quot; of the device to acquire from.  The serial number on the base-station is used here (Format: NB-20XX.YY.ZZ).  Check the operator log for discovered devices and troubleshooting hints.&lt;br /&gt;
&lt;br /&gt;
===NetworkChannel===&lt;br /&gt;
Channels 11-18 are available for communicating with several g.Nautilus devices in the same room.  In order to ensure uninterrupted connections, use different NetworkChannel settings for each g.Nautilus in the room.  &lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
*Autoconfiguration!&lt;br /&gt;
*Parametrization of Sensitivity&lt;br /&gt;
*Selective Channel Acquisition&lt;br /&gt;
*Digital Input as States&lt;br /&gt;
*Head Mounted Accelerometer input as States&lt;br /&gt;
*Signal quality indicator states&lt;br /&gt;
*Battery life check&lt;br /&gt;
*BCI2000 Integrated impedance check mode&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Filters]], [[Contributions:ADCs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=Contributions:ADCs&amp;diff=7539</id>
		<title>Contributions:ADCs</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=Contributions:ADCs&amp;diff=7539"/>
		<updated>2015-07-31T14:50:33Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following data acquisition filters are available in the [[Contributions:Contents|Contributions]] section of BCI2000:&lt;br /&gt;
&lt;br /&gt;
*[[Contributions:AmpServerProADC]]: Interface to the EGI AmpServerPro.&lt;br /&gt;
*[[Contributions:BioRadioADC]]: Interface to the BioRadio amplifer.&lt;br /&gt;
*[[Contributions:Biosemi2ADC]]: Interface to the Biosemi amplifier.&lt;br /&gt;
*[[Contributions:Blackrock]]: Interface Blackrock devices through CereLink.&lt;br /&gt;
*[[Contributions:B-Alert]]: Interface to B-Alert brain monitoring systems.&lt;br /&gt;
*[[Contributions:DAS_ADC]]: Interface to MeasurementComputing AD cards.&lt;br /&gt;
*[[Contributions:DTADC]]: Interface to Data Translation boards.&lt;br /&gt;
*[[Contributions:Emotiv]]: Interface to the Emotiv EPOC.&lt;br /&gt;
*[[Contributions:FieldTripBufferSource]]: Interface to the FieldTrip buffer.&lt;br /&gt;
*[[Contributions:FilePlayback]]: A source module that replays sessions from recorded data files.&lt;br /&gt;
*[[Contributions:gHIamp]]: Interface to the gHIamp.&lt;br /&gt;
*[[Contributions:gNautilusNEEDAccess]]: Interface to the gNautilus via g.NEEDAccess.&lt;br /&gt;
*[[Contributions:MicromedADC]]: Interface to the Micromed EEG system.&lt;br /&gt;
*[[Contributions:ModularEEG]]: Interface to the ModularEEG system.&lt;br /&gt;
*[[Contributions:Neuralynx]]: Interface to Neuralynx systems&lt;br /&gt;
*[[Contributions:NIADC]]: Interface to National Instruments boards.&lt;br /&gt;
*[[Contributions:NIDAQ-MX]]: Interface to National Instruments boards using the MX driver.&lt;br /&gt;
*[[Contributions:NIDAQLogger]]: Interface to multiple National Instruments DAQ boards using MX driver (INPUT ONLY).&lt;br /&gt;
*[[Contributions:NIDAQFilter]]: Interface to multiple National Instruments DAQ boards using MX driver (OUTPUT ONLY).&lt;br /&gt;
*[[Contributions:NeuroscanADC]]: Neuroscan Acquire socket protocol client.&lt;br /&gt;
*[[Contributions:NeuroscanAccessSDK]]: Interface to Neuroscan Direct Access SDK.&lt;br /&gt;
*[[Contributions:NeuroSky]]: Interface to Neurosky MindSet.&lt;br /&gt;
*[[Contributions:NicoletOne]]: Interface to NicoletOne nEEG series amplifiers.&lt;br /&gt;
*[[Contributions:ctfneurod]]: CTF RealTime to Neuroscan Acquire relay.&lt;br /&gt;
*[[Contributions:RDAClientADC]]: Brain Vision RDA socket protocol client.&lt;br /&gt;
*[[Contributions:TDTADC]]: Interface to Tucker-Davis Pentusa systems.&lt;br /&gt;
*[[Contributions:TMSiADC]]: Interface to TMSi Refa and Porti systems.&lt;br /&gt;
*[[Contributions:vAmpADC]]: Interface to Brain Products V-amp systems.&lt;br /&gt;
*[[Contributions:EnobioADC]]: Interface to Enobio sensor.&lt;br /&gt;
*[[Contributions:DSISerial]]: Interface to Dry Sensor Interface (DSI) EEG systems by Wearable Sensing.&lt;br /&gt;
*[[Contributions:MicRecorderFilter]]: Interface to the system soundcard, logging audio input.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Filters]], [[Contributions:How to use a Contributed Source Module]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contents]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=Contributions:ParallelPortFilter&amp;diff=7535</id>
		<title>Contributions:ParallelPortFilter</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=Contributions:ParallelPortFilter&amp;diff=7535"/>
		<updated>2015-07-01T15:41:36Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Example Configurations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/contrib/Extensions/ParallelPortFilter&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
&lt;br /&gt;
===Authors===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com)&lt;br /&gt;
&lt;br /&gt;
===Version History===&lt;br /&gt;
* 2015/06/30: Initial public release&lt;br /&gt;
&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: --&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
This simple filter extension resides in the Application module and makes input and output with the parallel port easy. The inputs are stored as states ParallelPortInput1 - ParallelPortInput24 based off the number of ports connected. For more information, see [[:Contributions:ParallelPortFilter#States|States]].&lt;br /&gt;
&lt;br /&gt;
==Integration into BCI2000==&lt;br /&gt;
Compile the extension into your source module by enabling contributed extensions in your CMake configuration.  You can do this by going into your root build folder and deleting &amp;lt;code&amp;gt;CMakeCache.txt&amp;lt;/code&amp;gt; and re-running the project batch file, or by running &amp;lt;code&amp;gt;cmake -i&amp;lt;/code&amp;gt; and enabling &#039;&#039;&#039;BUILD_PARALLELPORTFILTER&#039;&#039;&#039;.  Once the extension is built into the source module, it can be used.&lt;br /&gt;
&lt;br /&gt;
==Configuring ParallelPortFiler==&lt;br /&gt;
If using the filter, SourcePorts must have a number greater than 0. Then list the names for the ports separated by spaces in SourcePortsList. The list must be the same length as the value in SourcePorts. You can then set the LPTMapping with column one in using the names as in SourcePortsList and column 2 using the corresponding hardware address. This step is optional. If not configured, LPT1 maps to 0x378 and LPT2 maps to 0x278 which should work for most users. DigitalOutputEx is only necessary if user wants to write output through the parallel port.&lt;br /&gt;
&lt;br /&gt;
If the default settings for LPTMapping did not produce results, the hardware address might be different for the user&#039;s computer. To find the hardware address for the parallel ports for your machine, press &#039;&#039;&#039;WIN&#039;&#039;&#039; + &#039;&#039;&#039;R&#039;&#039;&#039; and enter &#039;&#039;devmgmt.msc&#039;&#039;. In Device Manager, expand the section labeled &#039;&#039;&#039;Ports (Com &amp;amp; LPT)&#039;&#039;&#039;. If this section does not exist, you probably do not have LPT ports or the driver is not installed properly. Find the one labeled with (LPT1) or whatever port you are looking for. Right click and select Properties. In the Resources tab, there is a field called I/O Range and take the first value of the range which is in hexadecimal. If multiple I/O Range, read the first one; if that does not work, try the other one. Take that value as the hardware address for Parameter LPTMapping. These instructions for finding the address has been tested on Windows XP, 7, and 8.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortAddress.JPG]]&lt;br /&gt;
&lt;br /&gt;
For some examples on configurations, see [[:Contributions:ParallelPortFilter#Example Configurations|Example Configurations]].&lt;br /&gt;
&lt;br /&gt;
For better explanation of the parameters, see [[:Contributions:ParallelPortFilter#Parameters|Parameters]].&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
The ParallelPortFilter is configured in the ParallelPort tab.  The configurable parameters are:&lt;br /&gt;
&lt;br /&gt;
===SourcePorts===&lt;br /&gt;
This parameter is used to initialize the filter and to keep track of the number of ports being used. This number should be the total number of parallel ports that should be used to communicate. It should be an integer value greater than 0 if being used else 0. Most computers do not have more than 3 parallel ports but some have 4. In good practice this value should not be greater than 3 unless you are sure you have that many ports.&lt;br /&gt;
&lt;br /&gt;
===SourcePortsList===&lt;br /&gt;
This parameter lists the ports to be used and the order to communicate through them. It should be a list of the port names LPT1 - LPT3. You can not use the same port twice in on list. This list must be the same length as the value in Parameter SourcePorts.&lt;br /&gt;
&lt;br /&gt;
===LPTMapping===&lt;br /&gt;
This parameter is to manually enter the hardware address of the ports incase that the computer being used does not conform to general use hardware addresses. Column one should have the names of the ports such as LPT1 or LPT2, same as the values in Parameter SourcePortsList, and column two should have the hexadecimal value of the port such as 0x378. The number of rows in the matrix should be equal to the value in Parameter SourcePorts, while it must have two columns if being used, no more, no less.&lt;br /&gt;
&lt;br /&gt;
===DigitalOutputEx===&lt;br /&gt;
This matrix of expressions that controls the outputs on the parallel ports.  Each port has 8 bits which correspond to 8 rows on the matrix. If the expression evaluates to True, the bit will be set to 1 else to 0. Boolean expression work quite well here. For more information on digital output and expressions usage for ParallelPortFilter see [[::Contributions:ParallelPortFilter#Digital Output|Digital Output]].&lt;br /&gt;
&lt;br /&gt;
==Digital Output==&lt;br /&gt;
Each port has 8 bits that can be written to. These bits can be accessed through the Parameter DigitalOutputEx. The user must write expressions for each individual bit on each port. The row label corresponds to which bit it will be written to. If multiple ports are enabled, row 1 - 8 correspond to the bits 1 - 8 on the first port and row 9 - 16 correspond to the bits 1 - 8 on the second port and so on. Expressions that evaluate to True set the corresponding bit to 1 and those that evaluate to False set the corresponding bit to 0.&lt;br /&gt;
&lt;br /&gt;
In the case that the user wishes to send an signal or a value through the port, the user must convert the number into binary and write the corresponding zeroes and ones to the respective bits. To do that, the formula: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mod((floor(x / 2 ^(bitnumber - 1))), 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The x is the signal the user wishes to send through the port. For example if the State MousePosX was to be sent through the port, the Parameter DigitalOutputEx would be:&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterDigitalOutExBinary.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;State(&amp;quot;MousePosX&amp;quot;) / State(&amp;quot;MousePosX&amp;quot;) * 255&amp;lt;/code&amp;gt; normalizes the coordinates to fit into eight bits which is all parallel ports can handle.&lt;br /&gt;
&lt;br /&gt;
Not all rows have to be created. Any row not named just writes the bit as 0. The rows also can be written in whatever order if you just change the row label in the parameter. The example below just sets bit 1 and 5 to 1. All other rows are zeroes.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterRowLabelChange.jpg]]&lt;br /&gt;
&lt;br /&gt;
For more on expressions, see [[:User Reference:Expression Syntax|Expressions]].&lt;br /&gt;
&lt;br /&gt;
==States==&lt;br /&gt;
For each port there is 8 input bits which correspond to 8 ParallelPortInput states. Each state is either a 0 or a 1. If multiple ports are enabled, ParallelPortInput1 - ParallelPortInput8 correspond to the bits 1 - 8 on the first port and ParallelPortInput9 - ParallelPortInput16 correspond to the bits 1 - 8 on the second port and so on. Currently only 3 ports may be enabled, which should be more than enough for most computers do not have more than port LPT1 - LPT3.&lt;br /&gt;
&lt;br /&gt;
==Example Configurations==&lt;br /&gt;
This example enables port LPT1 with a new hardware address.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterNewAddress.jpg|1000px]]&lt;br /&gt;
&lt;br /&gt;
This example enables ports with names MRIScanner and StimulusDevice with hardware addresses. Note that the address for the ports are the same as the default values for LPT1 and LPT2. This shows that LPT names can be renamed in the Parameter Configuration to make it easier to read. This does not change the names of the addresses given by the computer itself.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterNewNames.jpg|1000px]]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Logging Input]], [[Contributions:Extensions]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]][[Category:Extension]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=Contributions:EyetrackerLoggerTobiiX&amp;diff=7534</id>
		<title>Contributions:EyetrackerLoggerTobiiX</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=Contributions:EyetrackerLoggerTobiiX&amp;diff=7534"/>
		<updated>2015-07-01T15:29:51Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: Created page with &amp;quot;==Synopsis== A filter that records state information from &amp;#039;&amp;#039;Tobii Eyetrackers Eye X&amp;#039;&amp;#039; into state variables.  ==Location== http://{{SERVERNAME}}/svn/trunk/src/contrib/Extension...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Synopsis==&lt;br /&gt;
A filter that records state information from &#039;&#039;Tobii Eyetrackers Eye X&#039;&#039; into state variables.&lt;br /&gt;
&lt;br /&gt;
==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/contrib/Extensions/EyetrackerLoggerTobiiX&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
===Authors===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com)&lt;br /&gt;
===Version History===&lt;br /&gt;
: Initial public release;&lt;br /&gt;
2015/07/01 &lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: --&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
In many cases, an experiment may require data about where the participant is looking.  In these experiments, an eyetracker is the only way to gather data relating to gaze position and eye location.  There are many eyetracking methods currently on the market, but many of these require the subject to hold their head steady -- often while strapped to a structure of some sort.  The Tobii eyetrackers require no such restriction so they were a natural choice when it came to interfacing with BCI2000.&lt;br /&gt;
&lt;br /&gt;
==Integration into BCI2000==&lt;br /&gt;
Compile the extension into your source module by enabling contributed extensions in your CMake configuration.  You can do this by going into your root build folder and deleting &amp;lt;code&amp;gt;CMakeCache.txt&amp;lt;/code&amp;gt; and re-running the project batch file, or by running &amp;lt;code&amp;gt;cmake -i&amp;lt;/code&amp;gt; and enabling &#039;&#039;&#039;BUILD_EYETRACKERLOGGERTOBIIX&#039;&#039;&#039;.  Once the extension is built into the source module, enable it by starting the source module with the &amp;lt;code&amp;gt;--LogEyetrackerTobiiX=1&amp;lt;/code&amp;gt; command line argument.&lt;br /&gt;
&lt;br /&gt;
==Usage and Calibration==&lt;br /&gt;
Set up the eyetracker as detailed in the documentation that came with your device.  The device will connect to your machine and communicate through the ethernet port.  As such, it&#039;d be wise to disconnect and turn off any other networking devices while using the eyetracker.  It is possible that your network request could go out over a different network interface if you&#039;re not careful which makes for a troubleshooting nightmare.  When you start the source module, ensure that the &amp;lt;code&amp;gt;--LogEyetrackerTobiiX=1&amp;lt;/code&amp;gt; command line parameter is set.  Run the Eyetracker Browser utility which came with your eyetracker drivers and use it to locate the device on your local network. &lt;br /&gt;
&lt;br /&gt;
Calibration can now occur.  Calibration should be done per subject per sitting.  Re-calibration is not necessary between runs, but any time that the subject changes eyewear, makeup, or position, or if the lighting conditions change it should be re-calibrated. A good rule of thumb would be to recalibrate at the start of every session.  Once a calibration is performed, it is saved in the Tobii device until the next calibration (even if there&#039;s a power loss).&lt;br /&gt;
&lt;br /&gt;
BCI2000 does not provide any way to calibrate the eyetracker. Upon connecting the eyetracker to the computer via USB port, it should ask for calibrations. &#039;&#039;&#039;Note&#039;&#039;&#039; - the Tobii Eyetracker Eye X requires SS USB 3.0 port to communicate through. It cannot use USB 2.0 ports.&lt;br /&gt;
&lt;br /&gt;
Once the device is calibrated, it can be used reliably in BCI2000.  The logger will report information about eye validity in a text visualization window and feed states into the system.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
The eyetracker is configured in the Source tab within the EyetrackerLogger section.  The configurable parameters are:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;LogEyetrackerTobiiX&amp;lt;/code&amp;gt;   - Enables/Disables logging of Eyetracker states&lt;br /&gt;
*&amp;lt;code&amp;gt;LogGazeData&amp;lt;/code&amp;gt; - Enables/Disables logging of gaze data&lt;br /&gt;
*&amp;lt;code&amp;gt;LogEyePos&amp;lt;/code&amp;gt; - Enables/Disables logging of eye position (as seen from the camera)&lt;br /&gt;
*&amp;lt;code&amp;gt;LogPupilSize&amp;lt;/code&amp;gt; - Enables/Disables logging of pupil size (very rough)&lt;br /&gt;
*&amp;lt;code&amp;gt;LogEyeDist&amp;lt;/code&amp;gt; - Enables/Disables logging of the distance from the screen to the eyes (again, rough)&lt;br /&gt;
*&amp;lt;code&amp;gt;GazeScale&amp;lt;/code&amp;gt; - Scales the incoming gaze data first&lt;br /&gt;
*&amp;lt;code&amp;gt;GazeOffset&amp;lt;/code&amp;gt; - Offsets the incoming gaze data after scaling&lt;br /&gt;
&lt;br /&gt;
Note: GazeScale and GazeOffset are quick hacks to address an issue with gaze data being clamped around the edges of the screen.  The eyetracker gives back values which are between 0.0 and 1.0 for onscreen gaze but supports looking slightly offscreen by allowing gaze data returned to go above 1.0 and below 0.0.  BCI2000 needs this scaled between 0.0 and 1.0 before the gaze data is multiplied by 65535 for storage in the 16 bit state.  These two parameters account for this scaling and offset and prevents the clamping from happening as often as it would otherwise.  These parameters will be removed once BCI2000 supports typed states. Brought from EyetrackerLogger&lt;br /&gt;
&lt;br /&gt;
The following code retreives the actual ~(0.0-1.0) range that the eyetracker outputs directly (assuming you&#039;ve scaled and offset the signal to avoid clipping) from each eye and averages it to find a gaze position.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
float x = State( &amp;quot;EyetrackerLeftEyeGazeX&amp;quot; ) + State( &amp;quot;EyetrackerRightEyeGazeX&amp;quot; ); x /= ( 2.0f * 65535.0f );&lt;br /&gt;
float y = State( &amp;quot;EyetrackerLeftEyeGazeY&amp;quot; ) + State( &amp;quot;EyetrackerRightEyeGazeY&amp;quot; ); y /= ( 2.0f * 65535.0f );&lt;br /&gt;
x -= ( float )Parameter( &amp;quot;GazeOffset&amp;quot; ); x /= ( float )Parameter( &amp;quot;GazeScale&amp;quot; );&lt;br /&gt;
y -= ( float )Parameter( &amp;quot;GazeOffset&amp;quot; ); y /= ( float )Parameter( &amp;quot;GazeScale&amp;quot; );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==State Variables==&lt;br /&gt;
Unless otherwise specified, all states are prefixed with &amp;lt;code&amp;gt;Eyetracker&amp;lt;Left/Right&amp;gt;Eye&amp;lt;/code&amp;gt; which corresponds with each individual eye.  The EyetrackerLogger extension does not support subjects with more than two eyes at the moment.&lt;br /&gt;
&lt;br /&gt;
===GazeX, GazeY===&lt;br /&gt;
The eye gaze position (where - on the screen - the subject is looking) is returned from the Tobii SDK as 32 bit floating point numbers which (roughly) range from 0.0 to 1.0.  They are multiplied by 65535 and stored as 16 bit integers in these states if the &amp;lt;code&amp;gt;LogGazeData&amp;lt;/code&amp;gt; parameter is enabled.  (0,0) corresponds to the top left of the screen, (65535,65535) corresponds to the right bottom of the screen. -- See [[Contributions:EyetrackerLogger#EyetrackerStatesOK|EyetrackerStatesOK]].&lt;br /&gt;
&lt;br /&gt;
===EyetrackerStatesOK===&lt;br /&gt;
Early versions of the extension didn&#039;t take into account that the library may return a number greater than 1.0 or less than 0.0.  This resulted in &amp;quot;pac-man&amp;quot; style wrap around of gaze coordinates in 2.0 and crashes in 3.0.  If the output from the library is out of bounds, it is clamped to the boundaries and the &amp;quot;EyetrackerStatesOK&amp;quot; parameter is changed.  A value of &amp;quot;1&amp;quot; corresponds to valid gaze data, a value of &amp;quot;0&amp;quot; corresponds to invalid &amp;quot;clamped&amp;quot; gaze data. Those parameters scale and offset the data so that when it does go out of range, it can still be fit into the 16 bit state.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Logging Input]], [[Contributions:Extensions]], [[Contributions:EyetrackerLogger]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]][[Category:Extension]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=Contributions:EyetrackerLoggerTobii3&amp;diff=7533</id>
		<title>Contributions:EyetrackerLoggerTobii3</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=Contributions:EyetrackerLoggerTobii3&amp;diff=7533"/>
		<updated>2015-07-01T15:23:58Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Synopsis==&lt;br /&gt;
A filter that records state information from &#039;&#039;Tobii Eyetrackers&#039;&#039; using the Tobii SDK 3.0  into state variables.&lt;br /&gt;
&lt;br /&gt;
==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/contrib/Extensions/EyetrackerLoggerTobii3&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
===Authors===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com)&lt;br /&gt;
===Version History===&lt;br /&gt;
06/23/2015: Initial public release;&lt;br /&gt;
&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: 3318&lt;br /&gt;
*Tested under: 3318&lt;br /&gt;
*Known to compile under: 3318&lt;br /&gt;
*Broken since: --&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
In many cases, an experiment may require data about where the participant is looking.  In these experiments, an eyetracker is the only way to gather data relating to gaze position and eye location.  There are many eyetracking methods currently on the market, but many of these require the subject to hold their head steady -- often while strapped to a structure of some sort.  The Tobii eyetrackers require no such restriction so they were a natural choice when it came to interfacing with BCI2000.&lt;br /&gt;
&lt;br /&gt;
==Integration into BCI2000==&lt;br /&gt;
Compile the extension into your source module by enabling contributed extensions in your CMake configuration.  You can do this by going into your root build folder and deleting &amp;lt;code&amp;gt;CMakeCache.txt&amp;lt;/code&amp;gt; and re-running the project batch file, or by running &amp;lt;code&amp;gt;cmake -i&amp;lt;/code&amp;gt; and enabling &#039;&#039;&#039;BUILD_EYETRACKERLOGGERTOBII3&#039;&#039;&#039;.  Once the extension is built into the source module, enable it by starting the source module with the &amp;lt;code&amp;gt;--LogEyetrackerTobii3=1&amp;lt;/code&amp;gt; command line argument.&lt;br /&gt;
&lt;br /&gt;
==Usage and Calibration==&lt;br /&gt;
Set up the eyetracker as detailed in the documentation that came with your device.  The device will connect to your machine and communicate through the ethernet port.  As such, it&#039;d be wise to disconnect and turn off any other networking devices while using the eyetracker.  It is possible that your network request could go out over a different network interface if you&#039;re not careful which makes for a troubleshooting nightmare.  When you start the source module, ensure that the &amp;lt;code&amp;gt;--LogEyetrackerTobii3=1&amp;lt;/code&amp;gt; command line parameter is set.  Run the Eyetracker Browser utility which came with your eyetracker drivers and use it to locate the device on your local network. &lt;br /&gt;
&lt;br /&gt;
Calibration can now occur.  Calibration should be done per subject per sitting.  Re-calibration is not necessary between runs, but any time that the subject changes eyewear, makeup, or position, or if the lighting conditions change it should be re-calibrated. A good rule of thumb would be to recalibrate at the start of every session.  Once a calibration is performed, it is saved in the Tobii device until the next calibration (even if there&#039;s a power loss).&lt;br /&gt;
&lt;br /&gt;
BCI2000 does not provide any way to calibrate the eyetracker. This should be done using the Tobii.Calibration.exe program which came on the thumb drive with the eyetracker. It can be found in &amp;lt;code&amp;gt;Setup/InstallationGuide&amp;lt;/code&amp;gt;. Run the executable and follow the onscreen instructions to calibrate. &lt;br /&gt;
&lt;br /&gt;
Once the device is calibrated, it can be used reliably in BCI2000.  The logger will report information about eye validity in a text visualization window and feed states into the system.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
The eyetracker is configured in the Source tab within the EyetrackerLogger section.  The configurable parameters are:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;LogEyetrackerTobii3&amp;lt;/code&amp;gt;   - Enables/Disables logging of Eyetracker states&lt;br /&gt;
*&amp;lt;code&amp;gt;LogGazeData&amp;lt;/code&amp;gt; - Enables/Disables logging of gaze data&lt;br /&gt;
*&amp;lt;code&amp;gt;LogEyePos&amp;lt;/code&amp;gt; - Enables/Disables logging of eye position (as seen from the camera)&lt;br /&gt;
*&amp;lt;code&amp;gt;LogPupilSize&amp;lt;/code&amp;gt; - Enables/Disables logging of pupil size (very rough)&lt;br /&gt;
*&amp;lt;code&amp;gt;LogEyeDist&amp;lt;/code&amp;gt; - Enables/Disables logging of the distance from the screen to the eyes (again, rough)&lt;br /&gt;
*&amp;lt;code&amp;gt;GazeScale&amp;lt;/code&amp;gt; - Scales the incoming gaze data first&lt;br /&gt;
*&amp;lt;code&amp;gt;GazeOffset&amp;lt;/code&amp;gt; - Offsets the incoming gaze data after scaling&lt;br /&gt;
&lt;br /&gt;
Note: GazeScale and GazeOffset are quick hacks to address an issue with gaze data being clamped around the edges of the screen.  The eyetracker gives back values which are between 0.0 and 1.0 for onscreen gaze but supports looking slightly offscreen by allowing gaze data returned to go above 1.0 and below 0.0.  BCI2000 needs this scaled between 0.0 and 1.0 before the gaze data is multiplied by 65535 for storage in the 16 bit state.  These two parameters account for this scaling and offset and prevents the clamping from happening as often as it would otherwise.  These parameters will be removed once BCI2000 supports typed states. Brought from EyetrackerLogger&lt;br /&gt;
&lt;br /&gt;
The following code retreives the actual ~(0.0-1.0) range that the eyetracker outputs directly (assuming you&#039;ve scaled and offset the signal to avoid clipping) from each eye and averages it to find a gaze position.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
float x = State( &amp;quot;EyetrackerLeftEyeGazeX&amp;quot; ) + State( &amp;quot;EyetrackerRightEyeGazeX&amp;quot; ); x /= ( 2.0f * 65535.0f );&lt;br /&gt;
float y = State( &amp;quot;EyetrackerLeftEyeGazeY&amp;quot; ) + State( &amp;quot;EyetrackerRightEyeGazeY&amp;quot; ); y /= ( 2.0f * 65535.0f );&lt;br /&gt;
x -= ( float )Parameter( &amp;quot;GazeOffset&amp;quot; ); x /= ( float )Parameter( &amp;quot;GazeScale&amp;quot; );&lt;br /&gt;
y -= ( float )Parameter( &amp;quot;GazeOffset&amp;quot; ); y /= ( float )Parameter( &amp;quot;GazeScale&amp;quot; );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==State Variables==&lt;br /&gt;
Unless otherwise specified, all states are prefixed with &amp;lt;code&amp;gt;Eyetracker&amp;lt;Left/Right&amp;gt;Eye&amp;lt;/code&amp;gt; which corresponds with each individual eye.  The EyetrackerLogger extension does not support subjects with more than two eyes at the moment.&lt;br /&gt;
&lt;br /&gt;
===GazeX, GazeY===&lt;br /&gt;
The eye gaze position (where - on the screen - the subject is looking) is returned from the Tobii SDK as 32 bit floating point numbers which (roughly) range from 0.0 to 1.0.  They are multiplied by 65535 and stored as 16 bit integers in these states if the &amp;lt;code&amp;gt;LogGazeData&amp;lt;/code&amp;gt; parameter is enabled.  (0,0) corresponds to the top left of the screen, (65535,65535) corresponds to the right bottom of the screen. -- See [[Contributions:EyetrackerLogger#EyetrackerStatesOK|EyetrackerStatesOK]].&lt;br /&gt;
&lt;br /&gt;
===PosX, PosY===&lt;br /&gt;
The eye position relative to the camera in 2D space is returned if &amp;lt;code&amp;gt;LogEyePos&amp;lt;/code&amp;gt; is enabled.  Again, these are returned from the library as floating point numbers from 0.0 to 1.0 and are scaled to 16 bit integer values from 0 to 65535.  (0,0) corresponds to the top left of the camera&#039;s view, and (65535,65535) corresponds to the bottom right of the camera&#039;s view.&lt;br /&gt;
&lt;br /&gt;
===PupilSize===&lt;br /&gt;
The pupil size in mm is saved in this state if &amp;lt;code&amp;gt;LogPupilSize&amp;lt;/code&amp;gt; is enabled.  It corresponds to the length of the longest chord drawn from one side of the pupil to the other.  The size will change depending on the eye position and distance from the screen.  Although it is given in mm, it would be best to use this as a relative measurement.&lt;br /&gt;
&lt;br /&gt;
===EyeDist===&lt;br /&gt;
The distance between the screen and the eyes in mm is saved in this state if &amp;lt;code&amp;gt;LogEyeDist&amp;lt;/code&amp;gt; is enabled.  This measurement is an approximation.  The actual measurement will depend on whether or not the test subject is wearing glasses or not.&lt;br /&gt;
&lt;br /&gt;
===EyeValidity===&lt;br /&gt;
This state is a number from 0 to 4 and is documented in the Tobii SDK manual.  It is repeated here for convenience.&lt;br /&gt;
* 0 - The eye tracker is certain that the data for this eye is right.  There is no risk of confusing data from the other eye.&lt;br /&gt;
* 1 - The eye tracker has only recorded one eye and made some assumptions and estimations regarding which is the left and which is the right eye.  However, it is still very likely that the assumption made is correct.  The validity code for the other eye is in this case always set to 3.&lt;br /&gt;
* 2 - The eye tracker has only recorded one eye, and has no way of determining which one is the left eye and which one is the right eye.  The validity code for both eyes is set to 2.&lt;br /&gt;
* 3 - The eye tracker is fairly confident that the actual gaze data belongs to the other eye.  The other eye will always have validity code 1.&lt;br /&gt;
* 4 - The actual gaze data is missing or definitely belonging to the other eye.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Code (Right - Left)&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 - 0&lt;br /&gt;
| Both eyes found.  Data is valid for both eyes.&lt;br /&gt;
|-&lt;br /&gt;
| 0 - 4 or 4 - 0&lt;br /&gt;
| One eye found.  Gaze data is the same for both eyes.&lt;br /&gt;
|-&lt;br /&gt;
| 1 - 3 or 3 - 1&lt;br /&gt;
| One eye found.  Gaze data is the same for both eyes.&lt;br /&gt;
|-&lt;br /&gt;
| 2 - 2&lt;br /&gt;
| One eye found.  Gaze data is the same for both eyes.&lt;br /&gt;
|-&lt;br /&gt;
| 4 - 4&lt;br /&gt;
| No eye found.  Gaze data for both eyes are invalid.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;d probably be wise to remove all data points with a validity state of 2 or higher while running your analysis.&lt;br /&gt;
&lt;br /&gt;
===EyetrackerTimeStamp===&lt;br /&gt;
With the update to the 3.0 SDK, the added functionality of a time stamp on the frame of data is gathered from the eye tracker. It is then normalized to match the BCI2000 SourceTime. With this added state, you can check the input signals with the gaze direction of the subject or any other state. It is stored in ms like SourceTime.&lt;br /&gt;
&lt;br /&gt;
===EyetrackerStatesOK===&lt;br /&gt;
Early versions of the extension didn&#039;t take into account that the library may return a number greater than 1.0 or less than 0.0.  This resulted in &amp;quot;pac-man&amp;quot; style wrap around of gaze coordinates in 2.0 and crashes in 3.0.  If the output from the library is out of bounds, it is clamped to the boundaries and the &amp;quot;EyetrackerStatesOK&amp;quot; parameter is changed.  A value of &amp;quot;1&amp;quot; corresponds to valid gaze data, a value of &amp;quot;0&amp;quot; corresponds to invalid &amp;quot;clamped&amp;quot; gaze data.  Use the &amp;quot;GazeOffset&amp;quot; and &amp;quot;GazeScale&amp;quot; parameters to avoid clamping.  Those parameters scale and offset the data so that when it does go out of range, it can still be fit into the 16 bit state.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Logging Input]], [[Contributions:Extensions]], [[Contributions:EyetrackerLogger]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]][[Category:Extension]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=Contributions:EyetrackerLoggerTobii3&amp;diff=7532</id>
		<title>Contributions:EyetrackerLoggerTobii3</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=Contributions:EyetrackerLoggerTobii3&amp;diff=7532"/>
		<updated>2015-07-01T15:22:20Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Usage and Calibration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Synopsis==&lt;br /&gt;
A filter that records state information from &#039;&#039;Tobii Eyetrackers&#039;&#039; using the Tobii SDK 3.0  into state variables.&lt;br /&gt;
&lt;br /&gt;
==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/contrib/Extensions/EyetrackerLoggerTobii3&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
===Authors===&lt;br /&gt;
Kaleb Goering (kaleb.goering@gmail.com)&lt;br /&gt;
===Version History===&lt;br /&gt;
06/23/2015: Initial public release;&lt;br /&gt;
&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: 3318&lt;br /&gt;
*Tested under: 3318&lt;br /&gt;
*Known to compile under: 3318&lt;br /&gt;
*Broken since: --&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
In many cases, an experiment may require data about where the participant is looking.  In these experiments, an eyetracker is the only way to gather data relating to gaze position and eye location.  There are many eyetracking methods currently on the market, but many of these require the subject to hold their head steady -- often while strapped to a structure of some sort.  The Tobii eyetrackers require no such restriction so they were a natural choice when it came to interfacing with BCI2000.&lt;br /&gt;
&lt;br /&gt;
==Integration into BCI2000==&lt;br /&gt;
Compile the extension into your source module by enabling contributed extensions in your CMake configuration.  You can do this by going into your root build folder and deleting &amp;lt;code&amp;gt;CMakeCache.txt&amp;lt;/code&amp;gt; and re-running the project batch file, or by running &amp;lt;code&amp;gt;cmake -i&amp;lt;/code&amp;gt; and enabling &#039;&#039;&#039;BUILD_EYETRACKERLOGGERTOBII3&#039;&#039;&#039;.  Once the extension is built into the source module, enable it by starting the source module with the &amp;lt;code&amp;gt;--LogEyetrackerTobii3=1&amp;lt;/code&amp;gt; command line argument.&lt;br /&gt;
&lt;br /&gt;
==Usage and Calibration==&lt;br /&gt;
Set up the eyetracker as detailed in the documentation that came with your device.  The device will connect to your machine and communicate through the ethernet port.  As such, it&#039;d be wise to disconnect and turn off any other networking devices while using the eyetracker.  It is possible that your network request could go out over a different network interface if you&#039;re not careful which makes for a troubleshooting nightmare.  When you start the source module, ensure that the &amp;lt;code&amp;gt;--LogEyetrackerTobii3=1&amp;lt;/code&amp;gt; command line parameter is set.  Run the Eyetracker Browser utility which came with your eyetracker drivers and use it to locate the device on your local network. &lt;br /&gt;
&lt;br /&gt;
Calibration can now occur.  Calibration should be done per subject per sitting.  Re-calibration is not necessary between runs, but any time that the subject changes eyewear, makeup, or position, or if the lighting conditions change it should be re-calibrated. A good rule of thumb would be to recalibrate at the start of every session.  Once a calibration is performed, it is saved in the Tobii device until the next calibration (even if there&#039;s a power loss).&lt;br /&gt;
&lt;br /&gt;
BCI2000 does not provide any way to calibrate the eyetracker. This should be done using the Tobii.Calibration.exe program which came on the thumb drive with the eyetracker. It can be found in &amp;lt;code&amp;gt;Setup/InstallationGuide&amp;lt;/code&amp;gt;. Run the executable and follow the onscreen instructions to calibrate. &lt;br /&gt;
&lt;br /&gt;
Once the device is calibrated, it can be used reliably in BCI2000.  The logger will report information about eye validity in a text visualization window and feed states into the system.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
The eyetracker is configured in the Source tab within the EyetrackerLogger section.  The configurable parameters are:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;LogEyetrackerTobii3&amp;lt;/code&amp;gt;   - Enables/Disables logging of Eyetracker states&lt;br /&gt;
*&amp;lt;code&amp;gt;LogGazeData&amp;lt;/code&amp;gt; - Enables/Disables logging of gaze data&lt;br /&gt;
*&amp;lt;code&amp;gt;LogEyePos&amp;lt;/code&amp;gt; - Enables/Disables logging of eye position (as seen from the camera)&lt;br /&gt;
*&amp;lt;code&amp;gt;LogPupilSize&amp;lt;/code&amp;gt; - Enables/Disables logging of pupil size (very rough)&lt;br /&gt;
*&amp;lt;code&amp;gt;LogEyeDist&amp;lt;/code&amp;gt; - Enables/Disables logging of the distance from the screen to the eyes (again, rough)&lt;br /&gt;
*&amp;lt;code&amp;gt;GazeScale&amp;lt;/code&amp;gt; - Scales the incoming gaze data first&lt;br /&gt;
*&amp;lt;code&amp;gt;GazeOffset&amp;lt;/code&amp;gt; - Offsets the incoming gaze data after scaling&lt;br /&gt;
&lt;br /&gt;
Note: GazeScale and GazeOffset are quick hacks to address an issue with gaze data being clamped around the edges of the screen.  The eyetracker gives back values which are between 0.0 and 1.0 for onscreen gaze but supports looking slightly offscreen by allowing gaze data returned to go above 1.0 and below 0.0.  BCI2000 needs this scaled between 0.0 and 1.0 before the gaze data is multiplied by 65535 for storage in the 16 bit state.  These two parameters account for this scaling and offset and prevents the clamping from happening as often as it would otherwise.  These parameters will be removed once BCI2000 supports typed states. Brought from EyetrackerLogger&lt;br /&gt;
&lt;br /&gt;
The following code retreives the actual ~(0.0-1.0) range that the eyetracker outputs directly (assuming you&#039;ve scaled and offset the signal to avoid clipping) from each eye and averages it to find a gaze position.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
float x = State( &amp;quot;EyetrackerLeftEyeGazeX&amp;quot; ) + State( &amp;quot;EyetrackerRightEyeGazeX&amp;quot; ); x /= ( 2.0f * 65535.0f );&lt;br /&gt;
float y = State( &amp;quot;EyetrackerLeftEyeGazeY&amp;quot; ) + State( &amp;quot;EyetrackerRightEyeGazeY&amp;quot; ); y /= ( 2.0f * 65535.0f );&lt;br /&gt;
x -= ( float )Parameter( &amp;quot;GazeOffset&amp;quot; ); x /= ( float )Parameter( &amp;quot;GazeScale&amp;quot; );&lt;br /&gt;
y -= ( float )Parameter( &amp;quot;GazeOffset&amp;quot; ); y /= ( float )Parameter( &amp;quot;GazeScale&amp;quot; );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==State Variables==&lt;br /&gt;
Unless otherwise specified, all states are prefixed with &amp;lt;code&amp;gt;Eyetracker&amp;lt;Left/Right&amp;gt;Eye&amp;lt;/code&amp;gt; which corresponds with each individual eye.  The EyetrackerLogger extension does not support subjects with more than two eyes at the moment.&lt;br /&gt;
&lt;br /&gt;
===GazeX, GazeY===&lt;br /&gt;
The eye gaze position (where - on the screen - the subject is looking) is returned from the Tobii SDK as 32 bit floating point numbers which (roughly) range from 0.0 to 1.0.  They are multiplied by 65535 and stored as 16 bit integers in these states if the &amp;lt;code&amp;gt;LogGazeData&amp;lt;/code&amp;gt; parameter is enabled.  (0,0) corresponds to the top left of the screen, (65535,65535) corresponds to the right bottom of the screen. -- See [[Contributions:EyetrackerLogger#EyetrackerStatesOK|EyetrackerStatesOK]].&lt;br /&gt;
&lt;br /&gt;
===PosX, PosY===&lt;br /&gt;
The eye position relative to the camera in 2D space is returned if &amp;lt;code&amp;gt;LogEyePos&amp;lt;/code&amp;gt; is enabled.  Again, these are returned from the library as floating point numbers from 0.0 to 1.0 and are scaled to 16 bit integer values from 0 to 65535.  (0,0) corresponds to the top left of the camera&#039;s view, and (65535,65535) corresponds to the bottom right of the camera&#039;s view.&lt;br /&gt;
&lt;br /&gt;
===PupilSize===&lt;br /&gt;
The pupil size in mm is saved in this state if &amp;lt;code&amp;gt;LogPupilSize&amp;lt;/code&amp;gt; is enabled.  It corresponds to the length of the longest chord drawn from one side of the pupil to the other.  The size will change depending on the eye position and distance from the screen.  Although it is given in mm, it would be best to use this as a relative measurement.&lt;br /&gt;
&lt;br /&gt;
===EyeDist===&lt;br /&gt;
The distance between the screen and the eyes in mm is saved in this state if &amp;lt;code&amp;gt;LogEyeDist&amp;lt;/code&amp;gt; is enabled.  This measurement is an approximation.  The actual measurement will depend on whether or not the test subject is wearing glasses or not.&lt;br /&gt;
&lt;br /&gt;
===EyeValidity===&lt;br /&gt;
This state is a number from 0 to 4 and is documented in the Tobii SDK manual.  It is repeated here for convenience.&lt;br /&gt;
* 0 - The eye tracker is certain that the data for this eye is right.  There is no risk of confusing data from the other eye.&lt;br /&gt;
* 1 - The eye tracker has only recorded one eye and made some assumptions and estimations regarding which is the left and which is the right eye.  However, it is still very likely that the assumption made is correct.  The validity code for the other eye is in this case always set to 3.&lt;br /&gt;
* 2 - The eye tracker has only recorded one eye, and has no way of determining which one is the left eye and which one is the right eye.  The validity code for both eyes is set to 2.&lt;br /&gt;
* 3 - The eye tracker is fairly confident that the actual gaze data belongs to the other eye.  The other eye will always have validity code 1.&lt;br /&gt;
* 4 - The actual gaze data is missing or definitely belonging to the other eye.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Code (Right - Left)&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 - 0&lt;br /&gt;
| Both eyes found.  Data is valid for both eyes.&lt;br /&gt;
|-&lt;br /&gt;
| 0 - 4 or 4 - 0&lt;br /&gt;
| One eye found.  Gaze data is the same for both eyes.&lt;br /&gt;
|-&lt;br /&gt;
| 1 - 3 or 3 - 1&lt;br /&gt;
| One eye found.  Gaze data is the same for both eyes.&lt;br /&gt;
|-&lt;br /&gt;
| 2 - 2&lt;br /&gt;
| One eye found.  Gaze data is the same for both eyes.&lt;br /&gt;
|-&lt;br /&gt;
| 4 - 4&lt;br /&gt;
| No eye found.  Gaze data for both eyes are invalid.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;d probably be wise to remove all data points with a validity state of 2 or higher while running your analysis.&lt;br /&gt;
&lt;br /&gt;
===EyetrackerTimeStamp===&lt;br /&gt;
With the update to the 3.0 SDK, the added functionality of a time stamp on the frame of data is gathered from the eye tracker. It is then normalized to match the BCI2000 SourceTime. With this added state, you can check the input signals with the gaze direction of the subject or any other state. It is stored in ms like SourceTime.&lt;br /&gt;
&lt;br /&gt;
===EyetrackerStatesOK===&lt;br /&gt;
Early versions of the extension didn&#039;t take into account that the library may return a number greater than 1.0 or less than 0.0.  This resulted in &amp;quot;pac-man&amp;quot; style wrap around of gaze coordinates in 2.0 and crashes in 3.0.  If the output from the library is out of bounds, it is clamped to the boundaries and the &amp;quot;EyetrackerStatesOK&amp;quot; parameter is changed.  A value of &amp;quot;1&amp;quot; corresponds to valid gaze data, a value of &amp;quot;0&amp;quot; corresponds to invalid &amp;quot;clamped&amp;quot; gaze data.  Use the &amp;quot;GazeOffset&amp;quot; and &amp;quot;GazeScale&amp;quot; parameters to avoid clamping.  Those parameters scale and offset the data so that when it does go out of range, it can still be fit into the 16 bit state.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:Logging Input]], [[Contributions:Extensions]], [[Contributions:EyetrackerLogger]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]][[Category:Extension]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=Contributions:ParallelPortFilter&amp;diff=7531</id>
		<title>Contributions:ParallelPortFilter</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=Contributions:ParallelPortFilter&amp;diff=7531"/>
		<updated>2015-07-01T15:18:05Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Digital Output */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/contrib/Extensions/ParallelPortFilter&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
&lt;br /&gt;
===Authors===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com)&lt;br /&gt;
&lt;br /&gt;
===Version History===&lt;br /&gt;
* 2015/06/30: Initial public release&lt;br /&gt;
&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: --&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
This simple filter extension resides in the Application module and makes input and output with the parallel port easy. The inputs are stored as states ParallelPortInput1 - ParallelPortInput24 based off the number of ports connected. For more information, see [[:Contributions:ParallelPortFilter#States|States]].&lt;br /&gt;
&lt;br /&gt;
==Integration into BCI2000==&lt;br /&gt;
Compile the extension into your source module by enabling contributed extensions in your CMake configuration.  You can do this by going into your root build folder and deleting &amp;lt;code&amp;gt;CMakeCache.txt&amp;lt;/code&amp;gt; and re-running the project batch file, or by running &amp;lt;code&amp;gt;cmake -i&amp;lt;/code&amp;gt; and enabling &#039;&#039;&#039;BUILD_PARALLELPORTFILTER&#039;&#039;&#039;.  Once the extension is built into the source module, it can be used.&lt;br /&gt;
&lt;br /&gt;
==Configuring ParallelPortFiler==&lt;br /&gt;
If using the filter, SourcePorts must have a number greater than 0. Then list the names for the ports separated by spaces in SourcePortsList. The list must be the same length as the value in SourcePorts. You can then set the LPTMapping with column one in using the names as in SourcePortsList and column 2 using the corresponding hardware address. This step is optional. If not configured, LPT1 maps to 0x378 and LPT2 maps to 0x278 which should work for most users. DigitalOutputEx is only necessary if user wants to write output through the parallel port.&lt;br /&gt;
&lt;br /&gt;
If the default settings for LPTMapping did not produce results, the hardware address might be different for the user&#039;s computer. To find the hardware address for the parallel ports for your machine, press &#039;&#039;&#039;WIN&#039;&#039;&#039; + &#039;&#039;&#039;R&#039;&#039;&#039; and enter &#039;&#039;devmgmt.msc&#039;&#039;. In Device Manager, expand the section labeled &#039;&#039;&#039;Ports (Com &amp;amp; LPT)&#039;&#039;&#039;. If this section does not exist, you probably do not have LPT ports or the driver is not installed properly. Find the one labeled with (LPT1) or whatever port you are looking for. Right click and select Properties. In the Resources tab, there is a field called I/O Range and take the first value of the range which is in hexadecimal. If multiple I/O Range, read the first one; if that does not work, try the other one. Take that value as the hardware address for Parameter LPTMapping. These instructions for finding the address has been tested on Windows XP, 7, and 8.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortAddress.JPG]]&lt;br /&gt;
&lt;br /&gt;
For some examples on configurations, see [[:Contributions:ParallelPortFilter#Example Configurations|Example Configurations]].&lt;br /&gt;
&lt;br /&gt;
For better explanation of the parameters, see [[:Contributions:ParallelPortFilter#Parameters|Parameters]].&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
The ParallelPortFilter is configured in the ParallelPort tab.  The configurable parameters are:&lt;br /&gt;
&lt;br /&gt;
===SourcePorts===&lt;br /&gt;
This parameter is used to initialize the filter and to keep track of the number of ports being used. This number should be the total number of parallel ports that should be used to communicate. It should be an integer value greater than 0 if being used else 0. Most computers do not have more than 3 parallel ports but some have 4. In good practice this value should not be greater than 3 unless you are sure you have that many ports.&lt;br /&gt;
&lt;br /&gt;
===SourcePortsList===&lt;br /&gt;
This parameter lists the ports to be used and the order to communicate through them. It should be a list of the port names LPT1 - LPT3. You can not use the same port twice in on list. This list must be the same length as the value in Parameter SourcePorts.&lt;br /&gt;
&lt;br /&gt;
===LPTMapping===&lt;br /&gt;
This parameter is to manually enter the hardware address of the ports incase that the computer being used does not conform to general use hardware addresses. Column one should have the names of the ports such as LPT1 or LPT2, same as the values in Parameter SourcePortsList, and column two should have the hexadecimal value of the port such as 0x378. The number of rows in the matrix should be equal to the value in Parameter SourcePorts, while it must have two columns if being used, no more, no less.&lt;br /&gt;
&lt;br /&gt;
===DigitalOutputEx===&lt;br /&gt;
This matrix of expressions that controls the outputs on the parallel ports.  Each port has 8 bits which correspond to 8 rows on the matrix. If the expression evaluates to True, the bit will be set to 1 else to 0. Boolean expression work quite well here. For more information on digital output and expressions usage for ParallelPortFilter see [[::Contributions:ParallelPortFilter#Digital Output|Digital Output]].&lt;br /&gt;
&lt;br /&gt;
==Digital Output==&lt;br /&gt;
Each port has 8 bits that can be written to. These bits can be accessed through the Parameter DigitalOutputEx. The user must write expressions for each individual bit on each port. The row label corresponds to which bit it will be written to. If multiple ports are enabled, row 1 - 8 correspond to the bits 1 - 8 on the first port and row 9 - 16 correspond to the bits 1 - 8 on the second port and so on. Expressions that evaluate to True set the corresponding bit to 1 and those that evaluate to False set the corresponding bit to 0.&lt;br /&gt;
&lt;br /&gt;
In the case that the user wishes to send an signal or a value through the port, the user must convert the number into binary and write the corresponding zeroes and ones to the respective bits. To do that, the formula: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mod((floor(x / 2 ^(bitnumber - 1))), 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The x is the signal the user wishes to send through the port. For example if the State MousePosX was to be sent through the port, the Parameter DigitalOutputEx would be:&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterDigitalOutExBinary.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;State(&amp;quot;MousePosX&amp;quot;) / State(&amp;quot;MousePosX&amp;quot;) * 255&amp;lt;/code&amp;gt; normalizes the coordinates to fit into eight bits which is all parallel ports can handle.&lt;br /&gt;
&lt;br /&gt;
Not all rows have to be created. Any row not named just writes the bit as 0. The rows also can be written in whatever order if you just change the row label in the parameter. The example below just sets bit 1 and 5 to 1. All other rows are zeroes.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterRowLabelChange.jpg]]&lt;br /&gt;
&lt;br /&gt;
For more on expressions, see [[:User Reference:Expression Syntax|Expressions]].&lt;br /&gt;
&lt;br /&gt;
==States==&lt;br /&gt;
For each port there is 8 input bits which correspond to 8 ParallelPortInput states. Each state is either a 0 or a 1. If multiple ports are enabled, ParallelPortInput1 - ParallelPortInput8 correspond to the bits 1 - 8 on the first port and ParallelPortInput9 - ParallelPortInput16 correspond to the bits 1 - 8 on the second port and so on. Currently only 3 ports may be enabled, which should be more than enough for most computers do not have more than port LPT1 - LPT3.&lt;br /&gt;
&lt;br /&gt;
==Example Configurations==&lt;br /&gt;
This example enables port LPT1 with a new hardware address.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterNewAddress.jpg|1000px]]&lt;br /&gt;
&lt;br /&gt;
This example enables ports with names MRIScanner and StimulusDevice with hardware addresses. Note that the address for the ports are the same as the default values for LPT1 and LPT2. This shows that LPT names can be renamed in the Parameter Configuration to make it easier to read. This does not change the names of the addresses given by the computer itself.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterNewNames.jpg|1000px]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=Contributions:Extensions&amp;diff=7530</id>
		<title>Contributions:Extensions</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=Contributions:Extensions&amp;diff=7530"/>
		<updated>2015-07-01T14:55:17Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A framework &#039;&#039;Extension&#039;&#039; is an optional contributed plugin which can affect multiple modules.  For example, various manufacturer-specific  [[User Reference:Logging Input|input-device loggers]] are provided in the &amp;lt;code&amp;gt;src/contrib/Extensions&amp;lt;/code&amp;gt; folder, and these can be optionally added to the BCI2000 framework for SignalSource modules, thereby giving all source modules the ability to log input from the corresponding devices.  Selecting a custom Extension, and re-building your modules to include it, requires the use of CMake and a supported C++ compiler:  see the [[Programming Howto:Quickstart Guide]] for a walkthrough that shows you how to recompile BCI2000 modules. &lt;br /&gt;
&lt;br /&gt;
The following user extensions are available in the [[Contributions:Contents|Contributions]] section of BCI2000:&lt;br /&gt;
&lt;br /&gt;
*[[Contributions:CyberGloveLogger]]: A logger extension which acquires data from CGI, CGII and CGIII Cybergloves. &lt;br /&gt;
*[[Contributions:DataGloveLogger]]: A logger extension which acquires data from the 5DT Data Glove Ultra.&lt;br /&gt;
*[[Contributions:EyetrackerLogger]]: A logger extension which acquires data from Tobii eyetrackers.&lt;br /&gt;
*[[Contributions:EyetrackerLoggerTobii3]]: A logger extension which acquires data from Tobii eyetrackers using SDK version 3&lt;br /&gt;
*[[Contributions:EyetrackerLoggerTobiiX]]: A logger extension which acquires data from Tobii Eye X eyetrackers.&lt;br /&gt;
*[[Contributions:GazeMonitorFilter]]: An application module filter extension which supports the EyetrackerLogger.&lt;br /&gt;
*[[Contributions:WiimoteLogger]]: A logger extension which acquires data from Nintendo Wii Remotes.&lt;br /&gt;
*[[Contributions:WebcamLogger]]: A logger extension which allows for synchronizing webcam video.&lt;br /&gt;
*[[Contributions:AudioExtension]]: An all purpose audio toolkit which allows for realtime multichannel audio I/O.&lt;br /&gt;
*[[Contributions:StimBoxFilter]]: A logger and controller for the gtec g.STIMbox.&lt;br /&gt;
*[[Contributions:ParallelPortFilter]]: A logger and controller for communication through parallel ports.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[Programming Reference:EnvironmentExtension Class]]&lt;br /&gt;
&lt;br /&gt;
[[Programming Tutorial:Implementing an Input Logger]][[Category:Contents]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=File:ParallelPortFilterNewNames.jpg&amp;diff=7529</id>
		<title>File:ParallelPortFilterNewNames.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=File:ParallelPortFilterNewNames.jpg&amp;diff=7529"/>
		<updated>2015-07-01T14:52:49Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: Kgoering uploaded a new version of &amp;amp;quot;File:ParallelPortFilterNewNames.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Example of how to rename LPT for use in ParallelPortFilter.&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=File:ParallelPortFilterRowLabelChange.jpg&amp;diff=7528</id>
		<title>File:ParallelPortFilterRowLabelChange.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=File:ParallelPortFilterRowLabelChange.jpg&amp;diff=7528"/>
		<updated>2015-07-01T14:52:05Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: Kgoering uploaded a new version of &amp;amp;quot;File:ParallelPortFilterRowLabelChange.jpg&amp;amp;quot;: This is an example of set up setting the address of LPT1 to the address for the current machine.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Example of how to only write 1 to two bits without saying 0 to the others&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=File:ParallelPortFilterNewAddress.jpg&amp;diff=7527</id>
		<title>File:ParallelPortFilterNewAddress.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=File:ParallelPortFilterNewAddress.jpg&amp;diff=7527"/>
		<updated>2015-07-01T14:51:28Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: Kgoering uploaded a new version of &amp;amp;quot;File:ParallelPortFilterNewAddress.jpg&amp;amp;quot;: This is an example of set up setting the address of LPT1 to the address for the current machine.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an example of set up setting the address of LPT1 to the address for the current machine.&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=File:ParallelPortFilterDigitalOutExBinary.jpg&amp;diff=7526</id>
		<title>File:ParallelPortFilterDigitalOutExBinary.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=File:ParallelPortFilterDigitalOutExBinary.jpg&amp;diff=7526"/>
		<updated>2015-07-01T14:50:20Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: Kgoering uploaded a new version of &amp;amp;quot;File:ParallelPortFilterDigitalOutExBinary.jpg&amp;amp;quot;: How to send the MousePosX through a parallel port&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;How to send the value 193 through a parallel port&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=Contributions:ParallelPortFilter&amp;diff=7525</id>
		<title>Contributions:ParallelPortFilter</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=Contributions:ParallelPortFilter&amp;diff=7525"/>
		<updated>2015-06-30T20:36:34Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Digital Output */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/contrib/Extensions/ParallelPortFilter&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
&lt;br /&gt;
===Authors===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com)&lt;br /&gt;
&lt;br /&gt;
===Version History===&lt;br /&gt;
* 2015/06/30: Initial public release&lt;br /&gt;
&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: --&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
This simple filter extension resides in the Application module and makes input and output with the parallel port easy. The inputs are stored as states ParallelPortInput1 - ParallelPortInput24 based off the number of ports connected. For more information, see [[:Contributions:ParallelPortFilter#States|States]].&lt;br /&gt;
&lt;br /&gt;
==Integration into BCI2000==&lt;br /&gt;
Compile the extension into your source module by enabling contributed extensions in your CMake configuration.  You can do this by going into your root build folder and deleting &amp;lt;code&amp;gt;CMakeCache.txt&amp;lt;/code&amp;gt; and re-running the project batch file, or by running &amp;lt;code&amp;gt;cmake -i&amp;lt;/code&amp;gt; and enabling &#039;&#039;&#039;BUILD_PARALLELPORTFILTER&#039;&#039;&#039;.  Once the extension is built into the source module, it can be used.&lt;br /&gt;
&lt;br /&gt;
==Configuring ParallelPortFiler==&lt;br /&gt;
If using the filter, SourcePorts must have a number greater than 0. Then list the names for the ports separated by spaces in SourcePortsList. The list must be the same length as the value in SourcePorts. You can then set the LPTMapping with column one in using the names as in SourcePortsList and column 2 using the corresponding hardware address. This step is optional. If not configured, LPT1 maps to 0x378 and LPT2 maps to 0x278 which should work for most users. DigitalOutputEx is only necessary if user wants to write output through the parallel port.&lt;br /&gt;
&lt;br /&gt;
If the default settings for LPTMapping did not produce results, the hardware address might be different for the user&#039;s computer. To find the hardware address for the parallel ports for your machine, press &#039;&#039;&#039;WIN&#039;&#039;&#039; + &#039;&#039;&#039;R&#039;&#039;&#039; and enter &#039;&#039;devmgmt.msc&#039;&#039;. In Device Manager, expand the section labeled &#039;&#039;&#039;Ports (Com &amp;amp; LPT)&#039;&#039;&#039;. If this section does not exist, you probably do not have LPT ports or the driver is not installed properly. Find the one labeled with (LPT1) or whatever port you are looking for. Right click and select Properties. In the Resources tab, there is a field called I/O Range and take the first value of the range which is in hexadecimal. If multiple I/O Range, read the first one; if that does not work, try the other one. Take that value as the hardware address for Parameter LPTMapping. These instructions for finding the address has been tested on Windows XP, 7, and 8.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortAddress.JPG]]&lt;br /&gt;
&lt;br /&gt;
For some examples on configurations, see [[:Contributions:ParallelPortFilter#Example Configurations|Example Configurations]].&lt;br /&gt;
&lt;br /&gt;
For better explanation of the parameters, see [[:Contributions:ParallelPortFilter#Parameters|Parameters]].&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
The ParallelPortFilter is configured in the ParallelPort tab.  The configurable parameters are:&lt;br /&gt;
&lt;br /&gt;
===SourcePorts===&lt;br /&gt;
This parameter is used to initialize the filter and to keep track of the number of ports being used. This number should be the total number of parallel ports that should be used to communicate. It should be an integer value greater than 0 if being used else 0. Most computers do not have more than 3 parallel ports but some have 4. In good practice this value should not be greater than 3 unless you are sure you have that many ports.&lt;br /&gt;
&lt;br /&gt;
===SourcePortsList===&lt;br /&gt;
This parameter lists the ports to be used and the order to communicate through them. It should be a list of the port names LPT1 - LPT3. You can not use the same port twice in on list. This list must be the same length as the value in Parameter SourcePorts.&lt;br /&gt;
&lt;br /&gt;
===LPTMapping===&lt;br /&gt;
This parameter is to manually enter the hardware address of the ports incase that the computer being used does not conform to general use hardware addresses. Column one should have the names of the ports such as LPT1 or LPT2, same as the values in Parameter SourcePortsList, and column two should have the hexadecimal value of the port such as 0x378. The number of rows in the matrix should be equal to the value in Parameter SourcePorts, while it must have two columns if being used, no more, no less.&lt;br /&gt;
&lt;br /&gt;
===DigitalOutputEx===&lt;br /&gt;
This matrix of expressions that controls the outputs on the parallel ports.  Each port has 8 bits which correspond to 8 rows on the matrix. If the expression evaluates to True, the bit will be set to 1 else to 0. Boolean expression work quite well here. For more information on digital output and expressions usage for ParallelPortFilter see [[::Contributions:ParallelPortFilter#Digital Output|Digital Output]].&lt;br /&gt;
&lt;br /&gt;
==Digital Output==&lt;br /&gt;
Each port has 8 bits that can be written to. These bits can be accessed through the Parameter DigitalOutputEx. The user must write expressions for each individual bit on each port. The row label corresponds to which bit it will be written to. If multiple ports are enabled, row 1 - 8 correspond to the bits 1 - 8 on the first port and row 9 - 16 correspond to the bits 1 - 8 on the second port and so on. Expressions that evaluate to True set the corresponding bit to 1 and those that evaluate to False set the corresponding bit to 0.&lt;br /&gt;
&lt;br /&gt;
In the case that the user wishes to send an signal or a value through the port, the user must convert the number into binary and write the corresponding zeroes and ones to the respective bits. To do that, the formula: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mod((floor(x / 2 ^(bitnumber - 1))), 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The x is the number or the signal the user wishes to send through the port. For example if the number 193 was to be sent through the port, the Parameter DigitalOutputEx would be:&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterDigitalOutExBinary.jpg]]&lt;br /&gt;
&lt;br /&gt;
Not all rows have to be created. Any row not named just writes the bit as 0. The rows also can be written in whatever order if you just change the row label in the parameter. The example below just sets bit 1 and 5 to 1. All other rows are zeroes.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterRowLabelChange.jpg]]&lt;br /&gt;
&lt;br /&gt;
For more on expressions, see [[:User Reference:Expression Syntax|Expressions]].&lt;br /&gt;
&lt;br /&gt;
==States==&lt;br /&gt;
For each port there is 8 input bits which correspond to 8 ParallelPortInput states. Each state is either a 0 or a 1. If multiple ports are enabled, ParallelPortInput1 - ParallelPortInput8 correspond to the bits 1 - 8 on the first port and ParallelPortInput9 - ParallelPortInput16 correspond to the bits 1 - 8 on the second port and so on. Currently only 3 ports may be enabled, which should be more than enough for most computers do not have more than port LPT1 - LPT3.&lt;br /&gt;
&lt;br /&gt;
==Example Configurations==&lt;br /&gt;
This example enables port LPT1 with a new hardware address.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterNewAddress.jpg|1000px]]&lt;br /&gt;
&lt;br /&gt;
This example enables ports with names MRIScanner and StimulusDevice with hardware addresses. Note that the address for the ports are the same as the default values for LPT1 and LPT2. This shows that LPT names can be renamed in the Parameter Configuration to make it easier to read. This does not change the names of the addresses given by the computer itself.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterNewNames.jpg|1000px]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=Contributions:ParallelPortFilter&amp;diff=7524</id>
		<title>Contributions:ParallelPortFilter</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=Contributions:ParallelPortFilter&amp;diff=7524"/>
		<updated>2015-06-30T20:35:55Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Digital Output */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/contrib/Extensions/ParallelPortFilter&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
&lt;br /&gt;
===Authors===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com)&lt;br /&gt;
&lt;br /&gt;
===Version History===&lt;br /&gt;
* 2015/06/30: Initial public release&lt;br /&gt;
&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: --&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
This simple filter extension resides in the Application module and makes input and output with the parallel port easy. The inputs are stored as states ParallelPortInput1 - ParallelPortInput24 based off the number of ports connected. For more information, see [[:Contributions:ParallelPortFilter#States|States]].&lt;br /&gt;
&lt;br /&gt;
==Integration into BCI2000==&lt;br /&gt;
Compile the extension into your source module by enabling contributed extensions in your CMake configuration.  You can do this by going into your root build folder and deleting &amp;lt;code&amp;gt;CMakeCache.txt&amp;lt;/code&amp;gt; and re-running the project batch file, or by running &amp;lt;code&amp;gt;cmake -i&amp;lt;/code&amp;gt; and enabling &#039;&#039;&#039;BUILD_PARALLELPORTFILTER&#039;&#039;&#039;.  Once the extension is built into the source module, it can be used.&lt;br /&gt;
&lt;br /&gt;
==Configuring ParallelPortFiler==&lt;br /&gt;
If using the filter, SourcePorts must have a number greater than 0. Then list the names for the ports separated by spaces in SourcePortsList. The list must be the same length as the value in SourcePorts. You can then set the LPTMapping with column one in using the names as in SourcePortsList and column 2 using the corresponding hardware address. This step is optional. If not configured, LPT1 maps to 0x378 and LPT2 maps to 0x278 which should work for most users. DigitalOutputEx is only necessary if user wants to write output through the parallel port.&lt;br /&gt;
&lt;br /&gt;
If the default settings for LPTMapping did not produce results, the hardware address might be different for the user&#039;s computer. To find the hardware address for the parallel ports for your machine, press &#039;&#039;&#039;WIN&#039;&#039;&#039; + &#039;&#039;&#039;R&#039;&#039;&#039; and enter &#039;&#039;devmgmt.msc&#039;&#039;. In Device Manager, expand the section labeled &#039;&#039;&#039;Ports (Com &amp;amp; LPT)&#039;&#039;&#039;. If this section does not exist, you probably do not have LPT ports or the driver is not installed properly. Find the one labeled with (LPT1) or whatever port you are looking for. Right click and select Properties. In the Resources tab, there is a field called I/O Range and take the first value of the range which is in hexadecimal. If multiple I/O Range, read the first one; if that does not work, try the other one. Take that value as the hardware address for Parameter LPTMapping. These instructions for finding the address has been tested on Windows XP, 7, and 8.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortAddress.JPG]]&lt;br /&gt;
&lt;br /&gt;
For some examples on configurations, see [[:Contributions:ParallelPortFilter#Example Configurations|Example Configurations]].&lt;br /&gt;
&lt;br /&gt;
For better explanation of the parameters, see [[:Contributions:ParallelPortFilter#Parameters|Parameters]].&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
The ParallelPortFilter is configured in the ParallelPort tab.  The configurable parameters are:&lt;br /&gt;
&lt;br /&gt;
===SourcePorts===&lt;br /&gt;
This parameter is used to initialize the filter and to keep track of the number of ports being used. This number should be the total number of parallel ports that should be used to communicate. It should be an integer value greater than 0 if being used else 0. Most computers do not have more than 3 parallel ports but some have 4. In good practice this value should not be greater than 3 unless you are sure you have that many ports.&lt;br /&gt;
&lt;br /&gt;
===SourcePortsList===&lt;br /&gt;
This parameter lists the ports to be used and the order to communicate through them. It should be a list of the port names LPT1 - LPT3. You can not use the same port twice in on list. This list must be the same length as the value in Parameter SourcePorts.&lt;br /&gt;
&lt;br /&gt;
===LPTMapping===&lt;br /&gt;
This parameter is to manually enter the hardware address of the ports incase that the computer being used does not conform to general use hardware addresses. Column one should have the names of the ports such as LPT1 or LPT2, same as the values in Parameter SourcePortsList, and column two should have the hexadecimal value of the port such as 0x378. The number of rows in the matrix should be equal to the value in Parameter SourcePorts, while it must have two columns if being used, no more, no less.&lt;br /&gt;
&lt;br /&gt;
===DigitalOutputEx===&lt;br /&gt;
This matrix of expressions that controls the outputs on the parallel ports.  Each port has 8 bits which correspond to 8 rows on the matrix. If the expression evaluates to True, the bit will be set to 1 else to 0. Boolean expression work quite well here. For more information on digital output and expressions usage for ParallelPortFilter see [[::Contributions:ParallelPortFilter#Digital Output|Digital Output]].&lt;br /&gt;
&lt;br /&gt;
==Digital Output==&lt;br /&gt;
Each port has 8 bits that can be written to. These bits can be accessed through the Parameter DigitalOutputEx. The user must write expressions for each individual bit on each port. The row label corresponds to which bit it will be written to. If multiple ports are enabled, row 1 - 8 correspond to the bits 1 - 8 on the first port and row 9 - 16 correspond to the bits 1 - 8 on the second port and so on. Expressions that evaluate to True set the corresponding bit to 1 and those that evaluate to False set the corresponding bit to 0.&lt;br /&gt;
&lt;br /&gt;
In the case that the user wishes to send an signal or a value through the port, the user must convert the number into binary and write the corresponding zeroes and ones to the respective bits. To do that, the formula: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mod((floor(x / 2 ^(bitnumber - 1))), 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 The x is the number or the signal the user wishes to send through the port. For example if the number 193 was to be sent through the port, the Parameter DigitalOutputEx would be:&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterDigitalOutExBinary.jpg]]&lt;br /&gt;
&lt;br /&gt;
Not all rows have to be created. Any row not named just writes the bit as 0. The rows also can be written in whatever order if you just change the row label in the parameter. The example below just sets bit 1 and 5 to 1. All other rows are zeroes.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterRowLabelChange.jpg]]&lt;br /&gt;
&lt;br /&gt;
For more on expressions, see [[:User Reference:Expression Syntax|Expressions]].&lt;br /&gt;
&lt;br /&gt;
==States==&lt;br /&gt;
For each port there is 8 input bits which correspond to 8 ParallelPortInput states. Each state is either a 0 or a 1. If multiple ports are enabled, ParallelPortInput1 - ParallelPortInput8 correspond to the bits 1 - 8 on the first port and ParallelPortInput9 - ParallelPortInput16 correspond to the bits 1 - 8 on the second port and so on. Currently only 3 ports may be enabled, which should be more than enough for most computers do not have more than port LPT1 - LPT3.&lt;br /&gt;
&lt;br /&gt;
==Example Configurations==&lt;br /&gt;
This example enables port LPT1 with a new hardware address.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterNewAddress.jpg|1000px]]&lt;br /&gt;
&lt;br /&gt;
This example enables ports with names MRIScanner and StimulusDevice with hardware addresses. Note that the address for the ports are the same as the default values for LPT1 and LPT2. This shows that LPT names can be renamed in the Parameter Configuration to make it easier to read. This does not change the names of the addresses given by the computer itself.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterNewNames.jpg|1000px]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=Contributions:ParallelPortFilter&amp;diff=7523</id>
		<title>Contributions:ParallelPortFilter</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=Contributions:ParallelPortFilter&amp;diff=7523"/>
		<updated>2015-06-30T20:26:19Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/contrib/Extensions/ParallelPortFilter&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
&lt;br /&gt;
===Authors===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com)&lt;br /&gt;
&lt;br /&gt;
===Version History===&lt;br /&gt;
* 2015/06/30: Initial public release&lt;br /&gt;
&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: --&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
This simple filter extension resides in the Application module and makes input and output with the parallel port easy. The inputs are stored as states ParallelPortInput1 - ParallelPortInput24 based off the number of ports connected. For more information, see [[:Contributions:ParallelPortFilter#States|States]].&lt;br /&gt;
&lt;br /&gt;
==Integration into BCI2000==&lt;br /&gt;
Compile the extension into your source module by enabling contributed extensions in your CMake configuration.  You can do this by going into your root build folder and deleting &amp;lt;code&amp;gt;CMakeCache.txt&amp;lt;/code&amp;gt; and re-running the project batch file, or by running &amp;lt;code&amp;gt;cmake -i&amp;lt;/code&amp;gt; and enabling &#039;&#039;&#039;BUILD_PARALLELPORTFILTER&#039;&#039;&#039;.  Once the extension is built into the source module, it can be used.&lt;br /&gt;
&lt;br /&gt;
==Configuring ParallelPortFiler==&lt;br /&gt;
If using the filter, SourcePorts must have a number greater than 0. Then list the names for the ports separated by spaces in SourcePortsList. The list must be the same length as the value in SourcePorts. You can then set the LPTMapping with column one in using the names as in SourcePortsList and column 2 using the corresponding hardware address. This step is optional. If not configured, LPT1 maps to 0x378 and LPT2 maps to 0x278 which should work for most users. DigitalOutputEx is only necessary if user wants to write output through the parallel port.&lt;br /&gt;
&lt;br /&gt;
If the default settings for LPTMapping did not produce results, the hardware address might be different for the user&#039;s computer. To find the hardware address for the parallel ports for your machine, press &#039;&#039;&#039;WIN&#039;&#039;&#039; + &#039;&#039;&#039;R&#039;&#039;&#039; and enter &#039;&#039;devmgmt.msc&#039;&#039;. In Device Manager, expand the section labeled &#039;&#039;&#039;Ports (Com &amp;amp; LPT)&#039;&#039;&#039;. If this section does not exist, you probably do not have LPT ports or the driver is not installed properly. Find the one labeled with (LPT1) or whatever port you are looking for. Right click and select Properties. In the Resources tab, there is a field called I/O Range and take the first value of the range which is in hexadecimal. If multiple I/O Range, read the first one; if that does not work, try the other one. Take that value as the hardware address for Parameter LPTMapping. These instructions for finding the address has been tested on Windows XP, 7, and 8.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortAddress.JPG]]&lt;br /&gt;
&lt;br /&gt;
For some examples on configurations, see [[:Contributions:ParallelPortFilter#Example Configurations|Example Configurations]].&lt;br /&gt;
&lt;br /&gt;
For better explanation of the parameters, see [[:Contributions:ParallelPortFilter#Parameters|Parameters]].&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
The ParallelPortFilter is configured in the ParallelPort tab.  The configurable parameters are:&lt;br /&gt;
&lt;br /&gt;
===SourcePorts===&lt;br /&gt;
This parameter is used to initialize the filter and to keep track of the number of ports being used. This number should be the total number of parallel ports that should be used to communicate. It should be an integer value greater than 0 if being used else 0. Most computers do not have more than 3 parallel ports but some have 4. In good practice this value should not be greater than 3 unless you are sure you have that many ports.&lt;br /&gt;
&lt;br /&gt;
===SourcePortsList===&lt;br /&gt;
This parameter lists the ports to be used and the order to communicate through them. It should be a list of the port names LPT1 - LPT3. You can not use the same port twice in on list. This list must be the same length as the value in Parameter SourcePorts.&lt;br /&gt;
&lt;br /&gt;
===LPTMapping===&lt;br /&gt;
This parameter is to manually enter the hardware address of the ports incase that the computer being used does not conform to general use hardware addresses. Column one should have the names of the ports such as LPT1 or LPT2, same as the values in Parameter SourcePortsList, and column two should have the hexadecimal value of the port such as 0x378. The number of rows in the matrix should be equal to the value in Parameter SourcePorts, while it must have two columns if being used, no more, no less.&lt;br /&gt;
&lt;br /&gt;
===DigitalOutputEx===&lt;br /&gt;
This matrix of expressions that controls the outputs on the parallel ports.  Each port has 8 bits which correspond to 8 rows on the matrix. If the expression evaluates to True, the bit will be set to 1 else to 0. Boolean expression work quite well here. For more information on digital output and expressions usage for ParallelPortFilter see [[::Contributions:ParallelPortFilter#Digital Output|Digital Output]].&lt;br /&gt;
&lt;br /&gt;
==Digital Output==&lt;br /&gt;
Each port has 8 bits that can be written to. These bits can be accessed through the Parameter DigitalOutputEx. The user must write expressions for each individual bit on each port. The row label corresponds to which bit it will be written to. If multiple ports are enabled, row 1 - 8 correspond to the bits 1 - 8 on the first port and row 9 - 16 correspond to the bits 1 - 8 on the second port and so on. Expressions that evaluate to True set the corresponding bit to 1 and those that evaluate to False set the corresponding bit to 0.&lt;br /&gt;
&lt;br /&gt;
In the case that the user wishes to send an signal or a value through the port, the user must convert the number into binary and write the corresponding zeroes and ones to the respective bits. To do that, the formula: &lt;br /&gt;
&amp;lt;code&amp;gt;mod((floor(x / 2 ^(bitnumber - 1))), 2)&amp;lt;/code&amp;gt;. The x is the number or the signal the user wishes to send through the port. For example if the number 193 was to be sent through the port, the Parameter DigitalOutputEx would be:&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterDigitalOutExBinary.jpg]]&lt;br /&gt;
&lt;br /&gt;
Not all rows have to be created. Any row not named just writes the bit as 0. The rows also can be written in whatever order if you just change the row label in the parameter. The example below just sets bit 1 and 5 to 1. All other rows are zeroes.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterRowLabelChange.jpg]]&lt;br /&gt;
&lt;br /&gt;
For more on expressions, see [[:User Reference:Expression Syntax|Expressions]].&lt;br /&gt;
&lt;br /&gt;
==States==&lt;br /&gt;
For each port there is 8 input bits which correspond to 8 ParallelPortInput states. Each state is either a 0 or a 1. If multiple ports are enabled, ParallelPortInput1 - ParallelPortInput8 correspond to the bits 1 - 8 on the first port and ParallelPortInput9 - ParallelPortInput16 correspond to the bits 1 - 8 on the second port and so on. Currently only 3 ports may be enabled, which should be more than enough for most computers do not have more than port LPT1 - LPT3.&lt;br /&gt;
&lt;br /&gt;
==Example Configurations==&lt;br /&gt;
This example enables port LPT1 with a new hardware address.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterNewAddress.jpg|1000px]]&lt;br /&gt;
&lt;br /&gt;
This example enables ports with names MRIScanner and StimulusDevice with hardware addresses. Note that the address for the ports are the same as the default values for LPT1 and LPT2. This shows that LPT names can be renamed in the Parameter Configuration to make it easier to read. This does not change the names of the addresses given by the computer itself.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterNewNames.jpg|1000px]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gUSBampADC&amp;diff=7522</id>
		<title>User Reference:gUSBampADC</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gUSBampADC&amp;diff=7522"/>
		<updated>2015-06-30T19:54:08Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* gUSBamps with UB serial numbers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Function==&lt;br /&gt;
The &#039;&#039;gUSBampADC&#039;&#039; filter acquires data from any number (tested up to four) &#039;&#039;g.USBamp&#039;&#039; EEG amplifiers. &lt;br /&gt;
&#039;&#039;g.USBamp&#039;&#039; is an amplifier/digitizer combination from g.tec medical engineering GmbH/Guger Technologies OEG (http://www.gtec.at). &lt;br /&gt;
Support for this device in BCI2000 consists of two components: A BCI2000-compatible Source Module (&#039;&#039;gUSBamp.exe&#039;&#039;) and a &lt;br /&gt;
command-line tool (&#039;&#039;USBampgetinfo&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
===g.USBamp Hardware===&lt;br /&gt;
The USBamp consists of 16 independent 24-bit A/D converters that can sample at &lt;br /&gt;
up to 38.4kHz per channel. Because there is one A/D converter for each channel, &lt;br /&gt;
one particular sample is digitized at the exact same time for each channel. This &lt;br /&gt;
is unlike with traditional A/D converter boards that only have one A/D &lt;br /&gt;
converter. BCI2000 has a feature that can align samples in time (parameter &lt;br /&gt;
[[User Reference:AlignmentFilter#AlignChannels|AlignChannels]]).&lt;br /&gt;
Because this feature is not needed in conjunction with the USBamp, it needs to be turned off (i.e., &#039;&#039;AlignChannels&#039;&#039; needs to be 0).&lt;br /&gt;
&lt;br /&gt;
====Drivers====&lt;br /&gt;
With the release of the Version 3.0 g.USBamp, there is now a small problem with the gUSBamp.dll included in BCI2000.  The DLL included with BCI2000 was intended to be used with g.USBamp Version 2.0 hardware.  If Version 3.0 hardware is used with the current BCI2000 distribution, the gUSBampADC module will default to using the Version 2.0 DLL which will not function.&lt;br /&gt;
&lt;br /&gt;
Drivers come with the g.USBamp hardware - the correct drivers to match the version of the hardware.  If the installer is used to install the drivers for the g.USBamp, it will also place the g.USBamp DLL into your &amp;lt;tt&amp;gt;WINDOWS/system32&amp;lt;/tt&amp;gt; folder.  If the DLL in &amp;lt;tt&amp;gt;BCI2000/prog&amp;lt;/tt&amp;gt; is deleted, the DLL appropriate for use with your g.USBamp hardware should be used.&lt;br /&gt;
&lt;br /&gt;
In short, in order to make Version 3.0 amps work with the current BCI2000 distribution, simply delete the &amp;lt;tt&amp;gt;gUSBamp.dll&amp;lt;/tt&amp;gt; file from your &amp;lt;tt&amp;gt;BCI2000/prog&amp;lt;/tt&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
Here is a grid of what driver/amp/dll combinations work:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Version 2.0 amp&#039;&#039;&#039;&lt;br /&gt;
|2.0 DLL&lt;br /&gt;
|3.0 DLL&lt;br /&gt;
|-&lt;br /&gt;
|2.0 Driver&lt;br /&gt;
|Works&lt;br /&gt;
|Works&lt;br /&gt;
|-&lt;br /&gt;
|3.0 Driver&lt;br /&gt;
|Does Not Work&lt;br /&gt;
|Does Not Work&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Version 3.0 amp&#039;&#039;&#039;&lt;br /&gt;
|2.0 DLL&lt;br /&gt;
|3.0 DLL&lt;br /&gt;
|-&lt;br /&gt;
|2.0 Driver&lt;br /&gt;
|Does Not Work&lt;br /&gt;
|Does Not Work&lt;br /&gt;
|-&lt;br /&gt;
|3.0 Driver&lt;br /&gt;
|Does Not Work&lt;br /&gt;
|Works&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
Parameters common to all source modules are described under [[User Reference:DataIOFilter]].&lt;br /&gt;
In addition, the &#039;&#039;gUSBampADC&#039;&#039; provides the following parameters:&lt;br /&gt;
&lt;br /&gt;
===DeviceIDMaster===&lt;br /&gt;
Serial number (e.g., UA-2007.01.01) of the master device. &lt;br /&gt;
If you only have one device, this parameter has to equal &#039;&#039;DeviceIDs&#039;&#039;.&lt;br /&gt;
If you have more then one device, then this parameter represents the serial number of the device whose SYNC goes to the slaves, i.e., the only device that has a cable connected at SYNC OUT, but none connected to SYNC IN. &lt;br /&gt;
If only one device is connected, this parameter may be set to &#039;&#039;auto&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===DeviceIDs===&lt;br /&gt;
List of serial numbers (e.g., UA-2007.01.01) of all devices.&lt;br /&gt;
If you have more than one device, this list determines the order of the channels in the data file. &lt;br /&gt;
If only one device is connected, this parameter may be set to &#039;&#039;auto&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===FilterEnabled===&lt;br /&gt;
Choose 1 if you want a pass band filter, and 0 if you don&#039;t.&lt;br /&gt;
The gUSBamp is a DC amplifier and thus you most likely will want a pass band filter.&lt;br /&gt;
Please note that, because the g.USBamp internally has a 5kHz antialiasing filter and always samples with 38.4kHz, you DO NOT need to enable any filter if you do not want.&lt;br /&gt;
You will never experience aliasing.&lt;br /&gt;
&lt;br /&gt;
===FilterHighPass===&lt;br /&gt;
High pass frequency for pass band. &lt;br /&gt;
You need to query the amp for possible values. &lt;br /&gt;
See description of the [[#The USBampgetinfo Command Line Tool|USBampgetinfo]] tool for more info.&lt;br /&gt;
&lt;br /&gt;
===FilterLowPass===&lt;br /&gt;
Low pass frequency for pass band.&lt;br /&gt;
See description of the USBampgetinfo tool for more info.&lt;br /&gt;
&lt;br /&gt;
===FilterModelOrder===&lt;br /&gt;
Model order for passband filter. &lt;br /&gt;
See description of the USBampgetinfo tool for more info.&lt;br /&gt;
&lt;br /&gt;
===FilterType===&lt;br /&gt;
Type of passband filter:&lt;br /&gt;
* 1=CHEBYSHEV, &lt;br /&gt;
* 2=BUTTERWORTH.&lt;br /&gt;
&lt;br /&gt;
===NotchEnabled===&lt;br /&gt;
Choose 1 if you want a notch filter, and 0 if you don&#039;t.&lt;br /&gt;
&lt;br /&gt;
===NotchHighPass===&lt;br /&gt;
Similar to FilterHighPass.&lt;br /&gt;
&lt;br /&gt;
===NotchLowPass===&lt;br /&gt;
Similar to FilterLowPass.&lt;br /&gt;
&lt;br /&gt;
===NotchModelOrder===&lt;br /&gt;
Similar to FilterModelOrder.&lt;br /&gt;
&lt;br /&gt;
===NotchType===&lt;br /&gt;
Similar to FilterType.&lt;br /&gt;
&lt;br /&gt;
===SampleBlockSize===&lt;br /&gt;
Samples per channel per digitized block. &lt;br /&gt;
Together with the sampling rate, this parameter determines how often per second data are collected, processed, and feedback is updated. For example, at 600 Hz sampling and a SampleBlockSize of 20, the system (e.g., source signal display, signal processing, and stimulus presentation) would be updated 30 times per second.&lt;br /&gt;
&lt;br /&gt;
===SamplingRate===&lt;br /&gt;
The sampling rate of all connected USBamps. &lt;br /&gt;
If one wants to use a bandpass or a notch filter, there needs to be a filter configuration for that particular sampling rate (see the section on the &#039;&#039;[USBampgetinfo]&#039;&#039; tool). (Guger Technologies can provide you with a new driver configuration file if you need a different filter.)&lt;br /&gt;
&lt;br /&gt;
The USBamp supports the following sampling rates: 32, 64, 128, 256, 512, 600, 1200, 2400, 4800, 9600, 19200, and 38400 Hz.  All sampling rates are supported for one or more amplifiers. If you are sampling at high rates and from multiple amplifiers, the CPU may be overloaded depending on the speed of your computer and the BCI2000 configuration. In case you are experiencing problems (e.g., data loss, jerky display, etc.), increase the SampleBlockSize so that you are updating the system less frequently (usually, updating the system 20-30 times per second is sufficient for most applications), and increase Visualize-&amp;gt;VisualizeSourceDecimation. This parameter will decrease the number of samples per second that are actually drawn in the Source display. For example, at 38400 Hz, 4 amplifiers (64 channels), and a system update of 30 Hz, the computer would have to draw more than 73 million lines per second in the Source display!&lt;br /&gt;
&lt;br /&gt;
===SignalType===       &lt;br /&gt;
Defines the data type of the stored signal samples (int16 or float32).&lt;br /&gt;
If the data type is int16, signal samples (which are produced by the amplifier in units of &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt;) are converted back into virtual A/D units (see Data Storage section below). If the data type is float32, the signals are stored in units of &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt;.&lt;br /&gt;
In this case, SourceChOffset should be 0, and SourceChGain should be&lt;br /&gt;
1 (since the conversion factor from &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt; into &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt; is 1).&lt;br /&gt;
&lt;br /&gt;
===SourceCh===&lt;br /&gt;
The total number of channels across all USBamp devices.&lt;br /&gt;
&lt;br /&gt;
===SourceChDevices===&lt;br /&gt;
The number of channels acquired from each device. &lt;br /&gt;
If there is only one device, this parameter has to equal &#039;&#039;SourceCh&#039;&#039;.&lt;br /&gt;
For example, &#039;16 8&#039; will acquire channels from the first device listed under &#039;&#039;DeviceIDs&#039;&#039;, and 8 channels from the second device listed under &#039;&#039;DeviceIDs&#039;&#039;.&lt;br /&gt;
Data acquisition always starts at channel 1.&lt;br /&gt;
The sum of all channels (e.g., 24 in this example) has to &lt;br /&gt;
equal the value of &#039;&#039;SourceCh&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===SourceChList===&lt;br /&gt;
The list of channels that should be acquired from each device.&lt;br /&gt;
The total number of channels listed should correspond to &#039;&#039;SourceCh&#039;&#039;. For more than one device, &#039;&#039;SourceChDevices&#039;&#039; determines how the &#039;&#039;SourceChList&#039;&#039; values are mapped to each device. For example if &#039;&#039;SourceChDevices&#039;&#039; = &#039;8 8&#039; and &#039;&#039;SourceChList&#039;&#039; = &#039;1 2 3 4 13 14 15 16 5 6 7 8 9 10 11 12&#039;, then channels 1-4 and 13-16 will be acquired on the first device, and channels 5-12 will be acquired on the second device. These channels will be saved in the data file as 16 contiguous channels.&lt;br /&gt;
The order of channels does not matter; i.e., &#039;1 2 3 4&#039; is the same as &#039;2 3 1 4&#039;. The channels are always in ascending order on a single device.&lt;br /&gt;
Channels may not be listed twice on a single device; e.g., entering &#039;1 2 3 4 5 6 7 1&#039; if &#039;&#039;SourceChDevices&#039;&#039; = &#039;8&#039; will result in an error.&lt;br /&gt;
If this parameter is left blank (the default), then all channels are acquired on all devices.&lt;br /&gt;
&lt;br /&gt;
===BipolarChList===&lt;br /&gt;
A list of channels used for a bipolar montage. Each entry is configured as the reference for a source channel, based on the channel order. The number of values should equal both &#039;&#039;SourceCh&#039;&#039; and the number of values in &#039;&#039;SourceChList&#039;&#039; (if &#039;&#039;SourceChList&#039;&#039; is not empty). If &#039;&#039;BipolarChList&#039;&#039; is empty, then the standard referential recording montage is used. If a value of &#039;0&#039; is entered, then the reference channel is used for that channel. Finally, channel labels may be used.&lt;br /&gt;
&lt;br /&gt;
As an example, a sequential bipolar montage for 8 channels could be configured like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;2 3 4 5 6 7 8 1&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
meaning that channel 1 is referenced to channel 2, channel 2 is referenced to channel 3, and so on. For another example, 10 channels can be configured so that the first 6 are bipolar, and the last four are referential, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;C3 F3 C4 F4 Pz Oz 0 0 0 0&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===EnableDigitalInput===&lt;br /&gt;
Enable digital input. &lt;br /&gt;
If enabled, the sampled values of the digital input from the digital I/O ports will be stored in to states DigitalInput1 - DigitalInput64 depending on the number of amps connected and hardware versions. See [[:User Reference:gUSBampADC#Digital Input|Digital Input]] for more information.&lt;br /&gt;
&lt;br /&gt;
===EnableDigitalOutput===&lt;br /&gt;
Enable digital output. If enabled, the digital output is set to the values returned when the signals go through the expressions given by the Parameter DigitalOutputEx. See [[:User Reference:gUSBampADC#Digital Output|Digital Output]] for more information.&lt;br /&gt;
&lt;br /&gt;
===DigitalOutputEx===&lt;br /&gt;
If digital output is turned on, the given expressions will be evaluated for the current input. If the expression evaluates true the bit is set to high, else set to low. Each expression represents a different bit and the number starts with the master and is continuous through all amps like digital input. Boolean expressions work well for this ( ex. &amp;lt;tt&amp;gt;( ( StimulusCode == 0 ) &amp;amp;&amp;amp; Running )&amp;lt;/tt&amp;gt; ). See [[:User Reference:Expression Syntax|Expressions]] for more information on how to write expressions.&lt;br /&gt;
&lt;br /&gt;
===AcquisitionMode===&lt;br /&gt;
If set to &#039;&#039;analog signal acquisition&#039;&#039;, the g.USBamp records analog signal voltages (default). If set to &#039;&#039;Calibration&#039;&#039;, the signal output is a sine wave test signal generated by the g.USBamp (which can be used to verify correct system calibration). &lt;br /&gt;
If set to &#039;&#039;Impedance&#039;&#039;, regular analog signal acquisition is preceded by an impedance test. &lt;br /&gt;
This impedance test reports input impedances for each channel in kOhms. &lt;br /&gt;
In impedance mode, if the ground and reference is connected in the amp internally (using the &#039;&#039;CommonGround&#039;&#039; and &#039;&#039;CommonReference&#039;&#039; parameters), then you need to connect the ground and reference to block 4.&lt;br /&gt;
&lt;br /&gt;
===CommonGround===&lt;br /&gt;
This parameter determines whether the g.USBamp internally connects the GND inputs from all blocks together.&lt;br /&gt;
If enabled (default), then the signal ground only needs to be connected to one input block, e.g., block 1. &lt;br /&gt;
Otherwise, all GND inputs need to be externally connected.&lt;br /&gt;
&lt;br /&gt;
===CommonReference===&lt;br /&gt;
The same as &#039;&#039;CommonGround&#039;&#039;, except for the signal reference.&lt;br /&gt;
&lt;br /&gt;
==Digital I/O==&lt;br /&gt;
&lt;br /&gt;
===Digital Inputs===&lt;br /&gt;
Can be used with 1 - 8 gUSBamps.&lt;br /&gt;
&lt;br /&gt;
====gUSBamps with UA serial numbers====&lt;br /&gt;
[[File:UADigIn.JPG]]&lt;br /&gt;
&lt;br /&gt;
Each gUSBamp has only one digital I/O port and this is stored in only one state per an gUSBamp. If multiple UA gUSBamps are connected in sync then up to state DigitalInput8 will be used, with the master gUSBamp using DigitalInput1 and the last slave gUSBamp using DigitalInput8 if 8 gUSBamps are used, or DigitalInput6 if only 6 gUSBamps are used. To access the digital input from any gUSBamp, access the state DigitalInput for the number of that slave gUSBamp. For example if I wanted to access the 5th gUSBamp, I would access DigitalInput5.&lt;br /&gt;
&lt;br /&gt;
====gUSBamps with UB serial numbers====&lt;br /&gt;
[[File:UBDigIn.JPG]]&lt;br /&gt;
&lt;br /&gt;
Each gUSBamp has two digital I/O ports which are stored in eight states per gUSBamp. If multiple UB gUSBamp are connected in sync then up to state DigitalInput64 will be used with the master gUSBamp using DigitalInput1 - DigitalInput8 and the last gUSBamp using DigitalInput57 - DigitalInput64 if 8 gUSBamps are used, and DigitalInput41 - DigitalInput48 if only 6 gUSBamps are used. To access the digital input from any gUSBamp, take the number of gUSBamps preceding the intended gUSBamp multiplied by 8, then add the number of the bit you want to see. For example, if I wanted to access the 5th gUSBamp&#039;s 5th bit, I would look at DigitalInput37 (4 * 8 + 5).&lt;br /&gt;
&lt;br /&gt;
====g.USBamps in sync with both UA and UB serial numbers====&lt;br /&gt;
The device specifications are the same as above and each gUSBamp only has the number of states designated to it as specified above, i.e. each UB gUSBamp has eight states and each UA gUSBamp has only one state. The numbering of the states are based on the order of the gUSBamps. For example, if we have the following setup: UB gUSBamp as master with slaves in the following order: UB UA UA UB UA UA, which gives a total of 7 gUSBamps using DigitalInput1 - DigitalInput24 (3 * 8 + 4 * 1).For example, to access the second UA gUSBamp (which has only one state), I would look at DigitalInput18, found by the number of UB gUSBamps preceding the second UA gUSBamp multiplied by 8 plus the number of UA gUSBamps preceding it plus one for the gUSBamp itself (2 * 8 + 1 + 1). To access the third UB gUSBamp&#039;s seventh bit, I would look at DigitalInput25. This was found in the same manner as above but because it is a UB gUSBamp the specific bit is added instead of just one (2 * 8 + 2 + 7).&lt;br /&gt;
&lt;br /&gt;
To setup a link between gUSBamps UA and UB, the following images show how to connect them.&lt;br /&gt;
&lt;br /&gt;
[[File:UAUBcombo.JPG]]&lt;br /&gt;
&lt;br /&gt;
[[File:UAUBmultiple.JPG]]&lt;br /&gt;
&lt;br /&gt;
===Digital Output===&lt;br /&gt;
Can be used with 1 - 8 gUSBamps.&lt;br /&gt;
&lt;br /&gt;
====gUSBamps with UA serial numbers====&lt;br /&gt;
Each gUSBamp has one digital I/O port giving it two digital output bits. If multiple UA gUSBamps are connected there are a total of 16 digital output bits possible. To write to these bits, Parameter DigitalOutputEx must be filled. Each row correlates to a bit. The numbering of the bits start with 1 and 2 being the master gUSBamp and continues numbering until the eighth gUSBamp having bit 15 and 16. To determine which row to use, the bit is found by taking the number of amgUSBampsps preceding the intended gUSBamp in the chain multiplied by two and then add the number of the bit you want to write for. For example, the second bit of the fourth gUSBamp is row 8 (3 * 2 + 2).&lt;br /&gt;
&lt;br /&gt;
====gUSBamps with UB serial numbers====&lt;br /&gt;
Each gUSBamp has two digital I/O ports giving it four digital output bits. If multiple UB gUSBamps are connected, that gives a total of 32 digital output bits possible. To write to these bits, Parameter DigitalOutputEx must be filled. Each row corresponds to a bit. The numbering of the bits start with 1 - 4 being the master gUSBamp and continues numbering until the eighth gUSBamp having bits 29 - 32. To figure out which row to use, the formula is the number of gUSBamps preceding the intended gUSBamp in the chain multiplied by four and then add the number of the bit you want to write for. For example the second bit of the fourth gUSBamp is row 14 (3 * 4 + 2).&lt;br /&gt;
&lt;br /&gt;
====gUSBamps in sync with both UA and UB serial numbers====&lt;br /&gt;
The device specs are the same as above with each UA gUSBamp having two digital output bits and each UB gUSBamp having four digital output bits. To write the proper row, the order of the gUSBamps matter just like digital input. For example we have the setup of UB gUSBamp as master with the slaves in the following order: UB UA UA UB UA UA, which gives a total of 7 gUSBamps having a total of 20 digital output bits. To find the row that corresponds with the bit you want to write for, take the number of UB gUSBamps preceding the intended gUSBamp in the chain multiplied by 4 and add the number of UA gUSBamps preceding the intended gUSBamp in the chain multiplied by 2 and add the number of the bit you want. For example to write the expression for the second UA gUSBamp&#039;s first bit, I would write the expression in row 11 (2 * 4 + 1 * 2 + 1). For example to write the expression for the third UB gUSBamp&#039;s third bit, I would write the expression in row 15 (2 * 4 + 2 * 2 + 3).&lt;br /&gt;
&lt;br /&gt;
==States==&lt;br /&gt;
&lt;br /&gt;
===DigitalInput===&lt;br /&gt;
DigitalInput ranges from DigitalInput1 - DigitalInput64 (see [[:User Reference:gUSBampADC#Digital Input|Digital Input]] for explanation) and the values are either a 0 or a 1.&lt;br /&gt;
&lt;br /&gt;
==Additional Information==&lt;br /&gt;
&lt;br /&gt;
===Using 32bit Executables on 64bit Installations===&lt;br /&gt;
BCI2000 supports compilation of the gUSBamp source module for 64bit targets. The resulting executable will run on 64bit systems, and work with the 64bit version of the gUSBamp drivers. However, the binary distribution of BCI2000 contains 32bit executables. These run fine under 64bit systems, but you will need to perform these additional driver installation steps to install 32bit gUSBamp API DLLs on 64bit systems:&lt;br /&gt;
*Execute gtec&#039;s 32bit driver installer on your 64bit system.&lt;br /&gt;
*After successful installation, execute gtec&#039;s 64bit driver installer on your 64bit system.&lt;br /&gt;
*You will now have both the 32bit API DLL and the 64bit API DLL installed, such that both 32bit and 64bit executables will be able to connect to a gUSBamp attached to the system&#039;s USB ports.&lt;br /&gt;
&lt;br /&gt;
===Data Storage===&lt;br /&gt;
Unlike other systems, the USBamp is a DC amplifier system that digitizes at 24 bit. &lt;br /&gt;
Bandpass and notch filtering is performed on the digitized samples, resulting in floating point signal samples in units of &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt;.&lt;br /&gt;
BCI2000 currently supports signed 16 bit integers and floating point numbers for its data storage.&lt;br /&gt;
If &#039;&#039;SignalType&#039;&#039; is set to int16, the floating point values have to be converted back into integers before they can be stored and transmitted to Signal Processing.&lt;br /&gt;
This is done by the following transformation: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathrm{sample}_\mathrm{stored}\mathrm{(A/D\,units)}=\frac{\mathrm{sample}_\mathrm{acquired}(\mu V)}\mathrm{SourceChGain}&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
(&#039;&#039;SourceChOffset&#039;&#039; is assumed (and required) to be zero for all channels.) &lt;br /&gt;
BCI2000 Signal Processing or any offline analysis routine can derive, as with &lt;br /&gt;
any other BCI2000 source module, sample values in &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt; by subtracting, from &lt;br /&gt;
each stored sample, &#039;&#039;SourceChOffset&#039;&#039; (i.e., zero), and multiplying it with &lt;br /&gt;
&#039;&#039;SourceChGain&#039;&#039; for each channel. If &#039;&#039;SignalType&#039;&#039; is set to float32,&lt;br /&gt;
data samples are stored in units of &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt;. In this case, &#039;&#039;SourceChGain&#039;&#039; should be&lt;br /&gt;
a list of 1&#039;s (because the conversion factor between data samples into &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt; is&lt;br /&gt;
1.0 for each channel).&lt;br /&gt;
&lt;br /&gt;
Still, when values other than 0 and 1 are specified, a consistent data file will be produced, i.e. values will be transformed before they are written to the file, such that applying SourceChOffset and SourceChGain will reproduce the original values in &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===The &#039;&#039;USBampgetinfo&#039;&#039; Command Line Tool===&lt;br /&gt;
This command line tool displays all connected USBamps, including their serial &lt;br /&gt;
number and the USB port that they connect to. Further, this tool reads, for the &lt;br /&gt;
first of the connected amplifiers, all supported bandpass and notch filter &lt;br /&gt;
configurations. Thus, this tool can be used to determine which filters can be &lt;br /&gt;
used for a particular sampling frequency within BCI2000. The following is an &lt;br /&gt;
example screen output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*******************************************&lt;br /&gt;
BCI2000 Information Tool for g.USBamp&lt;br /&gt;
*******************************************&lt;br /&gt;
(C)2004 Gerwin Schalk&lt;br /&gt;
	 Wadsworth Center&lt;br /&gt;
	 New York State Department of Health&lt;br /&gt;
	 Albany, NY, USA&lt;br /&gt;
*******************************************&lt;br /&gt;
Amp found at USB address 1 (S/N: UA-200X.XX.XX)&lt;br /&gt;
Printing info for first amp (USB address 1)&lt;br /&gt;
&lt;br /&gt;
Available bandpass filters&lt;br /&gt;
===================================&lt;br /&gt;
num| hpfr  | lpfreq |  sfr | or | type&lt;br /&gt;
===================================&lt;br /&gt;
000|  0.10 |    0.0 |   32 |  8 | 1&lt;br /&gt;
001|  1.00 |    0.0 |   32 |  8 | 1&lt;br /&gt;
002|  2.00 |    0.0 |   32 |  8 | 1&lt;br /&gt;
003|  5.00 |    0.0 |   32 |  8 | 1&lt;br /&gt;
004|  0.00 |   15.0 |   32 |  8 | 1&lt;br /&gt;
005|  0.01 |   15.0 |   32 |  8 | 1&lt;br /&gt;
006|  0.10 |   15.0 |   32 |  8 | 1&lt;br /&gt;
007|  0.50 |   15.0 |   32 |  8 | 1&lt;br /&gt;
008|  2.00 |   15.0 |   32 |  8 | 1&lt;br /&gt;
009|  0.10 |    0.0 |   64 |  8 | 1&lt;br /&gt;
010|  1.00 |    0.0 |   64 |  8 | 1&lt;br /&gt;
011|  2.00 |    0.0 |   64 |  8 | 1&lt;br /&gt;
012|  5.00 |    0.0 |   64 |  8 | 1&lt;br /&gt;
013|  0.00 |   30.0 |   64 |  8 | 1&lt;br /&gt;
014|  0.01 |   30.0 |   64 |  8 | 1&lt;br /&gt;
015|  0.10 |   30.0 |   64 |  8 | 1&lt;br /&gt;
016|  0.50 |   30.0 |   64 |  8 | 1&lt;br /&gt;
017|  2.00 |   30.0 |   64 |  8 | 1&lt;br /&gt;
018|  0.10 |    0.0 |  128 |  8 | 1&lt;br /&gt;
019|  1.00 |    0.0 |  128 |  8 | 1&lt;br /&gt;
020|  2.00 |    0.0 |  128 |  8 | 1&lt;br /&gt;
021|  5.00 |    0.0 |  128 |  8 | 1&lt;br /&gt;
022|  0.00 |   30.0 |  128 |  8 | 1&lt;br /&gt;
023|  0.00 |   60.0 |  128 |  8 | 1&lt;br /&gt;
024|  0.01 |   30.0 |  128 |  8 | 1&lt;br /&gt;
025|  0.01 |   60.0 |  128 |  8 | 1&lt;br /&gt;
026|  0.10 |   30.0 |  128 |  8 | 1&lt;br /&gt;
027|  0.10 |   60.0 |  128 |  8 | 1&lt;br /&gt;
028|  0.50 |   30.0 |  128 |  8 | 1&lt;br /&gt;
029|  0.50 |   60.0 |  128 |  8 | 1&lt;br /&gt;
030|  2.00 |   30.0 |  128 |  8 | 1&lt;br /&gt;
031|  2.00 |   60.0 |  128 |  8 | 1&lt;br /&gt;
032|  0.10 |    0.0 |  256 |  8 | 1&lt;br /&gt;
033|  1.00 |    0.0 |  256 |  8 | 1&lt;br /&gt;
034|  2.00 |    0.0 |  256 |  8 | 1&lt;br /&gt;
035|  5.00 |    0.0 |  256 |  8 | 1&lt;br /&gt;
036|  0.00 |   30.0 |  256 |  8 | 1&lt;br /&gt;
037|  0.00 |   60.0 |  256 |  8 | 1&lt;br /&gt;
038|  0.00 |  100.0 |  256 |  8 | 1&lt;br /&gt;
039|  0.01 |   30.0 |  256 |  6 | 1&lt;br /&gt;
040|  0.01 |   60.0 |  256 |  8 | 1&lt;br /&gt;
041|  0.01 |  100.0 |  256 |  8 | 1&lt;br /&gt;
042|  0.10 |   30.0 |  256 |  8 | 1&lt;br /&gt;
043|  0.10 |   60.0 |  256 |  8 | 1&lt;br /&gt;
044|  0.10 |  100.0 |  256 |  8 | 1&lt;br /&gt;
045|  0.50 |   30.0 |  256 |  8 | 1&lt;br /&gt;
046|  0.50 |   60.0 |  256 |  8 | 1&lt;br /&gt;
047|  0.50 |  100.0 |  256 |  8 | 1&lt;br /&gt;
048|  2.00 |   30.0 |  256 |  8 | 1&lt;br /&gt;
049|  2.00 |   60.0 |  256 |  8 | 1&lt;br /&gt;
050|  2.00 |  100.0 |  256 |  8 | 1&lt;br /&gt;
051|  5.00 |   30.0 |  256 |  8 | 1&lt;br /&gt;
052|  5.00 |   60.0 |  256 |  8 | 1&lt;br /&gt;
053|  5.00 |  100.0 |  256 |  8 | 1&lt;br /&gt;
054|  0.10 |    0.0 |  512 |  8 | 1&lt;br /&gt;
055|  1.00 |    0.0 |  512 |  8 | 1&lt;br /&gt;
056|  2.00 |    0.0 |  512 |  8 | 1&lt;br /&gt;
057|  5.00 |    0.0 |  512 |  8 | 1&lt;br /&gt;
058|  0.00 |   30.0 |  512 |  8 | 1&lt;br /&gt;
059|  0.00 |   60.0 |  512 |  8 | 1&lt;br /&gt;
060|  0.00 |  100.0 |  512 |  8 | 1&lt;br /&gt;
061|  0.00 |  200.0 |  512 |  8 | 1&lt;br /&gt;
062|  0.01 |   30.0 |  512 |  6 | 1&lt;br /&gt;
063|  0.01 |   60.0 |  512 |  6 | 1&lt;br /&gt;
064|  0.01 |  100.0 |  512 |  6 | 1&lt;br /&gt;
065|  0.01 |  200.0 |  512 |  8 | 1&lt;br /&gt;
066|  0.10 |   30.0 |  512 |  8 | 1&lt;br /&gt;
067|  0.10 |   60.0 |  512 |  8 | 1&lt;br /&gt;
068|  0.10 |  100.0 |  512 |  8 | 1&lt;br /&gt;
069|  0.10 |  200.0 |  512 |  8 | 1&lt;br /&gt;
070|  0.50 |   30.0 |  512 |  8 | 1&lt;br /&gt;
071|  0.50 |   60.0 |  512 |  8 | 1&lt;br /&gt;
072|  0.50 |  100.0 |  512 |  8 | 1&lt;br /&gt;
073|  0.50 |  200.0 |  512 |  8 | 1&lt;br /&gt;
074|  2.00 |   30.0 |  512 |  8 | 1&lt;br /&gt;
075|  2.00 |   60.0 |  512 |  8 | 1&lt;br /&gt;
076|  2.00 |  100.0 |  512 |  8 | 1&lt;br /&gt;
077|  2.00 |  200.0 |  512 |  8 | 1&lt;br /&gt;
078|  5.00 |   30.0 |  512 |  8 | 1&lt;br /&gt;
079|  5.00 |   60.0 |  512 |  8 | 1&lt;br /&gt;
080|  5.00 |  100.0 |  512 |  8 | 1&lt;br /&gt;
081|  5.00 |  200.0 |  512 |  8 | 1&lt;br /&gt;
082|  0.10 |    0.0 |  600 |  8 | 1&lt;br /&gt;
083|  1.00 |    0.0 |  600 |  8 | 1&lt;br /&gt;
084|  2.00 |    0.0 |  600 |  8 | 1&lt;br /&gt;
085|  5.00 |    0.0 |  600 |  8 | 1&lt;br /&gt;
086|  0.00 |   30.0 |  600 |  8 | 1&lt;br /&gt;
087|  0.00 |   60.0 |  600 |  8 | 1&lt;br /&gt;
088|  0.00 |  100.0 |  600 |  8 | 1&lt;br /&gt;
089|  0.00 |  200.0 |  600 |  8 | 1&lt;br /&gt;
090|  0.00 |  250.0 |  600 |  8 | 1&lt;br /&gt;
091|  0.01 |   60.0 |  600 |  6 | 1&lt;br /&gt;
092|  0.01 |  100.0 |  600 |  6 | 1&lt;br /&gt;
093|  0.01 |  200.0 |  600 |  6 | 1&lt;br /&gt;
094|  0.01 |  250.0 |  600 |  8 | 1&lt;br /&gt;
095|  0.10 |   60.0 |  600 |  8 | 1&lt;br /&gt;
096|  0.10 |  100.0 |  600 |  8 | 1&lt;br /&gt;
097|  0.10 |  200.0 |  600 |  8 | 1&lt;br /&gt;
098|  0.10 |  250.0 |  600 |  8 | 1&lt;br /&gt;
099|  0.50 |   30.0 |  600 |  8 | 1&lt;br /&gt;
100|  0.50 |   60.0 |  600 |  8 | 1&lt;br /&gt;
101|  0.50 |  100.0 |  600 |  8 | 1&lt;br /&gt;
102|  0.50 |  200.0 |  600 |  8 | 1&lt;br /&gt;
103|  0.50 |  250.0 |  600 |  8 | 1&lt;br /&gt;
104|  2.00 |   30.0 |  600 |  8 | 1&lt;br /&gt;
105|  2.00 |   60.0 |  600 |  8 | 1&lt;br /&gt;
106|  2.00 |  100.0 |  600 |  8 | 1&lt;br /&gt;
107|  2.00 |  200.0 |  600 |  8 | 1&lt;br /&gt;
108|  2.00 |  250.0 |  600 |  8 | 1&lt;br /&gt;
109|  5.00 |   30.0 |  600 |  8 | 1&lt;br /&gt;
110|  5.00 |   60.0 |  600 |  8 | 1&lt;br /&gt;
111|  5.00 |  100.0 |  600 |  8 | 1&lt;br /&gt;
112|  5.00 |  200.0 |  600 |  8 | 1&lt;br /&gt;
113|  5.00 |  250.0 |  600 |  8 | 1&lt;br /&gt;
114|  0.10 |    0.0 | 1200 |  8 | 1&lt;br /&gt;
115|  1.00 |    0.0 | 1200 |  8 | 1&lt;br /&gt;
116|  2.00 |    0.0 | 1200 |  8 | 1&lt;br /&gt;
117|  5.00 |    0.0 | 1200 |  8 | 1&lt;br /&gt;
118|  0.00 |   30.0 | 1200 |  8 | 1&lt;br /&gt;
119|  0.00 |   60.0 | 1200 |  8 | 1&lt;br /&gt;
120|  0.00 |  100.0 | 1200 |  8 | 1&lt;br /&gt;
121|  0.00 |  200.0 | 1200 |  8 | 1&lt;br /&gt;
122|  0.00 |  250.0 | 1200 |  8 | 1&lt;br /&gt;
123|  0.00 |  500.0 | 1200 |  8 | 1&lt;br /&gt;
124|  0.01 |  100.0 | 1200 |  6 | 1&lt;br /&gt;
125|  0.01 |  200.0 | 1200 |  6 | 1&lt;br /&gt;
126|  0.01 |  250.0 | 1200 |  6 | 1&lt;br /&gt;
127|  0.01 |  500.0 | 1200 |  6 | 1&lt;br /&gt;
128|  0.10 |  100.0 | 1200 |  6 | 1&lt;br /&gt;
129|  0.10 |  200.0 | 1200 |  8 | 1&lt;br /&gt;
130|  0.10 |  250.0 | 1200 |  8 | 1&lt;br /&gt;
131|  0.10 |  500.0 | 1200 |  8 | 1&lt;br /&gt;
132|  0.50 |  100.0 | 1200 |  8 | 1&lt;br /&gt;
133|  0.50 |  200.0 | 1200 |  8 | 1&lt;br /&gt;
134|  0.50 |  250.0 | 1200 |  8 | 1&lt;br /&gt;
135|  0.50 |  500.0 | 1200 |  8 | 1&lt;br /&gt;
136|  2.00 |  100.0 | 1200 |  8 | 1&lt;br /&gt;
137|  2.00 |  200.0 | 1200 |  8 | 1&lt;br /&gt;
138|  2.00 |  250.0 | 1200 |  8 | 1&lt;br /&gt;
139|  2.00 |  500.0 | 1200 |  8 | 1&lt;br /&gt;
140|  5.00 |  100.0 | 1200 |  8 | 1&lt;br /&gt;
141|  5.00 |  200.0 | 1200 |  8 | 1&lt;br /&gt;
142|  5.00 |  250.0 | 1200 |  8 | 1&lt;br /&gt;
143|  5.00 |  500.0 | 1200 |  8 | 1&lt;br /&gt;
144|  0.10 |    0.0 | 2400 |  8 | 1&lt;br /&gt;
145|  1.00 |    0.0 | 2400 |  8 | 1&lt;br /&gt;
146|  2.00 |    0.0 | 2400 |  8 | 1&lt;br /&gt;
147|  5.00 |    0.0 | 2400 |  8 | 1&lt;br /&gt;
148|  0.00 |   30.0 | 2400 |  8 | 1&lt;br /&gt;
149|  0.00 |   60.0 | 2400 |  8 | 1&lt;br /&gt;
150|  0.00 |  100.0 | 2400 |  8 | 1&lt;br /&gt;
151|  0.00 |  200.0 | 2400 |  8 | 1&lt;br /&gt;
152|  0.00 |  250.0 | 2400 |  8 | 1&lt;br /&gt;
153|  0.00 |  500.0 | 2400 |  8 | 1&lt;br /&gt;
154|  0.00 | 1000.0 | 2400 |  8 | 1&lt;br /&gt;
155|  0.01 |  200.0 | 2400 |  4 | 1&lt;br /&gt;
156|  0.01 |  250.0 | 2400 |  6 | 1&lt;br /&gt;
157|  0.01 |  500.0 | 2400 |  6 | 1&lt;br /&gt;
158|  0.01 | 1000.0 | 2400 |  6 | 1&lt;br /&gt;
159|  0.10 |  200.0 | 2400 |  6 | 1&lt;br /&gt;
160|  0.10 |  250.0 | 2400 |  6 | 1&lt;br /&gt;
161|  0.10 |  500.0 | 2400 |  8 | 1&lt;br /&gt;
162|  0.10 | 1000.0 | 2400 |  8 | 1&lt;br /&gt;
163|  0.50 |  200.0 | 2400 |  8 | 1&lt;br /&gt;
164|  0.50 |  250.0 | 2400 |  8 | 1&lt;br /&gt;
165|  0.50 |  500.0 | 2400 |  8 | 1&lt;br /&gt;
166|  0.50 | 1000.0 | 2400 |  8 | 1&lt;br /&gt;
167|  2.00 |  200.0 | 2400 |  8 | 1&lt;br /&gt;
168|  2.00 |  250.0 | 2400 |  8 | 1&lt;br /&gt;
169|  2.00 |  500.0 | 2400 |  8 | 1&lt;br /&gt;
170|  2.00 | 1000.0 | 2400 |  8 | 1&lt;br /&gt;
171|  5.00 |  200.0 | 2400 |  8 | 1&lt;br /&gt;
172|  5.00 |  250.0 | 2400 |  8 | 1&lt;br /&gt;
173|  5.00 |  500.0 | 2400 |  8 | 1&lt;br /&gt;
174|  5.00 | 1000.0 | 2400 |  8 | 1&lt;br /&gt;
175|  0.10 |    0.0 | 4800 |  6 | 1&lt;br /&gt;
176|  1.00 |    0.0 | 4800 |  8 | 1&lt;br /&gt;
177|  2.00 |    0.0 | 4800 |  8 | 1&lt;br /&gt;
178|  5.00 |    0.0 | 4800 |  8 | 1&lt;br /&gt;
179|  0.00 |   30.0 | 4800 |  8 | 1&lt;br /&gt;
180|  0.00 |   60.0 | 4800 |  8 | 1&lt;br /&gt;
181|  0.00 |  100.0 | 4800 |  8 | 1&lt;br /&gt;
182|  0.00 |  200.0 | 4800 |  8 | 1&lt;br /&gt;
183|  0.00 |  250.0 | 4800 |  8 | 1&lt;br /&gt;
184|  0.00 |  500.0 | 4800 |  8 | 1&lt;br /&gt;
185|  0.00 | 1000.0 | 4800 |  8 | 1&lt;br /&gt;
186|  0.00 | 2000.0 | 4800 |  8 | 1&lt;br /&gt;
187|  0.01 |  500.0 | 4800 |  6 | 1&lt;br /&gt;
188|  0.01 | 1000.0 | 4800 |  6 | 1&lt;br /&gt;
189|  0.01 | 2000.0 | 4800 |  6 | 1&lt;br /&gt;
190|  0.10 |  500.0 | 4800 |  6 | 1&lt;br /&gt;
191|  0.10 | 1000.0 | 4800 |  6 | 1&lt;br /&gt;
192|  0.10 | 2000.0 | 4800 |  8 | 1&lt;br /&gt;
193|  0.50 |  500.0 | 4800 |  8 | 1&lt;br /&gt;
194|  0.50 | 1000.0 | 4800 |  8 | 1&lt;br /&gt;
195|  0.50 | 2000.0 | 4800 |  8 | 1&lt;br /&gt;
196|  2.00 |  500.0 | 4800 |  8 | 1&lt;br /&gt;
197|  2.00 | 1000.0 | 4800 |  8 | 1&lt;br /&gt;
198|  2.00 | 2000.0 | 4800 |  8 | 1&lt;br /&gt;
199|  5.00 |  500.0 | 4800 |  8 | 1&lt;br /&gt;
200|  5.00 | 1000.0 | 4800 |  8 | 1&lt;br /&gt;
201|  5.00 | 2000.0 | 4800 |  8 | 1&lt;br /&gt;
&lt;br /&gt;
Available notch filters&lt;br /&gt;
===================================&lt;br /&gt;
num| hpfr  | lpfreq |  sfr | or | type&lt;br /&gt;
===================================&lt;br /&gt;
000| 48.00 |   52.0 |  128 |  4 | 1&lt;br /&gt;
001| 58.00 |   62.0 |  128 |  4 | 1&lt;br /&gt;
002| 48.00 |   52.0 |  256 |  4 | 1&lt;br /&gt;
003| 58.00 |   62.0 |  256 |  4 | 1&lt;br /&gt;
004| 48.00 |   52.0 |  512 |  4 | 1&lt;br /&gt;
005| 58.00 |   62.0 |  512 |  4 | 1&lt;br /&gt;
006| 48.00 |   52.0 |  600 |  4 | 1&lt;br /&gt;
007| 58.00 |   62.0 |  600 |  4 | 1&lt;br /&gt;
008| 48.00 |   52.0 | 1200 |  4 | 1&lt;br /&gt;
009| 58.00 |   62.0 | 1200 |  4 | 1&lt;br /&gt;
010| 48.00 |   52.0 | 2400 |  4 | 1&lt;br /&gt;
011| 58.00 |   62.0 | 2400 |  4 | 1&lt;br /&gt;
012| 48.00 |   52.0 | 4800 |  4 | 1&lt;br /&gt;
013| 58.00 |   62.0 | 4800 |  4 | 1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:DataIOFilter]], [[Programming Reference:GenericADC Class]]&lt;br /&gt;
[[Category:Filters]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=File:UBDigIn.JPG&amp;diff=7521</id>
		<title>File:UBDigIn.JPG</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=File:UBDigIn.JPG&amp;diff=7521"/>
		<updated>2015-06-30T19:53:50Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: Figure of the two Dig I/O ports on gUSBamps with serial numbers starting with UB.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Figure of the two Dig I/O ports on gUSBamps with serial numbers starting with UB.&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gUSBampADC&amp;diff=7520</id>
		<title>User Reference:gUSBampADC</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gUSBampADC&amp;diff=7520"/>
		<updated>2015-06-30T19:53:02Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* gUSBamps with UA serial numbers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Function==&lt;br /&gt;
The &#039;&#039;gUSBampADC&#039;&#039; filter acquires data from any number (tested up to four) &#039;&#039;g.USBamp&#039;&#039; EEG amplifiers. &lt;br /&gt;
&#039;&#039;g.USBamp&#039;&#039; is an amplifier/digitizer combination from g.tec medical engineering GmbH/Guger Technologies OEG (http://www.gtec.at). &lt;br /&gt;
Support for this device in BCI2000 consists of two components: A BCI2000-compatible Source Module (&#039;&#039;gUSBamp.exe&#039;&#039;) and a &lt;br /&gt;
command-line tool (&#039;&#039;USBampgetinfo&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
===g.USBamp Hardware===&lt;br /&gt;
The USBamp consists of 16 independent 24-bit A/D converters that can sample at &lt;br /&gt;
up to 38.4kHz per channel. Because there is one A/D converter for each channel, &lt;br /&gt;
one particular sample is digitized at the exact same time for each channel. This &lt;br /&gt;
is unlike with traditional A/D converter boards that only have one A/D &lt;br /&gt;
converter. BCI2000 has a feature that can align samples in time (parameter &lt;br /&gt;
[[User Reference:AlignmentFilter#AlignChannels|AlignChannels]]).&lt;br /&gt;
Because this feature is not needed in conjunction with the USBamp, it needs to be turned off (i.e., &#039;&#039;AlignChannels&#039;&#039; needs to be 0).&lt;br /&gt;
&lt;br /&gt;
====Drivers====&lt;br /&gt;
With the release of the Version 3.0 g.USBamp, there is now a small problem with the gUSBamp.dll included in BCI2000.  The DLL included with BCI2000 was intended to be used with g.USBamp Version 2.0 hardware.  If Version 3.0 hardware is used with the current BCI2000 distribution, the gUSBampADC module will default to using the Version 2.0 DLL which will not function.&lt;br /&gt;
&lt;br /&gt;
Drivers come with the g.USBamp hardware - the correct drivers to match the version of the hardware.  If the installer is used to install the drivers for the g.USBamp, it will also place the g.USBamp DLL into your &amp;lt;tt&amp;gt;WINDOWS/system32&amp;lt;/tt&amp;gt; folder.  If the DLL in &amp;lt;tt&amp;gt;BCI2000/prog&amp;lt;/tt&amp;gt; is deleted, the DLL appropriate for use with your g.USBamp hardware should be used.&lt;br /&gt;
&lt;br /&gt;
In short, in order to make Version 3.0 amps work with the current BCI2000 distribution, simply delete the &amp;lt;tt&amp;gt;gUSBamp.dll&amp;lt;/tt&amp;gt; file from your &amp;lt;tt&amp;gt;BCI2000/prog&amp;lt;/tt&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
Here is a grid of what driver/amp/dll combinations work:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Version 2.0 amp&#039;&#039;&#039;&lt;br /&gt;
|2.0 DLL&lt;br /&gt;
|3.0 DLL&lt;br /&gt;
|-&lt;br /&gt;
|2.0 Driver&lt;br /&gt;
|Works&lt;br /&gt;
|Works&lt;br /&gt;
|-&lt;br /&gt;
|3.0 Driver&lt;br /&gt;
|Does Not Work&lt;br /&gt;
|Does Not Work&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Version 3.0 amp&#039;&#039;&#039;&lt;br /&gt;
|2.0 DLL&lt;br /&gt;
|3.0 DLL&lt;br /&gt;
|-&lt;br /&gt;
|2.0 Driver&lt;br /&gt;
|Does Not Work&lt;br /&gt;
|Does Not Work&lt;br /&gt;
|-&lt;br /&gt;
|3.0 Driver&lt;br /&gt;
|Does Not Work&lt;br /&gt;
|Works&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
Parameters common to all source modules are described under [[User Reference:DataIOFilter]].&lt;br /&gt;
In addition, the &#039;&#039;gUSBampADC&#039;&#039; provides the following parameters:&lt;br /&gt;
&lt;br /&gt;
===DeviceIDMaster===&lt;br /&gt;
Serial number (e.g., UA-2007.01.01) of the master device. &lt;br /&gt;
If you only have one device, this parameter has to equal &#039;&#039;DeviceIDs&#039;&#039;.&lt;br /&gt;
If you have more then one device, then this parameter represents the serial number of the device whose SYNC goes to the slaves, i.e., the only device that has a cable connected at SYNC OUT, but none connected to SYNC IN. &lt;br /&gt;
If only one device is connected, this parameter may be set to &#039;&#039;auto&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===DeviceIDs===&lt;br /&gt;
List of serial numbers (e.g., UA-2007.01.01) of all devices.&lt;br /&gt;
If you have more than one device, this list determines the order of the channels in the data file. &lt;br /&gt;
If only one device is connected, this parameter may be set to &#039;&#039;auto&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===FilterEnabled===&lt;br /&gt;
Choose 1 if you want a pass band filter, and 0 if you don&#039;t.&lt;br /&gt;
The gUSBamp is a DC amplifier and thus you most likely will want a pass band filter.&lt;br /&gt;
Please note that, because the g.USBamp internally has a 5kHz antialiasing filter and always samples with 38.4kHz, you DO NOT need to enable any filter if you do not want.&lt;br /&gt;
You will never experience aliasing.&lt;br /&gt;
&lt;br /&gt;
===FilterHighPass===&lt;br /&gt;
High pass frequency for pass band. &lt;br /&gt;
You need to query the amp for possible values. &lt;br /&gt;
See description of the [[#The USBampgetinfo Command Line Tool|USBampgetinfo]] tool for more info.&lt;br /&gt;
&lt;br /&gt;
===FilterLowPass===&lt;br /&gt;
Low pass frequency for pass band.&lt;br /&gt;
See description of the USBampgetinfo tool for more info.&lt;br /&gt;
&lt;br /&gt;
===FilterModelOrder===&lt;br /&gt;
Model order for passband filter. &lt;br /&gt;
See description of the USBampgetinfo tool for more info.&lt;br /&gt;
&lt;br /&gt;
===FilterType===&lt;br /&gt;
Type of passband filter:&lt;br /&gt;
* 1=CHEBYSHEV, &lt;br /&gt;
* 2=BUTTERWORTH.&lt;br /&gt;
&lt;br /&gt;
===NotchEnabled===&lt;br /&gt;
Choose 1 if you want a notch filter, and 0 if you don&#039;t.&lt;br /&gt;
&lt;br /&gt;
===NotchHighPass===&lt;br /&gt;
Similar to FilterHighPass.&lt;br /&gt;
&lt;br /&gt;
===NotchLowPass===&lt;br /&gt;
Similar to FilterLowPass.&lt;br /&gt;
&lt;br /&gt;
===NotchModelOrder===&lt;br /&gt;
Similar to FilterModelOrder.&lt;br /&gt;
&lt;br /&gt;
===NotchType===&lt;br /&gt;
Similar to FilterType.&lt;br /&gt;
&lt;br /&gt;
===SampleBlockSize===&lt;br /&gt;
Samples per channel per digitized block. &lt;br /&gt;
Together with the sampling rate, this parameter determines how often per second data are collected, processed, and feedback is updated. For example, at 600 Hz sampling and a SampleBlockSize of 20, the system (e.g., source signal display, signal processing, and stimulus presentation) would be updated 30 times per second.&lt;br /&gt;
&lt;br /&gt;
===SamplingRate===&lt;br /&gt;
The sampling rate of all connected USBamps. &lt;br /&gt;
If one wants to use a bandpass or a notch filter, there needs to be a filter configuration for that particular sampling rate (see the section on the &#039;&#039;[USBampgetinfo]&#039;&#039; tool). (Guger Technologies can provide you with a new driver configuration file if you need a different filter.)&lt;br /&gt;
&lt;br /&gt;
The USBamp supports the following sampling rates: 32, 64, 128, 256, 512, 600, 1200, 2400, 4800, 9600, 19200, and 38400 Hz.  All sampling rates are supported for one or more amplifiers. If you are sampling at high rates and from multiple amplifiers, the CPU may be overloaded depending on the speed of your computer and the BCI2000 configuration. In case you are experiencing problems (e.g., data loss, jerky display, etc.), increase the SampleBlockSize so that you are updating the system less frequently (usually, updating the system 20-30 times per second is sufficient for most applications), and increase Visualize-&amp;gt;VisualizeSourceDecimation. This parameter will decrease the number of samples per second that are actually drawn in the Source display. For example, at 38400 Hz, 4 amplifiers (64 channels), and a system update of 30 Hz, the computer would have to draw more than 73 million lines per second in the Source display!&lt;br /&gt;
&lt;br /&gt;
===SignalType===       &lt;br /&gt;
Defines the data type of the stored signal samples (int16 or float32).&lt;br /&gt;
If the data type is int16, signal samples (which are produced by the amplifier in units of &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt;) are converted back into virtual A/D units (see Data Storage section below). If the data type is float32, the signals are stored in units of &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt;.&lt;br /&gt;
In this case, SourceChOffset should be 0, and SourceChGain should be&lt;br /&gt;
1 (since the conversion factor from &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt; into &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt; is 1).&lt;br /&gt;
&lt;br /&gt;
===SourceCh===&lt;br /&gt;
The total number of channels across all USBamp devices.&lt;br /&gt;
&lt;br /&gt;
===SourceChDevices===&lt;br /&gt;
The number of channels acquired from each device. &lt;br /&gt;
If there is only one device, this parameter has to equal &#039;&#039;SourceCh&#039;&#039;.&lt;br /&gt;
For example, &#039;16 8&#039; will acquire channels from the first device listed under &#039;&#039;DeviceIDs&#039;&#039;, and 8 channels from the second device listed under &#039;&#039;DeviceIDs&#039;&#039;.&lt;br /&gt;
Data acquisition always starts at channel 1.&lt;br /&gt;
The sum of all channels (e.g., 24 in this example) has to &lt;br /&gt;
equal the value of &#039;&#039;SourceCh&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===SourceChList===&lt;br /&gt;
The list of channels that should be acquired from each device.&lt;br /&gt;
The total number of channels listed should correspond to &#039;&#039;SourceCh&#039;&#039;. For more than one device, &#039;&#039;SourceChDevices&#039;&#039; determines how the &#039;&#039;SourceChList&#039;&#039; values are mapped to each device. For example if &#039;&#039;SourceChDevices&#039;&#039; = &#039;8 8&#039; and &#039;&#039;SourceChList&#039;&#039; = &#039;1 2 3 4 13 14 15 16 5 6 7 8 9 10 11 12&#039;, then channels 1-4 and 13-16 will be acquired on the first device, and channels 5-12 will be acquired on the second device. These channels will be saved in the data file as 16 contiguous channels.&lt;br /&gt;
The order of channels does not matter; i.e., &#039;1 2 3 4&#039; is the same as &#039;2 3 1 4&#039;. The channels are always in ascending order on a single device.&lt;br /&gt;
Channels may not be listed twice on a single device; e.g., entering &#039;1 2 3 4 5 6 7 1&#039; if &#039;&#039;SourceChDevices&#039;&#039; = &#039;8&#039; will result in an error.&lt;br /&gt;
If this parameter is left blank (the default), then all channels are acquired on all devices.&lt;br /&gt;
&lt;br /&gt;
===BipolarChList===&lt;br /&gt;
A list of channels used for a bipolar montage. Each entry is configured as the reference for a source channel, based on the channel order. The number of values should equal both &#039;&#039;SourceCh&#039;&#039; and the number of values in &#039;&#039;SourceChList&#039;&#039; (if &#039;&#039;SourceChList&#039;&#039; is not empty). If &#039;&#039;BipolarChList&#039;&#039; is empty, then the standard referential recording montage is used. If a value of &#039;0&#039; is entered, then the reference channel is used for that channel. Finally, channel labels may be used.&lt;br /&gt;
&lt;br /&gt;
As an example, a sequential bipolar montage for 8 channels could be configured like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;2 3 4 5 6 7 8 1&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
meaning that channel 1 is referenced to channel 2, channel 2 is referenced to channel 3, and so on. For another example, 10 channels can be configured so that the first 6 are bipolar, and the last four are referential, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;C3 F3 C4 F4 Pz Oz 0 0 0 0&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===EnableDigitalInput===&lt;br /&gt;
Enable digital input. &lt;br /&gt;
If enabled, the sampled values of the digital input from the digital I/O ports will be stored in to states DigitalInput1 - DigitalInput64 depending on the number of amps connected and hardware versions. See [[:User Reference:gUSBampADC#Digital Input|Digital Input]] for more information.&lt;br /&gt;
&lt;br /&gt;
===EnableDigitalOutput===&lt;br /&gt;
Enable digital output. If enabled, the digital output is set to the values returned when the signals go through the expressions given by the Parameter DigitalOutputEx. See [[:User Reference:gUSBampADC#Digital Output|Digital Output]] for more information.&lt;br /&gt;
&lt;br /&gt;
===DigitalOutputEx===&lt;br /&gt;
If digital output is turned on, the given expressions will be evaluated for the current input. If the expression evaluates true the bit is set to high, else set to low. Each expression represents a different bit and the number starts with the master and is continuous through all amps like digital input. Boolean expressions work well for this ( ex. &amp;lt;tt&amp;gt;( ( StimulusCode == 0 ) &amp;amp;&amp;amp; Running )&amp;lt;/tt&amp;gt; ). See [[:User Reference:Expression Syntax|Expressions]] for more information on how to write expressions.&lt;br /&gt;
&lt;br /&gt;
===AcquisitionMode===&lt;br /&gt;
If set to &#039;&#039;analog signal acquisition&#039;&#039;, the g.USBamp records analog signal voltages (default). If set to &#039;&#039;Calibration&#039;&#039;, the signal output is a sine wave test signal generated by the g.USBamp (which can be used to verify correct system calibration). &lt;br /&gt;
If set to &#039;&#039;Impedance&#039;&#039;, regular analog signal acquisition is preceded by an impedance test. &lt;br /&gt;
This impedance test reports input impedances for each channel in kOhms. &lt;br /&gt;
In impedance mode, if the ground and reference is connected in the amp internally (using the &#039;&#039;CommonGround&#039;&#039; and &#039;&#039;CommonReference&#039;&#039; parameters), then you need to connect the ground and reference to block 4.&lt;br /&gt;
&lt;br /&gt;
===CommonGround===&lt;br /&gt;
This parameter determines whether the g.USBamp internally connects the GND inputs from all blocks together.&lt;br /&gt;
If enabled (default), then the signal ground only needs to be connected to one input block, e.g., block 1. &lt;br /&gt;
Otherwise, all GND inputs need to be externally connected.&lt;br /&gt;
&lt;br /&gt;
===CommonReference===&lt;br /&gt;
The same as &#039;&#039;CommonGround&#039;&#039;, except for the signal reference.&lt;br /&gt;
&lt;br /&gt;
==Digital I/O==&lt;br /&gt;
&lt;br /&gt;
===Digital Inputs===&lt;br /&gt;
Can be used with 1 - 8 gUSBamps.&lt;br /&gt;
&lt;br /&gt;
====gUSBamps with UA serial numbers====&lt;br /&gt;
[[File:UADigIn.JPG]]&lt;br /&gt;
&lt;br /&gt;
Each gUSBamp has only one digital I/O port and this is stored in only one state per an gUSBamp. If multiple UA gUSBamps are connected in sync then up to state DigitalInput8 will be used, with the master gUSBamp using DigitalInput1 and the last slave gUSBamp using DigitalInput8 if 8 gUSBamps are used, or DigitalInput6 if only 6 gUSBamps are used. To access the digital input from any gUSBamp, access the state DigitalInput for the number of that slave gUSBamp. For example if I wanted to access the 5th gUSBamp, I would access DigitalInput5.&lt;br /&gt;
&lt;br /&gt;
====gUSBamps with UB serial numbers====&lt;br /&gt;
Each gUSBamp has two digital I/O ports which are stored in eight states per gUSBamp. If multiple UB gUSBamp are connected in sync then up to state DigitalInput64 will be used with the master gUSBamp using DigitalInput1 - DigitalInput8 and the last gUSBamp using DigitalInput57 - DigitalInput64 if 8 gUSBamps are used, and DigitalInput41 - DigitalInput48 if only 6 gUSBamps are used. To access the digital input from any gUSBamp, take the number of gUSBamps preceding the intended gUSBamp multiplied by 8, then add the number of the bit you want to see. For example, if I wanted to access the 5th gUSBamp&#039;s 5th bit, I would look at DigitalInput37 (4 * 8 + 5).&lt;br /&gt;
&lt;br /&gt;
====g.USBamps in sync with both UA and UB serial numbers====&lt;br /&gt;
The device specifications are the same as above and each gUSBamp only has the number of states designated to it as specified above, i.e. each UB gUSBamp has eight states and each UA gUSBamp has only one state. The numbering of the states are based on the order of the gUSBamps. For example, if we have the following setup: UB gUSBamp as master with slaves in the following order: UB UA UA UB UA UA, which gives a total of 7 gUSBamps using DigitalInput1 - DigitalInput24 (3 * 8 + 4 * 1).For example, to access the second UA gUSBamp (which has only one state), I would look at DigitalInput18, found by the number of UB gUSBamps preceding the second UA gUSBamp multiplied by 8 plus the number of UA gUSBamps preceding it plus one for the gUSBamp itself (2 * 8 + 1 + 1). To access the third UB gUSBamp&#039;s seventh bit, I would look at DigitalInput25. This was found in the same manner as above but because it is a UB gUSBamp the specific bit is added instead of just one (2 * 8 + 2 + 7).&lt;br /&gt;
&lt;br /&gt;
To setup a link between gUSBamps UA and UB, the following images show how to connect them.&lt;br /&gt;
&lt;br /&gt;
[[File:UAUBcombo.JPG]]&lt;br /&gt;
&lt;br /&gt;
[[File:UAUBmultiple.JPG]]&lt;br /&gt;
&lt;br /&gt;
===Digital Output===&lt;br /&gt;
Can be used with 1 - 8 gUSBamps.&lt;br /&gt;
&lt;br /&gt;
====gUSBamps with UA serial numbers====&lt;br /&gt;
Each gUSBamp has one digital I/O port giving it two digital output bits. If multiple UA gUSBamps are connected there are a total of 16 digital output bits possible. To write to these bits, Parameter DigitalOutputEx must be filled. Each row correlates to a bit. The numbering of the bits start with 1 and 2 being the master gUSBamp and continues numbering until the eighth gUSBamp having bit 15 and 16. To determine which row to use, the bit is found by taking the number of amgUSBampsps preceding the intended gUSBamp in the chain multiplied by two and then add the number of the bit you want to write for. For example, the second bit of the fourth gUSBamp is row 8 (3 * 2 + 2).&lt;br /&gt;
&lt;br /&gt;
====gUSBamps with UB serial numbers====&lt;br /&gt;
Each gUSBamp has two digital I/O ports giving it four digital output bits. If multiple UB gUSBamps are connected, that gives a total of 32 digital output bits possible. To write to these bits, Parameter DigitalOutputEx must be filled. Each row corresponds to a bit. The numbering of the bits start with 1 - 4 being the master gUSBamp and continues numbering until the eighth gUSBamp having bits 29 - 32. To figure out which row to use, the formula is the number of gUSBamps preceding the intended gUSBamp in the chain multiplied by four and then add the number of the bit you want to write for. For example the second bit of the fourth gUSBamp is row 14 (3 * 4 + 2).&lt;br /&gt;
&lt;br /&gt;
====gUSBamps in sync with both UA and UB serial numbers====&lt;br /&gt;
The device specs are the same as above with each UA gUSBamp having two digital output bits and each UB gUSBamp having four digital output bits. To write the proper row, the order of the gUSBamps matter just like digital input. For example we have the setup of UB gUSBamp as master with the slaves in the following order: UB UA UA UB UA UA, which gives a total of 7 gUSBamps having a total of 20 digital output bits. To find the row that corresponds with the bit you want to write for, take the number of UB gUSBamps preceding the intended gUSBamp in the chain multiplied by 4 and add the number of UA gUSBamps preceding the intended gUSBamp in the chain multiplied by 2 and add the number of the bit you want. For example to write the expression for the second UA gUSBamp&#039;s first bit, I would write the expression in row 11 (2 * 4 + 1 * 2 + 1). For example to write the expression for the third UB gUSBamp&#039;s third bit, I would write the expression in row 15 (2 * 4 + 2 * 2 + 3).&lt;br /&gt;
&lt;br /&gt;
==States==&lt;br /&gt;
&lt;br /&gt;
===DigitalInput===&lt;br /&gt;
DigitalInput ranges from DigitalInput1 - DigitalInput64 (see [[:User Reference:gUSBampADC#Digital Input|Digital Input]] for explanation) and the values are either a 0 or a 1.&lt;br /&gt;
&lt;br /&gt;
==Additional Information==&lt;br /&gt;
&lt;br /&gt;
===Using 32bit Executables on 64bit Installations===&lt;br /&gt;
BCI2000 supports compilation of the gUSBamp source module for 64bit targets. The resulting executable will run on 64bit systems, and work with the 64bit version of the gUSBamp drivers. However, the binary distribution of BCI2000 contains 32bit executables. These run fine under 64bit systems, but you will need to perform these additional driver installation steps to install 32bit gUSBamp API DLLs on 64bit systems:&lt;br /&gt;
*Execute gtec&#039;s 32bit driver installer on your 64bit system.&lt;br /&gt;
*After successful installation, execute gtec&#039;s 64bit driver installer on your 64bit system.&lt;br /&gt;
*You will now have both the 32bit API DLL and the 64bit API DLL installed, such that both 32bit and 64bit executables will be able to connect to a gUSBamp attached to the system&#039;s USB ports.&lt;br /&gt;
&lt;br /&gt;
===Data Storage===&lt;br /&gt;
Unlike other systems, the USBamp is a DC amplifier system that digitizes at 24 bit. &lt;br /&gt;
Bandpass and notch filtering is performed on the digitized samples, resulting in floating point signal samples in units of &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt;.&lt;br /&gt;
BCI2000 currently supports signed 16 bit integers and floating point numbers for its data storage.&lt;br /&gt;
If &#039;&#039;SignalType&#039;&#039; is set to int16, the floating point values have to be converted back into integers before they can be stored and transmitted to Signal Processing.&lt;br /&gt;
This is done by the following transformation: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathrm{sample}_\mathrm{stored}\mathrm{(A/D\,units)}=\frac{\mathrm{sample}_\mathrm{acquired}(\mu V)}\mathrm{SourceChGain}&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
(&#039;&#039;SourceChOffset&#039;&#039; is assumed (and required) to be zero for all channels.) &lt;br /&gt;
BCI2000 Signal Processing or any offline analysis routine can derive, as with &lt;br /&gt;
any other BCI2000 source module, sample values in &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt; by subtracting, from &lt;br /&gt;
each stored sample, &#039;&#039;SourceChOffset&#039;&#039; (i.e., zero), and multiplying it with &lt;br /&gt;
&#039;&#039;SourceChGain&#039;&#039; for each channel. If &#039;&#039;SignalType&#039;&#039; is set to float32,&lt;br /&gt;
data samples are stored in units of &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt;. In this case, &#039;&#039;SourceChGain&#039;&#039; should be&lt;br /&gt;
a list of 1&#039;s (because the conversion factor between data samples into &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt; is&lt;br /&gt;
1.0 for each channel).&lt;br /&gt;
&lt;br /&gt;
Still, when values other than 0 and 1 are specified, a consistent data file will be produced, i.e. values will be transformed before they are written to the file, such that applying SourceChOffset and SourceChGain will reproduce the original values in &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===The &#039;&#039;USBampgetinfo&#039;&#039; Command Line Tool===&lt;br /&gt;
This command line tool displays all connected USBamps, including their serial &lt;br /&gt;
number and the USB port that they connect to. Further, this tool reads, for the &lt;br /&gt;
first of the connected amplifiers, all supported bandpass and notch filter &lt;br /&gt;
configurations. Thus, this tool can be used to determine which filters can be &lt;br /&gt;
used for a particular sampling frequency within BCI2000. The following is an &lt;br /&gt;
example screen output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*******************************************&lt;br /&gt;
BCI2000 Information Tool for g.USBamp&lt;br /&gt;
*******************************************&lt;br /&gt;
(C)2004 Gerwin Schalk&lt;br /&gt;
	 Wadsworth Center&lt;br /&gt;
	 New York State Department of Health&lt;br /&gt;
	 Albany, NY, USA&lt;br /&gt;
*******************************************&lt;br /&gt;
Amp found at USB address 1 (S/N: UA-200X.XX.XX)&lt;br /&gt;
Printing info for first amp (USB address 1)&lt;br /&gt;
&lt;br /&gt;
Available bandpass filters&lt;br /&gt;
===================================&lt;br /&gt;
num| hpfr  | lpfreq |  sfr | or | type&lt;br /&gt;
===================================&lt;br /&gt;
000|  0.10 |    0.0 |   32 |  8 | 1&lt;br /&gt;
001|  1.00 |    0.0 |   32 |  8 | 1&lt;br /&gt;
002|  2.00 |    0.0 |   32 |  8 | 1&lt;br /&gt;
003|  5.00 |    0.0 |   32 |  8 | 1&lt;br /&gt;
004|  0.00 |   15.0 |   32 |  8 | 1&lt;br /&gt;
005|  0.01 |   15.0 |   32 |  8 | 1&lt;br /&gt;
006|  0.10 |   15.0 |   32 |  8 | 1&lt;br /&gt;
007|  0.50 |   15.0 |   32 |  8 | 1&lt;br /&gt;
008|  2.00 |   15.0 |   32 |  8 | 1&lt;br /&gt;
009|  0.10 |    0.0 |   64 |  8 | 1&lt;br /&gt;
010|  1.00 |    0.0 |   64 |  8 | 1&lt;br /&gt;
011|  2.00 |    0.0 |   64 |  8 | 1&lt;br /&gt;
012|  5.00 |    0.0 |   64 |  8 | 1&lt;br /&gt;
013|  0.00 |   30.0 |   64 |  8 | 1&lt;br /&gt;
014|  0.01 |   30.0 |   64 |  8 | 1&lt;br /&gt;
015|  0.10 |   30.0 |   64 |  8 | 1&lt;br /&gt;
016|  0.50 |   30.0 |   64 |  8 | 1&lt;br /&gt;
017|  2.00 |   30.0 |   64 |  8 | 1&lt;br /&gt;
018|  0.10 |    0.0 |  128 |  8 | 1&lt;br /&gt;
019|  1.00 |    0.0 |  128 |  8 | 1&lt;br /&gt;
020|  2.00 |    0.0 |  128 |  8 | 1&lt;br /&gt;
021|  5.00 |    0.0 |  128 |  8 | 1&lt;br /&gt;
022|  0.00 |   30.0 |  128 |  8 | 1&lt;br /&gt;
023|  0.00 |   60.0 |  128 |  8 | 1&lt;br /&gt;
024|  0.01 |   30.0 |  128 |  8 | 1&lt;br /&gt;
025|  0.01 |   60.0 |  128 |  8 | 1&lt;br /&gt;
026|  0.10 |   30.0 |  128 |  8 | 1&lt;br /&gt;
027|  0.10 |   60.0 |  128 |  8 | 1&lt;br /&gt;
028|  0.50 |   30.0 |  128 |  8 | 1&lt;br /&gt;
029|  0.50 |   60.0 |  128 |  8 | 1&lt;br /&gt;
030|  2.00 |   30.0 |  128 |  8 | 1&lt;br /&gt;
031|  2.00 |   60.0 |  128 |  8 | 1&lt;br /&gt;
032|  0.10 |    0.0 |  256 |  8 | 1&lt;br /&gt;
033|  1.00 |    0.0 |  256 |  8 | 1&lt;br /&gt;
034|  2.00 |    0.0 |  256 |  8 | 1&lt;br /&gt;
035|  5.00 |    0.0 |  256 |  8 | 1&lt;br /&gt;
036|  0.00 |   30.0 |  256 |  8 | 1&lt;br /&gt;
037|  0.00 |   60.0 |  256 |  8 | 1&lt;br /&gt;
038|  0.00 |  100.0 |  256 |  8 | 1&lt;br /&gt;
039|  0.01 |   30.0 |  256 |  6 | 1&lt;br /&gt;
040|  0.01 |   60.0 |  256 |  8 | 1&lt;br /&gt;
041|  0.01 |  100.0 |  256 |  8 | 1&lt;br /&gt;
042|  0.10 |   30.0 |  256 |  8 | 1&lt;br /&gt;
043|  0.10 |   60.0 |  256 |  8 | 1&lt;br /&gt;
044|  0.10 |  100.0 |  256 |  8 | 1&lt;br /&gt;
045|  0.50 |   30.0 |  256 |  8 | 1&lt;br /&gt;
046|  0.50 |   60.0 |  256 |  8 | 1&lt;br /&gt;
047|  0.50 |  100.0 |  256 |  8 | 1&lt;br /&gt;
048|  2.00 |   30.0 |  256 |  8 | 1&lt;br /&gt;
049|  2.00 |   60.0 |  256 |  8 | 1&lt;br /&gt;
050|  2.00 |  100.0 |  256 |  8 | 1&lt;br /&gt;
051|  5.00 |   30.0 |  256 |  8 | 1&lt;br /&gt;
052|  5.00 |   60.0 |  256 |  8 | 1&lt;br /&gt;
053|  5.00 |  100.0 |  256 |  8 | 1&lt;br /&gt;
054|  0.10 |    0.0 |  512 |  8 | 1&lt;br /&gt;
055|  1.00 |    0.0 |  512 |  8 | 1&lt;br /&gt;
056|  2.00 |    0.0 |  512 |  8 | 1&lt;br /&gt;
057|  5.00 |    0.0 |  512 |  8 | 1&lt;br /&gt;
058|  0.00 |   30.0 |  512 |  8 | 1&lt;br /&gt;
059|  0.00 |   60.0 |  512 |  8 | 1&lt;br /&gt;
060|  0.00 |  100.0 |  512 |  8 | 1&lt;br /&gt;
061|  0.00 |  200.0 |  512 |  8 | 1&lt;br /&gt;
062|  0.01 |   30.0 |  512 |  6 | 1&lt;br /&gt;
063|  0.01 |   60.0 |  512 |  6 | 1&lt;br /&gt;
064|  0.01 |  100.0 |  512 |  6 | 1&lt;br /&gt;
065|  0.01 |  200.0 |  512 |  8 | 1&lt;br /&gt;
066|  0.10 |   30.0 |  512 |  8 | 1&lt;br /&gt;
067|  0.10 |   60.0 |  512 |  8 | 1&lt;br /&gt;
068|  0.10 |  100.0 |  512 |  8 | 1&lt;br /&gt;
069|  0.10 |  200.0 |  512 |  8 | 1&lt;br /&gt;
070|  0.50 |   30.0 |  512 |  8 | 1&lt;br /&gt;
071|  0.50 |   60.0 |  512 |  8 | 1&lt;br /&gt;
072|  0.50 |  100.0 |  512 |  8 | 1&lt;br /&gt;
073|  0.50 |  200.0 |  512 |  8 | 1&lt;br /&gt;
074|  2.00 |   30.0 |  512 |  8 | 1&lt;br /&gt;
075|  2.00 |   60.0 |  512 |  8 | 1&lt;br /&gt;
076|  2.00 |  100.0 |  512 |  8 | 1&lt;br /&gt;
077|  2.00 |  200.0 |  512 |  8 | 1&lt;br /&gt;
078|  5.00 |   30.0 |  512 |  8 | 1&lt;br /&gt;
079|  5.00 |   60.0 |  512 |  8 | 1&lt;br /&gt;
080|  5.00 |  100.0 |  512 |  8 | 1&lt;br /&gt;
081|  5.00 |  200.0 |  512 |  8 | 1&lt;br /&gt;
082|  0.10 |    0.0 |  600 |  8 | 1&lt;br /&gt;
083|  1.00 |    0.0 |  600 |  8 | 1&lt;br /&gt;
084|  2.00 |    0.0 |  600 |  8 | 1&lt;br /&gt;
085|  5.00 |    0.0 |  600 |  8 | 1&lt;br /&gt;
086|  0.00 |   30.0 |  600 |  8 | 1&lt;br /&gt;
087|  0.00 |   60.0 |  600 |  8 | 1&lt;br /&gt;
088|  0.00 |  100.0 |  600 |  8 | 1&lt;br /&gt;
089|  0.00 |  200.0 |  600 |  8 | 1&lt;br /&gt;
090|  0.00 |  250.0 |  600 |  8 | 1&lt;br /&gt;
091|  0.01 |   60.0 |  600 |  6 | 1&lt;br /&gt;
092|  0.01 |  100.0 |  600 |  6 | 1&lt;br /&gt;
093|  0.01 |  200.0 |  600 |  6 | 1&lt;br /&gt;
094|  0.01 |  250.0 |  600 |  8 | 1&lt;br /&gt;
095|  0.10 |   60.0 |  600 |  8 | 1&lt;br /&gt;
096|  0.10 |  100.0 |  600 |  8 | 1&lt;br /&gt;
097|  0.10 |  200.0 |  600 |  8 | 1&lt;br /&gt;
098|  0.10 |  250.0 |  600 |  8 | 1&lt;br /&gt;
099|  0.50 |   30.0 |  600 |  8 | 1&lt;br /&gt;
100|  0.50 |   60.0 |  600 |  8 | 1&lt;br /&gt;
101|  0.50 |  100.0 |  600 |  8 | 1&lt;br /&gt;
102|  0.50 |  200.0 |  600 |  8 | 1&lt;br /&gt;
103|  0.50 |  250.0 |  600 |  8 | 1&lt;br /&gt;
104|  2.00 |   30.0 |  600 |  8 | 1&lt;br /&gt;
105|  2.00 |   60.0 |  600 |  8 | 1&lt;br /&gt;
106|  2.00 |  100.0 |  600 |  8 | 1&lt;br /&gt;
107|  2.00 |  200.0 |  600 |  8 | 1&lt;br /&gt;
108|  2.00 |  250.0 |  600 |  8 | 1&lt;br /&gt;
109|  5.00 |   30.0 |  600 |  8 | 1&lt;br /&gt;
110|  5.00 |   60.0 |  600 |  8 | 1&lt;br /&gt;
111|  5.00 |  100.0 |  600 |  8 | 1&lt;br /&gt;
112|  5.00 |  200.0 |  600 |  8 | 1&lt;br /&gt;
113|  5.00 |  250.0 |  600 |  8 | 1&lt;br /&gt;
114|  0.10 |    0.0 | 1200 |  8 | 1&lt;br /&gt;
115|  1.00 |    0.0 | 1200 |  8 | 1&lt;br /&gt;
116|  2.00 |    0.0 | 1200 |  8 | 1&lt;br /&gt;
117|  5.00 |    0.0 | 1200 |  8 | 1&lt;br /&gt;
118|  0.00 |   30.0 | 1200 |  8 | 1&lt;br /&gt;
119|  0.00 |   60.0 | 1200 |  8 | 1&lt;br /&gt;
120|  0.00 |  100.0 | 1200 |  8 | 1&lt;br /&gt;
121|  0.00 |  200.0 | 1200 |  8 | 1&lt;br /&gt;
122|  0.00 |  250.0 | 1200 |  8 | 1&lt;br /&gt;
123|  0.00 |  500.0 | 1200 |  8 | 1&lt;br /&gt;
124|  0.01 |  100.0 | 1200 |  6 | 1&lt;br /&gt;
125|  0.01 |  200.0 | 1200 |  6 | 1&lt;br /&gt;
126|  0.01 |  250.0 | 1200 |  6 | 1&lt;br /&gt;
127|  0.01 |  500.0 | 1200 |  6 | 1&lt;br /&gt;
128|  0.10 |  100.0 | 1200 |  6 | 1&lt;br /&gt;
129|  0.10 |  200.0 | 1200 |  8 | 1&lt;br /&gt;
130|  0.10 |  250.0 | 1200 |  8 | 1&lt;br /&gt;
131|  0.10 |  500.0 | 1200 |  8 | 1&lt;br /&gt;
132|  0.50 |  100.0 | 1200 |  8 | 1&lt;br /&gt;
133|  0.50 |  200.0 | 1200 |  8 | 1&lt;br /&gt;
134|  0.50 |  250.0 | 1200 |  8 | 1&lt;br /&gt;
135|  0.50 |  500.0 | 1200 |  8 | 1&lt;br /&gt;
136|  2.00 |  100.0 | 1200 |  8 | 1&lt;br /&gt;
137|  2.00 |  200.0 | 1200 |  8 | 1&lt;br /&gt;
138|  2.00 |  250.0 | 1200 |  8 | 1&lt;br /&gt;
139|  2.00 |  500.0 | 1200 |  8 | 1&lt;br /&gt;
140|  5.00 |  100.0 | 1200 |  8 | 1&lt;br /&gt;
141|  5.00 |  200.0 | 1200 |  8 | 1&lt;br /&gt;
142|  5.00 |  250.0 | 1200 |  8 | 1&lt;br /&gt;
143|  5.00 |  500.0 | 1200 |  8 | 1&lt;br /&gt;
144|  0.10 |    0.0 | 2400 |  8 | 1&lt;br /&gt;
145|  1.00 |    0.0 | 2400 |  8 | 1&lt;br /&gt;
146|  2.00 |    0.0 | 2400 |  8 | 1&lt;br /&gt;
147|  5.00 |    0.0 | 2400 |  8 | 1&lt;br /&gt;
148|  0.00 |   30.0 | 2400 |  8 | 1&lt;br /&gt;
149|  0.00 |   60.0 | 2400 |  8 | 1&lt;br /&gt;
150|  0.00 |  100.0 | 2400 |  8 | 1&lt;br /&gt;
151|  0.00 |  200.0 | 2400 |  8 | 1&lt;br /&gt;
152|  0.00 |  250.0 | 2400 |  8 | 1&lt;br /&gt;
153|  0.00 |  500.0 | 2400 |  8 | 1&lt;br /&gt;
154|  0.00 | 1000.0 | 2400 |  8 | 1&lt;br /&gt;
155|  0.01 |  200.0 | 2400 |  4 | 1&lt;br /&gt;
156|  0.01 |  250.0 | 2400 |  6 | 1&lt;br /&gt;
157|  0.01 |  500.0 | 2400 |  6 | 1&lt;br /&gt;
158|  0.01 | 1000.0 | 2400 |  6 | 1&lt;br /&gt;
159|  0.10 |  200.0 | 2400 |  6 | 1&lt;br /&gt;
160|  0.10 |  250.0 | 2400 |  6 | 1&lt;br /&gt;
161|  0.10 |  500.0 | 2400 |  8 | 1&lt;br /&gt;
162|  0.10 | 1000.0 | 2400 |  8 | 1&lt;br /&gt;
163|  0.50 |  200.0 | 2400 |  8 | 1&lt;br /&gt;
164|  0.50 |  250.0 | 2400 |  8 | 1&lt;br /&gt;
165|  0.50 |  500.0 | 2400 |  8 | 1&lt;br /&gt;
166|  0.50 | 1000.0 | 2400 |  8 | 1&lt;br /&gt;
167|  2.00 |  200.0 | 2400 |  8 | 1&lt;br /&gt;
168|  2.00 |  250.0 | 2400 |  8 | 1&lt;br /&gt;
169|  2.00 |  500.0 | 2400 |  8 | 1&lt;br /&gt;
170|  2.00 | 1000.0 | 2400 |  8 | 1&lt;br /&gt;
171|  5.00 |  200.0 | 2400 |  8 | 1&lt;br /&gt;
172|  5.00 |  250.0 | 2400 |  8 | 1&lt;br /&gt;
173|  5.00 |  500.0 | 2400 |  8 | 1&lt;br /&gt;
174|  5.00 | 1000.0 | 2400 |  8 | 1&lt;br /&gt;
175|  0.10 |    0.0 | 4800 |  6 | 1&lt;br /&gt;
176|  1.00 |    0.0 | 4800 |  8 | 1&lt;br /&gt;
177|  2.00 |    0.0 | 4800 |  8 | 1&lt;br /&gt;
178|  5.00 |    0.0 | 4800 |  8 | 1&lt;br /&gt;
179|  0.00 |   30.0 | 4800 |  8 | 1&lt;br /&gt;
180|  0.00 |   60.0 | 4800 |  8 | 1&lt;br /&gt;
181|  0.00 |  100.0 | 4800 |  8 | 1&lt;br /&gt;
182|  0.00 |  200.0 | 4800 |  8 | 1&lt;br /&gt;
183|  0.00 |  250.0 | 4800 |  8 | 1&lt;br /&gt;
184|  0.00 |  500.0 | 4800 |  8 | 1&lt;br /&gt;
185|  0.00 | 1000.0 | 4800 |  8 | 1&lt;br /&gt;
186|  0.00 | 2000.0 | 4800 |  8 | 1&lt;br /&gt;
187|  0.01 |  500.0 | 4800 |  6 | 1&lt;br /&gt;
188|  0.01 | 1000.0 | 4800 |  6 | 1&lt;br /&gt;
189|  0.01 | 2000.0 | 4800 |  6 | 1&lt;br /&gt;
190|  0.10 |  500.0 | 4800 |  6 | 1&lt;br /&gt;
191|  0.10 | 1000.0 | 4800 |  6 | 1&lt;br /&gt;
192|  0.10 | 2000.0 | 4800 |  8 | 1&lt;br /&gt;
193|  0.50 |  500.0 | 4800 |  8 | 1&lt;br /&gt;
194|  0.50 | 1000.0 | 4800 |  8 | 1&lt;br /&gt;
195|  0.50 | 2000.0 | 4800 |  8 | 1&lt;br /&gt;
196|  2.00 |  500.0 | 4800 |  8 | 1&lt;br /&gt;
197|  2.00 | 1000.0 | 4800 |  8 | 1&lt;br /&gt;
198|  2.00 | 2000.0 | 4800 |  8 | 1&lt;br /&gt;
199|  5.00 |  500.0 | 4800 |  8 | 1&lt;br /&gt;
200|  5.00 | 1000.0 | 4800 |  8 | 1&lt;br /&gt;
201|  5.00 | 2000.0 | 4800 |  8 | 1&lt;br /&gt;
&lt;br /&gt;
Available notch filters&lt;br /&gt;
===================================&lt;br /&gt;
num| hpfr  | lpfreq |  sfr | or | type&lt;br /&gt;
===================================&lt;br /&gt;
000| 48.00 |   52.0 |  128 |  4 | 1&lt;br /&gt;
001| 58.00 |   62.0 |  128 |  4 | 1&lt;br /&gt;
002| 48.00 |   52.0 |  256 |  4 | 1&lt;br /&gt;
003| 58.00 |   62.0 |  256 |  4 | 1&lt;br /&gt;
004| 48.00 |   52.0 |  512 |  4 | 1&lt;br /&gt;
005| 58.00 |   62.0 |  512 |  4 | 1&lt;br /&gt;
006| 48.00 |   52.0 |  600 |  4 | 1&lt;br /&gt;
007| 58.00 |   62.0 |  600 |  4 | 1&lt;br /&gt;
008| 48.00 |   52.0 | 1200 |  4 | 1&lt;br /&gt;
009| 58.00 |   62.0 | 1200 |  4 | 1&lt;br /&gt;
010| 48.00 |   52.0 | 2400 |  4 | 1&lt;br /&gt;
011| 58.00 |   62.0 | 2400 |  4 | 1&lt;br /&gt;
012| 48.00 |   52.0 | 4800 |  4 | 1&lt;br /&gt;
013| 58.00 |   62.0 | 4800 |  4 | 1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:DataIOFilter]], [[Programming Reference:GenericADC Class]]&lt;br /&gt;
[[Category:Filters]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=File:UADigIn.JPG&amp;diff=7519</id>
		<title>File:UADigIn.JPG</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=File:UADigIn.JPG&amp;diff=7519"/>
		<updated>2015-06-30T19:52:39Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: Figure of the Dig I/O port on gUSBamps with serial numbers starting with UA.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Figure of the Dig I/O port on gUSBamps with serial numbers starting with UA.&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gUSBampADC&amp;diff=7518</id>
		<title>User Reference:gUSBampADC</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=User_Reference:gUSBampADC&amp;diff=7518"/>
		<updated>2015-06-30T19:51:07Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* g.USBamps in sync with both UA and UB serial numbers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Function==&lt;br /&gt;
The &#039;&#039;gUSBampADC&#039;&#039; filter acquires data from any number (tested up to four) &#039;&#039;g.USBamp&#039;&#039; EEG amplifiers. &lt;br /&gt;
&#039;&#039;g.USBamp&#039;&#039; is an amplifier/digitizer combination from g.tec medical engineering GmbH/Guger Technologies OEG (http://www.gtec.at). &lt;br /&gt;
Support for this device in BCI2000 consists of two components: A BCI2000-compatible Source Module (&#039;&#039;gUSBamp.exe&#039;&#039;) and a &lt;br /&gt;
command-line tool (&#039;&#039;USBampgetinfo&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
===g.USBamp Hardware===&lt;br /&gt;
The USBamp consists of 16 independent 24-bit A/D converters that can sample at &lt;br /&gt;
up to 38.4kHz per channel. Because there is one A/D converter for each channel, &lt;br /&gt;
one particular sample is digitized at the exact same time for each channel. This &lt;br /&gt;
is unlike with traditional A/D converter boards that only have one A/D &lt;br /&gt;
converter. BCI2000 has a feature that can align samples in time (parameter &lt;br /&gt;
[[User Reference:AlignmentFilter#AlignChannels|AlignChannels]]).&lt;br /&gt;
Because this feature is not needed in conjunction with the USBamp, it needs to be turned off (i.e., &#039;&#039;AlignChannels&#039;&#039; needs to be 0).&lt;br /&gt;
&lt;br /&gt;
====Drivers====&lt;br /&gt;
With the release of the Version 3.0 g.USBamp, there is now a small problem with the gUSBamp.dll included in BCI2000.  The DLL included with BCI2000 was intended to be used with g.USBamp Version 2.0 hardware.  If Version 3.0 hardware is used with the current BCI2000 distribution, the gUSBampADC module will default to using the Version 2.0 DLL which will not function.&lt;br /&gt;
&lt;br /&gt;
Drivers come with the g.USBamp hardware - the correct drivers to match the version of the hardware.  If the installer is used to install the drivers for the g.USBamp, it will also place the g.USBamp DLL into your &amp;lt;tt&amp;gt;WINDOWS/system32&amp;lt;/tt&amp;gt; folder.  If the DLL in &amp;lt;tt&amp;gt;BCI2000/prog&amp;lt;/tt&amp;gt; is deleted, the DLL appropriate for use with your g.USBamp hardware should be used.&lt;br /&gt;
&lt;br /&gt;
In short, in order to make Version 3.0 amps work with the current BCI2000 distribution, simply delete the &amp;lt;tt&amp;gt;gUSBamp.dll&amp;lt;/tt&amp;gt; file from your &amp;lt;tt&amp;gt;BCI2000/prog&amp;lt;/tt&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
Here is a grid of what driver/amp/dll combinations work:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Version 2.0 amp&#039;&#039;&#039;&lt;br /&gt;
|2.0 DLL&lt;br /&gt;
|3.0 DLL&lt;br /&gt;
|-&lt;br /&gt;
|2.0 Driver&lt;br /&gt;
|Works&lt;br /&gt;
|Works&lt;br /&gt;
|-&lt;br /&gt;
|3.0 Driver&lt;br /&gt;
|Does Not Work&lt;br /&gt;
|Does Not Work&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Version 3.0 amp&#039;&#039;&#039;&lt;br /&gt;
|2.0 DLL&lt;br /&gt;
|3.0 DLL&lt;br /&gt;
|-&lt;br /&gt;
|2.0 Driver&lt;br /&gt;
|Does Not Work&lt;br /&gt;
|Does Not Work&lt;br /&gt;
|-&lt;br /&gt;
|3.0 Driver&lt;br /&gt;
|Does Not Work&lt;br /&gt;
|Works&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
Parameters common to all source modules are described under [[User Reference:DataIOFilter]].&lt;br /&gt;
In addition, the &#039;&#039;gUSBampADC&#039;&#039; provides the following parameters:&lt;br /&gt;
&lt;br /&gt;
===DeviceIDMaster===&lt;br /&gt;
Serial number (e.g., UA-2007.01.01) of the master device. &lt;br /&gt;
If you only have one device, this parameter has to equal &#039;&#039;DeviceIDs&#039;&#039;.&lt;br /&gt;
If you have more then one device, then this parameter represents the serial number of the device whose SYNC goes to the slaves, i.e., the only device that has a cable connected at SYNC OUT, but none connected to SYNC IN. &lt;br /&gt;
If only one device is connected, this parameter may be set to &#039;&#039;auto&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===DeviceIDs===&lt;br /&gt;
List of serial numbers (e.g., UA-2007.01.01) of all devices.&lt;br /&gt;
If you have more than one device, this list determines the order of the channels in the data file. &lt;br /&gt;
If only one device is connected, this parameter may be set to &#039;&#039;auto&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===FilterEnabled===&lt;br /&gt;
Choose 1 if you want a pass band filter, and 0 if you don&#039;t.&lt;br /&gt;
The gUSBamp is a DC amplifier and thus you most likely will want a pass band filter.&lt;br /&gt;
Please note that, because the g.USBamp internally has a 5kHz antialiasing filter and always samples with 38.4kHz, you DO NOT need to enable any filter if you do not want.&lt;br /&gt;
You will never experience aliasing.&lt;br /&gt;
&lt;br /&gt;
===FilterHighPass===&lt;br /&gt;
High pass frequency for pass band. &lt;br /&gt;
You need to query the amp for possible values. &lt;br /&gt;
See description of the [[#The USBampgetinfo Command Line Tool|USBampgetinfo]] tool for more info.&lt;br /&gt;
&lt;br /&gt;
===FilterLowPass===&lt;br /&gt;
Low pass frequency for pass band.&lt;br /&gt;
See description of the USBampgetinfo tool for more info.&lt;br /&gt;
&lt;br /&gt;
===FilterModelOrder===&lt;br /&gt;
Model order for passband filter. &lt;br /&gt;
See description of the USBampgetinfo tool for more info.&lt;br /&gt;
&lt;br /&gt;
===FilterType===&lt;br /&gt;
Type of passband filter:&lt;br /&gt;
* 1=CHEBYSHEV, &lt;br /&gt;
* 2=BUTTERWORTH.&lt;br /&gt;
&lt;br /&gt;
===NotchEnabled===&lt;br /&gt;
Choose 1 if you want a notch filter, and 0 if you don&#039;t.&lt;br /&gt;
&lt;br /&gt;
===NotchHighPass===&lt;br /&gt;
Similar to FilterHighPass.&lt;br /&gt;
&lt;br /&gt;
===NotchLowPass===&lt;br /&gt;
Similar to FilterLowPass.&lt;br /&gt;
&lt;br /&gt;
===NotchModelOrder===&lt;br /&gt;
Similar to FilterModelOrder.&lt;br /&gt;
&lt;br /&gt;
===NotchType===&lt;br /&gt;
Similar to FilterType.&lt;br /&gt;
&lt;br /&gt;
===SampleBlockSize===&lt;br /&gt;
Samples per channel per digitized block. &lt;br /&gt;
Together with the sampling rate, this parameter determines how often per second data are collected, processed, and feedback is updated. For example, at 600 Hz sampling and a SampleBlockSize of 20, the system (e.g., source signal display, signal processing, and stimulus presentation) would be updated 30 times per second.&lt;br /&gt;
&lt;br /&gt;
===SamplingRate===&lt;br /&gt;
The sampling rate of all connected USBamps. &lt;br /&gt;
If one wants to use a bandpass or a notch filter, there needs to be a filter configuration for that particular sampling rate (see the section on the &#039;&#039;[USBampgetinfo]&#039;&#039; tool). (Guger Technologies can provide you with a new driver configuration file if you need a different filter.)&lt;br /&gt;
&lt;br /&gt;
The USBamp supports the following sampling rates: 32, 64, 128, 256, 512, 600, 1200, 2400, 4800, 9600, 19200, and 38400 Hz.  All sampling rates are supported for one or more amplifiers. If you are sampling at high rates and from multiple amplifiers, the CPU may be overloaded depending on the speed of your computer and the BCI2000 configuration. In case you are experiencing problems (e.g., data loss, jerky display, etc.), increase the SampleBlockSize so that you are updating the system less frequently (usually, updating the system 20-30 times per second is sufficient for most applications), and increase Visualize-&amp;gt;VisualizeSourceDecimation. This parameter will decrease the number of samples per second that are actually drawn in the Source display. For example, at 38400 Hz, 4 amplifiers (64 channels), and a system update of 30 Hz, the computer would have to draw more than 73 million lines per second in the Source display!&lt;br /&gt;
&lt;br /&gt;
===SignalType===       &lt;br /&gt;
Defines the data type of the stored signal samples (int16 or float32).&lt;br /&gt;
If the data type is int16, signal samples (which are produced by the amplifier in units of &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt;) are converted back into virtual A/D units (see Data Storage section below). If the data type is float32, the signals are stored in units of &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt;.&lt;br /&gt;
In this case, SourceChOffset should be 0, and SourceChGain should be&lt;br /&gt;
1 (since the conversion factor from &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt; into &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt; is 1).&lt;br /&gt;
&lt;br /&gt;
===SourceCh===&lt;br /&gt;
The total number of channels across all USBamp devices.&lt;br /&gt;
&lt;br /&gt;
===SourceChDevices===&lt;br /&gt;
The number of channels acquired from each device. &lt;br /&gt;
If there is only one device, this parameter has to equal &#039;&#039;SourceCh&#039;&#039;.&lt;br /&gt;
For example, &#039;16 8&#039; will acquire channels from the first device listed under &#039;&#039;DeviceIDs&#039;&#039;, and 8 channels from the second device listed under &#039;&#039;DeviceIDs&#039;&#039;.&lt;br /&gt;
Data acquisition always starts at channel 1.&lt;br /&gt;
The sum of all channels (e.g., 24 in this example) has to &lt;br /&gt;
equal the value of &#039;&#039;SourceCh&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===SourceChList===&lt;br /&gt;
The list of channels that should be acquired from each device.&lt;br /&gt;
The total number of channels listed should correspond to &#039;&#039;SourceCh&#039;&#039;. For more than one device, &#039;&#039;SourceChDevices&#039;&#039; determines how the &#039;&#039;SourceChList&#039;&#039; values are mapped to each device. For example if &#039;&#039;SourceChDevices&#039;&#039; = &#039;8 8&#039; and &#039;&#039;SourceChList&#039;&#039; = &#039;1 2 3 4 13 14 15 16 5 6 7 8 9 10 11 12&#039;, then channels 1-4 and 13-16 will be acquired on the first device, and channels 5-12 will be acquired on the second device. These channels will be saved in the data file as 16 contiguous channels.&lt;br /&gt;
The order of channels does not matter; i.e., &#039;1 2 3 4&#039; is the same as &#039;2 3 1 4&#039;. The channels are always in ascending order on a single device.&lt;br /&gt;
Channels may not be listed twice on a single device; e.g., entering &#039;1 2 3 4 5 6 7 1&#039; if &#039;&#039;SourceChDevices&#039;&#039; = &#039;8&#039; will result in an error.&lt;br /&gt;
If this parameter is left blank (the default), then all channels are acquired on all devices.&lt;br /&gt;
&lt;br /&gt;
===BipolarChList===&lt;br /&gt;
A list of channels used for a bipolar montage. Each entry is configured as the reference for a source channel, based on the channel order. The number of values should equal both &#039;&#039;SourceCh&#039;&#039; and the number of values in &#039;&#039;SourceChList&#039;&#039; (if &#039;&#039;SourceChList&#039;&#039; is not empty). If &#039;&#039;BipolarChList&#039;&#039; is empty, then the standard referential recording montage is used. If a value of &#039;0&#039; is entered, then the reference channel is used for that channel. Finally, channel labels may be used.&lt;br /&gt;
&lt;br /&gt;
As an example, a sequential bipolar montage for 8 channels could be configured like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;2 3 4 5 6 7 8 1&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
meaning that channel 1 is referenced to channel 2, channel 2 is referenced to channel 3, and so on. For another example, 10 channels can be configured so that the first 6 are bipolar, and the last four are referential, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;C3 F3 C4 F4 Pz Oz 0 0 0 0&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===EnableDigitalInput===&lt;br /&gt;
Enable digital input. &lt;br /&gt;
If enabled, the sampled values of the digital input from the digital I/O ports will be stored in to states DigitalInput1 - DigitalInput64 depending on the number of amps connected and hardware versions. See [[:User Reference:gUSBampADC#Digital Input|Digital Input]] for more information.&lt;br /&gt;
&lt;br /&gt;
===EnableDigitalOutput===&lt;br /&gt;
Enable digital output. If enabled, the digital output is set to the values returned when the signals go through the expressions given by the Parameter DigitalOutputEx. See [[:User Reference:gUSBampADC#Digital Output|Digital Output]] for more information.&lt;br /&gt;
&lt;br /&gt;
===DigitalOutputEx===&lt;br /&gt;
If digital output is turned on, the given expressions will be evaluated for the current input. If the expression evaluates true the bit is set to high, else set to low. Each expression represents a different bit and the number starts with the master and is continuous through all amps like digital input. Boolean expressions work well for this ( ex. &amp;lt;tt&amp;gt;( ( StimulusCode == 0 ) &amp;amp;&amp;amp; Running )&amp;lt;/tt&amp;gt; ). See [[:User Reference:Expression Syntax|Expressions]] for more information on how to write expressions.&lt;br /&gt;
&lt;br /&gt;
===AcquisitionMode===&lt;br /&gt;
If set to &#039;&#039;analog signal acquisition&#039;&#039;, the g.USBamp records analog signal voltages (default). If set to &#039;&#039;Calibration&#039;&#039;, the signal output is a sine wave test signal generated by the g.USBamp (which can be used to verify correct system calibration). &lt;br /&gt;
If set to &#039;&#039;Impedance&#039;&#039;, regular analog signal acquisition is preceded by an impedance test. &lt;br /&gt;
This impedance test reports input impedances for each channel in kOhms. &lt;br /&gt;
In impedance mode, if the ground and reference is connected in the amp internally (using the &#039;&#039;CommonGround&#039;&#039; and &#039;&#039;CommonReference&#039;&#039; parameters), then you need to connect the ground and reference to block 4.&lt;br /&gt;
&lt;br /&gt;
===CommonGround===&lt;br /&gt;
This parameter determines whether the g.USBamp internally connects the GND inputs from all blocks together.&lt;br /&gt;
If enabled (default), then the signal ground only needs to be connected to one input block, e.g., block 1. &lt;br /&gt;
Otherwise, all GND inputs need to be externally connected.&lt;br /&gt;
&lt;br /&gt;
===CommonReference===&lt;br /&gt;
The same as &#039;&#039;CommonGround&#039;&#039;, except for the signal reference.&lt;br /&gt;
&lt;br /&gt;
==Digital I/O==&lt;br /&gt;
&lt;br /&gt;
===Digital Inputs===&lt;br /&gt;
Can be used with 1 - 8 gUSBamps.&lt;br /&gt;
&lt;br /&gt;
====gUSBamps with UA serial numbers====&lt;br /&gt;
Each gUSBamp has only one digital I/O port and this is stored in only one state per an gUSBamp. If multiple UA gUSBamps are connected in sync then up to state DigitalInput8 will be used, with the master gUSBamp using DigitalInput1 and the last slave gUSBamp using DigitalInput8 if 8 gUSBamps are used, or DigitalInput6 if only 6 gUSBamps are used. To access the digital input from any gUSBamp, access the state DigitalInput for the number of that slave gUSBamp. For example if I wanted to access the 5th gUSBamp, I would access DigitalInput5.&lt;br /&gt;
&lt;br /&gt;
====gUSBamps with UB serial numbers====&lt;br /&gt;
Each gUSBamp has two digital I/O ports which are stored in eight states per gUSBamp. If multiple UB gUSBamp are connected in sync then up to state DigitalInput64 will be used with the master gUSBamp using DigitalInput1 - DigitalInput8 and the last gUSBamp using DigitalInput57 - DigitalInput64 if 8 gUSBamps are used, and DigitalInput41 - DigitalInput48 if only 6 gUSBamps are used. To access the digital input from any gUSBamp, take the number of gUSBamps preceding the intended gUSBamp multiplied by 8, then add the number of the bit you want to see. For example, if I wanted to access the 5th gUSBamp&#039;s 5th bit, I would look at DigitalInput37 (4 * 8 + 5).&lt;br /&gt;
&lt;br /&gt;
====g.USBamps in sync with both UA and UB serial numbers====&lt;br /&gt;
The device specifications are the same as above and each gUSBamp only has the number of states designated to it as specified above, i.e. each UB gUSBamp has eight states and each UA gUSBamp has only one state. The numbering of the states are based on the order of the gUSBamps. For example, if we have the following setup: UB gUSBamp as master with slaves in the following order: UB UA UA UB UA UA, which gives a total of 7 gUSBamps using DigitalInput1 - DigitalInput24 (3 * 8 + 4 * 1).For example, to access the second UA gUSBamp (which has only one state), I would look at DigitalInput18, found by the number of UB gUSBamps preceding the second UA gUSBamp multiplied by 8 plus the number of UA gUSBamps preceding it plus one for the gUSBamp itself (2 * 8 + 1 + 1). To access the third UB gUSBamp&#039;s seventh bit, I would look at DigitalInput25. This was found in the same manner as above but because it is a UB gUSBamp the specific bit is added instead of just one (2 * 8 + 2 + 7).&lt;br /&gt;
&lt;br /&gt;
To setup a link between gUSBamps UA and UB, the following images show how to connect them.&lt;br /&gt;
&lt;br /&gt;
[[File:UAUBcombo.JPG]]&lt;br /&gt;
&lt;br /&gt;
[[File:UAUBmultiple.JPG]]&lt;br /&gt;
&lt;br /&gt;
===Digital Output===&lt;br /&gt;
Can be used with 1 - 8 gUSBamps.&lt;br /&gt;
&lt;br /&gt;
====gUSBamps with UA serial numbers====&lt;br /&gt;
Each gUSBamp has one digital I/O port giving it two digital output bits. If multiple UA gUSBamps are connected there are a total of 16 digital output bits possible. To write to these bits, Parameter DigitalOutputEx must be filled. Each row correlates to a bit. The numbering of the bits start with 1 and 2 being the master gUSBamp and continues numbering until the eighth gUSBamp having bit 15 and 16. To determine which row to use, the bit is found by taking the number of amgUSBampsps preceding the intended gUSBamp in the chain multiplied by two and then add the number of the bit you want to write for. For example, the second bit of the fourth gUSBamp is row 8 (3 * 2 + 2).&lt;br /&gt;
&lt;br /&gt;
====gUSBamps with UB serial numbers====&lt;br /&gt;
Each gUSBamp has two digital I/O ports giving it four digital output bits. If multiple UB gUSBamps are connected, that gives a total of 32 digital output bits possible. To write to these bits, Parameter DigitalOutputEx must be filled. Each row corresponds to a bit. The numbering of the bits start with 1 - 4 being the master gUSBamp and continues numbering until the eighth gUSBamp having bits 29 - 32. To figure out which row to use, the formula is the number of gUSBamps preceding the intended gUSBamp in the chain multiplied by four and then add the number of the bit you want to write for. For example the second bit of the fourth gUSBamp is row 14 (3 * 4 + 2).&lt;br /&gt;
&lt;br /&gt;
====gUSBamps in sync with both UA and UB serial numbers====&lt;br /&gt;
The device specs are the same as above with each UA gUSBamp having two digital output bits and each UB gUSBamp having four digital output bits. To write the proper row, the order of the gUSBamps matter just like digital input. For example we have the setup of UB gUSBamp as master with the slaves in the following order: UB UA UA UB UA UA, which gives a total of 7 gUSBamps having a total of 20 digital output bits. To find the row that corresponds with the bit you want to write for, take the number of UB gUSBamps preceding the intended gUSBamp in the chain multiplied by 4 and add the number of UA gUSBamps preceding the intended gUSBamp in the chain multiplied by 2 and add the number of the bit you want. For example to write the expression for the second UA gUSBamp&#039;s first bit, I would write the expression in row 11 (2 * 4 + 1 * 2 + 1). For example to write the expression for the third UB gUSBamp&#039;s third bit, I would write the expression in row 15 (2 * 4 + 2 * 2 + 3).&lt;br /&gt;
&lt;br /&gt;
==States==&lt;br /&gt;
&lt;br /&gt;
===DigitalInput===&lt;br /&gt;
DigitalInput ranges from DigitalInput1 - DigitalInput64 (see [[:User Reference:gUSBampADC#Digital Input|Digital Input]] for explanation) and the values are either a 0 or a 1.&lt;br /&gt;
&lt;br /&gt;
==Additional Information==&lt;br /&gt;
&lt;br /&gt;
===Using 32bit Executables on 64bit Installations===&lt;br /&gt;
BCI2000 supports compilation of the gUSBamp source module for 64bit targets. The resulting executable will run on 64bit systems, and work with the 64bit version of the gUSBamp drivers. However, the binary distribution of BCI2000 contains 32bit executables. These run fine under 64bit systems, but you will need to perform these additional driver installation steps to install 32bit gUSBamp API DLLs on 64bit systems:&lt;br /&gt;
*Execute gtec&#039;s 32bit driver installer on your 64bit system.&lt;br /&gt;
*After successful installation, execute gtec&#039;s 64bit driver installer on your 64bit system.&lt;br /&gt;
*You will now have both the 32bit API DLL and the 64bit API DLL installed, such that both 32bit and 64bit executables will be able to connect to a gUSBamp attached to the system&#039;s USB ports.&lt;br /&gt;
&lt;br /&gt;
===Data Storage===&lt;br /&gt;
Unlike other systems, the USBamp is a DC amplifier system that digitizes at 24 bit. &lt;br /&gt;
Bandpass and notch filtering is performed on the digitized samples, resulting in floating point signal samples in units of &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt;.&lt;br /&gt;
BCI2000 currently supports signed 16 bit integers and floating point numbers for its data storage.&lt;br /&gt;
If &#039;&#039;SignalType&#039;&#039; is set to int16, the floating point values have to be converted back into integers before they can be stored and transmitted to Signal Processing.&lt;br /&gt;
This is done by the following transformation: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathrm{sample}_\mathrm{stored}\mathrm{(A/D\,units)}=\frac{\mathrm{sample}_\mathrm{acquired}(\mu V)}\mathrm{SourceChGain}&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
(&#039;&#039;SourceChOffset&#039;&#039; is assumed (and required) to be zero for all channels.) &lt;br /&gt;
BCI2000 Signal Processing or any offline analysis routine can derive, as with &lt;br /&gt;
any other BCI2000 source module, sample values in &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt; by subtracting, from &lt;br /&gt;
each stored sample, &#039;&#039;SourceChOffset&#039;&#039; (i.e., zero), and multiplying it with &lt;br /&gt;
&#039;&#039;SourceChGain&#039;&#039; for each channel. If &#039;&#039;SignalType&#039;&#039; is set to float32,&lt;br /&gt;
data samples are stored in units of &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt;. In this case, &#039;&#039;SourceChGain&#039;&#039; should be&lt;br /&gt;
a list of 1&#039;s (because the conversion factor between data samples into &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt; is&lt;br /&gt;
1.0 for each channel).&lt;br /&gt;
&lt;br /&gt;
Still, when values other than 0 and 1 are specified, a consistent data file will be produced, i.e. values will be transformed before they are written to the file, such that applying SourceChOffset and SourceChGain will reproduce the original values in &amp;lt;math&amp;gt;\mu V&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===The &#039;&#039;USBampgetinfo&#039;&#039; Command Line Tool===&lt;br /&gt;
This command line tool displays all connected USBamps, including their serial &lt;br /&gt;
number and the USB port that they connect to. Further, this tool reads, for the &lt;br /&gt;
first of the connected amplifiers, all supported bandpass and notch filter &lt;br /&gt;
configurations. Thus, this tool can be used to determine which filters can be &lt;br /&gt;
used for a particular sampling frequency within BCI2000. The following is an &lt;br /&gt;
example screen output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*******************************************&lt;br /&gt;
BCI2000 Information Tool for g.USBamp&lt;br /&gt;
*******************************************&lt;br /&gt;
(C)2004 Gerwin Schalk&lt;br /&gt;
	 Wadsworth Center&lt;br /&gt;
	 New York State Department of Health&lt;br /&gt;
	 Albany, NY, USA&lt;br /&gt;
*******************************************&lt;br /&gt;
Amp found at USB address 1 (S/N: UA-200X.XX.XX)&lt;br /&gt;
Printing info for first amp (USB address 1)&lt;br /&gt;
&lt;br /&gt;
Available bandpass filters&lt;br /&gt;
===================================&lt;br /&gt;
num| hpfr  | lpfreq |  sfr | or | type&lt;br /&gt;
===================================&lt;br /&gt;
000|  0.10 |    0.0 |   32 |  8 | 1&lt;br /&gt;
001|  1.00 |    0.0 |   32 |  8 | 1&lt;br /&gt;
002|  2.00 |    0.0 |   32 |  8 | 1&lt;br /&gt;
003|  5.00 |    0.0 |   32 |  8 | 1&lt;br /&gt;
004|  0.00 |   15.0 |   32 |  8 | 1&lt;br /&gt;
005|  0.01 |   15.0 |   32 |  8 | 1&lt;br /&gt;
006|  0.10 |   15.0 |   32 |  8 | 1&lt;br /&gt;
007|  0.50 |   15.0 |   32 |  8 | 1&lt;br /&gt;
008|  2.00 |   15.0 |   32 |  8 | 1&lt;br /&gt;
009|  0.10 |    0.0 |   64 |  8 | 1&lt;br /&gt;
010|  1.00 |    0.0 |   64 |  8 | 1&lt;br /&gt;
011|  2.00 |    0.0 |   64 |  8 | 1&lt;br /&gt;
012|  5.00 |    0.0 |   64 |  8 | 1&lt;br /&gt;
013|  0.00 |   30.0 |   64 |  8 | 1&lt;br /&gt;
014|  0.01 |   30.0 |   64 |  8 | 1&lt;br /&gt;
015|  0.10 |   30.0 |   64 |  8 | 1&lt;br /&gt;
016|  0.50 |   30.0 |   64 |  8 | 1&lt;br /&gt;
017|  2.00 |   30.0 |   64 |  8 | 1&lt;br /&gt;
018|  0.10 |    0.0 |  128 |  8 | 1&lt;br /&gt;
019|  1.00 |    0.0 |  128 |  8 | 1&lt;br /&gt;
020|  2.00 |    0.0 |  128 |  8 | 1&lt;br /&gt;
021|  5.00 |    0.0 |  128 |  8 | 1&lt;br /&gt;
022|  0.00 |   30.0 |  128 |  8 | 1&lt;br /&gt;
023|  0.00 |   60.0 |  128 |  8 | 1&lt;br /&gt;
024|  0.01 |   30.0 |  128 |  8 | 1&lt;br /&gt;
025|  0.01 |   60.0 |  128 |  8 | 1&lt;br /&gt;
026|  0.10 |   30.0 |  128 |  8 | 1&lt;br /&gt;
027|  0.10 |   60.0 |  128 |  8 | 1&lt;br /&gt;
028|  0.50 |   30.0 |  128 |  8 | 1&lt;br /&gt;
029|  0.50 |   60.0 |  128 |  8 | 1&lt;br /&gt;
030|  2.00 |   30.0 |  128 |  8 | 1&lt;br /&gt;
031|  2.00 |   60.0 |  128 |  8 | 1&lt;br /&gt;
032|  0.10 |    0.0 |  256 |  8 | 1&lt;br /&gt;
033|  1.00 |    0.0 |  256 |  8 | 1&lt;br /&gt;
034|  2.00 |    0.0 |  256 |  8 | 1&lt;br /&gt;
035|  5.00 |    0.0 |  256 |  8 | 1&lt;br /&gt;
036|  0.00 |   30.0 |  256 |  8 | 1&lt;br /&gt;
037|  0.00 |   60.0 |  256 |  8 | 1&lt;br /&gt;
038|  0.00 |  100.0 |  256 |  8 | 1&lt;br /&gt;
039|  0.01 |   30.0 |  256 |  6 | 1&lt;br /&gt;
040|  0.01 |   60.0 |  256 |  8 | 1&lt;br /&gt;
041|  0.01 |  100.0 |  256 |  8 | 1&lt;br /&gt;
042|  0.10 |   30.0 |  256 |  8 | 1&lt;br /&gt;
043|  0.10 |   60.0 |  256 |  8 | 1&lt;br /&gt;
044|  0.10 |  100.0 |  256 |  8 | 1&lt;br /&gt;
045|  0.50 |   30.0 |  256 |  8 | 1&lt;br /&gt;
046|  0.50 |   60.0 |  256 |  8 | 1&lt;br /&gt;
047|  0.50 |  100.0 |  256 |  8 | 1&lt;br /&gt;
048|  2.00 |   30.0 |  256 |  8 | 1&lt;br /&gt;
049|  2.00 |   60.0 |  256 |  8 | 1&lt;br /&gt;
050|  2.00 |  100.0 |  256 |  8 | 1&lt;br /&gt;
051|  5.00 |   30.0 |  256 |  8 | 1&lt;br /&gt;
052|  5.00 |   60.0 |  256 |  8 | 1&lt;br /&gt;
053|  5.00 |  100.0 |  256 |  8 | 1&lt;br /&gt;
054|  0.10 |    0.0 |  512 |  8 | 1&lt;br /&gt;
055|  1.00 |    0.0 |  512 |  8 | 1&lt;br /&gt;
056|  2.00 |    0.0 |  512 |  8 | 1&lt;br /&gt;
057|  5.00 |    0.0 |  512 |  8 | 1&lt;br /&gt;
058|  0.00 |   30.0 |  512 |  8 | 1&lt;br /&gt;
059|  0.00 |   60.0 |  512 |  8 | 1&lt;br /&gt;
060|  0.00 |  100.0 |  512 |  8 | 1&lt;br /&gt;
061|  0.00 |  200.0 |  512 |  8 | 1&lt;br /&gt;
062|  0.01 |   30.0 |  512 |  6 | 1&lt;br /&gt;
063|  0.01 |   60.0 |  512 |  6 | 1&lt;br /&gt;
064|  0.01 |  100.0 |  512 |  6 | 1&lt;br /&gt;
065|  0.01 |  200.0 |  512 |  8 | 1&lt;br /&gt;
066|  0.10 |   30.0 |  512 |  8 | 1&lt;br /&gt;
067|  0.10 |   60.0 |  512 |  8 | 1&lt;br /&gt;
068|  0.10 |  100.0 |  512 |  8 | 1&lt;br /&gt;
069|  0.10 |  200.0 |  512 |  8 | 1&lt;br /&gt;
070|  0.50 |   30.0 |  512 |  8 | 1&lt;br /&gt;
071|  0.50 |   60.0 |  512 |  8 | 1&lt;br /&gt;
072|  0.50 |  100.0 |  512 |  8 | 1&lt;br /&gt;
073|  0.50 |  200.0 |  512 |  8 | 1&lt;br /&gt;
074|  2.00 |   30.0 |  512 |  8 | 1&lt;br /&gt;
075|  2.00 |   60.0 |  512 |  8 | 1&lt;br /&gt;
076|  2.00 |  100.0 |  512 |  8 | 1&lt;br /&gt;
077|  2.00 |  200.0 |  512 |  8 | 1&lt;br /&gt;
078|  5.00 |   30.0 |  512 |  8 | 1&lt;br /&gt;
079|  5.00 |   60.0 |  512 |  8 | 1&lt;br /&gt;
080|  5.00 |  100.0 |  512 |  8 | 1&lt;br /&gt;
081|  5.00 |  200.0 |  512 |  8 | 1&lt;br /&gt;
082|  0.10 |    0.0 |  600 |  8 | 1&lt;br /&gt;
083|  1.00 |    0.0 |  600 |  8 | 1&lt;br /&gt;
084|  2.00 |    0.0 |  600 |  8 | 1&lt;br /&gt;
085|  5.00 |    0.0 |  600 |  8 | 1&lt;br /&gt;
086|  0.00 |   30.0 |  600 |  8 | 1&lt;br /&gt;
087|  0.00 |   60.0 |  600 |  8 | 1&lt;br /&gt;
088|  0.00 |  100.0 |  600 |  8 | 1&lt;br /&gt;
089|  0.00 |  200.0 |  600 |  8 | 1&lt;br /&gt;
090|  0.00 |  250.0 |  600 |  8 | 1&lt;br /&gt;
091|  0.01 |   60.0 |  600 |  6 | 1&lt;br /&gt;
092|  0.01 |  100.0 |  600 |  6 | 1&lt;br /&gt;
093|  0.01 |  200.0 |  600 |  6 | 1&lt;br /&gt;
094|  0.01 |  250.0 |  600 |  8 | 1&lt;br /&gt;
095|  0.10 |   60.0 |  600 |  8 | 1&lt;br /&gt;
096|  0.10 |  100.0 |  600 |  8 | 1&lt;br /&gt;
097|  0.10 |  200.0 |  600 |  8 | 1&lt;br /&gt;
098|  0.10 |  250.0 |  600 |  8 | 1&lt;br /&gt;
099|  0.50 |   30.0 |  600 |  8 | 1&lt;br /&gt;
100|  0.50 |   60.0 |  600 |  8 | 1&lt;br /&gt;
101|  0.50 |  100.0 |  600 |  8 | 1&lt;br /&gt;
102|  0.50 |  200.0 |  600 |  8 | 1&lt;br /&gt;
103|  0.50 |  250.0 |  600 |  8 | 1&lt;br /&gt;
104|  2.00 |   30.0 |  600 |  8 | 1&lt;br /&gt;
105|  2.00 |   60.0 |  600 |  8 | 1&lt;br /&gt;
106|  2.00 |  100.0 |  600 |  8 | 1&lt;br /&gt;
107|  2.00 |  200.0 |  600 |  8 | 1&lt;br /&gt;
108|  2.00 |  250.0 |  600 |  8 | 1&lt;br /&gt;
109|  5.00 |   30.0 |  600 |  8 | 1&lt;br /&gt;
110|  5.00 |   60.0 |  600 |  8 | 1&lt;br /&gt;
111|  5.00 |  100.0 |  600 |  8 | 1&lt;br /&gt;
112|  5.00 |  200.0 |  600 |  8 | 1&lt;br /&gt;
113|  5.00 |  250.0 |  600 |  8 | 1&lt;br /&gt;
114|  0.10 |    0.0 | 1200 |  8 | 1&lt;br /&gt;
115|  1.00 |    0.0 | 1200 |  8 | 1&lt;br /&gt;
116|  2.00 |    0.0 | 1200 |  8 | 1&lt;br /&gt;
117|  5.00 |    0.0 | 1200 |  8 | 1&lt;br /&gt;
118|  0.00 |   30.0 | 1200 |  8 | 1&lt;br /&gt;
119|  0.00 |   60.0 | 1200 |  8 | 1&lt;br /&gt;
120|  0.00 |  100.0 | 1200 |  8 | 1&lt;br /&gt;
121|  0.00 |  200.0 | 1200 |  8 | 1&lt;br /&gt;
122|  0.00 |  250.0 | 1200 |  8 | 1&lt;br /&gt;
123|  0.00 |  500.0 | 1200 |  8 | 1&lt;br /&gt;
124|  0.01 |  100.0 | 1200 |  6 | 1&lt;br /&gt;
125|  0.01 |  200.0 | 1200 |  6 | 1&lt;br /&gt;
126|  0.01 |  250.0 | 1200 |  6 | 1&lt;br /&gt;
127|  0.01 |  500.0 | 1200 |  6 | 1&lt;br /&gt;
128|  0.10 |  100.0 | 1200 |  6 | 1&lt;br /&gt;
129|  0.10 |  200.0 | 1200 |  8 | 1&lt;br /&gt;
130|  0.10 |  250.0 | 1200 |  8 | 1&lt;br /&gt;
131|  0.10 |  500.0 | 1200 |  8 | 1&lt;br /&gt;
132|  0.50 |  100.0 | 1200 |  8 | 1&lt;br /&gt;
133|  0.50 |  200.0 | 1200 |  8 | 1&lt;br /&gt;
134|  0.50 |  250.0 | 1200 |  8 | 1&lt;br /&gt;
135|  0.50 |  500.0 | 1200 |  8 | 1&lt;br /&gt;
136|  2.00 |  100.0 | 1200 |  8 | 1&lt;br /&gt;
137|  2.00 |  200.0 | 1200 |  8 | 1&lt;br /&gt;
138|  2.00 |  250.0 | 1200 |  8 | 1&lt;br /&gt;
139|  2.00 |  500.0 | 1200 |  8 | 1&lt;br /&gt;
140|  5.00 |  100.0 | 1200 |  8 | 1&lt;br /&gt;
141|  5.00 |  200.0 | 1200 |  8 | 1&lt;br /&gt;
142|  5.00 |  250.0 | 1200 |  8 | 1&lt;br /&gt;
143|  5.00 |  500.0 | 1200 |  8 | 1&lt;br /&gt;
144|  0.10 |    0.0 | 2400 |  8 | 1&lt;br /&gt;
145|  1.00 |    0.0 | 2400 |  8 | 1&lt;br /&gt;
146|  2.00 |    0.0 | 2400 |  8 | 1&lt;br /&gt;
147|  5.00 |    0.0 | 2400 |  8 | 1&lt;br /&gt;
148|  0.00 |   30.0 | 2400 |  8 | 1&lt;br /&gt;
149|  0.00 |   60.0 | 2400 |  8 | 1&lt;br /&gt;
150|  0.00 |  100.0 | 2400 |  8 | 1&lt;br /&gt;
151|  0.00 |  200.0 | 2400 |  8 | 1&lt;br /&gt;
152|  0.00 |  250.0 | 2400 |  8 | 1&lt;br /&gt;
153|  0.00 |  500.0 | 2400 |  8 | 1&lt;br /&gt;
154|  0.00 | 1000.0 | 2400 |  8 | 1&lt;br /&gt;
155|  0.01 |  200.0 | 2400 |  4 | 1&lt;br /&gt;
156|  0.01 |  250.0 | 2400 |  6 | 1&lt;br /&gt;
157|  0.01 |  500.0 | 2400 |  6 | 1&lt;br /&gt;
158|  0.01 | 1000.0 | 2400 |  6 | 1&lt;br /&gt;
159|  0.10 |  200.0 | 2400 |  6 | 1&lt;br /&gt;
160|  0.10 |  250.0 | 2400 |  6 | 1&lt;br /&gt;
161|  0.10 |  500.0 | 2400 |  8 | 1&lt;br /&gt;
162|  0.10 | 1000.0 | 2400 |  8 | 1&lt;br /&gt;
163|  0.50 |  200.0 | 2400 |  8 | 1&lt;br /&gt;
164|  0.50 |  250.0 | 2400 |  8 | 1&lt;br /&gt;
165|  0.50 |  500.0 | 2400 |  8 | 1&lt;br /&gt;
166|  0.50 | 1000.0 | 2400 |  8 | 1&lt;br /&gt;
167|  2.00 |  200.0 | 2400 |  8 | 1&lt;br /&gt;
168|  2.00 |  250.0 | 2400 |  8 | 1&lt;br /&gt;
169|  2.00 |  500.0 | 2400 |  8 | 1&lt;br /&gt;
170|  2.00 | 1000.0 | 2400 |  8 | 1&lt;br /&gt;
171|  5.00 |  200.0 | 2400 |  8 | 1&lt;br /&gt;
172|  5.00 |  250.0 | 2400 |  8 | 1&lt;br /&gt;
173|  5.00 |  500.0 | 2400 |  8 | 1&lt;br /&gt;
174|  5.00 | 1000.0 | 2400 |  8 | 1&lt;br /&gt;
175|  0.10 |    0.0 | 4800 |  6 | 1&lt;br /&gt;
176|  1.00 |    0.0 | 4800 |  8 | 1&lt;br /&gt;
177|  2.00 |    0.0 | 4800 |  8 | 1&lt;br /&gt;
178|  5.00 |    0.0 | 4800 |  8 | 1&lt;br /&gt;
179|  0.00 |   30.0 | 4800 |  8 | 1&lt;br /&gt;
180|  0.00 |   60.0 | 4800 |  8 | 1&lt;br /&gt;
181|  0.00 |  100.0 | 4800 |  8 | 1&lt;br /&gt;
182|  0.00 |  200.0 | 4800 |  8 | 1&lt;br /&gt;
183|  0.00 |  250.0 | 4800 |  8 | 1&lt;br /&gt;
184|  0.00 |  500.0 | 4800 |  8 | 1&lt;br /&gt;
185|  0.00 | 1000.0 | 4800 |  8 | 1&lt;br /&gt;
186|  0.00 | 2000.0 | 4800 |  8 | 1&lt;br /&gt;
187|  0.01 |  500.0 | 4800 |  6 | 1&lt;br /&gt;
188|  0.01 | 1000.0 | 4800 |  6 | 1&lt;br /&gt;
189|  0.01 | 2000.0 | 4800 |  6 | 1&lt;br /&gt;
190|  0.10 |  500.0 | 4800 |  6 | 1&lt;br /&gt;
191|  0.10 | 1000.0 | 4800 |  6 | 1&lt;br /&gt;
192|  0.10 | 2000.0 | 4800 |  8 | 1&lt;br /&gt;
193|  0.50 |  500.0 | 4800 |  8 | 1&lt;br /&gt;
194|  0.50 | 1000.0 | 4800 |  8 | 1&lt;br /&gt;
195|  0.50 | 2000.0 | 4800 |  8 | 1&lt;br /&gt;
196|  2.00 |  500.0 | 4800 |  8 | 1&lt;br /&gt;
197|  2.00 | 1000.0 | 4800 |  8 | 1&lt;br /&gt;
198|  2.00 | 2000.0 | 4800 |  8 | 1&lt;br /&gt;
199|  5.00 |  500.0 | 4800 |  8 | 1&lt;br /&gt;
200|  5.00 | 1000.0 | 4800 |  8 | 1&lt;br /&gt;
201|  5.00 | 2000.0 | 4800 |  8 | 1&lt;br /&gt;
&lt;br /&gt;
Available notch filters&lt;br /&gt;
===================================&lt;br /&gt;
num| hpfr  | lpfreq |  sfr | or | type&lt;br /&gt;
===================================&lt;br /&gt;
000| 48.00 |   52.0 |  128 |  4 | 1&lt;br /&gt;
001| 58.00 |   62.0 |  128 |  4 | 1&lt;br /&gt;
002| 48.00 |   52.0 |  256 |  4 | 1&lt;br /&gt;
003| 58.00 |   62.0 |  256 |  4 | 1&lt;br /&gt;
004| 48.00 |   52.0 |  512 |  4 | 1&lt;br /&gt;
005| 58.00 |   62.0 |  512 |  4 | 1&lt;br /&gt;
006| 48.00 |   52.0 |  600 |  4 | 1&lt;br /&gt;
007| 58.00 |   62.0 |  600 |  4 | 1&lt;br /&gt;
008| 48.00 |   52.0 | 1200 |  4 | 1&lt;br /&gt;
009| 58.00 |   62.0 | 1200 |  4 | 1&lt;br /&gt;
010| 48.00 |   52.0 | 2400 |  4 | 1&lt;br /&gt;
011| 58.00 |   62.0 | 2400 |  4 | 1&lt;br /&gt;
012| 48.00 |   52.0 | 4800 |  4 | 1&lt;br /&gt;
013| 58.00 |   62.0 | 4800 |  4 | 1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[User Reference:DataIOFilter]], [[Programming Reference:GenericADC Class]]&lt;br /&gt;
[[Category:Filters]][[Category:Data Acquisition]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=File:UAUBmultiple.JPG&amp;diff=7517</id>
		<title>File:UAUBmultiple.JPG</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=File:UAUBmultiple.JPG&amp;diff=7517"/>
		<updated>2015-06-30T19:50:35Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: Image how to setup multiple gUSBamp in sync of two different versions.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Image how to setup multiple gUSBamp in sync of two different versions.&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=File:UAUBcombo.JPG&amp;diff=7516</id>
		<title>File:UAUBcombo.JPG</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=File:UAUBcombo.JPG&amp;diff=7516"/>
		<updated>2015-06-30T19:50:09Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: Image how to setup gUSBamp in sync of two different versions.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Image how to setup gUSBamp in sync of two different versions.&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=Contributions:ParallelPortFilter&amp;diff=7515</id>
		<title>Contributions:ParallelPortFilter</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=Contributions:ParallelPortFilter&amp;diff=7515"/>
		<updated>2015-06-30T19:27:17Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Example Configurations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/contrib/Extensions/ParallelPortFilter&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
&lt;br /&gt;
===Authors===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com)&lt;br /&gt;
&lt;br /&gt;
===Version History===&lt;br /&gt;
* 2015/06/30: Initial public release&lt;br /&gt;
&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: --&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
This simple filter extension resides in the Application module and makes input and output with the parallel port easy. The inputs are stored as states ParallelPortInput1 - ParallelPortInput24 based off the number of ports connected. For more information, see [[:Contributions:ParallelPortFilter#States|States]].&lt;br /&gt;
&lt;br /&gt;
==Integration into BCI2000==&lt;br /&gt;
Compile the extension into your source module by enabling contributed extensions in your CMake configuration.  You can do this by going into your root build folder and deleting &amp;lt;code&amp;gt;CMakeCache.txt&amp;lt;/code&amp;gt; and re-running the project batch file, or by running &amp;lt;code&amp;gt;cmake -i&amp;lt;/code&amp;gt; and enabling &#039;&#039;&#039;BUILD_PARALLELPORTFILTER&#039;&#039;&#039;.  Once the extension is built into the source module, it can be used.&lt;br /&gt;
&lt;br /&gt;
==Configuring ParallelPortFiler==&lt;br /&gt;
If using the filter, SourcePorts must have a number greater than 0. Then list the names for the ports separated by spaces in SourcePortsList. The list must be the same length as the value in SourcePorts. You can then set the LPTMapping with column one in using the names as in SourcePortsList and column 2 using the corresponding hardware address. This step is optional. If not configured, LPT1 maps to 0x378 and LPT2 maps to 0x278 which should work for most users. DigitalOutputEx is only necessary if user wants to write output through the parallel port.&lt;br /&gt;
&lt;br /&gt;
If the default settings for LPTMapping did not produce results, the hardware address might be different for the user&#039;s computer. To find the hardware address for the parallel ports for your machine, press &#039;&#039;&#039;WIN&#039;&#039;&#039; + &#039;&#039;&#039;R&#039;&#039;&#039; and enter &#039;&#039;devmgmt.msc&#039;&#039;. In Device Manager, expand the section labeled &#039;&#039;&#039;Ports (Com &amp;amp; LPT)&#039;&#039;&#039;. If this section does not exist, you probably do not have LPT ports or the driver is not installed properly. Find the one labeled with (LPT1) or whatever port you are looking for. Right click and select Properties. In the Resources tab, there is a field called I/O Range and take the first value of the range which is in hexadecimal. If multiple I/O Range, read the first one; if that does not work, try the other one. Take that value as the hardware address for Parameter LPTMapping. These instructions for finding the address has been tested on Windows XP, 7, and 8.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortAddress.JPG]]&lt;br /&gt;
&lt;br /&gt;
For some examples on configurations, see [[:Contributions:ParallelPortFilter#Example Configurations|Example Configurations]].&lt;br /&gt;
&lt;br /&gt;
For better explanation of the parameters, see [[:Contributions:ParallelPortFilter#Parameters|Parameters]].&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
The ParallelPortFilter is configured in the ParallelPort tab.  The configurable parameters are:&lt;br /&gt;
&lt;br /&gt;
===SourcePorts===&lt;br /&gt;
This parameter is used to initialize the filter and to keep track of the number of ports being used. This number should be the total number of parallel ports that should be used to communicate. It should be an integer value greater than 0 if being used else 0. Most computers do not have more than 3 parallel ports but some have 4. In good practice this value should not be greater than 3 unless you are sure you have that many ports.&lt;br /&gt;
&lt;br /&gt;
===SourcePortsList===&lt;br /&gt;
This parameter lists the ports to be used and the order to communicate through them. It should be a list of the port names LPT1 - LPT3. You can not use the same port twice in on list. This list must be the same length as the value in Parameter SourcePorts.&lt;br /&gt;
&lt;br /&gt;
===LPTMapping===&lt;br /&gt;
This parameter is to manually enter the hardware address of the ports incase that the computer being used does not conform to general use hardware addresses. Column one should have the names of the ports such as LPT1 or LPT2, same as the values in Parameter SourcePortsList, and column two should have the hexadecimal value of the port such as 0x378. The number of rows in the matrix should be equal to the value in Parameter SourcePorts, while it must have two columns if being used, no more, no less.&lt;br /&gt;
&lt;br /&gt;
===DigitalOutputEx===&lt;br /&gt;
This matrix of expressions that controls the outputs on the parallel ports.  Each port has 8 bits which correspond to 8 rows on the matrix. If the expression evaluates to True, the bit will be set to 1 else to 0. Boolean expression work quite well here. For more information on digital output and expressions usage for ParallelPortFilter see [[::Contributions:ParallelPortFilter#Digital Output|Digital Output]].&lt;br /&gt;
&lt;br /&gt;
==Digital Output==&lt;br /&gt;
Each port has 8 bits that can be written to. These bits can be accessed through the Parameter DigitalOutputEx. The user must write expressions for each individual bit on each port. The row label corresponds to which bit it will be written to. If multiple ports are enabled, row 1 - 8 correspond to the bits 1 - 8 on the first port and row 9 - 16 correspond to the bits 1 - 8 on the second port and so on. Expressions that evaluate to True set the corresponding bit to 1 and those that evaluate to False set the corresponding bit to 0.&lt;br /&gt;
&lt;br /&gt;
In the case that the user wishes to send an signal or a value through the port, the user must convert the number into binary and write the corresponding zeroes and ones to the respective bits. To do that, the formula: &lt;br /&gt;
&amp;lt;code&amp;gt;mod((floor(x / 2 ^(bitnumber - 1))), 2)&amp;lt;/code&amp;gt;. The x is the number or the signal the user wishes to send through the port. For example if the number 193 was to be sent through the port, the Parameter DigitalOutputEx would be:&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterDigitalOutExBinary.jpg]]&lt;br /&gt;
&lt;br /&gt;
Not all rows have to be created. Any row not named just writes the bit as 0. The rows also can be written in whatever order if you just change the row label in the parameter. The example below just sets bit 1 and 5 to 1. All other rows are zeroes.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterRowLabelChange.jpg]]&lt;br /&gt;
&lt;br /&gt;
For more on expressions, see [[:User Reference:Expression Syntax|Expressions]].&lt;br /&gt;
&lt;br /&gt;
==States==&lt;br /&gt;
For each port there is 8 input bits which correspond to 8 ParallelPortInput states. Each state is either a 0 or a 1. If multiple ports are enabled, ParallelPortInput1 - ParallelPortInput8 correspond to the bits 1 - 8 on the first port and ParallelPortInput9 - ParallelPortInput16 correspond to the bits 1 - 8 on the second port and so on. Currently only 3 ports may be enabled, which should be more than enough for most computers do not have more than port LPT1 - LPT3.&lt;br /&gt;
&lt;br /&gt;
==Example Configurations==&lt;br /&gt;
This example enables port LPT1 with default address and send the value 193 through it.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterDefault.jpg|1000px]]&lt;br /&gt;
&lt;br /&gt;
This example enables port LPT1 with a new hardware address.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterNewAddress.jpg|1000px]]&lt;br /&gt;
&lt;br /&gt;
This example enables ports with names MRIScanner and StimulusDevice with hardware addresses. Note that the address for the ports are the same as the default values for LPT1 and LPT2. This shows that LPT names can be renamed in the Parameter Configuration to make it easier to read. This does not change the names of the addresses given by the computer itself.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterNewNames.jpg|1000px]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=Contributions:ParallelPortFilter&amp;diff=7514</id>
		<title>Contributions:ParallelPortFilter</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=Contributions:ParallelPortFilter&amp;diff=7514"/>
		<updated>2015-06-30T19:25:57Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/contrib/Extensions/ParallelPortFilter&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
&lt;br /&gt;
===Authors===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com)&lt;br /&gt;
&lt;br /&gt;
===Version History===&lt;br /&gt;
* 2015/06/30: Initial public release&lt;br /&gt;
&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: --&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
This simple filter extension resides in the Application module and makes input and output with the parallel port easy. The inputs are stored as states ParallelPortInput1 - ParallelPortInput24 based off the number of ports connected. For more information, see [[:Contributions:ParallelPortFilter#States|States]].&lt;br /&gt;
&lt;br /&gt;
==Integration into BCI2000==&lt;br /&gt;
Compile the extension into your source module by enabling contributed extensions in your CMake configuration.  You can do this by going into your root build folder and deleting &amp;lt;code&amp;gt;CMakeCache.txt&amp;lt;/code&amp;gt; and re-running the project batch file, or by running &amp;lt;code&amp;gt;cmake -i&amp;lt;/code&amp;gt; and enabling &#039;&#039;&#039;BUILD_PARALLELPORTFILTER&#039;&#039;&#039;.  Once the extension is built into the source module, it can be used.&lt;br /&gt;
&lt;br /&gt;
==Configuring ParallelPortFiler==&lt;br /&gt;
If using the filter, SourcePorts must have a number greater than 0. Then list the names for the ports separated by spaces in SourcePortsList. The list must be the same length as the value in SourcePorts. You can then set the LPTMapping with column one in using the names as in SourcePortsList and column 2 using the corresponding hardware address. This step is optional. If not configured, LPT1 maps to 0x378 and LPT2 maps to 0x278 which should work for most users. DigitalOutputEx is only necessary if user wants to write output through the parallel port.&lt;br /&gt;
&lt;br /&gt;
If the default settings for LPTMapping did not produce results, the hardware address might be different for the user&#039;s computer. To find the hardware address for the parallel ports for your machine, press &#039;&#039;&#039;WIN&#039;&#039;&#039; + &#039;&#039;&#039;R&#039;&#039;&#039; and enter &#039;&#039;devmgmt.msc&#039;&#039;. In Device Manager, expand the section labeled &#039;&#039;&#039;Ports (Com &amp;amp; LPT)&#039;&#039;&#039;. If this section does not exist, you probably do not have LPT ports or the driver is not installed properly. Find the one labeled with (LPT1) or whatever port you are looking for. Right click and select Properties. In the Resources tab, there is a field called I/O Range and take the first value of the range which is in hexadecimal. If multiple I/O Range, read the first one; if that does not work, try the other one. Take that value as the hardware address for Parameter LPTMapping. These instructions for finding the address has been tested on Windows XP, 7, and 8.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortAddress.JPG]]&lt;br /&gt;
&lt;br /&gt;
For some examples on configurations, see [[:Contributions:ParallelPortFilter#Example Configurations|Example Configurations]].&lt;br /&gt;
&lt;br /&gt;
For better explanation of the parameters, see [[:Contributions:ParallelPortFilter#Parameters|Parameters]].&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
The ParallelPortFilter is configured in the ParallelPort tab.  The configurable parameters are:&lt;br /&gt;
&lt;br /&gt;
===SourcePorts===&lt;br /&gt;
This parameter is used to initialize the filter and to keep track of the number of ports being used. This number should be the total number of parallel ports that should be used to communicate. It should be an integer value greater than 0 if being used else 0. Most computers do not have more than 3 parallel ports but some have 4. In good practice this value should not be greater than 3 unless you are sure you have that many ports.&lt;br /&gt;
&lt;br /&gt;
===SourcePortsList===&lt;br /&gt;
This parameter lists the ports to be used and the order to communicate through them. It should be a list of the port names LPT1 - LPT3. You can not use the same port twice in on list. This list must be the same length as the value in Parameter SourcePorts.&lt;br /&gt;
&lt;br /&gt;
===LPTMapping===&lt;br /&gt;
This parameter is to manually enter the hardware address of the ports incase that the computer being used does not conform to general use hardware addresses. Column one should have the names of the ports such as LPT1 or LPT2, same as the values in Parameter SourcePortsList, and column two should have the hexadecimal value of the port such as 0x378. The number of rows in the matrix should be equal to the value in Parameter SourcePorts, while it must have two columns if being used, no more, no less.&lt;br /&gt;
&lt;br /&gt;
===DigitalOutputEx===&lt;br /&gt;
This matrix of expressions that controls the outputs on the parallel ports.  Each port has 8 bits which correspond to 8 rows on the matrix. If the expression evaluates to True, the bit will be set to 1 else to 0. Boolean expression work quite well here. For more information on digital output and expressions usage for ParallelPortFilter see [[::Contributions:ParallelPortFilter#Digital Output|Digital Output]].&lt;br /&gt;
&lt;br /&gt;
==Digital Output==&lt;br /&gt;
Each port has 8 bits that can be written to. These bits can be accessed through the Parameter DigitalOutputEx. The user must write expressions for each individual bit on each port. The row label corresponds to which bit it will be written to. If multiple ports are enabled, row 1 - 8 correspond to the bits 1 - 8 on the first port and row 9 - 16 correspond to the bits 1 - 8 on the second port and so on. Expressions that evaluate to True set the corresponding bit to 1 and those that evaluate to False set the corresponding bit to 0.&lt;br /&gt;
&lt;br /&gt;
In the case that the user wishes to send an signal or a value through the port, the user must convert the number into binary and write the corresponding zeroes and ones to the respective bits. To do that, the formula: &lt;br /&gt;
&amp;lt;code&amp;gt;mod((floor(x / 2 ^(bitnumber - 1))), 2)&amp;lt;/code&amp;gt;. The x is the number or the signal the user wishes to send through the port. For example if the number 193 was to be sent through the port, the Parameter DigitalOutputEx would be:&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterDigitalOutExBinary.jpg]]&lt;br /&gt;
&lt;br /&gt;
Not all rows have to be created. Any row not named just writes the bit as 0. The rows also can be written in whatever order if you just change the row label in the parameter. The example below just sets bit 1 and 5 to 1. All other rows are zeroes.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterRowLabelChange.jpg]]&lt;br /&gt;
&lt;br /&gt;
For more on expressions, see [[:User Reference:Expression Syntax|Expressions]].&lt;br /&gt;
&lt;br /&gt;
==States==&lt;br /&gt;
For each port there is 8 input bits which correspond to 8 ParallelPortInput states. Each state is either a 0 or a 1. If multiple ports are enabled, ParallelPortInput1 - ParallelPortInput8 correspond to the bits 1 - 8 on the first port and ParallelPortInput9 - ParallelPortInput16 correspond to the bits 1 - 8 on the second port and so on. Currently only 3 ports may be enabled, which should be more than enough for most computers do not have more than port LPT1 - LPT3.&lt;br /&gt;
&lt;br /&gt;
==Example Configurations==&lt;br /&gt;
This example enables port LPT1 with default address and send the value 193 through it.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterDefault.jpg]]&lt;br /&gt;
&lt;br /&gt;
This example enables port LPT1 with a new hardware address.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterNewAddress.jpg]]&lt;br /&gt;
&lt;br /&gt;
This example enables ports with names MRIScanner and StimulusDevice with hardware addresses. Note that the address for the ports are the same as the default values for LPT1 and LPT2. This shows that LPT names can be renamed in the Parameter Configuration to make it easier to read. This does not change the names of the addresses given by the computer itself.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterNewNames.jpg]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=Contributions:ParallelPortFilter&amp;diff=7513</id>
		<title>Contributions:ParallelPortFilter</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=Contributions:ParallelPortFilter&amp;diff=7513"/>
		<updated>2015-06-30T19:24:30Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: /* Example Configurations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Location==&lt;br /&gt;
http://{{SERVERNAME}}/svn/trunk/src/contrib/Extensions/ParallelPortFilter&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
&lt;br /&gt;
===Authors===&lt;br /&gt;
Kristopher Kaleb Goering (kaleb.goering@gmail.com)&lt;br /&gt;
&lt;br /&gt;
===Version History===&lt;br /&gt;
* 2015/06/30: Initial public release&lt;br /&gt;
&lt;br /&gt;
===Source Code Revisions===&lt;br /&gt;
*Initial development: --&lt;br /&gt;
*Tested under: --&lt;br /&gt;
*Known to compile under: --&lt;br /&gt;
*Broken since: --&lt;br /&gt;
&lt;br /&gt;
==Functional Description==&lt;br /&gt;
This simple filter extension resides in the Application module and makes input and output with the parallel port easy. The inputs are stored as states ParallelPortInput1 - ParallelPortInput24 based off the number of ports connected. For more information, see [[:Contributions:ParallelPortFilter#States|States]].&lt;br /&gt;
&lt;br /&gt;
==Integration into BCI2000==&lt;br /&gt;
Compile the extension into your source module by enabling contributed extensions in your CMake configuration.  You can do this by going into your root build folder and deleting &amp;lt;code&amp;gt;CMakeCache.txt&amp;lt;/code&amp;gt; and re-running the project batch file, or by running &amp;lt;code&amp;gt;cmake -i&amp;lt;/code&amp;gt; and enabling &#039;&#039;&#039;BUILD_PARALLELPORTFILTER&#039;&#039;&#039;.  Once the extension is built into the source module, it can be used.&lt;br /&gt;
&lt;br /&gt;
==Configuring ParallelPortFiler==&lt;br /&gt;
If using the filter, SourcePorts must have a number greater than 0. Then list the names for the ports separated by spaces in SourcePortsList. The list must be the same length as the value in SourcePorts. You can then set the LPTMapping with column one in using the names as in SourcePortsList and column 2 using the corresponding hardware address. This step is optional. If not configured, LPT1 maps to 0x378 and LPT2 maps to 0x278 which should work for most users. DigitalOutputEx is only necessary if user wants to write output through the parallel port.&lt;br /&gt;
&lt;br /&gt;
If the default settings for LPTMapping did not produce results, the hardware address might be different for the user&#039;s computer. To find the hardware address for the parallel ports for your machine, press &#039;&#039;&#039;WIN&#039;&#039;&#039; + &#039;&#039;&#039;R&#039;&#039;&#039; and enter &#039;&#039;devmgmt.msc&#039;&#039;. In Device Manager, expand the section labeled &#039;&#039;&#039;Ports (Com &amp;amp; LPT)&#039;&#039;&#039;. If this section does not exist, you probably do not have LPT ports or the driver is not installed properly. Find the one labeled with (LPT1) or whatever port you are looking for. Right click and select Properties. In the Resources tab, there is a field called I/O Range and take the first value of the range which is in hexadecimal. If multiple I/O Range, read the first one; if that does not work, try the other one. Take that value as the hardware address for Parameter LPTMapping. These instructions for finding the address has been tested on Windows XP, 7, and 8.&lt;br /&gt;
&lt;br /&gt;
For some examples on configurations, see [[:Contributions:ParallelPortFilter#Example Configurations|Example Configurations]].&lt;br /&gt;
&lt;br /&gt;
For better explanation of the parameters, see [[:Contributions:ParallelPortFilter#Parameters|Parameters]].&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
The ParallelPortFilter is configured in the ParallelPort tab.  The configurable parameters are:&lt;br /&gt;
&lt;br /&gt;
===SourcePorts===&lt;br /&gt;
This parameter is used to initialize the filter and to keep track of the number of ports being used. This number should be the total number of parallel ports that should be used to communicate. It should be an integer value greater than 0 if being used else 0. Most computers do not have more than 3 parallel ports but some have 4. In good practice this value should not be greater than 3 unless you are sure you have that many ports.&lt;br /&gt;
&lt;br /&gt;
===SourcePortsList===&lt;br /&gt;
This parameter lists the ports to be used and the order to communicate through them. It should be a list of the port names LPT1 - LPT3. You can not use the same port twice in on list. This list must be the same length as the value in Parameter SourcePorts.&lt;br /&gt;
&lt;br /&gt;
===LPTMapping===&lt;br /&gt;
This parameter is to manually enter the hardware address of the ports incase that the computer being used does not conform to general use hardware addresses. Column one should have the names of the ports such as LPT1 or LPT2, same as the values in Parameter SourcePortsList, and column two should have the hexadecimal value of the port such as 0x378. The number of rows in the matrix should be equal to the value in Parameter SourcePorts, while it must have two columns if being used, no more, no less.&lt;br /&gt;
&lt;br /&gt;
===DigitalOutputEx===&lt;br /&gt;
This matrix of expressions that controls the outputs on the parallel ports.  Each port has 8 bits which correspond to 8 rows on the matrix. If the expression evaluates to True, the bit will be set to 1 else to 0. Boolean expression work quite well here. For more information on digital output and expressions usage for ParallelPortFilter see [[::Contributions:ParallelPortFilter#Digital Output|Digital Output]].&lt;br /&gt;
&lt;br /&gt;
==Digital Output==&lt;br /&gt;
Each port has 8 bits that can be written to. These bits can be accessed through the Parameter DigitalOutputEx. The user must write expressions for each individual bit on each port. The row label corresponds to which bit it will be written to. If multiple ports are enabled, row 1 - 8 correspond to the bits 1 - 8 on the first port and row 9 - 16 correspond to the bits 1 - 8 on the second port and so on. Expressions that evaluate to True set the corresponding bit to 1 and those that evaluate to False set the corresponding bit to 0.&lt;br /&gt;
&lt;br /&gt;
In the case that the user wishes to send an signal or a value through the port, the user must convert the number into binary and write the corresponding zeroes and ones to the respective bits. To do that, the formula: &lt;br /&gt;
&amp;lt;code&amp;gt;mod((floor(x / 2 ^(bitnumber - 1))), 2)&amp;lt;/code&amp;gt;. The x is the number or the signal the user wishes to send through the port. For example if the number 193 was to be sent through the port, the Parameter DigitalOutputEx would be:&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterDigitalOutExBinary.jpg]]&lt;br /&gt;
&lt;br /&gt;
Not all rows have to be created. Any row not named just writes the bit as 0. The rows also can be written in whatever order if you just change the row label in the parameter. The example below just sets bit 1 and 5 to 1. All other rows are zeroes.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterRowLabelChange.jpg]]&lt;br /&gt;
&lt;br /&gt;
For more on expressions, see [[:User Reference:Expression Syntax|Expressions]].&lt;br /&gt;
&lt;br /&gt;
==States==&lt;br /&gt;
For each port there is 8 input bits which correspond to 8 ParallelPortInput states. Each state is either a 0 or a 1. If multiple ports are enabled, ParallelPortInput1 - ParallelPortInput8 correspond to the bits 1 - 8 on the first port and ParallelPortInput9 - ParallelPortInput16 correspond to the bits 1 - 8 on the second port and so on. Currently only 3 ports may be enabled, which should be more than enough for most computers do not have more than port LPT1 - LPT3.&lt;br /&gt;
&lt;br /&gt;
==Example Configurations==&lt;br /&gt;
This example enables port LPT1 with default address and send the value 193 through it.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterDefault.jpg]]&lt;br /&gt;
&lt;br /&gt;
This example enables port LPT1 with a new hardware address.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterNewAddress.jpg]]&lt;br /&gt;
&lt;br /&gt;
This example enables ports with names MRIScanner and StimulusDevice with hardware addresses. Note that the address for the ports are the same as the default values for LPT1 and LPT2. This shows that LPT names can be renamed in the Parameter Configuration to make it easier to read. This does not change the names of the addresses given by the computer itself.&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortFilterNewNames.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:ParallelPortAddress.jpg]]&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=File:ParallelPortFilterNewNames.jpg&amp;diff=7512</id>
		<title>File:ParallelPortFilterNewNames.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=File:ParallelPortFilterNewNames.jpg&amp;diff=7512"/>
		<updated>2015-06-30T19:24:04Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: Example of how to rename LPT for use in ParallelPortFilter.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Example of how to rename LPT for use in ParallelPortFilter.&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
	<entry>
		<id>https://www.bci2000.org/mediawiki/index.php?title=File:ParallelPortFilterNewAddress.jpg&amp;diff=7511</id>
		<title>File:ParallelPortFilterNewAddress.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.bci2000.org/mediawiki/index.php?title=File:ParallelPortFilterNewAddress.jpg&amp;diff=7511"/>
		<updated>2015-06-30T19:22:45Z</updated>

		<summary type="html">&lt;p&gt;Kgoering: This is an example of set up setting the address of LPT1 to the address for the current machine.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an example of set up setting the address of LPT1 to the address for the current machine.&lt;/div&gt;</summary>
		<author><name>Kgoering</name></author>
	</entry>
</feed>