Python parsing Bluetooth RFCOMM for 9 bytes

Discussion in 'Python' started by Barry Dick, Dec 14, 2012.

  1. Barry Dick

    Barry Dick Guest

    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."
    Barry Dick, Dec 14, 2012
    #1
    1. Advertising

  2. Barry Dick

    MRAB Guest

    On 2012-12-14 00:00, Barry Dick wrote:
    > 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.
    MRAB, Dec 14, 2012
    #2
    1. Advertising

  3. Barry Dick

    Barry Dick Guest


    > 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]
    Barry Dick, Dec 14, 2012
    #3
  4. Barry Dick

    Barry Dick Guest


    > 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]
    Barry Dick, Dec 14, 2012
    #4
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Jason Collins
    Replies:
    3
    Views:
    6,010
    Jason Collins
    Feb 18, 2004
  2. Replies:
    0
    Views:
    321
  3. mrby

    4-bytes or 8-bytes alignment?

    mrby, Nov 2, 2004, in forum: C Programming
    Replies:
    8
    Views:
    417
    Mark McIntyre
    Nov 2, 2004
  4. Replies:
    5
    Views:
    534
    Flash Gordon
    Apr 9, 2006
  5. izzahmeor
    Replies:
    0
    Views:
    779
    izzahmeor
    Feb 3, 2010
Loading...

Share This Page