DreamTeam/thinkgear: Difference between revisions

From Noisebridge
Jump to navigation Jump to search
(alpha parser)
 
No edit summary
Line 17: Line 17:
checkpos = loadpos + paylen  
checkpos = loadpos + paylen  


payload = packet[loadpos:checkpos]
payload = packet[loadpos:checkpos] # slice so payload is a copy.
paycheck = packet[checkpos]
paycheck = packet[checkpos]


assert paycheck == ~( sum(payload) & 0xff )
assert paycheck == 0xff & ~( sum(payload) & 0xff )


codons = {
codons = {
   (0x02, 'POOR_SIGNAL', 1),
   0x02: ('POOR_SIGNAL', 1),
   (0x04, 'ATTENTION', 1),
   0x04: ('ATTENTION', 1),
   (0x05, 'MEDITATION', 1),
   0x05: ('MEDITATION', 1),
   (0x16, 'BLINK EVENT', 1),
   0x16: ('BLINK_EVENT', 1),
   (0x55, 'EXTENDED_CODE', 1),
   0x55: ('EXTENDED_CODE', 1),
   (0x80, 'RAW_EEG', 2),
   0x80: ('RAW_EEG', 2),
   (0x83, 'ASIC_POWER', 24),
   0x83: ('ASIC_POWER', 24),
   (0xaa, 'SYNC', 172) }
   0xaa: ('SYNC', 172)  
}
 
getdatalen = lambda x, y:y[x][1]
ptr = payload
codepos = 0
codetype = ptr[codepos]
datalen = getdatalen(codetype, codons)
datapos = codepos + codelen
dataval = ptr[datapos:datalen]


</pre>
</pre>

Revision as of 20:59, 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
codepos = 0
codetype = ptr[codepos]
datalen = getdatalen(codetype, codons)
datapos = codepos + codelen
dataval = ptr[datapos:datalen]