Python parsing Bluetooth RFCOMM for 9 bytes

B

Barry Dick

My data looks like this when it comes from the device (biofeedback device). There are 9 bytes in total, and I need to buffer so much, and then poll it for new/recent packets. The start packet unfortunately starts with 0x00

So far the only thing I've found that looks like what I want to do is this, but I don't know how to implement it. http://code.activestate.com/recipes/408859/


Data: [0000002d0270025e00]
Data: [0001004a0006026547]
Data: [0002004b000a026343]
Data: [00]
Data: [03004f0006025b4a00]
Data: [046698000802569d00]
Data: [00003002830257f100]
Data: [01004a000602585400]
Data: [020048000a025b4e00]
Data: [03004b0006025b4e00]
Data: [046698000702579d00]
Data: [00002f027602480e00]
Data: [01004a0006024b61]
Data: [0002004a000a025552]
Data: [0003004b0006025752]
Data: [00046698000702569e]
Data: [0000002c025b025321]
Data: [00010048000602505e]

My code so far looks like this...

import bluetooth, sys, time, os, binascii, struct;

# Create the client socket
client_socket=BluetoothSocket( RFCOMM )

client_socket.connect(("10:00:E8:AC:4D:D0", 1))

data = ""
try:
while True:
try:
data = client_socket.recv(9)
except bluetooth.BluetoothError, b:
print "Bluetooth Error: ", b

if len(data) > 0:
print "Data: [%s]" % binascii.hexlify(data)

except KeyboardInterrupt:
#print "Closing socket...",
client_socket.close()
#print "done."
 
M

MRAB

My data looks like this when it comes from the device (biofeedback device). There are 9 bytes in total, and I need to buffer so much, and then poll it for new/recent packets. The start packet unfortunately starts with 0x00

So far the only thing I've found that looks like what I want to do is this, but I don't know how to implement it. http://code.activestate.com/recipes/408859/


Data: [0000002d0270025e00]
Data: [0001004a0006026547]
Data: [0002004b000a026343]
Data: [00]
Data: [03004f0006025b4a00]
Data: [046698000802569d00]
Data: [00003002830257f100]
Data: [01004a000602585400]
Data: [020048000a025b4e00]
Data: [03004b0006025b4e00]
Data: [046698000702579d00]
Data: [00002f027602480e00]
Data: [01004a0006024b61]
Data: [0002004a000a025552]
Data: [0003004b0006025752]
Data: [00046698000702569e]
Data: [0000002c025b025321]
Data: [00010048000602505e]

My code so far looks like this...

import bluetooth, sys, time, os, binascii, struct;

# Create the client socket
client_socket=BluetoothSocket( RFCOMM )

client_socket.connect(("10:00:E8:AC:4D:D0", 1))

data = ""
try:
while True:
try:
data = client_socket.recv(9)
except bluetooth.BluetoothError, b:
print "Bluetooth Error: ", b

if len(data) > 0:
print "Data: [%s]" % binascii.hexlify(data)

except KeyboardInterrupt:
#print "Closing socket...",
client_socket.close()
#print "done."
Is the following more like how you want it?

data = ""
try:
while True:
try:
more = client_socket.recv(9)
except bluetooth.BluetoothError, b:
print "Bluetooth Error: ", b
else:
data += more

while len(data) >= 9:
print "Data: [%s]" % binascii.hexlify(data[ : 9])
data = data[9 : ]
except KeyboardInterrupt:
#print "Closing socket...",
client_socket.close()
#print "done."

You could, of course, decide to recv more than 9 bytes at a time. It
could return less than you asked for (but it should block until at
least 1 byte is available), but it will never return more than you
asked for.
 
B

Barry Dick

Is the following more like how you want it?



data = ""

try:

while True:

try:

more = client_socket.recv(9)

except bluetooth.BluetoothError, b:

print "Bluetooth Error: ", b

else:

data += more



while len(data) >= 9:

print "Data: [%s]" % binascii.hexlify(data[ : 9])

data = data[9 : ]

except KeyboardInterrupt:

#print "Closing socket...",

client_socket.close()

#print "done."



You could, of course, decide to recv more than 9 bytes at a time. It

could return less than you asked for (but it should block until at

least 1 byte is available), but it will never return more than you

asked for.

Thank you for your interest and quick reply.

Its a great start, seeing as I'm a beginner with python, I was actually hoping to see an example of http://code.activestate.com/recipes/408859/ as it appears to be exactly what I need, but I haven't got a clue how to implement it. Basically as each byte perhaps gets read or 9 bytes at a time, that way I can seek out as much real data as possible

Data: [0000002c025b025321]
Data: [00010048000602505e]
Data: [0002004a000a025552]
Data: [0003004b0006025752]
Data: [00046698000702569e]

(notice the header data[9:1] will always flow in this pattern 0 -> 4 and then back again, so I figure that might as well be my start)


And skip the errors...

Data: [0002004b000a026343]
Data: [00]
Data: [03004f0006025b4a00]
Data: [046698000802569d00]
Data: [00003002830257f100]
 
B

Barry Dick

Is the following more like how you want it?



data = ""

try:

while True:

try:

more = client_socket.recv(9)

except bluetooth.BluetoothError, b:

print "Bluetooth Error: ", b

else:

data += more



while len(data) >= 9:

print "Data: [%s]" % binascii.hexlify(data[ : 9])

data = data[9 : ]

except KeyboardInterrupt:

#print "Closing socket...",

client_socket.close()

#print "done."



You could, of course, decide to recv more than 9 bytes at a time. It

could return less than you asked for (but it should block until at

least 1 byte is available), but it will never return more than you

asked for.

Thank you for your interest and quick reply.

Its a great start, seeing as I'm a beginner with python, I was actually hoping to see an example of http://code.activestate.com/recipes/408859/ as it appears to be exactly what I need, but I haven't got a clue how to implement it. Basically as each byte perhaps gets read or 9 bytes at a time, that way I can seek out as much real data as possible

Data: [0000002c025b025321]
Data: [00010048000602505e]
Data: [0002004a000a025552]
Data: [0003004b0006025752]
Data: [00046698000702569e]

(notice the header data[9:1] will always flow in this pattern 0 -> 4 and then back again, so I figure that might as well be my start)


And skip the errors...

Data: [0002004b000a026343]
Data: [00]
Data: [03004f0006025b4a00]
Data: [046698000802569d00]
Data: [00003002830257f100]
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,743
Messages
2,569,478
Members
44,898
Latest member
BlairH7607

Latest Threads

Top