Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ option (BUILD_OYMOTION_SDK "BUILD_OYMOTION_SDK" OFF)
option (BUILD_SYNCHRONI_SDK "BUILD_SYNCHRONI_SDK" ON)
option (BUILD_BLUETOOTH "BUILD_BLUETOOTH" OFF)
option (BUILD_BLE "BUILD_BLE" OFF)
option (BUILD_ANT_EDX "BUILD_ANT_EDX" OFF)
option (BUILD_ONNX "BUILD_ONNX" OFF)
option (BUILD_TESTS "BUILD_TESTS" OFF)
option (BUILD_PERIPHERY "BUILD_PERIPHERY" OFF)
Expand Down Expand Up @@ -76,4 +77,4 @@ install (
EXPORT ${TARGETS_EXPORT_NAME}
NAMESPACE brainflow::
DESTINATION ${CONFIG_INSTALL_DIR}
)
)
2 changes: 1 addition & 1 deletion cpp_package/src/board_shim.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -602,4 +602,4 @@ std::string BoardShim::get_version ()
std::string verion_str (version, string_len);

return verion_str;
}
}
19 changes: 17 additions & 2 deletions csharp_package/brainflow/brainflow/board_controller_library.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.Runtime.InteropServices;
using System.Runtime.InteropServices;


namespace brainflow
Expand Down Expand Up @@ -122,7 +122,21 @@ public enum BoardIds
OB3000_24_CHANNELS_BOARD = 63,
BIOLISTENER_BOARD = 64,
IRONBCI_32_BOARD = 65,
NEUROPAWN_KNIGHT_BOARD_IMU = 66
NEUROPAWN_KNIGHT_BOARD_IMU = 66,
ANT_NEURO_EE_410_EDX_BOARD = 67,
ANT_NEURO_EE_411_EDX_BOARD = 68,
ANT_NEURO_EE_430_EDX_BOARD = 69,
ANT_NEURO_EE_211_EDX_BOARD = 70,
ANT_NEURO_EE_212_EDX_BOARD = 71,
ANT_NEURO_EE_213_EDX_BOARD = 72,
ANT_NEURO_EE_214_EDX_BOARD = 73,
ANT_NEURO_EE_215_EDX_BOARD = 74,
ANT_NEURO_EE_221_EDX_BOARD = 75,
ANT_NEURO_EE_222_EDX_BOARD = 76,
ANT_NEURO_EE_223_EDX_BOARD = 77,
ANT_NEURO_EE_224_EDX_BOARD = 78,
ANT_NEURO_EE_225_EDX_BOARD = 79,
ANT_NEURO_EE_511_EDX_BOARD = 80
};


Expand Down Expand Up @@ -874,3 +888,4 @@ public static int release_all_sessions ()
}
}
}

3 changes: 2 additions & 1 deletion csharp_package/brainflow/brainflow/board_shim.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System;
using System;
using System.IO;
using System.Runtime.Serialization.Json;
using System.Text;
Expand Down Expand Up @@ -987,3 +987,4 @@ public int get_board_data_count (int preset = (int)BrainFlowPresets.DEFAULT_PRES
}
}
}

6 changes: 4 additions & 2 deletions docs/BuildBrainFlow.rst
Original file line number Diff line number Diff line change
Expand Up @@ -193,8 +193,8 @@ Windows
~~~~~~~~

- Install CMake>=3.16 you can install it from PYPI via pip or from `CMake website <https://cmake.org/>`_
- Install Visual Studio 2019(preferred) or Visual Studio 2017. Other versions may work but not tested
- In VS installer make sure you selected "Visual C++ ATL support"
- Install Visual Studio with C++ build tools
- In Visual Studio installer make sure you selected "Visual C++ ATL support"
- Build it as a standard CMake project, you don't need to set any options

.. compound::
Expand All @@ -208,6 +208,8 @@ Windows
# to get info about args and configure your build you can run
python build.py --help

To build with ANT Neuro EDX support, pass ``-DBUILD_ANT_EDX=ON`` to CMake.
gRPC and protobuf development libraries must be available (e.g. via vcpkg or system packages).

Linux
~~~~~~
Expand Down
89 changes: 88 additions & 1 deletion docs/SupportedBoards.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1148,6 +1148,93 @@ Available commands:

For more information about Ant Neuro boards please refer to their User Manual.

Ant Neuro EDX
~~~~~~~~~~~~~~

EDX is a transport board that exposes ANT Neuro amplifiers through an external gRPC service.

Use board id:

- explicit self-describing EDX ids for known amplifiers:

