Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 7 additions & 13 deletions openBCICyton.js
Original file line number Diff line number Diff line change
Expand Up @@ -2164,20 +2164,14 @@ Cyton.prototype._finalizeNewSample = function (sampleObject) {
if (!sampleObject.valid) {
this.badPackets++;
this.emit(k.OBCIEmitterDroppedPacket, [this.previousSampleNumber + 1]);
} else if (this.impedanceTest.active) {
if (_.eq(this.getBoardType(), k.OBCIBoardDaisy)) {
this._finalizeNewSampleForDaisy(sampleObject, true);
} else {
this._processImpedanceTest(sampleObject);
this.emit(k.OBCIEmitterSample, sampleObject);
}
} else {
// With the daisy board attached, lower channels (1-8) come in packets with odd sample numbers and upper
// channels (9-16) come in packets with even sample numbers
if (_.eq(this.getBoardType(), k.OBCIBoardDaisy)) {
// Send the sample for downstream sample compaction
this._finalizeNewSampleForDaisy(sampleObject, false);
// With the daisy board attached, lower channels (1-8) come in packets with odd sample numbers and upper
// channels (9-16) come in packets with even sample numbers
this._finalizeNewSampleForDaisy(sampleObject);
} else {
if (this.impedanceTest.active) this._processImpedanceTest(sampleObject);
this.emit(k.OBCIEmitterSample, sampleObject);
}
}
Expand All @@ -2193,7 +2187,7 @@ Cyton.prototype._finalizeNewSample = function (sampleObject) {
* @private
* @author AJ Keller (@pushtheworldllc)
*/
Cyton.prototype._finalizeNewSampleForDaisy = function (sampleObject, impedance) {
Cyton.prototype._finalizeNewSampleForDaisy = function (sampleObject) {
if (obciUtils.isOdd(sampleObject.sampleNumber)) {
// Check for the skipped packet condition
if (this._lowerChannelsSampleObject) {
Expand All @@ -2209,8 +2203,8 @@ Cyton.prototype._finalizeNewSampleForDaisy = function (sampleObject, impedance)
// Set the _lowerChannelsSampleObject object to null
this._lowerChannelsSampleObject = null;
// Emite the new merged sample and if relevant process impedance
if (impedance) this._processImpedanceTest(mergedSample);
this.emit('sample', mergedSample);
if (this.impedanceTest.active) this._processImpedanceTest(mergedSample);
this.emit(k.OBCIEmitterSample, mergedSample);
} else {
// Missed the odd packet, i.e. two evens in a row
this.info.missedPackets++;
Expand Down
6 changes: 3 additions & 3 deletions openBCISimulator.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
const EventEmitter = require('events').EventEmitter;
const util = require('util');
const stream = require('stream');

const obciUtilities = require('openbci-utilities').Utilities;
const k = require('openbci-utilities').Constants;
const OpenBCIUtilities = require('openbci-utilities');
const obciUtilities = OpenBCIUtilities.Utilities;
const k = OpenBCIUtilities.Constants;
const now = require('performance-now');
const Buffer = require('safe-buffer').Buffer;

Expand Down
79 changes: 78 additions & 1 deletion test/openBCICyton-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2463,11 +2463,83 @@ $$$`);
});
});

describe('#_finalizeNewSample', function () {
let ourBoard;

before(() => {
ourBoard = new Cyton({
verbose: true,
simulate: true
});
});

it('should emit dropped packet on bad packet', function (done) {
const sample = openBCIUtilities.newSample(0);
sample.valid = false;
sample._count = 52;

const expectedBadPackets = 1;
const expectedInternalCount = 3;
const expectedPreviousSampleNumber = 2;

ourBoard.badPackets = expectedBadPackets - 1;
ourBoard.previousSampleNumber = expectedPreviousSampleNumber - 1;
ourBoard.sampleCount = expectedInternalCount;

ourBoard.once('droppedPacket', (droppedPacketArray) => {
expect(droppedPacketArray).to.deep.equal([expectedPreviousSampleNumber]);
expect(ourBoard.badPackets).to.equal(expectedBadPackets);
done();
});
ourBoard._finalizeNewSample(sample);
});

it('will send sample to processing if daisy', function () {
const sample = openBCIUtilities.newSample(0);

ourBoard.overrideInfoForBoardType(k.OBCIBoardDaisy);

let finalizeNewSampleForDaisySpy = sinon.spy(ourBoard, '_finalizeNewSampleForDaisy');

ourBoard._finalizeNewSample(sample);

finalizeNewSampleForDaisySpy.should.have.been.calledOnce();
finalizeNewSampleForDaisySpy.restore();
});

it('will send sample to process impedance test', function () {
const sample = openBCIUtilities.newSample(0);

ourBoard.overrideInfoForBoardType(k.OBCIBoardCyton);
ourBoard.impedanceTest.active = true;

let processImpedanceTestSpy = sinon.spy(ourBoard, '_processImpedanceTest');

ourBoard._finalizeNewSample(sample);

processImpedanceTestSpy.should.have.been.calledOnce();
processImpedanceTestSpy.restore();
});

it('will emit sample whtn process impedance test active', function (done) {
const sample = openBCIUtilities.newSample(0);

ourBoard.overrideInfoForBoardType(k.OBCIBoardCyton);
ourBoard.impedanceTest.active = true;

ourBoard.once('sample', () => {
done();
});

ourBoard._finalizeNewSample(sample);
});
});
describe('#_finalizeNewSampleForDaisy', function () {
let ourBoard, randomSampleGenerator, sampleEvent, failTimeout;
before(() => {
ourBoard = new Cyton({
verbose: true
verbose: true,
simulate: true
});
randomSampleGenerator = openBCIUtilities.randomSample(k.OBCINumberOfChannelsCyton, k.OBCISampleRate250, false, 'none');
});
Expand Down Expand Up @@ -2503,12 +2575,17 @@ $$$`);
// The function to be called when sample event is fired
let sampleEvent = (sample) => {
// test pass here
processImpedanceTestSpy.should.have.been.calledOnce();
processImpedanceTestSpy.restore();
done();
};

// Subscribe to the sample event
ourBoard.once('sample', sampleEvent);

ourBoard.impedanceTest.active = true;
let processImpedanceTestSpy = sinon.spy(ourBoard, '_processImpedanceTest');

// Call the function under test twice
ourBoard._finalizeNewSampleForDaisy(oddSample);
ourBoard._finalizeNewSampleForDaisy(evenSample);
Expand Down