Como definir a potência de transmissão do Bluetooth?


9

Estou tentando definir a potência de transmissão (de consulta) dos dongles Bluetooth com os chipsets Broadcom e CSR usando hciconfig , por exemplo:

hciconfig hci0 inqtpl 3

Mas qualquer que seja o parâmetro válido que eu passar, a leitura do valor depois sempre gera 0, da seguinte forma:

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

Quando passo valores inválidos, recebo uma mensagem de erro:

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

Então, obviamente, o parâmetro é verificado quanto à validade. Tenho certeza de que ele foi verificado pelos chipsets, pois obtenho os mesmos resultados ao enviar os comandos HCI apropriados manualmente.

Os dois chipsets também afirmam que suportam esse recurso:

# 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>
                [...]

Estou entendendo algo errado ou é apenas por ocasião que os dois chipsets que estou usando não suportam esse recurso?


1
Atualização: Acabei de receber uma nota de um fabricante de dongles informando que esse recurso foi bloqueado devido a restrições opostas pela marcação CE européia.
domsom

Respostas:


2

Apenas para verificar:

você pode obter o valor máximo e padrão via bccmd psget? ex:

bccmd psget 0x0017

E uma vez que esses valores são recebidos, você pode tentar algo entre esse intervalo, definindo 0x1, por exemplo?

Além disso, iirc, 1 é o máximo do hardware e 0,5 é 50% de energia de trânsito, o que pode ser específico do driver e, portanto, ser uma informação de lixo no seu caso.

Eu tinha quase certeza de que há um procedimento de armazenamento para o qual você precisa ligar depois de definir a energia de trânsito para que o dispositivo comece a usá-lo, para impedir que o dispositivo tente definir imediatamente uma energia de trânsito com defeito.

Isso ajuda em algo:
http://www.spinics.net/lists/linux-bluetooth/msg16546.html


Obrigado pela sua resposta, passei algum tempo com bccmd. bccmd psget 0x0017produz Can't execute command: No such device or address (6)com o meu módulo CSR, enquanto 0x0001trabalha. bccmd pslistretorna uma lista bastante curta de 7 comandos que não incluem 0x0017. Além disso, bccmd buildnameestados odj_4hci_rom_vm_bt2.1_23e_0806121029_encr128. Talvez o firmware seja muito antigo? Posso atualizá-lo?
domsom

Também fiz o patch bccmdpara suportar a leitura / configuração dos poderes padrão & max tx (capítulos 3.9 e 3.10 em eestud.kku.ac.th/~moo/datasheet/Bluetooth/BlueCore/… ). Consegui definir esses valores para 0 ou 4, nada mais. A definição desses valores não parece ter nenhum impacto prático no alcance do dongle. Curiosamente, hciconfig inqtplagora relata 4se eu definir os valores para 4embora ...
domsom 18/12/12

0

Tentar:

sudo bccmd psget -s 0x0000 0x0017

Isso funcionou ao encontrar o mesmo problema explicado nos comentários de domsom sobre a resposta de Torxed. Não é necessário aplicar patches.
Hydranix 04/02

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)

funciona com meu hardware baseado no CSR8510 A10

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.