DreamTeam/thinkgear: Difference between revisions

From Noisebridge
Jump to navigation Jump to search
No edit summary
No edit summary
Line 35: Line 35:
getdatalen = lambda x, y:y[x][1]
getdatalen = lambda x, y:y[x][1]
ptr = payload
ptr = payload
codelen = 1 # unless extended code, not handled here.
codepos = 0
codepos = 0
codetype = ptr[codepos]
datalen = 0


assert codetype in codons.keys()
def testdatalen(datalen, codetype):
assert codetype != 0x55 # we don't handle extended code bytes.
  if datalen > 1:
 
    assert codetype >= 0x80
datalen = getdatalen(codetype, codons)
  else:
 
    assert codetype < 0x80
if datalen > 1:
  assert codetype < 0x80
else:
  assert codetype >= 0x80
 
codelen = 1 # unless extended code, not handled here.
datapos = codepos + codelen
endpos = datapos + datalen # end of row, not end of packet


assert endpos < paylen
while codepos + datalen < paylen:
  codetype = ptr[codepos]
  assert codetype in codons
  assert codetype != 0x55 # we don't handle extended code bytes.
  datalen = getdatalen(codetype, codons)
  datapos = codepos + codelen
  endpos = datapos + datalen # end of row, not end of packet
# assert endpos < paylen


dataval = ptr[datapos:datalen]
dataval = ptr[datapos:datalen]

Revision as of 21:36, 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

while codepos + datalen < paylen:
  codetype = ptr[codepos]
  assert codetype in codons
  assert codetype != 0x55 # we don't handle extended code bytes.
  datalen = getdatalen(codetype, codons)
  datapos = codepos + codelen
  endpos = datapos + datalen # end of row, not end of packet
 
# assert endpos < paylen

dataval = ptr[datapos:datalen]
newpos = datapos + datalen