Skip to content

Commit 16f6312

Browse files
philippittsretiutut
authored andcommitted
Fix Ganglion v3 firmware detection on MacOS
1 parent 93f39be commit 16f6312

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

@@ -625,7 +626,7 @@ class BLEBox {
625626
private ControlP5 bleBox_cp5;
626627
private MenuList bleList;
627628
private Button refreshBLE;
628-
Map<String, String> bleMACAddrMap = new HashMap<String, String>();
629+
GanglionDevice[] ganglionDevices;
629630

630631
BLEBox(int _x, int _y, int _w, int _h, int _padding) {
631632
x = _x;
@@ -688,12 +689,12 @@ private void refreshGanglionNativeList() {
688689
bleIsRefreshing = true;
689690

690691
try {
691-
bleMACAddrMap = GUIHelper.scan_for_ganglions (3);
692-
for (Map.Entry<String, String> entry : bleMACAddrMap.entrySet ())
692+
ganglionDevices = GUIHelper.scan_for_ganglions (3);
693+
for (GanglionDevice device : ganglionDevices)
693694
{
694-
bleList.addItem(entry.getKey(), entry.getValue(), "");
695+
bleList.addItem(device.identifier, device.mac_address, "");
695696
bleList.updateMenu();
696-
println("Found Ganglion Board: " + entry.getKey() + " " + entry.getValue());
697+
println("Found Ganglion Board: " + device.identifier + " " + device.mac_address);
697698
}
698699
} catch (GanglionError e)
699700
{
@@ -723,10 +724,10 @@ private void refreshGanglionNativeList() {
723724
final String comPort = getBLED112Port();
724725
if (comPort != null) {
725726
try {
726-
bleMACAddrMap = GUIHelper.scan_for_ganglions (comPort, 3);
727-
for (Map.Entry<String, String> entry : bleMACAddrMap.entrySet ())
727+
ganglionDevices = GUIHelper.scan_for_ganglions (comPort, 3);
728+
for (GanglionDevice device : ganglionDevices)
728729
{
729-
bleList.addItem(entry.getKey(), comPort, "");
730+
bleList.addItem(device.identifier, comPort, "");
730731
bleList.updateMenu();
731732
}
732733
} catch (GanglionError e)

OpenBCI_GUI/OpenBCI_GUI.pde

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

6263

6364
//------------------------------------------------------------------------
@@ -641,16 +642,34 @@ void initSystem() {
641642
}
642643

643644
if (selectedProtocol == BoardProtocol.BLED112) {
644-
String ganglionName = (String)(controlPanel.bleBox.bleList.getItem(controlPanel.bleBox.bleList.activeItem).get("headline"));
645-
String ganglionPort = (String)(controlPanel.bleBox.bleList.getItem(controlPanel.bleBox.bleList.activeItem).get("subline"));
646-
String ganglionMac = controlPanel.bleBox.bleMACAddrMap.get(ganglionName);
647-
println("MAC address for Ganglion is " + ganglionMac);
648-
currentBoard = new BoardGanglionBLE(ganglionName, ganglionPort, ganglionMac, showUpgradePopup);
645+
String name = (String)(controlPanel.bleBox.bleList.getItem(controlPanel.bleBox.bleList.activeItem).get("headline"));
646+
String port = (String)(controlPanel.bleBox.bleList.getItem(controlPanel.bleBox.bleList.activeItem).get("subline"));
647+
648+
GanglionDevice device;
649+
device = Arrays.stream(controlPanel.bleBox.ganglionDevices).filter(x -> x.identifier.equals(name)).findFirst().orElse(null);
650+
651+
println("MAC address for Ganglion is " + device.mac_address);
652+
println("Ganglion firmware is " + device.firmware_version);
653+
654+
if (device.firmware_version == 2 && showUpgradePopup) {
655+
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");
656+
}
657+
658+
currentBoard = new BoardGanglionBLE(device, port);
649659
} else if (selectedProtocol == BoardProtocol.NATIVE_BLE) {
650-
String ganglionName = (String)(controlPanel.bleBox.bleList.getItem(controlPanel.bleBox.bleList.activeItem).get("headline"));
651-
String ganglionMac = controlPanel.bleBox.bleMACAddrMap.get(ganglionName);
652-
println("MAC address for Ganglion is " + ganglionMac);
653-
currentBoard = new BoardGanglionNative(ganglionName, showUpgradePopup);
660+
String name = (String)(controlPanel.bleBox.bleList.getItem(controlPanel.bleBox.bleList.activeItem).get("headline"));
661+
662+
GanglionDevice device;
663+
device = Arrays.stream(controlPanel.bleBox.ganglionDevices).filter(x -> x.identifier.equals(name)).findFirst().orElse(null);
664+
665+
println("MAC address for Ganglion is " + device.mac_address);
666+
println("Ganglion firmware is " + device.firmware_version);
667+
668+
if (device.firmware_version == 2 && showUpgradePopup) {
669+
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");
670+
}
671+
672+
currentBoard = new BoardGanglionNative(device);
654673
}
655674
break;
656675
case DATASOURCE_STREAMING:
Binary file not shown.
Binary file not shown.
Binary file not shown.

0 commit comments

Comments
 (0)