¿Cómo configurar la potencia de transmisión de Bluetooth?

9

Estoy tratando de configurar la potencia de transmisión (consulta) de los dongles Bluetooth con los conjuntos de chips Broadcom y CSR usando hciconfig, por ejemplo:

hciconfig hci0 inqtpl 3

Pero sea cual sea el parámetro válido que pase, leer el valor después siempre produce 0, así:

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

Cuando paso valores no válidos, recibo un mensaje de error:

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

Entonces, obviamente, se verifica la validez del parámetro. Estoy bastante seguro de que los chipsets lo comprueban, ya que obtengo los mismos resultados al enviar los comandos HCI apropiados manualmente.

Ambos conjuntos de chips también afirman que admiten esta característica:

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

¿Me estoy equivocando o solo por alguna ocasión los dos conjuntos de chips que estoy usando no son compatibles con esta función?

domsom
fuente
1
Actualización: Acabo de recibir una nota de un fabricante de dongles que indica que esta característica ha sido bloqueada debido a restricciones impuestas por el marcado CE europeo.
domsom

Respuestas:

2

Solo para verificar dos veces:

¿Puedes obtener el valor máximo y predeterminado a través de bccmd psget? ex:

bccmd psget 0x0017

Y una vez que se reciben esos valores, ¿puede intentar algo entre ese rango estableciendo 0x1, por ejemplo?

También iirc, 1 es el máximo del hardware y 0.5 es el 50% de la potencia de tránsito, aunque puede ser específico del controlador, por lo que podría ser información basura en su caso.

Estaba casi seguro de que hay un procedimiento de almacenamiento al que debe llamar después de configurar la potencia de tránsito para que el dispositivo comience a usarla, para evitar que el dispositivo intente establecer una potencia de tránsito defectuosa de inmediato.

¿Ayuda esto?
Http://www.spinics.net/lists/linux-bluetooth/msg16546.html

Torxed
fuente
Gracias por su respuesta, acabo de pasar un tiempo con bccmd. bccmd psget 0x0017cede Can't execute command: No such device or address (6)con mi módulo CSR, mientras 0x0001funciona. bccmd pslistdevuelve una lista bastante corta de 7 comandos que no incluye 0x0017. Además, bccmd buildnameestados odj_4hci_rom_vm_bt2.1_23e_0806121029_encr128. ¿Quizás el firmware es demasiado viejo? ¿Puedo actualizarlo?
domsom
También parcheé bccmdpara admitir la lectura / configuración de los poderes predeterminados y max tx (capítulos 3.9 y 3.10 en eestud.kku.ac.th/~moo/datasheet/Bluetooth/BlueCore/… ). He podido establecer esos valores en 0 o 4, nada más. Sin embargo, establecer esos valores no parece tener ningún impacto práctico en el rango del dongle. Curiosamente, hciconfig inqtplahora informa 4si configuré los valores a 4...
domsom 18/12/12
0

Tratar:

sudo bccmd psget -s 0x0000 0x0017
Markus kirsten
fuente
Esto funcionó cuando se encontró con el mismo problema explicado en los comentarios de domsom sobre la respuesta de Torxed. No se requieren parches.
Hydranix
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 con mi hardware basado en CSR8510 A10

jsmith
fuente