Why is LE device connected automatically on HCI up? - bluetooth

Whenever I hit hciconfig hci0 up noscan, followed by hcitool con after a few seconds, my LE device is always connected automatically.
> hciconfig hci0
hci0: Type: BR/EDR Bus: USB
BD Address: YY:YY:YY:YY:YY:YY ACL MTU: 310:10 SCO MTU: 64:8
DOWN
RX bytes:494922 acl:12605 sco:0 events:8429 errors:0
TX bytes:63543 acl:917 sco:0 commands:3692 errors:0
> hciconfig hci0 up
... (wait a few seconds)
> hcitool con
Connections:
< LE XX:XX:XX:XX:XX:XX handle 70 state 1 lm MASTER AUTH ENCRYPT
I initially thought that only devices in White List will be connected automatically, but only then to figure out that the device is not in white list after I typed in the following command.
> hcitool lewlrm XX:XX:XX:XX:XX:XX
Can't remove from white list: Input/output error(5)
Question:
Why will my device connected automatically when it is not in the White List?
Environment:
Kernel Version: Linux 4.11.1
Bluez Version: 5.37

My solution is to use bluetoothctl to disconnect and remove it.
> bluetoothctl
[bluetooth] > disconnect XX:XX:XX:XX:XX:XX
[bluetooth] > remove XX:XX:XX:XX:XX:XX

Related

How do I reset Bluetooth-adapter on linux without unplugging USB / rebooting?

How do I reset Bluetooth-adapter on RaspberryPi v4?
Reset will reset most, but not all settings.
Example the name is not changed.
pi#raspberrypi:~/ $ sudo hciconfig hci0 name
hci0: Type: Primary Bus: UART
BD Address: DC:A6:32:02:12:1B ACL MTU: 1021:8 SCO MTU: 64:1
Name: 'raspberrypi'
pi#raspberrypi:~/ $ sudo hciconfig hci0 name rpi
pi#raspberrypi:~/ $ sudo hciconfig hci0 reset
pi#raspberrypi:~/$ sudo hciconfig hci0 name
hci0: Type: Primary Bus: UART
BD Address: DC:A6:32:02:12:1B ACL MTU: 1021:8 SCO MTU: 64:1
Name: 'rpi'
Expected the name to change back from 'rpi' to 'raspberrypi'
You also have to reset the service in combination with the adapter:
sudo hciconfig hci0 reset
sudo invoke-rc.d bluetooth restart

How can I correctly to use HCI device with Bluez in linux

We are working to use external Bluetooth device though BlueZ 5.49 and HCI-UART.
After using btattach or hciattach , we use the hciconfig to check the device status but the device always show DOWN.
The log as bellowing:
# hciattach -b /dev/ttyS1 any 1000000
Device setup complete
#
# hciconfig hci0 up
Can't init device hci0: Cannot assign requested address (99)
#
#hci0: Type: Primary Bus: UART
BD Address: 00:00:00:00:00:00 ACL MTU: 27:7 SCO MTU: 0:0
DOWN
RX bytes:231 acl:0 sco:0 events:16 errors:0
TX bytes:88 acl:0 sco:0 commands:16 errors:0
We use btmon to check hci command and the command was workable but the last HCI command was Set_Event_Mask_Page2. I checked several times and the result was always the same.
Does some one have such kind of experience ? or can suggest me which part I can look into??
Linux Kenerl :4.9.89-1.6,
BlueZ: 5.49

bluez rfcomm connect fail

I am trying connect Ubuntu pc with device. While command entered, it returns various error including rfcomm connect address already in use 、 host is down 、 rfcomm connect now in progress.
Device environment and procedure as below
Device environment
Linux 3.4
Bluez 5.19
bt addr xx:xx:xx:xx:38:A4
PC environment
Ubuntu 14.04
bluez 4
bt addr xx:xx:xx:xx:CF:F0
steps
device
insmod rfcomm.ko rtk_btusb.ko
dbus-daemon --config-file=/etc/dbus-1/system.conf
bluetoothd -C &
hciconfig hci0 up
hciconfig hci0 piscan
sdptool add SP
bluetoothctl scan on
bluetoothctl agent on
bluetoothctl default-agent
bluetoothctl trust xx:xx:xx:xx:CF:F0
bluetoothctl pair xx:xx:xx:xx:CF:F0
rfcomm bind 0 xx:xx:xx:xx:CF:F0 1
chmod 666 /dev/rfcomm0
rfcomm connect 0 xx:xx:xx:xx:CF:F0 1
PC
sdptool add SP
rfcomm bind 0 xx:xx:xx:xx:38:A4 1
chmod 666 /dev/rfcomm0
rfcomm watch 0 1
Device show Can't connect RFCOMM socket: Host is down
hciconfig -a output
hci0: Type: BR/EDR Bus: USB
BD Address: 5C:F3:70:1B:38:A4 ACL MTU: 820:8 SCO MTU: 255:16
UP RUNNING PSCAN ISCAN
RX bytes:6888 acl:88 sco:0 events:230 errors:0
TX bytes:4341 acl:84 sco:0 commands:87 errors:0
Features: 0xff 0xff 0xff 0xfe 0xdb 0xff 0x7b 0x87
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH HOLD SNIFF PARK
Link mode: SLAVE ACCEPT
Name: 'BlueZ 5.19'
Class: 0x000000
Service Classes: Unspecified
Device Class: Miscellaneous,
HCI Version: 4.0 (0x6) Revision: 0xe2f
LMP Version: 4.0 (0x6) Subversion: 0x9f73
Manufacturer: Realtek Semiconductor Corporation (93)
Is any step missed in my procedure?
below steps works for me.
PC side
sdptool add SP
rfcomm -i hci0 watch 0 1 ./picocom /dev/rfcomm0
Device side
sdptool add SP
rfcomm connect 0 xx:xx:xx:xx:xx:F0 1 &
picocom /dev/rfcomm0
reference

