Wie stelle ich die Bluetooth-Sendeleistung ein?

9

Ich versuche, die (Anfrage-) Sendeleistung von Bluetooth-Dongles sowohl mit Broadcom- als auch mit CSR-Chipsätzen einzustellen hciconfig, z. B.:

hciconfig hci0 inqtpl 3

Unabhängig davon, welchen gültigen Parameter ich übergebe, ergibt das anschließende Lesen des Werts immer 0, wie folgt:

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

Wenn ich ungültige Werte übergebe, wird eine Fehlermeldung angezeigt:

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

Der Parameter wird also offensichtlich auf Gültigkeit überprüft. Ich bin mir ziemlich sicher, dass dies von den Chipsätzen überprüft wird, da ich beim manuellen Senden der entsprechenden HCI-Befehle die gleichen Ergebnisse erhalte.

Beide Chipsätze geben außerdem an, dass sie diese Funktion unterstützen:

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

Verstehe ich etwas falsch oder unterstützen beide von mir verwendeten Chipsätze diese Funktion nicht gelegentlich?

Domsom
quelle
1
Update: Ich habe gerade eine Nachricht von einem Dongle-Hersteller erhalten, dass diese Funktion aufgrund von Einschränkungen, denen die europäische CE-Kennzeichnung widerspricht, blockiert wurde.
Domsom

Antworten:

2

Nur zur Überprüfung:

Können Sie den Maximal- und Standardwert über bccmd psget erhalten? Ex:

bccmd psget 0x0017

Und wenn diese Werte einmal empfangen wurden, können Sie etwas zwischen diesem Bereich ausprobieren, indem Sie beispielsweise 0x1 einstellen?

Außerdem ist iirc, 1 das Maximum der Hardware und 0,5 ist 50% Transitleistung, obwohl dies fahrerspezifisch sein kann, so dass es sich in Ihrem Fall möglicherweise um Müllinformationen handelt.

Ich war mir fast sicher, dass es einen Speichervorgang gibt, den Sie nach dem Einstellen der Transitleistung aufrufen müssen, damit das Gerät ihn verwenden kann, um zu verhindern, dass das Gerät sofort versucht, eine fehlerhafte Transitleistung einzustellen.

Hilft dies irgendetwas:
http://www.spinics.net/lists/linux-bluetooth/msg16546.html

Torxed
quelle
Vielen Dank für Ihre Antwort, ich habe gerade einige Zeit mit verbracht bccmd. bccmd psget 0x0017ergibt Can't execute command: No such device or address (6)mit meinem CSR-Modul, während 0x0001funktioniert. bccmd pslistgibt eine ziemlich kurze Liste von 7 Befehlen zurück, die 0x0017 nicht enthalten. Außerdem bccmd buildnameStaaten odj_4hci_rom_vm_bt2.1_23e_0806121029_encr128. Vielleicht ist die Firmware einfach zu alt? Kann ich es aktualisieren?
Domsom
Ich habe auch gepatcht bccmd, um das Lesen / Festlegen der Standard- und maximalen Sendeleistungen zu unterstützen (Kapitel 3.9 und 3.10 in eestud.kku.ac.th/~moo/datasheet/Bluetooth/BlueCore/… ). Ich konnte diese Werte entweder auf 0 oder 4 setzen, sonst nichts. Das Einstellen dieser Werte scheint jedoch keine praktischen Auswirkungen auf die Reichweite des Dongles zu haben. Interessanterweise hciconfig inqtplberichtet jetzt, 4ob ich die Werte auf 4obwohl gesetzt habe ...
Domsom
0

Versuchen:

sudo bccmd psget -s 0x0000 0x0017
Markus kirsten
quelle
Dies funktionierte, wenn man auf dasselbe Problem stieß, das in Domsoms Kommentaren zu Torxeds Antwort erklärt wurde. Kein Patchen erforderlich.
Hydranix