Not only Bluez doesn't support park management, according to Marcel Holtmann, the problem is that it's really not known if there're devices (masters) which can support more than very limited number of slaves, or even have decent park mode implementation at all:
- http://article.gmane.org/gmane.linux.bluez.devel/287
- http://article.gmane.org/gmane.linux.bluez.user/3813
- http://article.gmane.org/gmane.linux.bluez.user/3815
- http://article.gmane.org/gmane.linux.bluez.user/6032
- http://article.gmane.org/gmane.linux.bluez.user/12689
- http://article.gmane.org/gmane.linux.bluez.user/12719
- http://article.gmane.org/gmane.linux.bluez.devel/13135
HC-04 Bluetooth module with CSR BlueCore4-Ext
# hcitool cc 00:11:10:xx:xx:xx; hcitool con
Connections:< ACL 00:11:10:xx:xx:xx handle 12 state 8 lm MASTER
What we need here is a connection handle 12 (0x0c). hcitool doesn't have dedicated command for part mode (and for lot of other things), so we'll use raw HCI command mode using "cmd" command:
# hcitool cmd --help
Usage:
cmd <ogf> <ocf> [parameters]
Example:
cmd 0x03 0x0013 0x41 0x42 0x43 0x44
What's important here is that <parameters> should be byte values. If words should be given as parameters, they should be give by bytes in little-endian format.
# hcitool cc 00:11:10:xx:xx:xx; hcitool cmd 0x02 0x05 0x0c 0 0x50 0 0x40 0
Here we run HCI_Park_State(Connection_Handle=0x000c, Beacon_Max_Interval=0x0050, Beacon_Min_Interval=0x0040) command (see Bluetooth spec). And here's communication as captured by hcidump (parts irrelevant to park command omitted):
handle 12 max 80 min 64
2012-01-07 15:36:46.086040 > HCI Event: Command Status (0x0f) plen 4
Park State (0x02|0x0005) status 0x00 ncmd 1
2012-01-07 15:36:46.271047 > HCI Event: Mode Change (0x14) plen 6
status 0x24 handle 12 mode 0x00 interval 0
Error: LMP PDU Not Allowed
This "LMP PDU Not Allowed" was quite confusing and took me lot of googling to figure out. Fortunately, I found insightful post from a CSR guy right on this matter: http://article.gmane.org/gmane.linux.bluez.devel/72
What we get here is that local Bluetooth master just forwards status it got from the remote device. As the message suggests, park might be disabled in remote device line policy. Let's see:
# hcitool cc 00:11:10:xx:xx:xx; hcitool lp 00:11:10:xx:xx:xx
Link policy settings: RSWITCH HOLD SNIFF PARK
Here's slight issue of what hcitool lp actually does. According to man, it "displays link policy settings for the connection to the device with Bluetooth address". There's also "hcitool lp" command which "Sets default link policy". So, reasonable assumption would be that every device may have default link policy, then during connection, they negotiate link policy which is suitable for the connection. Ok, let's set PARK policy explicitly:
# hcitool cc 00:11:10:xx:xx:xx; hcitool lp 00:11:10:xx:xx:xx PARK; hcitool lp 00:11:10:xx:xx:xx; hcitool cmd 0x02 0x05 0x0c 0 0x50 0 0x40 0
Link policy settings: PARK
< HCI Command: ogf 0x02, ocf 0x0005, plen 6
0C 00 50 00 40 00
> HCI Event: 0x0f plen 4
00 01 05 08
Link policy settings: PARK
< HCI Command: ogf 0x02, ocf 0x0005, plen 6
0C 00 50 00 40 00
> HCI Event: 0x0f plen 4
00 01 05 08
But hcidump shows the the same "LMP PDU Not Allowed" error. So, what we have is that HC-04 module advertizes park support, it apparently negotiates its availability for connection, but when asked to actually perform it, it rejects it. This is so much correlates with this message: http://article.gmane.org/gmane.linux.bluez.user/12710
PS3 Bluetooth remote
# hcitool info 00:06:F5:xx:xx:xx
Requesting information ...
BD Address: 00:06:F5:xx:xx:xx
Device Name: BD Remote Control
LMP Version: 2.0 (0x3) LMP Subversion: 0x229
Manufacturer: Broadcom Corporation (15)
Features: 0xbc 0x02 0x04 0x38 0x08 0x00 0x00 0x00
<encryption> <slot offset> <timing accuracy> <role switch>
<sniff mode> <RSSI> <power control> <enhanced iscan>
<interlaced iscan> <interlaced pscan> <AFH cap. slave>
Requesting information ...
BD Address: 00:06:F5:xx:xx:xx
Device Name: BD Remote Control
LMP Version: 2.0 (0x3) LMP Subversion: 0x229
Manufacturer: Broadcom Corporation (15)
Features: 0xbc 0x02 0x04 0x38 0x08 0x00 0x00 0x00
<encryption> <slot offset> <timing accuracy> <role switch>
<sniff mode> <RSSI> <power control> <enhanced iscan>
<interlaced iscan> <interlaced pscan> <AFH cap. slave>
So, this fair Broadcom device doesn't even conceal the fact that it's barely Bluetooth interoperatable - it doesn't support park state at all.
No surprises when asking it to go there nontheless:
2012-01-07 16:03:08.863586 < HCI Command: Park State (0x02|0x0005) plen 6
handle 13 max 80 min 64
2012-01-07 16:03:08.865636 > HCI Event: Command Status (0x0f) plen 4
Park State (0x02|0x0005) status 0x1a ncmd 1
Error: Unsupported Remote Feature / Unsupported LMP Feature
LG KS20 WindowsMobile phone
# hcitool info 00:1E:75:xx:xx:xx | grep park
<park state> <RSSI> <channel quality> <SCO link> <HV2 packets>
So, this one advertizes park. But:
2012-01-07 16:29:11.288514 < HCI Command: Park State (0x02|0x0005) plen 6
handle 12 max 80 min 64
2012-01-07 16:29:11.290485 > HCI Event: Command Status (0x0f) plen 4
Park State (0x02|0x0005) status 0x00 ncmd 1
2012-01-07 16:29:11.466508 > HCI Event: Mode Change (0x14) plen 6
status 0x0c handle 12 mode 0x00 interval 0
Error: Command Disallowed
Broadcom is such Broadcom...
Huawei U8160 aka Vodafone 858 Smart Android phone
# hcitool info 04:C0:6F:xx:xx:xx | grep park
<empty>
2012-01-07 16:19:01.322536 < HCI Command: Park State (0x02|0x0005) plen 6
handle 12 max 80 min 64
2012-01-07 16:19:01.324521 > HCI Event: Command Status (0x0f) plen 4
Park State (0x02|0x0005) status 0x1a ncmd 1
Error: Unsupported Remote Feature / Unsupported LMP Feature
Broadcom is such Broadcom...
HTC Mogul WindowsMobile phone
2012-01-07 16:11:14.184067 < HCI Command: Park State (0x02|0x0005) plen 6
handle 12 max 80 min 64
2012-01-07 16:11:14.186430 > HCI Event: Command Status (0x0f) plen 4
Park State (0x02|0x0005) status 0x00 ncmd 1
2012-01-07 16:11:14.528429 > HCI Event: Mode Change (0x14) plen 6
status 0x00 handle 12 mode 0x03 interval 80
Mode: Park
handle 12 max 80 min 64
2012-01-07 16:11:14.186430 > HCI Event: Command Status (0x0f) plen 4
Park State (0x02|0x0005) status 0x00 ncmd 1
2012-01-07 16:11:14.528429 > HCI Event: Mode Change (0x14) plen 6
status 0x00 handle 12 mode 0x03 interval 80
Mode: Park
Bwahaha! TI rules!
Samsung i740 WindowsMobile phone
Manufacturer: Cambridge Silicon Radio (10)
2012-01-07 17:54:17.141466 < HCI Command: Park State (0x02|0x0005) plen 6
handle 12 max 80 min 64
2012-01-07 17:54:17.142911 > HCI Event: Command Status (0x0f) plen 4
Park State (0x02|0x0005) status 0x00 ncmd 1
2012-01-07 17:54:17.472919 > HCI Event: Mode Change (0x14) plen 6
status 0x00 handle 12 mode 0x03 interval 80
Mode: Park
Linux computer with Broadcom chip
Park mode work here, supervised by Bluez.
So, out of 7 devices (that's whole piconet, and I have more!) only 3 supported park mode.
More insightful posts:
No comments:
Post a Comment