diff --git a/.github/workflows/deploy_cpp_libs.yml b/.github/workflows/deploy_cpp_libs.yml index 72493a690..e1ab94215 100644 --- a/.github/workflows/deploy_cpp_libs.yml +++ b/.github/workflows/deploy_cpp_libs.yml @@ -59,7 +59,7 @@ jobs: max-parallel: 16 matrix: build_type: [Release, Debug] - os: [ubuntu-latest, macos-13] + os: [ubuntu-latest, macos-14] steps: - name: Clone Repository @@ -69,13 +69,13 @@ jobs: with: cmake-version: '3.21.x' - name: Install Ninja - if: (matrix.os == 'macos-13') + if: (matrix.os == 'macos-14') uses: seanmiddleditch/gha-setup-ninja@master with: version: 1.10.2 # build simpleble outside from brainflow because of different deployment targets - name: Compile SimpleBLE MacOS - if: (matrix.os == 'macos-13') + if: (matrix.os == 'macos-14') run: | mkdir $GITHUB_WORKSPACE/third_party/SimpleBLE/simpleble/build cd $GITHUB_WORKSPACE/third_party/SimpleBLE/simpleble/build @@ -86,7 +86,7 @@ jobs: env: BUILD: ${{ matrix.build_type }} - name: Compile BrainFlow for MacOS - if: (matrix.os == 'macos-13') + if: (matrix.os == 'macos-14') run: | mkdir $GITHUB_WORKSPACE/build cd $GITHUB_WORKSPACE/build diff --git a/.github/workflows/run_unix.yml b/.github/workflows/run_unix.yml index 57e9a232c..8b86acb19 100644 --- a/.github/workflows/run_unix.yml +++ b/.github/workflows/run_unix.yml @@ -10,7 +10,7 @@ jobs: fail-fast: false max-parallel: 4 matrix: - os: [ubuntu-latest, macos-13] + os: [ubuntu-latest, macos-14] steps: # compile and prepare env @@ -44,7 +44,7 @@ jobs: run: | npm install -g ts-node - name: Install Ninja - if: (matrix.os == 'macos-13') + if: (matrix.os == 'macos-14') uses: seanmiddleditch/gha-setup-ninja@master with: version: 1.10.2 @@ -62,7 +62,7 @@ jobs: java-version: 11.0.3 # build simpleble outside from brainflow because of different deployment targets - name: Compile SimpleBLE MacOS - if: (matrix.os == 'macos-13') + if: (matrix.os == 'macos-14') run: | mkdir $GITHUB_WORKSPACE/third_party/SimpleBLE/simpleble/build cd $GITHUB_WORKSPACE/third_party/SimpleBLE/simpleble/build @@ -70,7 +70,7 @@ jobs: ninja ninja install - name: Compile BrainFlow MacOS - if: (matrix.os == 'macos-13') + if: (matrix.os == 'macos-14') run: | mkdir $GITHUB_WORKSPACE/build cd $GITHUB_WORKSPACE/build @@ -153,7 +153,7 @@ jobs: - name: Run unit tests run: $GITHUB_WORKSPACE/build/tests/brainflow_tests - name: Synthetic C# Test MacOS - if: (matrix.os == 'macos-13') + if: (matrix.os == 'macos-14') run: | cd $GITHUB_WORKSPACE/csharp_package/brainflow/examples/brainflow_get_data/bin/Release/net7.0 cp $GITHUB_WORKSPACE/installed/lib/libBoardController.dylib $GITHUB_WORKSPACE/csharp_package/brainflow/examples/brainflow_get_data/bin/Release/net7.0/ @@ -163,7 +163,7 @@ jobs: LD_LIBRARY_PATH: ${{ github.workspace }}/installed/lib DYLD_LIBRARY_PATH: ${{ github.workspace }}/installed/lib - name: EEG Metrics C# Test MacOS - if: (matrix.os == 'macos-13') + if: (matrix.os == 'macos-14') run: | cd $GITHUB_WORKSPACE/csharp_package/brainflow/examples/eeg_metrics/bin/Release/net7.0 cp $GITHUB_WORKSPACE/installed/lib/libBoardController.dylib $GITHUB_WORKSPACE/csharp_package/brainflow/examples/eeg_metrics/bin/Release/net7.0/ @@ -412,7 +412,7 @@ jobs: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - name: Push Libraries MacOS Dev - if: ${{ github.event_name == 'push' && matrix.os == 'macos-13' && github.repository == 'brainflow-dev/brainflow' }} + if: ${{ github.event_name == 'push' && matrix.os == 'macos-14' && github.repository == 'brainflow-dev/brainflow' }} run: | aws s3 cp $GITHUB_WORKSPACE/installed/lib/ s3://brainflow/$GITHUB_SHA/macos_release --recursive env: diff --git a/csharp_package/brainflow/brainflow/board_controller_library.cs b/csharp_package/brainflow/brainflow/board_controller_library.cs index 43a745336..d4f80dfb7 100644 --- a/csharp_package/brainflow/brainflow/board_controller_library.cs +++ b/csharp_package/brainflow/brainflow/board_controller_library.cs @@ -121,6 +121,7 @@ public enum BoardIds SYNCHRONI_UNO_1_CHANNELS_BOARD = 62, OB3000_24_CHANNELS_BOARD = 63, BIOLISTENER_BOARD = 64, + IRONBBCI_32_BOARD = 65 }; diff --git a/docs/SupportedBoards.rst b/docs/SupportedBoards.rst index 973112b29..009546e15 100644 --- a/docs/SupportedBoards.rst +++ b/docs/SupportedBoards.rst @@ -1481,3 +1481,37 @@ Available :ref:`presets-label`: - :code:`BrainFlowPresets.DEFAULT_PRESET`, it contains EEG (EMG, ECG, EOG) data - :code:`BrainFlowPresets.AUXILIARY_PRESET`, it contains Gyro, Accel, battery and ESP32 chip temperature data + +IronBCI +-------- + +IronBCI32 +~~~~~~~~~~ + +.. image:: https://live.staticflickr.com/65535/55036534734_d467ed741e.jpg + :width: 500px + :height: 389px + +`Github `_ + +To create such board you need to specify the following board ID and fields of BrainFlowInputParams object: + +- :code:`BoardIds.IRONBCI_32_BOARD` +- :code:`serial_port`, e.g. COM3 + +Initialization Example: + +.. code-block:: python + + params = BrainFlowInputParams() + params.serial_port = "COM3" + board = BoardShim(BoardIds.IRONBCI_32_BOARD, params) + +**On Unix-like systems you may need to configure permissions for serial port or run with sudo.** + +Supported platforms: + +- Windows +- Linux +- MacOS +- Devices like Raspberry Pi \ No newline at end of file diff --git a/java_package/brainflow/src/main/java/brainflow/BoardIds.java b/java_package/brainflow/src/main/java/brainflow/BoardIds.java index ce3ac9d0e..121f54047 100644 --- a/java_package/brainflow/src/main/java/brainflow/BoardIds.java +++ b/java_package/brainflow/src/main/java/brainflow/BoardIds.java @@ -70,7 +70,8 @@ public enum BoardIds SYNCHRONI_PENTO_8_CHANNELS_BOARD(61), SYNCHRONI_UNO_1_CHANNELS_BOARD(62), OB3000_24_CHANNELS_BOARD(63), - BIOLISTENER_BOARD(64); + BIOLISTENER_BOARD(64), + IRONBBCI_32_BOARD(65); private final int board_id; private static final Map bi_map = new HashMap (); diff --git a/julia_package/brainflow/src/board_shim.jl b/julia_package/brainflow/src/board_shim.jl index dc80214d7..e89a60dfa 100644 --- a/julia_package/brainflow/src/board_shim.jl +++ b/julia_package/brainflow/src/board_shim.jl @@ -66,6 +66,7 @@ export BrainFlowInputParams SYNCHRONI_UNO_1_CHANNELS_BOARD = 62 OB3000_24_CHANNELS_BOARD = 63 BIOLISTENER_BOARD = 64 + IRONBBCI_32_BOARD = 65 end diff --git a/matlab_package/brainflow/BoardIds.m b/matlab_package/brainflow/BoardIds.m index adf5bf325..a36bb18e1 100644 --- a/matlab_package/brainflow/BoardIds.m +++ b/matlab_package/brainflow/BoardIds.m @@ -64,5 +64,6 @@ SYNCHRONI_UNO_1_CHANNELS_BOARD(62) OB3000_24_CHANNELS_BOARD(63) BIOLISTENER_BOARD(64) + IRONBBCI_32_BOARD(65) end end \ No newline at end of file diff --git a/nodejs_package/brainflow/brainflow.types.ts b/nodejs_package/brainflow/brainflow.types.ts index 2c8ba5e88..93242348e 100644 --- a/nodejs_package/brainflow/brainflow.types.ts +++ b/nodejs_package/brainflow/brainflow.types.ts @@ -73,7 +73,8 @@ export enum BoardIds { SYNCHRONI_PENTO_8_CHANNELS_BOARD = 61, SYNCHRONI_UNO_1_CHANNELS_BOARD = 62, OB3000_24_CHANNELS_BOARD = 63, - BIOLISTENER_BOARD = 64 + BIOLISTENER_BOARD = 64, + IRONBBCI_32_BOARD = 65 } export enum IpProtocolTypes { diff --git a/python_package/brainflow/board_shim.py b/python_package/brainflow/board_shim.py index 6a73f7b37..d6355d9ca 100644 --- a/python_package/brainflow/board_shim.py +++ b/python_package/brainflow/board_shim.py @@ -79,6 +79,7 @@ class BoardIds(enum.IntEnum): SYNCHRONI_UNO_1_CHANNELS_BOARD = 62 #: OB3000_24_CHANNELS_BOARD = 63 #: BIOLISTENER_BOARD = 64 #: + IRONBBCI_32_BOARD = 65 #: class IpProtocolTypes(enum.IntEnum): diff --git a/src/board_controller/board_controller.cpp b/src/board_controller/board_controller.cpp index 60f8e72f4..e9ef6db11 100644 --- a/src/board_controller/board_controller.cpp +++ b/src/board_controller/board_controller.cpp @@ -158,6 +158,9 @@ int prepare_session (int board_id, const char *json_brainflow_input_params) case BoardIds::FREEEEG128_BOARD: board = std::shared_ptr (new FreeEEG ((int)BoardIds::FREEEEG128_BOARD, params)); break; + case BoardIds::IRONBBCI_32_BOARD: + board = std::shared_ptr (new FreeEEG ((int)BoardIds::IRONBBCI_32_BOARD, params)); + break; case BoardIds::BRAINBIT_BLED_BOARD: board = std::shared_ptr (new BrainBitBLED (params)); break; diff --git a/src/board_controller/brainflow_boards.cpp b/src/board_controller/brainflow_boards.cpp index 0a8dbec86..69e042b5b 100644 --- a/src/board_controller/brainflow_boards.cpp +++ b/src/board_controller/brainflow_boards.cpp @@ -82,7 +82,8 @@ BrainFlowBoards::BrainFlowBoards() {"61", json::object()}, {"62", json::object()}, {"63", json::object()}, - {"64", json::object()} + {"64", json::object()}, + {"65", json::object()}, } }}; @@ -1134,6 +1135,18 @@ BrainFlowBoards::BrainFlowBoards() {"battery_channel", 8}, {"other_channels", {9, 10}} }; + brainflow_boards_json["boards"]["65"]["default"] = + { + {"name", "IronBCI32"}, + {"sampling_rate", 512}, + {"timestamp_channel", 33}, + {"marker_channel", 34}, + {"package_num_channel", 0}, + {"num_rows", 35}, + {"eeg_channels", {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32}}, + {"emg_channels", {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32}}, + {"ecg_channels", {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32}} + }; } BrainFlowBoards boards_struct; diff --git a/src/board_controller/freeeeg/freeeeg.cpp b/src/board_controller/freeeeg/freeeeg.cpp index c2e231bd9..909d571eb 100644 --- a/src/board_controller/freeeeg/freeeeg.cpp +++ b/src/board_controller/freeeeg/freeeeg.cpp @@ -20,7 +20,8 @@ FreeEEG::FreeEEG (int board_id, struct BrainFlowInputParams params) : Board (boa is_streaming = false; keep_alive = false; initialized = false; - if (board_id == (int)BoardIds::FREEEEG32_BOARD) + if ((board_id == (int)BoardIds::FREEEEG32_BOARD) || + (board_id == (int)BoardIds::IRONBBCI_32_BOARD)) { min_package_size = 1 + 32 * 3; } diff --git a/src/utils/inc/brainflow_constants.h b/src/utils/inc/brainflow_constants.h index 77a292395..af3958dc5 100644 --- a/src/utils/inc/brainflow_constants.h +++ b/src/utils/inc/brainflow_constants.h @@ -93,9 +93,10 @@ enum class BoardIds : int SYNCHRONI_UNO_1_CHANNELS_BOARD = 62, OB3000_24_CHANNELS_BOARD = 63, BIOLISTENER_BOARD = 64, + IRONBBCI_32_BOARD = 65, // use it to iterate FIRST = PLAYBACK_FILE_BOARD, - LAST = BIOLISTENER_BOARD + LAST = IRONBBCI_32_BOARD }; enum class IpProtocolTypes : int