- :code:`BoardIds.ANT_NEURO_EE_410_EDX_BOARD`
- :code:`BoardIds.ANT_NEURO_EE_411_EDX_BOARD`
- :code:`BoardIds.ANT_NEURO_EE_430_EDX_BOARD`
- :code:`BoardIds.ANT_NEURO_EE_211_EDX_BOARD`
- :code:`BoardIds.ANT_NEURO_EE_212_EDX_BOARD`
- :code:`BoardIds.ANT_NEURO_EE_213_EDX_BOARD`
- :code:`BoardIds.ANT_NEURO_EE_214_EDX_BOARD`
- :code:`BoardIds.ANT_NEURO_EE_215_EDX_BOARD`
- :code:`BoardIds.ANT_NEURO_EE_221_EDX_BOARD`
- :code:`BoardIds.ANT_NEURO_EE_222_EDX_BOARD`
- :code:`BoardIds.ANT_NEURO_EE_223_EDX_BOARD`
- :code:`BoardIds.ANT_NEURO_EE_224_EDX_BOARD`
- :code:`BoardIds.ANT_NEURO_EE_225_EDX_BOARD`
- :code:`BoardIds.ANT_NEURO_EE_511_EDX_BOARD`

Use one of the explicit EDX ids when you know the amplifier model.

Required BrainFlowInputParams fields:

- :code:`ip_address`, EDX service host (for example :code:`localhost`)
- :code:`ip_port`, EDX service port (for example :code:`3390`)

Optional fields:

- :code:`timeout`, timeout for discovery and session operations, default is 15 sec

Important notes:

- Available sampling rates and signal ranges are discovered from the amplifier at runtime via :code:`board.config_board("edx:get_capabilities")`.

Available commands:

- Get runtime capabilities: :code:`board.config_board("edx:get_capabilities")`
- Set sampling rate: :code:`board.config_board("sampling_rate:500")`
- Set reference range: :code:`board.config_board("reference_range:0.15")`
- Set bipolar range: :code:`board.config_board("bipolar_range:2.5")`
- Set impedance mode: :code:`board.config_board("impedance_mode:1")`, mode 0 or 1

Example (Python):

.. code-block:: python

params = BrainFlowInputParams()
params.ip_address = "localhost"
params.ip_port = 3390
board = BoardShim(BoardIds.ANT_NEURO_EE_511_EDX_BOARD, params)
board.prepare_session()
print(board.config_board("edx:get_capabilities"))
board.config_board("sampling_rate:500")
board.config_board("reference_range:0.15")
board.config_board("bipolar_range:2.5")
board.start_stream()

Example (C++):

.. code-block:: cpp

BrainFlowInputParams params;
params.ip_address = "localhost";
params.ip_port = 3390;
BoardShim board ((int)BoardIds::ANT_NEURO_EE_511_EDX_BOARD, params);
board.prepare_session ();
std::string caps = board.config_board ("edx:get_capabilities");
board.config_board ("sampling_rate:500");
board.config_board ("reference_range:0.15");
board.config_board ("bipolar_range:2.5");
board.start_stream ();

Example (Rust):

.. code-block:: rust

let params = BrainFlowInputParamsBuilder::default()
.ip_address("localhost")
.ip_port(3390)
.build();
let board = BoardShim::new(BoardIds::AntNeuroEe511EdxBoard, params)?;

Enophone
---------

Expand Down Expand Up @@ -1560,4 +1647,4 @@ Supported platforms:
- Windows
- Linux
- MacOS
- Devices like Raspberry Pi
- Devices like Raspberry Pi
17 changes: 16 additions & 1 deletion java_package/brainflow/src/main/java/brainflow/BoardIds.java
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,21 @@ public enum BoardIds
OB3000_24_CHANNELS_BOARD(63),
BIOLISTENER_BOARD(64),
IRONBCI_32_BOARD(65),
NEUROPAWN_KNIGHT_BOARD_IMU(66);
NEUROPAWN_KNIGHT_BOARD_IMU(66),
ANT_NEURO_EE_410_EDX_BOARD(67),
ANT_NEURO_EE_411_EDX_BOARD(68),
ANT_NEURO_EE_430_EDX_BOARD(69),
ANT_NEURO_EE_211_EDX_BOARD(70),
ANT_NEURO_EE_212_EDX_BOARD(71),
ANT_NEURO_EE_213_EDX_BOARD(72),
ANT_NEURO_EE_214_EDX_BOARD(73),
ANT_NEURO_EE_215_EDX_BOARD(74),
ANT_NEURO_EE_221_EDX_BOARD(75),
ANT_NEURO_EE_222_EDX_BOARD(76),
ANT_NEURO_EE_223_EDX_BOARD(77),
ANT_NEURO_EE_224_EDX_BOARD(78),
ANT_NEURO_EE_225_EDX_BOARD(79),
ANT_NEURO_EE_511_EDX_BOARD(80);

private final int board_id;
private static final Map<Integer, BoardIds> bi_map = new HashMap<Integer, BoardIds> ();
Expand Down Expand Up @@ -106,3 +120,4 @@ public static BoardIds from_code (final int code)
}
}
}

