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?

  • 1
    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 4 '13 at 10:18

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:

  • 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 eestud.kku.ac.th/~moo/datasheet/Bluetooth/BlueCore/…). 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


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 4 '17 at 11:15
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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.