diff --git a/src/board_controller/openbci/ganglion.cpp b/src/board_controller/openbci/ganglion.cpp index a21a8cd57..872789eba 100644 --- a/src/board_controller/openbci/ganglion.cpp +++ b/src/board_controller/openbci/ganglion.cpp @@ -30,7 +30,7 @@ Ganglion::Ganglion (struct BrainFlowInputParams params) is_valid = true; } use_mac_addr = (params.mac_address.empty ()) ? false : true; - firmware = 0; + firmware = get_firmware_from_params (params); is_streaming = false; keep_alive = false; initialized = false; @@ -79,6 +79,25 @@ Ganglion::~Ganglion () release_session (); } +int Ganglion::get_firmware_from_params (BrainFlowInputParams ¶ms) +{ + if (params.other_info.compare ("fw:auto") == 0) + { + safe_logger (spdlog::level::info, "Autodetecting firmware version..."); + return 0; + } + if (params.other_info.compare ("fw:2") == 0) + { + safe_logger (spdlog::level::info, "Setting firmware version to 2"); + return 2; + } + else + { + safe_logger (spdlog::level::info, "Setting firmware version to 3"); + return 3; + } +} + int Ganglion::prepare_session () { if (initialized) @@ -678,9 +697,12 @@ int Ganglion::call_open () res = func ((void *)&connection_params); - safe_logger ( - spdlog::level::info, "detected firmware version {}", connection_params.firmware); - firmware = connection_params.firmware; + if (firmware == 0) + { + safe_logger ( + spdlog::level::info, "detected firmware version {}", connection_params.firmware); + firmware = connection_params.firmware; + } } else { @@ -694,9 +716,12 @@ int Ganglion::call_open () safe_logger ( spdlog::level::info, "mac address is not specified, try to find ganglion without it"); - res = func ((void *)&firmware); - safe_logger (spdlog::level::info, "detected firmware version {}", firmware); + if (firmware == 0) + { + res = func ((void *)&firmware); + safe_logger (spdlog::level::info, "detected firmware version {}", firmware); + } } if (res != GanglionLib::CustomExitCodes::STATUS_OK) { diff --git a/src/board_controller/openbci/ganglion_native.cpp b/src/board_controller/openbci/ganglion_native.cpp index 71173bb12..636aa99de 100644 --- a/src/board_controller/openbci/ganglion_native.cpp +++ b/src/board_controller/openbci/ganglion_native.cpp @@ -42,7 +42,7 @@ GanglionNative::GanglionNative (struct BrainFlowInputParams params) is_streaming = false; start_command = "b"; stop_command = "s"; - firmware = 0; + firmware = get_firmware_from_params (params); } GanglionNative::~GanglionNative () @@ -51,6 +51,25 @@ GanglionNative::~GanglionNative () release_session (); } +int GanglionNative::get_firmware_from_params (BrainFlowInputParams ¶ms) +{ + if (params.other_info.compare ("fw:auto") == 0) + { + safe_logger (spdlog::level::info, "Autodetecting firmware version..."); + return 0; + } + if (params.other_info.compare ("fw:2") == 0) + { + safe_logger (spdlog::level::info, "Setting firmware version to 2"); + return 2; + } + else + { + safe_logger (spdlog::level::info, "Setting firmware version to 3"); + return 3; + } +} + int GanglionNative::prepare_session () { if (initialized) @@ -167,7 +186,8 @@ int GanglionNative::prepare_session () for (size_t j = 0; j < service.characteristic_count; j++) { // Read the software revision characteristic to get the firmware version - if (strcmp (service.characteristics[j].uuid.value, GANGLION_SOFTWARE_REVISION) == 0) + if (firmware == 0 && + strcmp (service.characteristics[j].uuid.value, GANGLION_SOFTWARE_REVISION) == 0) { uint8_t *data; size_t data_length; diff --git a/src/board_controller/openbci/inc/ganglion.h b/src/board_controller/openbci/inc/ganglion.h index d0e7ef3e9..d9292f550 100644 --- a/src/board_controller/openbci/inc/ganglion.h +++ b/src/board_controller/openbci/inc/ganglion.h @@ -67,4 +67,7 @@ class Ganglion : public Board double *acceleration, double *package); void decompress_firmware_2 (struct GanglionLib::GanglionData *data, float *last_data, double *acceleration, double *package); + +private: + int get_firmware_from_params (BrainFlowInputParams ¶ms); }; diff --git a/src/board_controller/openbci/inc/ganglion_native.h b/src/board_controller/openbci/inc/ganglion_native.h index 0f0f15ae8..b32a9be34 100644 --- a/src/board_controller/openbci/inc/ganglion_native.h +++ b/src/board_controller/openbci/inc/ganglion_native.h @@ -117,4 +117,7 @@ class GanglionNative : public BLELibBoard void decompress_firmware_3 (const uint8_t *data, double *package); void decompress_firmware_2 (const uint8_t *data, double *package); + +private: + int get_firmware_from_params (BrainFlowInputParams ¶ms); };