Skip to content

Commit 5663abd

Browse files
committed
Fix Ganglion v3 firmware detection on MacOS
1 parent 5095f6e commit 5663abd

6 files changed

Lines changed: 47 additions & 49 deletions

File tree

OpenBCI_GUI/BoardGanglion.pde

Lines changed: 8 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,16 @@ class BoardGanglionNative extends BoardGanglion {
22

33
private PacketLossTrackerGanglionBLE packetLossTrackerGanglionNative;
44
private String boardName;
5-
private int firmwareVersion = 0;
5+
private int firmwareVersion;
66

77
public BoardGanglionNative() {
88
super();
99
}
1010

11-
public BoardGanglionNative(String name, boolean showUpgradePopup) {
11+
public BoardGanglionNative(GanglionDevice device) {
1212
super();
13-
this.boardName = name;
14-
15-
if (name.indexOf("Ganglion 1.3") != -1) {
16-
this.firmwareVersion = 3;
17-
output("Detected Ganglion firmware version 3");
18-
}
19-
else {
20-
this.firmwareVersion = 2;
21-
output("Detected Ganglion firmware version 2");
22-
if (showUpgradePopup) {
23-
PopupMessage msg = new PopupMessage("Warning", "Ganglion firmware version 2 detected. Please update to version 3 for better performance. \n\nhttps://docs.openbci.com/Ganglion/GanglionProgram");
24-
}
25-
}
13+
this.boardName = device.identifier;
14+
this.firmwareVersion = device.firmware_version;
2615
}
2716

2817
@Override
@@ -64,29 +53,18 @@ class BoardGanglionNative extends BoardGanglion {
6453

6554
class BoardGanglionBLE extends BoardGanglion {
6655

67-
private int firmwareVersion = 0;
56+
private int firmwareVersion;
6857
private PacketLossTrackerGanglionBLE packetLossTrackerGanglionBLE;
6958

7059
public BoardGanglionBLE() {
7160
super();
7261
}
7362

74-
public BoardGanglionBLE(String deviceName, String serialPort, String macAddress, boolean showUpgradePopup) {
63+
public BoardGanglionBLE(GanglionDevice device, String serialPort) {
7564
super();
7665
this.serialPort = serialPort;
77-
this.macAddress = macAddress;
78-
79-
if (deviceName.indexOf("Ganglion 1.3") != -1) {
80-
this.firmwareVersion = 3;
81-
output("Detected Ganglion firmware version 3");
82-
}
83-
else {
84-
this.firmwareVersion = 2;
85-
if (showUpgradePopup) {
86-
PopupMessage msg = new PopupMessage("Warning", "Ganglion firmware version 2 detected. Please update to version 3 for better performance. \n\nhttps://docs.openbci.com/Ganglion/GanglionProgram");
87-
}
88-
output("Detected Ganglion firmware version 2");
89-
}
66+
this.macAddress = device.mac_address;
67+
this.firmwareVersion = device.firmware_version;
9068
}
9169

9270
@Override

OpenBCI_GUI/ControlPanel.pde

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,13 @@
1717

1818
import controlP5.*;
1919

20-
import openbci_gui_helpers.*;
21-
2220
import java.io.IOException;
2321
import java.util.List;
2422

23+
import openbci_gui_helpers.GUIHelper;
2524
import openbci_gui_helpers.GanglionError;
25+
import openbci_gui_helpers.GanglionDevice;
26+
2627
import com.vmichalak.protocol.ssdp.Device;
2728
import com.vmichalak.protocol.ssdp.SSDPClient;
2829

@@ -675,7 +676,7 @@ class BLEBox {
675676
private ControlP5 bleBox_cp5;
676677
private MenuList bleList;
677678
private Button refreshBLE;
678-
Map<String, String> bleMACAddrMap = new HashMap<String, String>();
679+
GanglionDevice[] ganglionDevices;
679680

680681
BLEBox(int _x, int _y, int _w, int _h, int _padding) {
681682
x = _x;
@@ -738,12 +739,12 @@ class BLEBox {
738739
bleIsRefreshing = true;
739740

740741
try {
741-
bleMACAddrMap = GUIHelper.scan_for_ganglions (3);
742-
for (Map.Entry<String, String> entry : bleMACAddrMap.entrySet ())
742+
ganglionDevices = GUIHelper.scan_for_ganglions (3);
743+
for (GanglionDevice device : ganglionDevices)
743744
{
744-
bleList.addItem(entry.getKey(), entry.getValue(), "");
745+
bleList.addItem(device.identifier, device.mac_address, "");
745746
bleList.updateMenu();
746-
println("Found Ganglion Board: " + entry.getKey() + " " + entry.getValue());
747+
println("Found Ganglion Board: " + device.identifier + " " + device.mac_address);
747748
}
748749
} catch (GanglionError e)
749750
{
@@ -773,10 +774,10 @@ class BLEBox {
773774
final String comPort = getBLED112Port();
774775
if (comPort != null) {
775776
try {
776-
bleMACAddrMap = GUIHelper.scan_for_ganglions (comPort, 3);
777-
for (Map.Entry<String, String> entry : bleMACAddrMap.entrySet ())
777+
ganglionDevices = GUIHelper.scan_for_ganglions (comPort, 3);
778+
for (GanglionDevice device : ganglionDevices)
778779
{
779-
bleList.addItem(entry.getKey(), comPort, "");
780+
bleList.addItem(device.identifier, comPort, "");
780781
bleList.updateMenu();
781782
}
782783
} catch (GanglionError e)

OpenBCI_GUI/OpenBCI_GUI.pde

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ import com.fazecast.jSerialComm.*; //Helps distinguish serial ports on Windows
5656
import org.apache.commons.lang3.time.StopWatch;
5757
import http.requests.*;
5858
import java.util.concurrent.atomic.AtomicBoolean;
59+
import openbci_gui_helpers.GanglionDevice;
5960

6061

6162
//------------------------------------------------------------------------
@@ -617,16 +618,34 @@ void initSystem() {
617618
if (selectedProtocol == BoardProtocol.WIFI) {
618619
currentBoard = new BoardGanglionWifi(wifi_ipAddress, selectedSamplingRate);
619620
} else if (selectedProtocol == BoardProtocol.BLED112) {
620-
String ganglionName = (String)(controlPanel.bleBox.bleList.getItem(controlPanel.bleBox.bleList.activeItem).get("headline"));
621-
String ganglionPort = (String)(controlPanel.bleBox.bleList.getItem(controlPanel.bleBox.bleList.activeItem).get("subline"));
622-
String ganglionMac = controlPanel.bleBox.bleMACAddrMap.get(ganglionName);
623-
println("MAC address for Ganglion is " + ganglionMac);
624-
currentBoard = new BoardGanglionBLE(ganglionName, ganglionPort, ganglionMac, showUpgradePopup);
621+
String name = (String)(controlPanel.bleBox.bleList.getItem(controlPanel.bleBox.bleList.activeItem).get("headline"));
622+
String port = (String)(controlPanel.bleBox.bleList.getItem(controlPanel.bleBox.bleList.activeItem).get("subline"));
623+
624+
GanglionDevice device;
625+
device = Arrays.stream(controlPanel.bleBox.ganglionDevices).filter(x -> x.identifier.equals(name)).findFirst().orElse(null);
626+
627+
println("MAC address for Ganglion is " + device.mac_address);
628+
println("Ganglion firmware is " + device.firmware_version);
629+
630+
if (device.firmware_version == 2 && showUpgradePopup) {
631+
PopupMessage msg = new PopupMessage("Warning", "Ganglion firmware version 2 detected. Please update to version 3 for better performance. \n\nhttps://docs.openbci.com/Ganglion/GanglionProgram");
632+
}
633+
634+
currentBoard = new BoardGanglionBLE(device, port);
625635
} else if (selectedProtocol == BoardProtocol.NATIVE_BLE) {
626-
String ganglionName = (String)(controlPanel.bleBox.bleList.getItem(controlPanel.bleBox.bleList.activeItem).get("headline"));
627-
String ganglionMac = controlPanel.bleBox.bleMACAddrMap.get(ganglionName);
628-
println("MAC address for Ganglion is " + ganglionMac);
629-
currentBoard = new BoardGanglionNative(ganglionName, showUpgradePopup);
636+
String name = (String)(controlPanel.bleBox.bleList.getItem(controlPanel.bleBox.bleList.activeItem).get("headline"));
637+
638+
GanglionDevice device;
639+
device = Arrays.stream(controlPanel.bleBox.ganglionDevices).filter(x -> x.identifier.equals(name)).findFirst().orElse(null);
640+
641+
println("MAC address for Ganglion is " + device.mac_address);
642+
println("Ganglion firmware is " + device.firmware_version);
643+
644+
if (device.firmware_version == 2 && showUpgradePopup) {
645+
PopupMessage msg = new PopupMessage("Warning", "Ganglion firmware version 2 detected. Please update to version 3 for better performance. \n\nhttps://docs.openbci.com/Ganglion/GanglionProgram");
646+
}
647+
648+
currentBoard = new BoardGanglionNative(device);
630649
}
631650
break;
632651
case DATASOURCE_STREAMING:
Binary file not shown.
Binary file not shown.
Binary file not shown.

0 commit comments

Comments
 (0)