* Reading RSSI value from an RFCOMM connection
@ 2013-11-10 6:31 Michael Kehm
2013-11-14 17:54 ` Michael Kehm
0 siblings, 1 reply; 2+ messages in thread
From: Michael Kehm @ 2013-11-10 6:31 UTC (permalink / raw)
To: linux-bluetooth@vger.kernel.org
Hi folks,
I am trying to get the RSSI value from an established RFCOMM connection.
While searching on the Internet for hints I found the following discussions:
http://comments.gmane.org/gmane.linux.bluez.user/9986
http://stackoverflow.com/questions/2149295/android-2-1-how-do-i-poll-the-rssi-value-of-an-existing-bluetooth-connection
http://sourceforge.net/mailarchive/forum.php?forum_name=bluez-devel&style=nested&viewmonth=200505&viewday=17
Most suggestions point to the hci_read_rssi API (int hci_read_rssi(int dd, uint16_t handle, int8_t *rssi, int to);).
I am using Python. As a basic skeleton I am using Albert Huang's rfcomm-client.py and rfcomm-server.py scripts.
Looking into bluez.py and inquiry-with-rssi.py samples, it helped me to understand how to access the hci layer but I am stuck in execution.
This is my script based on rfcomm-server.py:
import os, sys, struct, fcntl, array, binascii
import btcommon
import bluetooth._bluetooth as _bt
from bluetooth import *
#################################################################
# Added code
def get_acl_conn_handle (hci_sock, addr):
hci_fd = hci_sock.fileno ()
reqstr = struct.pack ("6sB17s", _bt.str2ba (addr), _bt.ACL_LINK, "\0" * 17)
request = array.array ("c", reqstr)
print "ACL_LINK:%s" % _bt.ACL_LINK
print "hci_fd:%s" % hci_fd
print "HCIGETCONNINFO:%s" % _bt.HCIGETCONNINFO
print "request:%s" % request
fcntl.ioctl (hci_fd, _bt.HCIGETCONNINFO, request, 1)
try:
fcntl.ioctl (hci_fd, _bt.HCIGETCONNINFO, request, 1)
except IOError, e:
raise BluetoothError ("There is no ACL connection to %s" % addr)
# XXX should this be "<8xH14x"?
handle = struct.unpack ("8xH14x", request.tostring ())[0]
return handle
#################################################################
server_sock=BluetoothSocket( RFCOMM )
server_sock.bind(("",PORT_ANY))
server_sock.listen(1)
port = server_sock.getsockname()[1]
uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee"
advertise_service( server_sock, "SampleServer",
service_id = uuid,
service_classes = [ uuid, SERIAL_PORT_CLASS ],
profiles = [ SERIAL_PORT_PROFILE ],
# protocols = [ OBEX_UUID ]
)
print "Waiting for connection on RFCOMM channel %d" % port
client_sock, client_info = server_sock.accept()
print "Accepted connection from ", client_info
#################################################################
# Added code
rssi = 0
handle = get_acl_conn_handle(server_sock._sock, client_info[0])
rssi = bluez.hci_read_rssi(server_sock._sock, handle, rssi, 1000)
#################################################################
try:
client_sock.send(rssi)
print "sent [%s]" % rssi
except IOError:
pass
print "disconnected"
client_sock.close()
server_sock.close()
print "all done"
I have added/copied the get_acl_conn_handle function and the call to hci_read_rssi.
The problem is that I run into the following exception:
Traceback (most recent call last):
File "rfcomm-rssi.py", line 48, in <module>
handle = get_acl_conn_handle(server_sock._sock, client_info[0])
File "rfcomm-rssi.py", line 16, in get_acl_conn_handle
fcntl.ioctl (hci_fd, _bt.HCIGETCONNINFO, request, 1)
IOError: [Errno 22] Invalid argument
The print statements in get_acl_conn_handle return the following information:
ACL_LINK:1
hci_fd:3
HCIGETCONNINFO:-2147202859
request:array('c', '9\x91\x97g\x1d\x1c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
I am bit lost on how to fix this.
If anyone can help me with my script above or if anyone has sample code in Python or C how to get the RSSI data from a RFCOMM connection then I would highly appreciate it.
Thanks in advance,
Michael
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: Reading RSSI value from an RFCOMM connection
2013-11-10 6:31 Reading RSSI value from an RFCOMM connection Michael Kehm
@ 2013-11-14 17:54 ` Michael Kehm
0 siblings, 0 replies; 2+ messages in thread
From: Michael Kehm @ 2013-11-14 17:54 UTC (permalink / raw)
To: linux-bluetooth@vger.kernel.org
Resending.
I hope someone can help out or point me into the right direction.
Thanks,
Michael
From: Michael Kehm
Sent: Saturday, November 9, 2013 10:31 PM
To: linux-bluetooth@vger.kernel.org
Hi folks,
I am trying to get the RSSI value from an established RFCOMM connection.
While searching on the Internet for hints I found the following discussions:
http://comments.gmane.org/gmane.linux.bluez.user/9986
http://stackoverflow.com/questions/2149295/android-2-1-how-do-i-poll-the-rssi-value-of-an-existing-bluetooth-connection
http://sourceforge.net/mailarchive/forum.php?forum_name=bluez-devel&style=nested&viewmonth=200505&viewday=17
Most suggestions point to the hci_read_rssi API (int hci_read_rssi(int dd, uint16_t handle, int8_t *rssi, int to);).
I am using Python. As a basic skeleton I am using Albert Huang's rfcomm-client.py and rfcomm-server.py scripts.
Looking into bluez.py and inquiry-with-rssi.py samples, it helped me to understand how to access the hci layer but I am stuck in execution.
This is my script based on rfcomm-server.py:
import os, sys, struct, fcntl, array, binascii
import btcommon
import bluetooth._bluetooth as _bt
from bluetooth import *
#################################################################
# Added code
def get_acl_conn_handle (hci_sock, addr):
hci_fd = hci_sock.fileno ()
reqstr = struct.pack ("6sB17s", _bt.str2ba (addr), _bt.ACL_LINK, "\0" * 17)
request = array.array ("c", reqstr)
print "ACL_LINK:%s" % _bt.ACL_LINK
print "hci_fd:%s" % hci_fd
print "HCIGETCONNINFO:%s" % _bt.HCIGETCONNINFO
print "request:%s" % request
fcntl.ioctl (hci_fd, _bt.HCIGETCONNINFO, request, 1)
try:
fcntl.ioctl (hci_fd, _bt.HCIGETCONNINFO, request, 1)
except IOError, e:
raise BluetoothError ("There is no ACL connection to %s" % addr)
# XXX should this be "<8xH14x"?
handle = struct.unpack ("8xH14x", request.tostring ())[0]
return handle
#################################################################
server_sock=BluetoothSocket( RFCOMM )
server_sock.bind(("",PORT_ANY))
server_sock.listen(1)
port = server_sock.getsockname()[1]
uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee"
advertise_service( server_sock, "SampleServer",
service_id = uuid,
service_classes = [ uuid, SERIAL_PORT_CLASS ],
profiles = [ SERIAL_PORT_PROFILE ],
# protocols = [ OBEX_UUID ]
)
print "Waiting for connection on RFCOMM channel %d" % port
client_sock, client_info = server_sock.accept()
print "Accepted connection from ", client_info
#################################################################
# Added code
rssi = 0
handle = get_acl_conn_handle(server_sock._sock, client_info[0])
rssi = bluez.hci_read_rssi(server_sock._sock, handle, rssi, 1000)
#################################################################
try:
client_sock.send(rssi)
print "sent [%s]" % rssi
except IOError:
pass
print "disconnected"
client_sock.close()
server_sock.close()
print "all done"
I have added/copied the get_acl_conn_handle function and the call to hci_read_rssi.
The problem is that I run into the following exception:
Traceback (most recent call last):
File "rfcomm-rssi.py", line 48, in <module>
handle = get_acl_conn_handle(server_sock._sock, client_info[0])
File "rfcomm-rssi.py", line 16, in get_acl_conn_handle
fcntl.ioctl (hci_fd, _bt.HCIGETCONNINFO, request, 1)
IOError: [Errno 22] Invalid argument
The print statements in get_acl_conn_handle return the following information:
ACL_LINK:1
hci_fd:3
HCIGETCONNINFO:-2147202859
request:array('c', '9\x91\x97g\x1d\x1c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
I am bit lost on how to fix this.
If anyone can help me with my script above or if anyone has sample code in Python or C how to get the RSSI data from a RFCOMM connection then I would highly appreciate it.
Thanks in advance,
Michael
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2013-11-14 17:54 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-11-10 6:31 Reading RSSI value from an RFCOMM connection Michael Kehm
2013-11-14 17:54 ` Michael Kehm
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).