13

I am trying to set the (inquiry) transmit power of Bluetooth dongles with both Broadcom and CSR chipsets using hciconfig, e.g.:

hciconfig hci0 inqtpl 3

But whatever valid parameter I pass, reading the value afterwards always yields 0, like so:

hci0:   Type: BR/EDR  Bus: USB
        BD Address: 00:02:72:D6:6B:25  ACL MTU: 1021:8  SCO MTU: 64:1
        Inquiry transmit power level: 0

When I pass invalid values, I get an error message:

Can't set inquiry transmit power level on hci0: Input/output error (5)

So obviously the parameter is checked for validity. I am pretty sure it's checked by the chipsets, as I get the same results when sending the appropriate HCI commands manually.

Both chipsets also state they support this feature:

# hciconfig hci0 features
hci0:   Type: BR/EDR  Bus: USB
        BD Address: 00:02:72:D6:6B:25  ACL MTU: 1021:8  SCO MTU: 64:1
        Features page 0: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87
                [...]
                <err. data report> <non-flush flag> <LSTO> <inquiry TX power>
                [...]

Am I getting something wrong, or is it just by occasion that both chipsets I'm using do not support this feature?

domsom
  • 386
  • 2
    Update: I just received a note from a dongle maker stating this feature has been blocked due to restrictions opposed by the European CE marking. – domsom Jan 04 '13 at 10:18

3 Answers3

2

Just to double check:

can you get the maximum and default value via bccmd psget? ex:

bccmd psget 0x0017

And once those values are recieved, can you try something in between that range by setting 0x1 for instance?

Also iirc, 1 is maximum of the hardware and 0.5 is 50% transit power, tho that can be driver specific so that might be rubbish info in your case.

I was almost sure that there is a store proceedure you need to call after setting the transit power in order for the device to start using it, to prevent the device from trying to set a faulty transit power right away.

Does this help anything:
http://www.spinics.net/lists/linux-bluetooth/msg16546.html

Torxed
  • 3,637
  • Thanks for your answer, I just spent some time with bccmd. bccmd psget 0x0017 yields Can't execute command: No such device or address (6) with my CSR module, while 0x0001 works. bccmd pslist returns a rather short list of 7 commands that doesn't include 0x0017. Besides, bccmd buildname states odj_4hci_rom_vm_bt2.1_23e_0806121029_encr128. Maybe the firmware is just too old? Can I update it? – domsom Dec 18 '12 at 12:57
  • I also patched bccmd to support reading/setting the default & max tx powers (chapters 3.9 & 3.10 in http://eestud.kku.ac.th/~moo/datasheet/Bluetooth/BlueCore/BCCMD%20Commands.pdf). I have been able to set those values to either 0 or 4, nothing else. Setting those values doesn't seem to have any practical impact on the dongle's range, though. Interestingly though hciconfig inqtpl now reports 4 if I set the values to 4 though... – domsom Dec 18 '12 at 13:01
0

Try:

sudo bccmd psget -s 0x0000 0x0017
  • This worked when running into the same problem explained in domsom's comments on Torxed's answer. No patching required. – Hydranix Feb 04 '17 at 11:15
0
bccmd psget -s 0x0000 0x0021
Default transmit power: 0x0004 (4)
localhost ~ # bccmd psset -r -s 0x0000 0x0021 0x0006
localhost ~ # bccmd psget -s 0x0000 0x0021
Default transmit power: 0x0006 (6)

it works with my hardware based on CSR8510 A10

jsmith
  • 1