diff options
Diffstat (limited to 'pybluez/advanced/read-local-bdaddr.py')
| -rw-r--r-- | pybluez/advanced/read-local-bdaddr.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/pybluez/advanced/read-local-bdaddr.py b/pybluez/advanced/read-local-bdaddr.py new file mode 100644 index 0000000..410a681 --- /dev/null +++ b/pybluez/advanced/read-local-bdaddr.py @@ -0,0 +1,35 @@ +import os +import sys +import struct +import bluetooth._bluetooth as _bt + +def read_local_bdaddr(hci_sock): + old_filter = hci_sock.getsockopt( _bt.SOL_HCI, _bt.HCI_FILTER, 14) + flt = _bt.hci_filter_new() + opcode = _bt.cmd_opcode_pack(_bt.OGF_INFO_PARAM, + _bt.OCF_READ_BD_ADDR) + _bt.hci_filter_set_ptype(flt, _bt.HCI_EVENT_PKT) + _bt.hci_filter_set_event(flt, _bt.EVT_CMD_COMPLETE); + _bt.hci_filter_set_opcode(flt, opcode) + hci_sock.setsockopt( _bt.SOL_HCI, _bt.HCI_FILTER, flt ) + + _bt.hci_send_cmd(hci_sock, _bt.OGF_INFO_PARAM, _bt.OCF_READ_BD_ADDR ) + + pkt = hci_sock.recv(255) + + status,raw_bdaddr = struct.unpack("xxxxxxB6s", pkt) + assert status == 0 + + t = [ "%X" % ord(b) for b in raw_bdaddr ] + t.reverse() + bdaddr = ":".join(t) + + # restore old filter + hci_sock.setsockopt( _bt.SOL_HCI, _bt.HCI_FILTER, old_filter ) + return bdaddr + +if __name__ == "__main__": + dev_id = 0 + hci_sock = _bt.hci_open_dev(dev_id) + bdaddr = read_local_bdaddr(hci_sock) + print bdaddr |