Change bluetooth mac address in Raspbian

hi i need to change the bluetooth mac address from my device. i've download the bdaddr utility from here! and i compiled it.
Then...
wget -U "Mozilla" http://www.petrilopia.net/wordpress/wp-content/uploads/bdaddrtar.bz2
...
mv bdaddrtar.bz2 bdaddr.tar.bz2
tar xvjf bdaddr.tar.bz2
cd bdaddr
sudo apt-get install libbluetooth-dev
...
make
...
pi#raspberrypi ~/bdaddr $ hcitool dev
Devices:
hci0 00:1F:81:00:08:30
pi#raspberrypi ~/bdaddr $ hciconfig
hci0: Type: BR/EDR Bus: USB
BD Address: 00:1F:81:00:08:30 ACL MTU: 1021:4 SCO MTU: 180:1
UP RUNNING PSCAN ISCAN
RX bytes:2296 acl:0 sco:0 events:100 errors:0
TX bytes:1081 acl:0 sco:0 commands:98 errors:0
pi#raspberrypi ~/bdaddr $ sudo ./bdaddr -i hci0 00:1F:81:00:48:30
Manufacturer: Cambridge Silicon Radio (10)
Device address: 00:1F:81:00:08:30
New BD address: 00:1F:81:00:48:30
Can't write new address
Why can't i write the address? some idea?
thanks
The bdaddr utility is not part of the bluez package because it uses manufacturer specific code and as such does not work on all devices.
http://ubuntuforums.org/archive/index.php/t-925611.html

How to tell whether bluetooth adapter supports bluetooth LE (4.0)?

I have two Bluetooth adapters, an old internal adapter and a new Bluetooth 4.0 adapter.
I am writing an application that uses a socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP) to connect to a Bluetooth LE device on Linux. When I call connect() with a sockaddr_l2 {.l2_family = AF_BLUETOOTH, .l2_bdaddr = {...}, .l2_cid = L2CAP_CID_ATT, .l2_bdaddr_type = BRADDR_LE_PUBLIC}, connect fails with errno=0x38000000=939524096 Unknown error, because Linux arbitrarily chooses the old adapter that only supports Bluetooth 2.1, not Bluetooth 4.0. The solution is to bind the socket to the bd_addr of the adapter that supports Bluetooth 4.0.
Question: How to tell which adapter is the Bluetooth 4.0 adapter? hciconfig does not tell which one is the one to use; they both say BR/EDR and not LE.
$ hciconfig
hci1: Type: BR/EDR Bus: USB
BD Address: 00:25:00:F6:97:F0 ACL MTU: 1021:5 SCO MTU: 64:1
UP RUNNING PSCAN
RX bytes:1074 acl:0 sco:0 events:56 errors:0
TX bytes:1462 acl:0 sco:0 commands:56 errors:0
hci0: Type: BR/EDR Bus: USB
BD Address: 00:02:72:D6:A0:BF ACL MTU: 1021:8 SCO MTU: 64:1
UP RUNNING PSCAN
RX bytes:146505 acl:328 sco:0 events:4189 errors:0
TX bytes:6213 acl:215 sco:0 commands:83 errors:0
$ modinfo bluetooth | grep ^version:
version: 2.17
$ modinfo btusb | grep ^version:
version: 0.6
$ lsb_release --description
Description: Ubuntu 14.04.1 LTS
$ uname --kernel-release
3.13.0-40-generic
To answer your question there is btmgmt info which will list the HCI version (on the same line as addr), you will have to look into Host Controller Interface Assigned numbers for the meaning of the numbers, version 6 below mean Bluetooth 4.0.
# btmgmt info
hci0: Primary controller
addr 5C:F3:70:XX:XX:XX version 6 manufacturer 15 class 0x1c010c
supported settings: powered connectable fast-connectable discoverable bondable link-security ssp br/edr hs le advertising secure-conn debug-keys privacy configuration static-addr
current settings: powered bondable ssp br/edr le secure-conn
name BlueZ 5.47
short name
If you need to know if the adapter support LE, you will have to look for le in Supported settings: because LE is not mandatory in bluetooth 4.0/4.1.
Try: hciconfig hci[0|1] version

Resources