Skip to content

Commit 6001e37

Browse files
committed
Support Ganglion firmware v3 decompression
1 parent 9ef8bc9 commit 6001e37

4 files changed

Lines changed: 95 additions & 34 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,4 @@ libDataHandler.so
2626
libGanglionLib.so
2727
libGanglionScan.so
2828
libunicorn.so
29+
OpenBCI_GUI/out/

OpenBCI_GUI/BoardGanglion.pde

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ class BoardGanglionNative extends BoardGanglion {
22

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

67
public BoardGanglionNative() {
78
super();
@@ -10,6 +11,15 @@ class BoardGanglionNative extends BoardGanglion {
1011
public BoardGanglionNative(String name) {
1112
super();
1213
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+
}
1323
}
1424

1525
@Override
@@ -37,24 +47,40 @@ class BoardGanglionNative extends BoardGanglion {
3747

3848
@Override
3949
protected PacketLossTracker setupPacketLossTracker() {
40-
packetLossTrackerGanglionNative = new PacketLossTrackerGanglionBLE(getSampleIndexChannel(), getTimestampChannel());
50+
if (firmwareVersion == 2) {
51+
packetLossTrackerGanglionNative = new PacketLossTrackerGanglionBLE2(getSampleIndexChannel(), getTimestampChannel());
52+
}
53+
else if (firmwareVersion == 3) {
54+
packetLossTrackerGanglionNative = new PacketLossTrackerGanglionBLE3(getSampleIndexChannel(), getTimestampChannel());
55+
}
56+
4157
packetLossTrackerGanglionNative.setAccelerometerActive(isAccelerometerActive());
4258
return packetLossTrackerGanglionNative;
4359
}
4460
};
4561

4662
class BoardGanglionBLE extends BoardGanglion {
4763

64+
private int firmwareVersion = 0;
4865
private PacketLossTrackerGanglionBLE packetLossTrackerGanglionBLE;
4966

5067
public BoardGanglionBLE() {
5168
super();
5269
}
5370

54-
public BoardGanglionBLE(String serialPort, String macAddress) {
71+
public BoardGanglionBLE(String deviceName, String serialPort, String macAddress) {
5572
super();
5673
this.serialPort = serialPort;
5774
this.macAddress = macAddress;
75+
76+
if (deviceName.indexOf("Ganglion 1.3") != -1) {
77+
this.firmwareVersion = 3;
78+
output("Detected Ganglion firmware version 3");
79+
}
80+
else {
81+
this.firmwareVersion = 2;
82+
output("Detected Ganglion firmware version 2");
83+
}
5884
}
5985

6086
@Override
@@ -75,7 +101,13 @@ class BoardGanglionBLE extends BoardGanglion {
75101

76102
@Override
77103
protected PacketLossTracker setupPacketLossTracker() {
78-
packetLossTrackerGanglionBLE = new PacketLossTrackerGanglionBLE(getSampleIndexChannel(), getTimestampChannel());
104+
if (firmwareVersion == 2) {
105+
packetLossTrackerGanglionBLE = new PacketLossTrackerGanglionBLE2(getSampleIndexChannel(), getTimestampChannel());
106+
}
107+
else if (firmwareVersion == 3) {
108+
packetLossTrackerGanglionBLE = new PacketLossTrackerGanglionBLE3(getSampleIndexChannel(), getTimestampChannel());
109+
}
110+
79111
packetLossTrackerGanglionBLE.setAccelerometerActive(isAccelerometerActive());
80112
return packetLossTrackerGanglionBLE;
81113
}
@@ -141,6 +173,7 @@ abstract class BoardGanglion extends BoardBrainFlow implements AccelerometerCapa
141173
protected String serialPort = "";
142174
protected String macAddress = "";
143175
protected String ipAddress = "";
176+
144177
private boolean isCheckingImpedance = false;
145178
private boolean isGettingAccel = false;
146179

OpenBCI_GUI/OpenBCI_GUI.pde

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -613,11 +613,11 @@ void initSystem() {
613613
String ganglionPort = (String)(controlPanel.bleBox.bleList.getItem(controlPanel.bleBox.bleList.activeItem).get("subline"));
614614
String ganglionMac = controlPanel.bleBox.bleMACAddrMap.get(ganglionName);
615615
println("MAC address for Ganglion is " + ganglionMac);
616-
currentBoard = new BoardGanglionBLE(ganglionPort, ganglionMac);
616+
currentBoard = new BoardGanglionBLE(ganglionName, ganglionPort, ganglionMac);
617617
} else if (selectedProtocol == BoardProtocol.NATIVE_BLE) {
618618
String ganglionName = (String)(controlPanel.bleBox.bleList.getItem(controlPanel.bleBox.bleList.activeItem).get("headline"));
619619
String ganglionMac = controlPanel.bleBox.bleMACAddrMap.get(ganglionName);
620-
println("MAC address for Ganglion is " + ganglionName);
620+
println("MAC address for Ganglion is " + ganglionMac);
621621
currentBoard = new BoardGanglionNative(ganglionName);
622622
}
623623
break;

OpenBCI_GUI/PacketLossTracker.pde

Lines changed: 56 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -211,9 +211,6 @@ class PacketLossTrackerCytonSerialDaisy extends PacketLossTracker {
211211
}
212212
}
213213

214-
// with accel: sample index range 0-100, all sample indexes are duplicated except for zero.
215-
// eg 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, ... , 99, 99, 100, 100, 0, 1, 1, 2, 2, 3, 3, ...
216-
// without acceL: sample 0, then 101-200
217214
class PacketLossTrackerGanglionBLE extends PacketLossTracker {
218215

219216
ArrayList<Integer> sampleIndexArrayAccel = new ArrayList<Integer>();
@@ -225,32 +222,6 @@ class PacketLossTrackerGanglionBLE extends PacketLossTracker {
225222

226223
PacketLossTrackerGanglionBLE(int _sampleIndexChannel, int _timestampChannel, TTQTimeProvider _timeProvider) {
227224
super(_sampleIndexChannel, _timestampChannel, _timeProvider);
228-
229-
{
230-
// add indices to array of indices
231-
// With accel: 0-100, all sample indexes are duplicated except for zero
232-
sampleIndexArrayAccel.add(0);
233-
int firstIndex = 1;
234-
int lastIndex = 100;
235-
for (int i = firstIndex; i <= lastIndex; i++) {
236-
sampleIndexArrayAccel.add(i);
237-
sampleIndexArrayAccel.add(i);
238-
}
239-
}
240-
241-
{
242-
// add indices to array of indices
243-
// Without accel: 0, then 101 to 200, all sample indexes are duplicated except for zero
244-
sampleIndexArrayNoAccel.add(0);
245-
int firstIndex = 101;
246-
int lastIndex = 200;
247-
for (int i = firstIndex; i <= lastIndex; i++) {
248-
sampleIndexArrayNoAccel.add(i);
249-
sampleIndexArrayNoAccel.add(i);
250-
}
251-
}
252-
253-
setAccelerometerActive(true);
254225
}
255226

256227
public void setAccelerometerActive(boolean active) {
@@ -264,4 +235,60 @@ class PacketLossTrackerGanglionBLE extends PacketLossTracker {
264235

265236
reset();
266237
}
238+
}
239+
240+
// With acceleration: sample index range 0-100, all sample indexes are duplicated except for zero.
241+
// E.g. 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, ... , 99, 99, 100, 100, 0, 1, 1, 2, 2, 3, 3, ...
242+
// Without acceleration: sample 0, then 101-200
243+
class PacketLossTrackerGanglionBLE2 extends PacketLossTrackerGanglionBLE {
244+
PacketLossTrackerGanglionBLE2(int _sampleIndexChannel, int _timestampChannel) {
245+
this(_sampleIndexChannel, _timestampChannel, new RealTimeProvider());
246+
}
247+
248+
PacketLossTrackerGanglionBLE2(int _sampleIndexChannel, int _timestampChannel, TTQTimeProvider _timeProvider) {
249+
super(_sampleIndexChannel, _timestampChannel, _timeProvider);
250+
251+
// Add indices to array of indices
252+
// With acceleration: 0-100, all sample indexes are duplicated except for zero
253+
sampleIndexArrayAccel.add(0);
254+
for (int i = 1; i <= 100; i++) {
255+
sampleIndexArrayAccel.add(i);
256+
sampleIndexArrayAccel.add(i);
257+
}
258+
259+
// Add indices to array of indices
260+
// Without acceleration: 0, then 101 to 200, all sample indexes are duplicated except for zero
261+
sampleIndexArrayNoAccel.add(0);
262+
for (int i = 101; i <= 200; i++) {
263+
sampleIndexArrayNoAccel.add(i);
264+
sampleIndexArrayNoAccel.add(i);
265+
}
266+
267+
setAccelerometerActive(true);
268+
}
269+
}
270+
271+
// With acceleration: sample index range 0-100, all sample indexes are duplicated (including zero).
272+
// E.g. 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, ... , 99, 99, 100, 100, 0, 0, 1, 1, 2, 2, 3, 3, ...
273+
// Without acceleration: 101-200
274+
class PacketLossTrackerGanglionBLE3 extends PacketLossTrackerGanglionBLE {
275+
PacketLossTrackerGanglionBLE3(int _sampleIndexChannel, int _timestampChannel) {
276+
this(_sampleIndexChannel, _timestampChannel, new RealTimeProvider());
277+
}
278+
279+
PacketLossTrackerGanglionBLE3(int _sampleIndexChannel, int _timestampChannel, TTQTimeProvider _timeProvider) {
280+
super(_sampleIndexChannel, _timestampChannel, _timeProvider);
281+
282+
for (int i = 0; i < 100; i++) {
283+
sampleIndexArrayAccel.add(i);
284+
sampleIndexArrayAccel.add(i);
285+
}
286+
287+
for (int i = 100; i < 200; i++) {
288+
sampleIndexArrayNoAccel.add(i);
289+
sampleIndexArrayNoAccel.add(i);
290+
}
291+
292+
setAccelerometerActive(true);
293+
}
267294
}

0 commit comments

Comments
 (0)