8 changes: 5 additions & 3 deletions java_package/brainflow/src/main/java/brainflow/BoardShim.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
@SuppressWarnings ("deprecation")
public class BoardShim
{

private interface DllInterface extends Library
{
int prepare_session (int board_id, String params);
Expand Down Expand Up @@ -1303,7 +1302,8 @@ public BoardShim (int board_id, BrainFlowInputParams params)
{
if (params.get_master_board () == BoardIds.NO_BOARD.get_code ())
{
throw new BrainFlowError ("need to set master board attribute in BrainFlowInputParams",
throw new BrainFlowError (
"need to set master board attribute in BrainFlowInputParams",
BrainFlowExitCode.INVALID_ARGUMENTS_ERROR.get_code ());
} else
{
Expand All @@ -1328,7 +1328,8 @@ public BoardShim (BoardIds board_id, BrainFlowInputParams params)
{
if (params.get_master_board () == BoardIds.NO_BOARD.get_code ())
{
throw new BrainFlowError ("need to set master board attribute in BrainFlowInputParams",
throw new BrainFlowError (
"need to set master board attribute in BrainFlowInputParams",
BrainFlowExitCode.INVALID_ARGUMENTS_ERROR.get_code ());
} else
{
Expand Down Expand Up @@ -1640,3 +1641,4 @@ public double[][] get_board_data (int num_datapoints) throws BrainFlowError
return get_board_data (num_datapoints, BrainFlowPresets.DEFAULT_PRESET);
}
}

23 changes: 21 additions & 2 deletions julia_package/brainflow/src/board_shim.jl
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,20 @@ export BrainFlowInputParams
BIOLISTENER_BOARD = 64
IRONBCI_32_BOARD = 65
NEUROPAWN_KNIGHT_BOARD_IMU = 66
ANT_NEURO_EE_410_EDX_BOARD = 67
ANT_NEURO_EE_411_EDX_BOARD = 68
ANT_NEURO_EE_430_EDX_BOARD = 69
ANT_NEURO_EE_211_EDX_BOARD = 70
ANT_NEURO_EE_212_EDX_BOARD = 71
ANT_NEURO_EE_213_EDX_BOARD = 72
ANT_NEURO_EE_214_EDX_BOARD = 73
ANT_NEURO_EE_215_EDX_BOARD = 74
ANT_NEURO_EE_221_EDX_BOARD = 75
ANT_NEURO_EE_222_EDX_BOARD = 76
ANT_NEURO_EE_223_EDX_BOARD = 77
ANT_NEURO_EE_224_EDX_BOARD = 78
ANT_NEURO_EE_225_EDX_BOARD = 79
ANT_NEURO_EE_511_EDX_BOARD = 80

end

Expand Down Expand Up @@ -229,7 +243,11 @@ struct BoardShim

function BoardShim(id::Integer, params::BrainFlowInputParams)
master_id = id
if id == Integer(STREAMING_BOARD) || id == Integer(PLAYBACK_FILE_BOARD)
if (id == Integer(STREAMING_BOARD) || id == Integer(PLAYBACK_FILE_BOARD))
if Integer(params.master_board) == Integer(NO_BOARD)
throw(BrainFlowError("master board id is required for streaming or playback boards",
Integer(INVALID_ARGUMENTS_ERROR)))
end
master_id = Integer(params.master_board)
end
new(master_id, id, JSON.json(params))
Expand Down Expand Up @@ -335,4 +353,5 @@ end
num_samples, Int32(preset), val, data_size, board_shim.board_id, board_shim.input_json)
value = transpose(reshape(val[1:data_size[1] * num_rows], (data_size[1], num_rows)))
return value
end
end

16 changes: 15 additions & 1 deletion matlab_package/brainflow/BoardIds.m
Original file line number Diff line number Diff line change
Expand Up @@ -66,5 +66,19 @@
BIOLISTENER_BOARD(64)
IRONBCI_32_BOARD(65)
NEUROPAWN_KNIGHT_BOARD_IMU(66)
ANT_NEURO_EE_410_EDX_BOARD(67)
ANT_NEURO_EE_411_EDX_BOARD(68)
ANT_NEURO_EE_430_EDX_BOARD(69)
ANT_NEURO_EE_211_EDX_BOARD(70)
ANT_NEURO_EE_212_EDX_BOARD(71)
ANT_NEURO_EE_213_EDX_BOARD(72)
ANT_NEURO_EE_214_EDX_BOARD(73)
ANT_NEURO_EE_215_EDX_BOARD(74)
ANT_NEURO_EE_221_EDX_BOARD(75)
ANT_NEURO_EE_222_EDX_BOARD(76)
ANT_NEURO_EE_223_EDX_BOARD(77)
ANT_NEURO_EE_224_EDX_BOARD(78)
ANT_NEURO_EE_225_EDX_BOARD(79)
ANT_NEURO_EE_511_EDX_BOARD(80)
end
end
end
1 change: 1 addition & 0 deletions matlab_package/brainflow/BoardShim.m
Original file line number Diff line number Diff line change
Expand Up @@ -500,3 +500,4 @@ function insert_marker(obj, value, preset)
end

end

2 changes: 1 addition & 1 deletion matlab_package/brainflow/IpProtocolTypes.m
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
UDP(1)
TCP(2)
end
end
end
18 changes: 17 additions & 1 deletion nodejs_package/brainflow/brainflow.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,22 @@ export enum BoardIds {
SYNCHRONI_UNO_1_CHANNELS_BOARD = 62,
OB3000_24_CHANNELS_BOARD = 63,
BIOLISTENER_BOARD = 64,
IRONBCI_32_BOARD = 65
IRONBCI_32_BOARD = 65,
NEUROPAWN_KNIGHT_BOARD_IMU = 66,
ANT_NEURO_EE_410_EDX_BOARD = 67,
ANT_NEURO_EE_411_EDX_BOARD = 68,
ANT_NEURO_EE_430_EDX_BOARD = 69,
ANT_NEURO_EE_211_EDX_BOARD = 70,
ANT_NEURO_EE_212_EDX_BOARD = 71,
ANT_NEURO_EE_213_EDX_BOARD = 72,
ANT_NEURO_EE_214_EDX_BOARD = 73,
ANT_NEURO_EE_215_EDX_BOARD = 74,
ANT_NEURO_EE_221_EDX_BOARD = 75,
ANT_NEURO_EE_222_EDX_BOARD = 76,
ANT_NEURO_EE_223_EDX_BOARD = 77,
ANT_NEURO_EE_224_EDX_BOARD = 78,
ANT_NEURO_EE_225_EDX_BOARD = 79,
ANT_NEURO_EE_511_EDX_BOARD = 80
}

export enum IpProtocolTypes {
Expand Down Expand Up @@ -267,3 +282,4 @@ export interface IBrainFlowModelParams {
outputName: string;
maxArraySize: number;
}

20 changes: 18 additions & 2 deletions python_package/brainflow/board_shim.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,20 @@ class BoardIds(enum.IntEnum):
BIOLISTENER_BOARD = 64 #:
IRONBCI_32_BOARD = 65 #:
NEUROPAWN_KNIGHT_BOARD_IMU = 66 #:
ANT_NEURO_EE_410_EDX_BOARD = 67 #:
ANT_NEURO_EE_411_EDX_BOARD = 68 #:
ANT_NEURO_EE_430_EDX_BOARD = 69 #:
ANT_NEURO_EE_211_EDX_BOARD = 70 #:
ANT_NEURO_EE_212_EDX_BOARD = 71 #:
ANT_NEURO_EE_213_EDX_BOARD = 72 #:
ANT_NEURO_EE_214_EDX_BOARD = 73 #:
ANT_NEURO_EE_215_EDX_BOARD = 74 #:
ANT_NEURO_EE_221_EDX_BOARD = 75 #:
ANT_NEURO_EE_222_EDX_BOARD = 76 #:
ANT_NEURO_EE_223_EDX_BOARD = 77 #:
ANT_NEURO_EE_224_EDX_BOARD = 78 #:
ANT_NEURO_EE_225_EDX_BOARD = 79 #:
ANT_NEURO_EE_511_EDX_BOARD = 80 #:


class IpProtocolTypes(enum.IntEnum):
Expand Down Expand Up @@ -581,12 +595,12 @@ def __init__(self, board_id: int, input_params: BrainFlowInputParams) -> None:
except BaseException:
self.input_json = input_params.to_json()
self.board_id = board_id
# we need it for streaming board
if board_id == BoardIds.STREAMING_BOARD.value or board_id == BoardIds.PLAYBACK_FILE_BOARD.value:
if input_params.master_board != BoardIds.NO_BOARD:
self._master_board_id = input_params.master_board
else:
raise BrainFlowError('you need set master board id in BrainFlowInputParams',
raise BrainFlowError(
'you need set master board id in BrainFlowInputParams',
BrainFlowExitCodes.INVALID_ARGUMENTS_ERROR.value)
else:
self._master_board_id = self.board_id
Expand Down Expand Up @@ -1420,3 +1434,5 @@ def config_board_with_bytes(self, bytes_to_send) -> None:
res = BoardControllerDLL.get_instance().config_board_with_bytes(bytes_to_send, len(bytes_to_send), self.board_id, self.input_json)
if res != BrainFlowExitCodes.STATUS_OK.value:
raise BrainFlowError('unable to config board', res)


Loading
Loading