From f2f1d71c6d785fbaccfed7c73915ee51bc0376ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Dieudonn=C3=A9?= Date: Fri, 1 Aug 2025 16:24:22 +0200 Subject: [PATCH 01/13] added option to specify serial number for ant device --- src/board_controller/ant_neuro/ant_neuro.cpp | 11 ++------ third_party/ant_neuro/eemagine/sdk/factory.h | 4 ++- third_party/ant_neuro/eemagine/sdk/wrapper.cc | 27 +++++++++++++++++-- 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/board_controller/ant_neuro/ant_neuro.cpp b/src/board_controller/ant_neuro/ant_neuro.cpp index 40ebf5e43..c99977a73 100644 --- a/src/board_controller/ant_neuro/ant_neuro.cpp +++ b/src/board_controller/ant_neuro/ant_neuro.cpp @@ -96,7 +96,8 @@ int AntNeuroBoard::prepare_session () safe_logger (spdlog::level::info, "eego sdk version is: {}.{}.{}.{}", fact->getVersion ().major, fact->getVersion ().minor, fact->getVersion ().micro, fact->getVersion ().build); - amp = fact->getAmplifier (); + amp = fact->getAmplifier (board_descr["default"]["name"], params.serial_number); + reference_range = amp->getReferenceRangesAvailable ()[0]; bipolar_range = amp->getBipolarRangesAvailable ()[0]; if (sampling_rate < 0) @@ -105,14 +106,6 @@ int AntNeuroBoard::prepare_session () } impedance_mode = false; impedance_package_num = 0; - std::string board_name = "AntNeuro" + amp->getType (); - std::string expected_board_name = board_descr["default"]["name"]; - if (expected_board_name != board_name) - { - std::string err_msg = "Board name " + expected_board_name + - " does not match board name of connected device " + board_name; - throw exceptions::notFound (err_msg); - } } catch (const exceptions::notFound &e) { diff --git a/third_party/ant_neuro/eemagine/sdk/factory.h b/third_party/ant_neuro/eemagine/sdk/factory.h index acabbb456..2fa5237e7 100644 --- a/third_party/ant_neuro/eemagine/sdk/factory.h +++ b/third_party/ant_neuro/eemagine/sdk/factory.h @@ -107,7 +107,9 @@ namespace eemagine * if no amplifiers are found. * @return pointer to an available amplifier */ - eemagine::sdk::amplifier *getAmplifier (); + eemagine::sdk::amplifier *getAmplifier ( + const std::string &board_name = "", + const std::string &serial_number = ""); /////////////////////////////////////////////////////////////////////////////// /** * Returns a pointer to a virtual amplifier. diff --git a/third_party/ant_neuro/eemagine/sdk/wrapper.cc b/third_party/ant_neuro/eemagine/sdk/wrapper.cc index 8e605e04f..fd8b43457 100644 --- a/third_party/ant_neuro/eemagine/sdk/wrapper.cc +++ b/third_party/ant_neuro/eemagine/sdk/wrapper.cc @@ -921,7 +921,9 @@ std::vector eemagine::sdk::factory::getAmplifiers () } /////////////////////////////////////////////////////////////////////////////// -eemagine::sdk::amplifier *eemagine::sdk::factory::getAmplifier () +eemagine::sdk::amplifier *eemagine::sdk::factory::getAmplifier ( + const std::string &board_name, + const std::string &serial_number) { eemagine::sdk::amplifier *rv = NULL; std::vector amplifier_list = getAmplifiers (); @@ -932,7 +934,28 @@ eemagine::sdk::amplifier *eemagine::sdk::factory::getAmplifier () } std::vector::iterator iter = amplifier_list.begin (); - rv = *iter; + for (; iter != amplifier_list.end (); ++iter) + { + eemagine::sdk::amplifier *amp = *iter; + + // Check board name and serial number + std::string amp_board_name = "AntNeuro" + amp->getType (); + if ((!board_name.empty () && amp_board_name != board_name) || + (!serial_number.empty () && amp->getSerialNumber () != serial_number)) + { + delete amp; + continue; + } + + rv = amp; + break; + } + + if (rv == NULL) + { + throw (eemagine::sdk::exceptions::notFound("no amplifier matching the given criteria")); + } + // clean references while (++iter != amplifier_list.end ()) { From 60fd16f7e4e181e753af8cdf307445ffe650012a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Dieudonn=C3=A9?= Date: Fri, 1 Aug 2025 16:42:43 +0200 Subject: [PATCH 02/13] updated docs --- docs/SupportedBoards.rst | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/SupportedBoards.rst b/docs/SupportedBoards.rst index 13df4f370..f5f8e0e5c 100644 --- a/docs/SupportedBoards.rst +++ b/docs/SupportedBoards.rst @@ -237,8 +237,8 @@ Unlike Ganglion board this BrainFlow board does not use BLED112 dongle, so you n To create such board you need to specify the following board ID and fields of BrainFlowInputParams object: - :code:`BoardIds.GANGLION_NATIVE_BOARD` -- *optoinal:* :code:`mac_address`, if not provided BrainFlow will try to autodiscover the device -- *optoinal:* :code:`serial_number`, if not provided BrainFlow will try to autodiscover the device +- *optional:* :code:`mac_address`, if not provided BrainFlow will try to autodiscover the device +- *optional:* :code:`serial_number`, if not provided BrainFlow will try to autodiscover the device Initialization Example: @@ -1026,11 +1026,17 @@ Ant Neuro has many devices and all of them are supported by BrainFlow: - :code:`ANT_NEURO_EE_225_BOARD` - :code:`ANT_NEURO_EE_511_BOARD` +The following fields of BrainFlowInputParams object are supported: + +- *optional:* :code:`serial_number`, important if you have multiple devices in the same place, can be found on the amplifier label (if not provided, BrainFlow will try to autodiscover the device) + + Initialization example: .. code-block:: python params = BrainFlowInputParams() + params.serial_number = '123456' board = BoardShim(BoardIds.ANT_NEURO_EE_410_BOARD, params) # 8 channel amplifier `More elaborate example `_ (reading EEG and impedances) From b36b108c2a672475597414e1b0b19607f4c51d71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Dieudonn=C3=A9?= Date: Fri, 1 Aug 2025 16:44:25 +0200 Subject: [PATCH 03/13] updated ant python example with serial number --- python_package/examples/tests/eego_impedances_and_eeg.py | 1 + 1 file changed, 1 insertion(+) diff --git a/python_package/examples/tests/eego_impedances_and_eeg.py b/python_package/examples/tests/eego_impedances_and_eeg.py index 7f42a2832..1846da8e0 100644 --- a/python_package/examples/tests/eego_impedances_and_eeg.py +++ b/python_package/examples/tests/eego_impedances_and_eeg.py @@ -5,6 +5,7 @@ if __name__ == '__main__': params = BrainFlowInputParams() + # params.serial_number = '123456' # optional, useeful if multiple devices are connected board = BoardShim(BoardIds.ANT_NEURO_EE_411_BOARD, params) # 8 channel amplifier board.prepare_session() From 0acfa8bb008aa6609451e3f63f63e73e418b0871 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Dieudonn=C3=A9?= Date: Fri, 1 Aug 2025 16:47:07 +0200 Subject: [PATCH 04/13] typo --- python_package/examples/tests/eego_impedances_and_eeg.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python_package/examples/tests/eego_impedances_and_eeg.py b/python_package/examples/tests/eego_impedances_and_eeg.py index 1846da8e0..c392d9011 100644 --- a/python_package/examples/tests/eego_impedances_and_eeg.py +++ b/python_package/examples/tests/eego_impedances_and_eeg.py @@ -5,7 +5,7 @@ if __name__ == '__main__': params = BrainFlowInputParams() - # params.serial_number = '123456' # optional, useeful if multiple devices are connected + # params.serial_number = '123456' # optional, useful if multiple devices are connected board = BoardShim(BoardIds.ANT_NEURO_EE_411_BOARD, params) # 8 channel amplifier board.prepare_session() From e831dff4e6475d63394eca5bda0bf3f09744f6f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Dieudonn=C3=A9?= Date: Mon, 4 Aug 2025 10:05:11 +0200 Subject: [PATCH 05/13] removed serial number from ant example in SupportedBoards.rst --- docs/SupportedBoards.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/SupportedBoards.rst b/docs/SupportedBoards.rst index f5f8e0e5c..caf45162d 100644 --- a/docs/SupportedBoards.rst +++ b/docs/SupportedBoards.rst @@ -1036,7 +1036,6 @@ Initialization example: .. code-block:: python params = BrainFlowInputParams() - params.serial_number = '123456' board = BoardShim(BoardIds.ANT_NEURO_EE_410_BOARD, params) # 8 channel amplifier `More elaborate example `_ (reading EEG and impedances) From 146ec60fc93f8347c8aea36b8322bca18779ccf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Dieudonn=C3=A9?= Date: Mon, 4 Aug 2025 10:35:55 +0200 Subject: [PATCH 06/13] moved new ANT logic out of third party folder --- src/board_controller/ant_neuro/ant_neuro.cpp | 51 ++++++++++++++++++- third_party/ant_neuro/eemagine/sdk/factory.h | 4 +- third_party/ant_neuro/eemagine/sdk/wrapper.cc | 27 +--------- 3 files changed, 53 insertions(+), 29 deletions(-) diff --git a/src/board_controller/ant_neuro/ant_neuro.cpp b/src/board_controller/ant_neuro/ant_neuro.cpp index c99977a73..e928a30c1 100644 --- a/src/board_controller/ant_neuro/ant_neuro.cpp +++ b/src/board_controller/ant_neuro/ant_neuro.cpp @@ -96,7 +96,56 @@ int AntNeuroBoard::prepare_session () safe_logger (spdlog::level::info, "eego sdk version is: {}.{}.{}.{}", fact->getVersion ().major, fact->getVersion ().minor, fact->getVersion ().micro, fact->getVersion ().build); - amp = fact->getAmplifier (board_descr["default"]["name"], params.serial_number); + + // Iterate through connected amplifiers + std::vector amplifier_list = fact->getAmplifiers (); + if (amplifier_list.empty ()) + { + throw exceptions::notFound ("no ANT amplifiers found."); + } + + std::string expected_board_name = board_descr["default"]["name"]; + std::string expected_serial_number = params.serial_number; + + std::vector::iterator iter = amplifier_list.begin (); + for (; iter != amplifier_list.end (); ++iter) + { + amplifier *current_amp = *iter; + std::string current_board_name = "AntNeuro" + current_amp->getType (); + std::string current_serial = current_amp->getSerialNumber (); + + if ((!expected_board_name.empty () && current_board_name != expected_board_name) || + (!expected_serial_number.empty () && current_serial != expected_serial_number)) + { + safe_logger (spdlog::level::info, "Found non-matching amplifier (board name {}, serial {})", + current_board_name, current_serial); + delete current_amp; + continue; + } + + // Found the matching amplifier + safe_logger (spdlog::level::info, "Found amplifier (board name {}, serial {})!", + current_board_name, current_serial); + amp = current_amp; + break; + } + + // Check if amplifier is found + if (amp == NULL) + { + throw exceptions::notFound ("No amplifier matched the given board name and serial number."); + } + + // Clean up remaining amplifiers after the selected one + while (++iter != amplifier_list.end ()) + { + amplifier *current_amp = *iter; + std::string current_board_name = "AntNeuro" + current_amp->getType (); + std::string current_serial = current_amp->getSerialNumber (); + safe_logger (spdlog::level::info, "Found non-matching amplifier (board name {}, serial {})", + current_board_name, current_serial); + delete current_amp; + } reference_range = amp->getReferenceRangesAvailable ()[0]; bipolar_range = amp->getBipolarRangesAvailable ()[0]; diff --git a/third_party/ant_neuro/eemagine/sdk/factory.h b/third_party/ant_neuro/eemagine/sdk/factory.h index 2fa5237e7..acabbb456 100644 --- a/third_party/ant_neuro/eemagine/sdk/factory.h +++ b/third_party/ant_neuro/eemagine/sdk/factory.h @@ -107,9 +107,7 @@ namespace eemagine * if no amplifiers are found. * @return pointer to an available amplifier */ - eemagine::sdk::amplifier *getAmplifier ( - const std::string &board_name = "", - const std::string &serial_number = ""); + eemagine::sdk::amplifier *getAmplifier (); /////////////////////////////////////////////////////////////////////////////// /** * Returns a pointer to a virtual amplifier. diff --git a/third_party/ant_neuro/eemagine/sdk/wrapper.cc b/third_party/ant_neuro/eemagine/sdk/wrapper.cc index fd8b43457..8e605e04f 100644 --- a/third_party/ant_neuro/eemagine/sdk/wrapper.cc +++ b/third_party/ant_neuro/eemagine/sdk/wrapper.cc @@ -921,9 +921,7 @@ std::vector eemagine::sdk::factory::getAmplifiers () } /////////////////////////////////////////////////////////////////////////////// -eemagine::sdk::amplifier *eemagine::sdk::factory::getAmplifier ( - const std::string &board_name, - const std::string &serial_number) +eemagine::sdk::amplifier *eemagine::sdk::factory::getAmplifier () { eemagine::sdk::amplifier *rv = NULL; std::vector amplifier_list = getAmplifiers (); @@ -934,28 +932,7 @@ eemagine::sdk::amplifier *eemagine::sdk::factory::getAmplifier ( } std::vector::iterator iter = amplifier_list.begin (); - for (; iter != amplifier_list.end (); ++iter) - { - eemagine::sdk::amplifier *amp = *iter; - - // Check board name and serial number - std::string amp_board_name = "AntNeuro" + amp->getType (); - if ((!board_name.empty () && amp_board_name != board_name) || - (!serial_number.empty () && amp->getSerialNumber () != serial_number)) - { - delete amp; - continue; - } - - rv = amp; - break; - } - - if (rv == NULL) - { - throw (eemagine::sdk::exceptions::notFound("no amplifier matching the given criteria")); - } - + rv = *iter; // clean references while (++iter != amplifier_list.end ()) { From 7afe1326dc440f031a0f7491dffe1c8fdcb7d756 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Dieudonn=C3=A9?= Date: Mon, 4 Aug 2025 10:39:05 +0200 Subject: [PATCH 07/13] typo --- src/board_controller/ant_neuro/ant_neuro.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/board_controller/ant_neuro/ant_neuro.cpp b/src/board_controller/ant_neuro/ant_neuro.cpp index e928a30c1..6d547d566 100644 --- a/src/board_controller/ant_neuro/ant_neuro.cpp +++ b/src/board_controller/ant_neuro/ant_neuro.cpp @@ -133,7 +133,7 @@ int AntNeuroBoard::prepare_session () // Check if amplifier is found if (amp == NULL) { - throw exceptions::notFound ("No amplifier matched the given board name and serial number."); + throw exceptions::notFound ("no amplifier matched the given board name and serial number."); } // Clean up remaining amplifiers after the selected one From a31833dccf2eb738a40dee7e7c5c3e88ed659488 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Dieudonn=C3=A9?= Date: Mon, 4 Aug 2025 10:42:14 +0200 Subject: [PATCH 08/13] clang fix --- src/board_controller/ant_neuro/ant_neuro.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/board_controller/ant_neuro/ant_neuro.cpp b/src/board_controller/ant_neuro/ant_neuro.cpp index 6d547d566..c7ce55b75 100644 --- a/src/board_controller/ant_neuro/ant_neuro.cpp +++ b/src/board_controller/ant_neuro/ant_neuro.cpp @@ -117,7 +117,8 @@ int AntNeuroBoard::prepare_session () if ((!expected_board_name.empty () && current_board_name != expected_board_name) || (!expected_serial_number.empty () && current_serial != expected_serial_number)) { - safe_logger (spdlog::level::info, "Found non-matching amplifier (board name {}, serial {})", + safe_logger (spdlog::level::info, + "Found non-matching amplifier (board name {}, serial {})", current_board_name, current_serial); delete current_amp; continue; @@ -133,7 +134,8 @@ int AntNeuroBoard::prepare_session () // Check if amplifier is found if (amp == NULL) { - throw exceptions::notFound ("no amplifier matched the given board name and serial number."); + throw exceptions::notFound ( + "no amplifier matched the given board name and serial number."); } // Clean up remaining amplifiers after the selected one @@ -142,7 +144,8 @@ int AntNeuroBoard::prepare_session () amplifier *current_amp = *iter; std::string current_board_name = "AntNeuro" + current_amp->getType (); std::string current_serial = current_amp->getSerialNumber (); - safe_logger (spdlog::level::info, "Found non-matching amplifier (board name {}, serial {})", + safe_logger (spdlog::level::info, + "Found non-matching amplifier (board name {}, serial {})", current_board_name, current_serial); delete current_amp; } From a8fa4e6b41ed8c15ad10a6c1dadd247a86b7118d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Dieudonn=C3=A9?= Date: Mon, 4 Aug 2025 10:58:13 +0200 Subject: [PATCH 09/13] clang fix --- src/board_controller/ant_neuro/ant_neuro.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/board_controller/ant_neuro/ant_neuro.cpp b/src/board_controller/ant_neuro/ant_neuro.cpp index c7ce55b75..c66c451f6 100644 --- a/src/board_controller/ant_neuro/ant_neuro.cpp +++ b/src/board_controller/ant_neuro/ant_neuro.cpp @@ -118,8 +118,8 @@ int AntNeuroBoard::prepare_session () (!expected_serial_number.empty () && current_serial != expected_serial_number)) { safe_logger (spdlog::level::info, - "Found non-matching amplifier (board name {}, serial {})", - current_board_name, current_serial); + "Found non-matching amplifier (board name {}, serial {})", current_board_name, + current_serial); delete current_amp; continue; } @@ -145,8 +145,8 @@ int AntNeuroBoard::prepare_session () std::string current_board_name = "AntNeuro" + current_amp->getType (); std::string current_serial = current_amp->getSerialNumber (); safe_logger (spdlog::level::info, - "Found non-matching amplifier (board name {}, serial {})", - current_board_name, current_serial); + "Found non-matching amplifier (board name {}, serial {})", current_board_name, + current_serial); delete current_amp; } From 7f1478090872773fad10e98054cb888985f06bf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Dieudonn=C3=A9?= Date: Mon, 4 Aug 2025 11:11:08 +0200 Subject: [PATCH 10/13] clang fix --- src/board_controller/ant_neuro/ant_neuro.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/board_controller/ant_neuro/ant_neuro.cpp b/src/board_controller/ant_neuro/ant_neuro.cpp index c66c451f6..e09a76c16 100644 --- a/src/board_controller/ant_neuro/ant_neuro.cpp +++ b/src/board_controller/ant_neuro/ant_neuro.cpp @@ -119,7 +119,7 @@ int AntNeuroBoard::prepare_session () { safe_logger (spdlog::level::info, "Found non-matching amplifier (board name {}, serial {})", current_board_name, - current_serial); + current_serial); delete current_amp; continue; } @@ -146,7 +146,7 @@ int AntNeuroBoard::prepare_session () std::string current_serial = current_amp->getSerialNumber (); safe_logger (spdlog::level::info, "Found non-matching amplifier (board name {}, serial {})", current_board_name, - current_serial); + current_serial); delete current_amp; } From 8281818b3cdc58ea3b587abf72a40fe2fe62eb28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Dieudonn=C3=A9?= Date: Mon, 4 Aug 2025 11:15:17 +0200 Subject: [PATCH 11/13] clang fix --- src/board_controller/ant_neuro/ant_neuro.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/board_controller/ant_neuro/ant_neuro.cpp b/src/board_controller/ant_neuro/ant_neuro.cpp index e09a76c16..7b126f87c 100644 --- a/src/board_controller/ant_neuro/ant_neuro.cpp +++ b/src/board_controller/ant_neuro/ant_neuro.cpp @@ -118,7 +118,7 @@ int AntNeuroBoard::prepare_session () (!expected_serial_number.empty () && current_serial != expected_serial_number)) { safe_logger (spdlog::level::info, - "Found non-matching amplifier (board name {}, serial {})", current_board_name, + "Found non-matching amplifier (board name {}, serial {})", current_board_name, current_serial); delete current_amp; continue; @@ -145,7 +145,7 @@ int AntNeuroBoard::prepare_session () std::string current_board_name = "AntNeuro" + current_amp->getType (); std::string current_serial = current_amp->getSerialNumber (); safe_logger (spdlog::level::info, - "Found non-matching amplifier (board name {}, serial {})", current_board_name, + "Found non-matching amplifier (board name {}, serial {})", current_board_name, current_serial); delete current_amp; } From 068cbd56074f6d7bdc16266ce13aa046618fdab4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Dieudonn=C3=A9?= Date: Mon, 4 Aug 2025 11:19:33 +0200 Subject: [PATCH 12/13] clang fix --- src/board_controller/ant_neuro/ant_neuro.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/board_controller/ant_neuro/ant_neuro.cpp b/src/board_controller/ant_neuro/ant_neuro.cpp index 7b126f87c..a002b6ae9 100644 --- a/src/board_controller/ant_neuro/ant_neuro.cpp +++ b/src/board_controller/ant_neuro/ant_neuro.cpp @@ -117,7 +117,7 @@ int AntNeuroBoard::prepare_session () if ((!expected_board_name.empty () && current_board_name != expected_board_name) || (!expected_serial_number.empty () && current_serial != expected_serial_number)) { - safe_logger (spdlog::level::info, + safe_logger (spdlog::level::info, "Found non-matching amplifier (board name {}, serial {})", current_board_name, current_serial); delete current_amp; @@ -144,7 +144,7 @@ int AntNeuroBoard::prepare_session () amplifier *current_amp = *iter; std::string current_board_name = "AntNeuro" + current_amp->getType (); std::string current_serial = current_amp->getSerialNumber (); - safe_logger (spdlog::level::info, + safe_logger (spdlog::level::info, "Found non-matching amplifier (board name {}, serial {})", current_board_name, current_serial); delete current_amp; From 8216e55e506506e94ccd5534ca4e8799736ff868 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Dieudonn=C3=A9?= Date: Mon, 4 Aug 2025 13:59:20 +0200 Subject: [PATCH 13/13] updated not found error message --- src/board_controller/ant_neuro/ant_neuro.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/board_controller/ant_neuro/ant_neuro.cpp b/src/board_controller/ant_neuro/ant_neuro.cpp index a002b6ae9..b765f6ad4 100644 --- a/src/board_controller/ant_neuro/ant_neuro.cpp +++ b/src/board_controller/ant_neuro/ant_neuro.cpp @@ -161,7 +161,7 @@ int AntNeuroBoard::prepare_session () } catch (const exceptions::notFound &e) { - safe_logger (spdlog::level::err, "No devices found, {}", e.what ()); + safe_logger (spdlog::level::err, "Device not found, {}", e.what ()); return (int)BrainFlowExitCodes::BOARD_NOT_READY_ERROR; } catch (const std::runtime_error &e)