Hello Johan,
Thank you for your response. Following your suggestion I've updated my kernel to 4.20 and there is a change in behavior though I don't see LE CODED scanning to be working + btmgmt behavior is bit odd which I document below:
For testing the PHY changes via btmgmt I've ran this script (added #1-9 to later reference them in btmon logs):
#!/bin/bash
# This is where my bluez@master is at
HCITOOL=~/tmp/bluez/tools/hcitool
BTMGMT=~/tmp/bluez/tools/btmgmt
echo "Set 1M"
${BTMGMT} phy LE1MTX LE1MRX #1
sleep 1
${BTMGMT} phy #2
echo "Set 2M"
${BTMGMT} phy LE2MTX LE2MRX #3
sleep 1
${BTMGMT} phy #4
sleep 1
echo "Set Coded"
${BTMGMT} phy LECODEDTX LECODEDRX #5
sleep 1
${BTMGMT} phy #6
sleep 1
echo "Set coded manually"
${HCITOOL} cmd 08 32 #7
${HCITOOL} cmd 08 31 03 04 04 &8
sleep 1
echo "Now it's ok"
${BTMGMT} phy #9
The btmon output is the following (I've added separators for where each command from the script above was called):
Bluetooth monitor ver 5.50
= Note: Linux version 4.20.0-042000-generic (x86_64) 0.300394
= Note: Bluetooth subsystem version 2.22 0.300400
= New Index: 00:00:00:00:00:00 (Primary,UART,hci0) [hci0] 0.300402
= Open Index: 00:00:00:00:00:00 [hci0] 0.300402
= Index Info: 00:00:00:00:00:00 (not assigned) [hci0] 0.300403
@ MGMT Open: bluetoothd (privileged) version 1.14 {0x0003} 0.300404
@ MGMT Open: bluetoothd (privileged) version 1.14 {0x0001} 0.300405
@ MGMT Open: btmon (privileged) version 1.14 {0x0002} 0.300660
${BTMGMT} phy LE1MTX LE1MRX #1
@ MGMT Open: btmgmt (privileged) version 1.14 {0x0004} 3.097362
@ MGMT Command: Set PHY Configuration (0x0045) plen 4 {0x0004} [hci0] 3.097470
Selected PHYs: 0x0600
LE 1M TX
LE 1M RX
< HCI Command: LE Set Default PHY (0x08|0x0031) plen 3 #1 [hci0] 3.097522
All PHYs preference: 0x00
TX PHYs preference: 0x01
LE 1M
RX PHYs preference: 0x01
LE 1M
> HCI Event: Command Complete (0x0e) plen 4 #2 [hci0] 3.098708
LE Set Default PHY (0x08|0x0031) ncmd 1
Status: Success (0x00)
@ MGMT Event: Command Complete (0x0001) plen 3 {0x0004} [hci0] 3.098827
Set PHY Configuration (0x0045) plen 0
Status: Success (0x00)
@ MGMT Event: PHY Configuration Cha.. (0x0026) plen 4 {0x0002} [hci0] 3.098853
Selected PHYs: 0x0600
LE 1M TX
LE 1M RX
@ MGMT Event: PHY Configuration Cha.. (0x0026) plen 4 {0x0003} [hci0] 3.098853
Selected PHYs: 0x0600
LE 1M TX
LE 1M RX
@ MGMT Event: PHY Configuration Cha.. (0x0026) plen 4 {0x0001} [hci0] 3.098853
Selected PHYs: 0x0600
LE 1M TX
LE 1M RX
@ MGMT Close: btmgmt {0x0004} 3.099048
${BTMGMT} phy #2
@ MGMT Open: btmgmt (privileged) version 1.14 {0x0004} 4.104949
@ MGMT Command: Get PHY Configuration (0x0044) plen 0 {0x0004} [hci0] 4.105111
@ MGMT Event: Command Complete (0x0001) plen 15 {0x0004} [hci0] 4.105122
Get PHY Configuration (0x0044) plen 12
Status: Success (0x00)
Supported PHYs: 0x7e00
LE 1M TX
LE 1M RX
LE 2M TX
LE 2M RX
LE CODED TX
LE CODED RX
Configurable PHYs: 0x7800
LE 2M TX
LE 2M RX
LE CODED TX
LE CODED RX
Selected PHYs: 0x0600
LE 1M TX
LE 1M RX
@ MGMT Close: btmgmt {0x0004} 4.105236
${BTMGMT} phy LE2MTX LE2MRX #3
@ MGMT Open: btmgmt (privileged) version 1.14 {0x0004} 4.108783
@ MGMT Command: Set PHY Configuration (0x0045) plen 4 {0x0004} [hci0] 4.108954
Selected PHYs: 0x1800
LE 2M TX
LE 2M RX
@ MGMT Event: Command Status (0x0002) plen 3 {0x0004} [hci0] 4.108965
Set PHY Configuration (0x0045)
Status: Invalid Parameters (0x0d)
@ MGMT Close: btmgmt {0x0004} 4.109075
${BTMGMT} phy #4
@ MGMT Open: btmgmt (privileged) version 1.14 {0x0004} 5.116776
@ MGMT Command: Get PHY Configuration (0x0044) plen 0 {0x0004} [hci0] 5.116920
@ MGMT Event: Command Complete (0x0001) plen 15 {0x0004} [hci0] 5.116931
Get PHY Configuration (0x0044) plen 12
Status: Success (0x00)
Supported PHYs: 0x7e00
LE 1M TX
LE 1M RX
LE 2M TX
LE 2M RX
LE CODED TX
LE CODED RX
Configurable PHYs: 0x7800
LE 2M TX
LE 2M RX
LE CODED TX
LE CODED RX
Selected PHYs: 0x0600
LE 1M TX
LE 1M RX
@ MGMT Close: btmgmt {0x0004} 5.117054
${BTMGMT} phy LECODEDTX LECODEDRX #5
@ MGMT Open: btmgmt (privileged) version 1.14 {0x0004} 6.124056
@ MGMT Command: Set PHY Configuration (0x0045) plen 4 {0x0004} [hci0] 6.124241
Selected PHYs: 0x6000
LE CODED TX
LE CODED RX
@ MGMT Event: Command Status (0x0002) plen 3 {0x0004} [hci0] 6.124251
Set PHY Configuration (0x0045)
Status: Invalid Parameters (0x0d)
@ MGMT Close: btmgmt {0x0004} 6.124351
${BTMGMT} phy #6
@ MGMT Open: btmgmt (privileged) version 1.14 {0x0004} 7.131377
@ MGMT Command: Get PHY Configuration (0x0044) plen 0 {0x0004} [hci0] 7.131551
@ MGMT Event: Command Complete (0x0001) plen 15 {0x0004} [hci0] 7.131561
Get PHY Configuration (0x0044) plen 12
Status: Success (0x00)
Supported PHYs: 0x7e00
LE 1M TX
LE 1M RX
LE 2M TX
LE 2M RX
LE CODED TX
LE CODED RX
Configurable PHYs: 0x7800
LE 2M TX
LE 2M RX
LE CODED TX
LE CODED RX
Selected PHYs: 0x0600
LE 1M TX
LE 1M RX
@ MGMT Close: btmgmt {0x0004} 7.131922
@ RAW Open: hcitool (privileged) version 2.22 {0x0004} 8.138584
@ RAW Close: hcitool {0x0004} 8.138654
@ RAW Open: hcitool (privileged) version 2.22 {0x0004} 8.138690
@ RAW Close: hcitool {0x0004} 8.138700
${HCITOOL} cmd 08 32 #7
@ RAW Open: hcitool (privileged) version 2.22 {0x0004} [hci0] 8.138735
< HCI Command: LE Set PHY (0x08|0x0032) plen 0 #3 [hci0] 8.138854
invalid packet size
> HCI Event: Command Status (0x0f) plen 4 #4 [hci0] 8.139762
LE Set PHY (0x08|0x0032) ncmd 1
Status: Unsupported Feature or Parameter Value (0x11)
@ RAW Close: hcitool {0x0004} [hci0] 8.139915
@ RAW Open: hcitool (privileged) version 2.22 {0x0004} 8.143334
@ RAW Close: hcitool {0x0004} 8.143388
@ RAW Open: hcitool (privileged) version 2.22 {0x0004} 8.143425
@ RAW Close: hcitool {0x0004} 8.143436
${HCITOOL} cmd 08 31 03 04 04 #8
@ RAW Open: hcitool (privileged) version 2.22 {0x0004} [hci0] 8.143472
< HCI Command: LE Set Default PHY (0x08|0x0031) plen 3 #5 [hci0] 8.143606
All PHYs preference: 0x03
No TX PHY preference
No RX PHY preference
TX PHYs preference: 0x04
LE Coded
RX PHYs preference: 0x04
LE Coded
> HCI Event: Command Complete (0x0e) plen 4 #6 [hci0] 8.144779
LE Set Default PHY (0x08|0x0031) ncmd 1
Status: Success (0x00)
@ RAW Close: hcitool {0x0004} [hci0] 8.144922
${BTMGMT} phy #9
@ MGMT Open: btmgmt (privileged) version 1.14 {0x0004} 9.151090
@ MGMT Command: Get PHY Configuration (0x0044) plen 0 {0x0004} [hci0] 9.151272
@ MGMT Event: Command Complete (0x0001) plen 15 {0x0004} [hci0] 9.151282
Get PHY Configuration (0x0044) plen 12
Status: Success (0x00)
Supported PHYs: 0x7e00
LE 1M TX
LE 1M RX
LE 2M TX
LE 2M RX
LE CODED TX
LE CODED RX
Configurable PHYs: 0x7800
LE 2M TX
LE 2M RX
LE CODED TX
LE CODED RX
Selected PHYs: 0x6000
LE CODED TX
LE CODED RX
@ MGMT Close: btmgmt {0x0004} 9.151400
As you see only operation #8 actually changed the PHY settings as reported by btmgmt. This might have something to do with bluez itself, not sure. I'm ok with using hcitool and sending raw commands via hcitool to change the PHY. The thing is that even after changing the PHY to CODED, when I start LE scan I don't get anything even though I have S=8 CODED advertisers around me which also scan each other. I start scanning just by this command:
${HCITOOL} cmd 08 0c 01 01
Best regards,
PB