Skip to content

Commit 8339f2c

Browse files
committed
ganglion: fix bug with bit shift in decompression
1 parent 75d4239 commit 8339f2c

File tree

1 file changed

+17
-19
lines changed

1 file changed

+17
-19
lines changed

open_bci_ganglion.py

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -458,8 +458,6 @@ def conv19bitToInt32 (threeByteBuffer):
458458

459459
return (prefix << 19) | (threeByteBuffer[0] << 16) | (threeByteBuffer[1] << 8) | threeByteBuffer[2]
460460

461-
462-
463461
def decompressDeltas19Bit(buffer):
464462
"""
465463
Called to when a compressed packet is received.
@@ -468,63 +466,63 @@ def decompressDeltas19Bit(buffer):
468466
"""
469467
if len(buffer) != 19:
470468
raise ValueError("Input should be 19 bytes long.")
471-
469+
472470
receivedDeltas = [[0, 0, 0, 0],[0, 0, 0, 0]]
473471

474472
# Sample 1 - Channel 1
475473
miniBuf = [
476474
(buffer[0] >> 5),
477-
((buffer[0] & 0x1F) << 3) | (buffer[1] >> 5),
478-
((buffer[1] & 0x1F) << 3) | (buffer[2] >> 5)
475+
((buffer[0] & 0x1F) << 3 & 0xFF) | (buffer[1] >> 5),
476+
((buffer[1] & 0x1F) << 3 & 0xFF) | (buffer[2] >> 5)
479477
]
480478

481479
receivedDeltas[0][0] = conv19bitToInt32(miniBuf)
482480

483481
# Sample 1 - Channel 2
484482
miniBuf = [
485483
(buffer[2] & 0x1F) >> 2,
486-
(buffer[2] << 6) | (buffer[3] >> 2),
487-
(buffer[3] << 6) | (buffer[4] >> 2)
484+
(buffer[2] << 6 & 0xFF) | (buffer[3] >> 2),
485+
(buffer[3] << 6 & 0xFF) | (buffer[4] >> 2)
488486
]
489487
receivedDeltas[0][1] = conv19bitToInt32(miniBuf)
490488

491489
# Sample 1 - Channel 3
492490
miniBuf = [
493-
((buffer[4] & 0x03) << 1) | (buffer[5] >> 7),
494-
((buffer[5] & 0x7F) << 1) | (buffer[6] >> 7),
495-
((buffer[6] & 0x7F) << 1) | (buffer[7] >> 7)
491+
((buffer[4] & 0x03) << 1 & 0xFF) | (buffer[5] >> 7),
492+
((buffer[5] & 0x7F) << 1 & 0xFF) | (buffer[6] >> 7),
493+
((buffer[6] & 0x7F) << 1 & 0xFF) | (buffer[7] >> 7)
496494
]
497495
receivedDeltas[0][2] = conv19bitToInt32(miniBuf)
498496

499497
# Sample 1 - Channel 4
500498
miniBuf = [
501499
((buffer[7] & 0x7F) >> 4),
502-
((buffer[7] & 0x0F) << 4) | (buffer[8] >> 4),
503-
((buffer[8] & 0x0F) << 4) | (buffer[9] >> 4)
500+
((buffer[7] & 0x0F) << 4 & 0xFF) | (buffer[8] >> 4),
501+
((buffer[8] & 0x0F) << 4 & 0xFF) | (buffer[9] >> 4)
504502
]
505503
receivedDeltas[0][3] = conv19bitToInt32(miniBuf)
506504

507505
# Sample 2 - Channel 1
508506
miniBuf = [
509507
((buffer[9] & 0x0F) >> 1),
510-
(buffer[9] << 7) | (buffer[10] >> 1),
511-
(buffer[10] << 7) | (buffer[11] >> 1)
508+
(buffer[9] << 7 & 0xFF) | (buffer[10] >> 1),
509+
(buffer[10] << 7 & 0xFF) | (buffer[11] >> 1)
512510
]
513511
receivedDeltas[1][0] = conv19bitToInt32(miniBuf)
514512

515513
# Sample 2 - Channel 2
516514
miniBuf = [
517-
((buffer[11] & 0x01) << 2) | (buffer[12] >> 6),
518-
(buffer[12] << 2) | (buffer[13] >> 6),
519-
(buffer[13] << 2) | (buffer[14] >> 6)
515+
((buffer[11] & 0x01) << 2 & 0xFF) | (buffer[12] >> 6),
516+
(buffer[12] << 2 & 0xFF) | (buffer[13] >> 6),
517+
(buffer[13] << 2 & 0xFF) | (buffer[14] >> 6)
520518
]
521519
receivedDeltas[1][1] = conv19bitToInt32(miniBuf)
522520

523521
# Sample 2 - Channel 3
524522
miniBuf = [
525523
((buffer[14] & 0x38) >> 3),
526-
((buffer[14] & 0x07) << 5) | ((buffer[15] & 0xF8) >> 3),
527-
((buffer[15] & 0x07) << 5) | ((buffer[16] & 0xF8) >> 3)
524+
((buffer[14] & 0x07) << 5 & 0xFF) | ((buffer[15] & 0xF8) >> 3),
525+
((buffer[15] & 0x07) << 5 & 0xFF) | ((buffer[16] & 0xF8) >> 3)
528526
]
529527
receivedDeltas[1][2] = conv19bitToInt32(miniBuf)
530528

0 commit comments

Comments
 (0)