ganglion: fix bug with bit shift in decompression

Esse commit está contido em:
jfrey
2017-03-01 22:19:40 +01:00
commit 8339f2cfa3
+17 -19
Ver Arquivo
@@ -458,8 +458,6 @@ def conv19bitToInt32 (threeByteBuffer):
return (prefix << 19) | (threeByteBuffer[0] << 16) | (threeByteBuffer[1] << 8) | threeByteBuffer[2]
def decompressDeltas19Bit(buffer):
"""
Called to when a compressed packet is received.
@@ -468,14 +466,14 @@ def decompressDeltas19Bit(buffer):
"""
if len(buffer) != 19:
raise ValueError("Input should be 19 bytes long.")
receivedDeltas = [[0, 0, 0, 0],[0, 0, 0, 0]]
# Sample 1 - Channel 1
miniBuf = [
(buffer[0] >> 5),
((buffer[0] & 0x1F) << 3) | (buffer[1] >> 5),
((buffer[1] & 0x1F) << 3) | (buffer[2] >> 5)
((buffer[0] & 0x1F) << 3 & 0xFF) | (buffer[1] >> 5),
((buffer[1] & 0x1F) << 3 & 0xFF) | (buffer[2] >> 5)
]
receivedDeltas[0][0] = conv19bitToInt32(miniBuf)
@@ -483,48 +481,48 @@ def decompressDeltas19Bit(buffer):
# Sample 1 - Channel 2
miniBuf = [
(buffer[2] & 0x1F) >> 2,
(buffer[2] << 6) | (buffer[3] >> 2),
(buffer[3] << 6) | (buffer[4] >> 2)
(buffer[2] << 6 & 0xFF) | (buffer[3] >> 2),
(buffer[3] << 6 & 0xFF) | (buffer[4] >> 2)
]
receivedDeltas[0][1] = conv19bitToInt32(miniBuf)
# Sample 1 - Channel 3
miniBuf = [
((buffer[4] & 0x03) << 1) | (buffer[5] >> 7),
((buffer[5] & 0x7F) << 1) | (buffer[6] >> 7),
((buffer[6] & 0x7F) << 1) | (buffer[7] >> 7)
((buffer[4] & 0x03) << 1 & 0xFF) | (buffer[5] >> 7),
((buffer[5] & 0x7F) << 1 & 0xFF) | (buffer[6] >> 7),
((buffer[6] & 0x7F) << 1 & 0xFF) | (buffer[7] >> 7)
]
receivedDeltas[0][2] = conv19bitToInt32(miniBuf)
# Sample 1 - Channel 4
miniBuf = [
((buffer[7] & 0x7F) >> 4),
((buffer[7] & 0x0F) << 4) | (buffer[8] >> 4),
((buffer[8] & 0x0F) << 4) | (buffer[9] >> 4)
((buffer[7] & 0x0F) << 4 & 0xFF) | (buffer[8] >> 4),
((buffer[8] & 0x0F) << 4 & 0xFF) | (buffer[9] >> 4)
]
receivedDeltas[0][3] = conv19bitToInt32(miniBuf)
# Sample 2 - Channel 1
miniBuf = [
((buffer[9] & 0x0F) >> 1),
(buffer[9] << 7) | (buffer[10] >> 1),
(buffer[10] << 7) | (buffer[11] >> 1)
(buffer[9] << 7 & 0xFF) | (buffer[10] >> 1),
(buffer[10] << 7 & 0xFF) | (buffer[11] >> 1)
]
receivedDeltas[1][0] = conv19bitToInt32(miniBuf)
# Sample 2 - Channel 2
miniBuf = [
((buffer[11] & 0x01) << 2) | (buffer[12] >> 6),
(buffer[12] << 2) | (buffer[13] >> 6),
(buffer[13] << 2) | (buffer[14] >> 6)
((buffer[11] & 0x01) << 2 & 0xFF) | (buffer[12] >> 6),
(buffer[12] << 2 & 0xFF) | (buffer[13] >> 6),
(buffer[13] << 2 & 0xFF) | (buffer[14] >> 6)
]
receivedDeltas[1][1] = conv19bitToInt32(miniBuf)
# Sample 2 - Channel 3
miniBuf = [
((buffer[14] & 0x38) >> 3),
((buffer[14] & 0x07) << 5) | ((buffer[15] & 0xF8) >> 3),
((buffer[15] & 0x07) << 5) | ((buffer[16] & 0xF8) >> 3)
((buffer[14] & 0x07) << 5 & 0xFF) | ((buffer[15] & 0xF8) >> 3),
((buffer[15] & 0x07) << 5 & 0xFF) | ((buffer[16] & 0xF8) >> 3)
]
receivedDeltas[1][2] = conv19bitToInt32(miniBuf)