summaryrefslogtreecommitdiff
path: root/pybluez/advanced/read-local-bdaddr.py
diff options
context:
space:
mode:
authorTim Redfern <tim@eclectronics.org>2011-12-19 18:20:33 +0000
committerTim Redfern <tim@eclectronics.org>2011-12-19 18:20:33 +0000
commite9a73bbb3c14af340999f70146747787785f4fee (patch)
treea125452f7d641673286542497da051b810427880 /pybluez/advanced/read-local-bdaddr.py
initial commit
Diffstat (limited to 'pybluez/advanced/read-local-bdaddr.py')
-rw-r--r--pybluez/advanced/read-local-bdaddr.py35
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