Skip to content

Commit c83c830

Browse files
author
AJ Keller
authored
Merge pull request #20 from aj-ptw/development
FIX: Daisy with cyton over wifi accel data counts
2 parents befae45 + 2b8db8a commit c83c830

5 files changed

+76
-9
lines changed

changelog.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
# v0.2.6
2+
3+
### Bug Fixes
4+
5+
* Accel data with counts did not work for cyton with daisy over wifi.
6+
17
# v0.2.5
28

39
### Bug Fixes

openBCIUtilities.js

+18-5
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ let utilitiesModule = {
4646
* @property {Number} lastSampleNumber (optional) - The last sample number
4747
* @property {Boolean} scale (optional) Default `true`. A gain of 24 for Cyton will be used and 51 for ganglion by default.
4848
*/
49+
4950
/**
5051
* @description Used to extract samples out of a buffer of unknown length
5152
* @param dataBuffer {Buffer} - A buffer to parse for samples
@@ -1815,7 +1816,9 @@ function makeDaisySampleObject (lowerSampleObject, upperSampleObject) {
18151816
} else {
18161817
daisySampleObject.accelData = upperSampleObject.accelData;
18171818
}
1818-
} else if (lowerSampleObject.hasOwnProperty('accelDataCounts')) {
1819+
}
1820+
1821+
if (lowerSampleObject.hasOwnProperty('accelDataCounts')) {
18191822
if (lowerSampleObject.accelDataCounts[0] > 0 || lowerSampleObject.accelDataCounts[1] > 0 || lowerSampleObject.accelDataCounts[2] > 0) {
18201823
daisySampleObject.accelDataCounts = lowerSampleObject.accelDataCounts;
18211824
} else {
@@ -1870,10 +1873,20 @@ function makeDaisySampleObjectWifi (lowerSampleObject, upperSampleObject) {
18701873
'upper': upperSampleObject.timestamp
18711874
};
18721875

1873-
if (lowerSampleObject.accelData) {
1874-
daisySampleObject['accelData'] = lowerSampleObject.accelData;
1875-
} else if (upperSampleObject.accelData) {
1876-
daisySampleObject['accelData'] = upperSampleObject.accelData;
1876+
if (lowerSampleObject.hasOwnProperty('accelData')) {
1877+
if (lowerSampleObject.accelData[0] > 0 || lowerSampleObject.accelData[1] > 0 || lowerSampleObject.accelData[2] > 0) {
1878+
daisySampleObject.accelData = lowerSampleObject.accelData;
1879+
} else {
1880+
daisySampleObject.accelData = upperSampleObject.accelData;
1881+
}
1882+
}
1883+
1884+
if (lowerSampleObject.hasOwnProperty('accelDataCounts')) {
1885+
if (lowerSampleObject.accelDataCounts[0] > 0 || lowerSampleObject.accelDataCounts[1] > 0 || lowerSampleObject.accelDataCounts[2] > 0) {
1886+
daisySampleObject.accelDataCounts = lowerSampleObject.accelDataCounts;
1887+
} else {
1888+
daisySampleObject.accelDataCounts = upperSampleObject.accelDataCounts;
1889+
}
18771890
}
18781891

18791892
daisySampleObject['valid'] = true;

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "openbci-utilities",
3-
"version": "0.2.5",
3+
"version": "0.2.6",
44
"description": "The official utility package of Node.js SDK for the OpenBCI Biosensor Boards.",
55
"main": "index.js",
66
"scripts": {

test/openBCIConstants-test.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1958,7 +1958,7 @@ describe('OpenBCIConstants', function () {
19581958
assert.equal('Ganglion', k.OBCIGanglionPrefix);
19591959
});
19601960
it('Ganglion ble search time', function () {
1961-
assert.equal(0.032, k.OBCIGanglionAccelScaleFactor);
1961+
assert.equal(0.016, k.OBCIGanglionAccelScaleFactor);
19621962
});
19631963
it('Ganglion ble search time', function () {
19641964
assert.equal(20000, k.OBCIGanglionBleSearchTime);

test/openBCIUtilities-test.js

+50-2
Original file line numberDiff line numberDiff line change
@@ -1674,10 +1674,11 @@ describe('openBCIUtilities', function () {
16741674
lowerSampleObject.channelData = [1, 2, 3, 4, 5, 6, 7, 8];
16751675
lowerSampleObject.auxData = [0, 1, 2];
16761676
lowerSampleObject.timestamp = 4;
1677-
lowerSampleObject.accelData = [0.5, -0.5, 1];
1677+
lowerSampleObject.accelData = [0, 0, 0];
16781678
// Make the upper sample (channels 9-16)
16791679
upperSampleObject = openBCIUtilities.newSample(2);
16801680
upperSampleObject.channelData = [9, 10, 11, 12, 13, 14, 15, 16];
1681+
lowerSampleObject.accelData = [0, 1, 2];
16811682
upperSampleObject.auxData = [3, 4, 5];
16821683
upperSampleObject.timestamp = 8;
16831684

@@ -1686,11 +1687,12 @@ describe('openBCIUtilities', function () {
16861687
lowerSampleObjectNoScale = openBCIUtilities.newSample(1);
16871688
lowerSampleObjectNoScale.channelDataCounts = [1, 2, 3, 4, 5, 6, 7, 8];
16881689
lowerSampleObjectNoScale.auxData = [0, 1, 2];
1690+
lowerSampleObjectNoScale.accelDataCounts = [0, 0, 0];
16891691
lowerSampleObjectNoScale.timestamp = 4;
1690-
lowerSampleObjectNoScale.accelData = [0.5, -0.5, 1];
16911692
// Make the upper sample (channels 9-16)
16921693
upperSampleObjectNoScale = openBCIUtilities.newSample(2);
16931694
upperSampleObjectNoScale.channelDataCounts = [9, 10, 11, 12, 13, 14, 15, 16];
1695+
lowerSampleObjectNoScale.accelDataCounts = [0, 1, 2];
16941696
upperSampleObjectNoScale.auxData = [3, 4, 5];
16951697
upperSampleObjectNoScale.timestamp = 8;
16961698

@@ -1741,6 +1743,28 @@ describe('openBCIUtilities', function () {
17411743
});
17421744
it('should store an accelerometer value if present', function () {
17431745
expect(daisySampleObject).to.have.property('accelData');
1746+
expect(daisySampleObject.accelData).to.deep.equal([0, 1, 2]);
1747+
expect(daisySampleObjectNoScale).to.have.property('accelDataCounts');
1748+
expect(daisySampleObjectNoScale.accelDataCounts).to.deep.equal([0, 1, 2]);
1749+
});
1750+
it('should work for all accel cases to extract the non-zero values', function () {
1751+
let lowerSample = openBCIUtilities.newSample(1);
1752+
lowerSample.accelData = [0, 1, 2];
1753+
let upperSample = openBCIUtilities.newSample(2);
1754+
upperSample.accelData = [0, 0, 0];
1755+
1756+
let lowerSampleNoScale = openBCIUtilities.newSampleNoScale(1);
1757+
lowerSampleNoScale.accelDataCounts = [0, 1, 2];
1758+
let upperSampleNoScale = openBCIUtilities.newSampleNoScale(2);
1759+
upperSampleNoScale.accelDataCounts = [0, 0, 0];
1760+
1761+
// Call the function under test
1762+
let daisySample = openBCIUtilities.makeDaisySampleObjectWifi(lowerSample, upperSample);
1763+
let daisySampleNoScale = openBCIUtilities.makeDaisySampleObjectWifi(lowerSampleNoScale, upperSampleNoScale);
1764+
expect(daisySample).to.have.property('accelData');
1765+
expect(daisySample.accelData).to.deep.equal([0, 1, 2]);
1766+
expect(daisySampleNoScale).to.have.property('accelDataCounts');
1767+
expect(daisySampleNoScale.accelDataCounts).to.deep.equal([0, 1, 2]);
17441768
});
17451769
});
17461770
describe('#isEven', function () {
@@ -2708,6 +2732,30 @@ describe('#extractRawDataPackets', function () {
27082732
expect(bufferEqual(expectedRawDataPackets[i], output.rawDataPackets[i])).to.be.true(`Expected 0x${expectedRawDataPackets[i].toString('HEX')} to equal 0x${output.rawDataPackets[i].toString('HEX')}`);
27092733
}
27102734
});
2735+
it('should be able to extract multiple packets from a single buffer when daisy', () => {
2736+
// We are going to extract multiple buffers
2737+
let expectedNumberOfBuffers = 4;
2738+
// declare the big buffer
2739+
let buffer = new Buffer(k.OBCIPacketSize * expectedNumberOfBuffers);
2740+
// Fill that new big buffer with buffers
2741+
const expectedRawDataPackets = [
2742+
openBCIUtilities.samplePacketReal(0),
2743+
openBCIUtilities.samplePacketReal(0),
2744+
openBCIUtilities.samplePacketReal(1),
2745+
openBCIUtilities.samplePacketReal(1)
2746+
];
2747+
expectedRawDataPackets[0].copy(buffer, 0);
2748+
expectedRawDataPackets[1].copy(buffer, k.OBCIPacketSize);
2749+
expectedRawDataPackets[2].copy(buffer, k.OBCIPacketSize * 2);
2750+
expectedRawDataPackets[2].copy(buffer, k.OBCIPacketSize * 3);
2751+
// Call the function under test
2752+
const output = openBCIUtilities.extractRawDataPackets(buffer);
2753+
// The buffer should not have anything in it any more
2754+
expect(output.buffer).to.be.null();
2755+
for (let i = 0; i < expectedNumberOfBuffers; i++) {
2756+
expect(bufferEqual(expectedRawDataPackets[i], output.rawDataPackets[i])).to.be.true(`Expected 0x${expectedRawDataPackets[i].toString('HEX')} to equal 0x${output.rawDataPackets[i].toString('HEX')}`);
2757+
}
2758+
});
27112759

27122760
it('should be able to get multiple packets and keep extra data on the end', () => {
27132761
let expectedString = 'AJ';

0 commit comments

Comments
 (0)