Skip to content

Commit d24d05e

Browse files
authored
Use BrainFlowInputParams field for specifying Ganglion firmware (#791)
1 parent 5ebe075 commit d24d05e

File tree

4 files changed

+59
-8
lines changed

4 files changed

+59
-8
lines changed

src/board_controller/openbci/ganglion.cpp

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ Ganglion::Ganglion (struct BrainFlowInputParams params)
3030
is_valid = true;
3131
}
3232
use_mac_addr = (params.mac_address.empty ()) ? false : true;
33-
firmware = 0;
33+
firmware = get_firmware_from_params (params);
3434
is_streaming = false;
3535
keep_alive = false;
3636
initialized = false;
@@ -79,6 +79,25 @@ Ganglion::~Ganglion ()
7979
release_session ();
8080
}
8181

82+
int Ganglion::get_firmware_from_params (BrainFlowInputParams &params)
83+
{
84+
if (params.other_info.compare ("fw:auto") == 0)
85+
{
86+
safe_logger (spdlog::level::info, "Autodetecting firmware version...");
87+
return 0;
88+
}
89+
if (params.other_info.compare ("fw:2") == 0)
90+
{
91+
safe_logger (spdlog::level::info, "Setting firmware version to 2");
92+
return 2;
93+
}
94+
else
95+
{
96+
safe_logger (spdlog::level::info, "Setting firmware version to 3");
97+
return 3;
98+
}
99+
}
100+
82101
int Ganglion::prepare_session ()
83102
{
84103
if (initialized)
@@ -678,9 +697,12 @@ int Ganglion::call_open ()
678697

679698
res = func ((void *)&connection_params);
680699

681-
safe_logger (
682-
spdlog::level::info, "detected firmware version {}", connection_params.firmware);
683-
firmware = connection_params.firmware;
700+
if (firmware == 0)
701+
{
702+
safe_logger (
703+
spdlog::level::info, "detected firmware version {}", connection_params.firmware);
704+
firmware = connection_params.firmware;
705+
}
684706
}
685707
else
686708
{
@@ -694,9 +716,12 @@ int Ganglion::call_open ()
694716
safe_logger (
695717
spdlog::level::info, "mac address is not specified, try to find ganglion without it");
696718

697-
res = func ((void *)&firmware);
698719

699-
safe_logger (spdlog::level::info, "detected firmware version {}", firmware);
720+
if (firmware == 0)
721+
{
722+
res = func ((void *)&firmware);
723+
safe_logger (spdlog::level::info, "detected firmware version {}", firmware);
724+
}
700725
}
701726
if (res != GanglionLib::CustomExitCodes::STATUS_OK)
702727
{

src/board_controller/openbci/ganglion_native.cpp

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ GanglionNative::GanglionNative (struct BrainFlowInputParams params)
4242
is_streaming = false;
4343
start_command = "b";
4444
stop_command = "s";
45-
firmware = 0;
45+
firmware = get_firmware_from_params (params);
4646
}
4747

4848
GanglionNative::~GanglionNative ()
@@ -51,6 +51,25 @@ GanglionNative::~GanglionNative ()
5151
release_session ();
5252
}
5353

54+
int GanglionNative::get_firmware_from_params (BrainFlowInputParams &params)
55+
{
56+
if (params.other_info.compare ("fw:auto") == 0)
57+
{
58+
safe_logger (spdlog::level::info, "Autodetecting firmware version...");
59+
return 0;
60+
}
61+
if (params.other_info.compare ("fw:2") == 0)
62+
{
63+
safe_logger (spdlog::level::info, "Setting firmware version to 2");
64+
return 2;
65+
}
66+
else
67+
{
68+
safe_logger (spdlog::level::info, "Setting firmware version to 3");
69+
return 3;
70+
}
71+
}
72+
5473
int GanglionNative::prepare_session ()
5574
{
5675
if (initialized)
@@ -167,7 +186,8 @@ int GanglionNative::prepare_session ()
167186
for (size_t j = 0; j < service.characteristic_count; j++)
168187
{
169188
// Read the software revision characteristic to get the firmware version
170-
if (strcmp (service.characteristics[j].uuid.value, GANGLION_SOFTWARE_REVISION) == 0)
189+
if (firmware == 0 &&
190+
strcmp (service.characteristics[j].uuid.value, GANGLION_SOFTWARE_REVISION) == 0)
171191
{
172192
uint8_t *data;
173193
size_t data_length;

src/board_controller/openbci/inc/ganglion.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,7 @@ class Ganglion : public Board
6767
double *acceleration, double *package);
6868
void decompress_firmware_2 (struct GanglionLib::GanglionData *data, float *last_data,
6969
double *acceleration, double *package);
70+
71+
private:
72+
int get_firmware_from_params (BrainFlowInputParams &params);
7073
};

src/board_controller/openbci/inc/ganglion_native.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,4 +117,7 @@ class GanglionNative : public BLELibBoard
117117

118118
void decompress_firmware_3 (const uint8_t *data, double *package);
119119
void decompress_firmware_2 (const uint8_t *data, double *package);
120+
121+
private:
122+
int get_firmware_from_params (BrainFlowInputParams &params);
120123
};

0 commit comments

Comments
 (0)