DreamTeam/thinkgear: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
| Line 45: | Line 45: | ||
assert codetype < 0x80 | assert codetype < 0x80 | ||
while | nextpos = 0 | ||
while nextpos < paylen: | |||
codepos = nextpos | |||
codetype = ptr[codepos] | codetype = ptr[codepos] | ||
assert codetype in codons | assert codetype in codons | ||
assert codetype != 0x55 # we don't handle extended code bytes. | assert codetype != 0x55 # we don't handle extended code bytes. | ||
datalen = getdatalen(codetype, codons) | datalen = getdatalen(codetype, codons) | ||
nextpos = codepos + codelen | |||
datapos = nextpos | |||
nextpos = datapos + datalen | |||
if nextpos >= paylen: | |||
break | |||
dataval = ptr[datapos:nextpos] | |||
newpos = datapos + datalen | newpos = datapos + datalen | ||
</pre> | </pre> | ||
Revision as of 21:44, 29 May 2013
syncpos = 0
synclen = 2
syncval = 0xaa
synced = (syncval == packet[0] == packet[1])
assert synced
lenpos = syncpos + synclen
lenlen = 1
paylen = packet[lenpos]
assert paylen < 170 # note 170 is 0xaa - just coincidentally?
loadpos = lenpos + lenlen
checkpos = loadpos + paylen
payload = packet[loadpos:checkpos] # slice so payload is a copy.
paycheck = packet[checkpos]
assert paycheck == 0xff & ~( sum(payload) & 0xff )
codons = {
0x02: ('POOR_SIGNAL', 1),
0x04: ('ATTENTION', 1),
0x05: ('MEDITATION', 1),
0x16: ('BLINK_EVENT', 1),
0x55: ('EXTENDED_CODE', 1),
0x80: ('RAW_EEG', 2),
0x83: ('ASIC_POWER', 24),
0xaa: ('SYNC', 172)
}
getdatalen = lambda x, y:y[x][1]
ptr = payload
codelen = 1 # unless extended code, not handled here.
codepos = 0
datalen = 0
def testdatalen(datalen, codetype):
if datalen > 1:
assert codetype >= 0x80
else:
assert codetype < 0x80
nextpos = 0
while nextpos < paylen:
codepos = nextpos
codetype = ptr[codepos]
assert codetype in codons
assert codetype != 0x55 # we don't handle extended code bytes.
datalen = getdatalen(codetype, codons)
nextpos = codepos + codelen
datapos = nextpos
nextpos = datapos + datalen
if nextpos >= paylen:
break
dataval = ptr[datapos:nextpos]
newpos = datapos + datalen