GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Fake Csr 4.0 Bluetooth Dongle With Error Set Event Filter (invalid Hci Command Parameters) After Kernel Patch?

J'ai un faux dongle BT 4.0 de Chine et j'essaie la procédure de ce fil :Problème de dongle Bluetooth

Distributor ID: Ubuntu
Description:    Ubuntu 20.04.1 LTS
Release:    20.04
Codename:   focal

Device: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
    bcdDevice: 88.91
    Kernel: 5.10.3-051003-generic

usb-devices | awk '/0a12/' RS=
T:  Bus=02 Lev=02 Prnt=02 Port=01 Cnt=01 Dev#=  3 Spd=12  MxCh= 0
D:  Ver= 2.00 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=0a12 ProdID=0001 Rev=88.91
S:  Product=BT DONGLE10
C:  #Ifs= 2 Cfg#= 1 Atr=80 MxPwr=100mA
I:  If#=0x0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
I:  If#=0x1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb

Mais même après le patch, j'obtiens l'erreur ci-dessous via hcidump :

HCI Event: Command Complete (0x0e) plen 4
    Set Event Filter (0x03|0x0005) ncmd 1
    status 0x12
    Error: Invalid HCI Command Parameters

Vérifiez-le :https://bugzilla.kernel.org/show_bug.cgi?id=60824#c155

"Même appareil et même problème sur Pi Zero. « Modification du #define lmp_bredr_capable(dev) dans hci_core.h retourner false a fait l'affaire.”

Je ne sais pas comment faire ça #define lmp_brdr_capable(dev). Quelqu'un pourrait-il aider ?

Je suis entièrement disponible pour le tester.

Réponse acceptée :

j'ai résolu mon problème en commentant les lignes 296 et 297 de hci_core.c (plus les patchs).

static void bredr_setup(struct hci_request *req)
{
    __le16 param;
    __u8 flt_type;

    /* Read Buffer Size (ACL mtu, max pkt, etc.) */
    hci_req_add(req, HCI_OP_READ_BUFFER_SIZE, 0, NULL);

    /* Read Class of Device */
    hci_req_add(req, HCI_OP_READ_CLASS_OF_DEV, 0, NULL);

    /* Read Local Name */
    hci_req_add(req, HCI_OP_READ_LOCAL_NAME, 0, NULL);

    /* Read Voice Setting */
    hci_req_add(req, HCI_OP_READ_VOICE_SETTING, 0, NULL);

    /* Read Number of Supported IAC */
    hci_req_add(req, HCI_OP_READ_NUM_SUPPORTED_IAC, 0, NULL);

    /* Read Current IAC LAP */
    hci_req_add(req, HCI_OP_READ_CURRENT_IAC_LAP, 0, NULL);

    /* Clear Event Filters */
    //flt_type = HCI_FLT_CLEAR_ALL;  HERE!!
    //hci_req_add(req, HCI_OP_SET_EVENT_FLT, 1, &flt_type);

    /* Connection accept timeout ~20 secs */
    param = cpu_to_le16(0x7d00);
    hci_req_add(req, HCI_OP_WRITE_CA_TIMEOUT, 2, &param);

Peut-être que le "#define lmp_brdr_capable(dev) 0" fonctionne également. Mais je ne suis pas sur. J'exécute toujours bredr_setup() mais je contourne l'étape d'effacement du filtre d'événement…

obs :Il fonctionne parfaitement depuis 2 jours. Seul problème, je ne peux pas le transformer en profil HSP \ HSP mais je pense que c'est une autre histoire (même après l'ofono gambiarra). Bluetooth sous Linux est une douleur dans un $..

En relation :Comment ajouter un utilisateur existant à un groupe existant dans Ubuntu ?
Ubuntu
  1. Bluetooth cesse de fonctionner - "Échec de la mise sous tension :Org.bluez.error.failed" ?

  2. Erreur lors du chargement du module Btusb avec le noyau 4.10.0-20-generic ?

  3. Comment configurer le Bluetooth pour qu'il reste désactivé après la suspension ? ?

  4. Panique du noyau avec l'erreur "Impossible d'ouvrir le périphérique racine", où ajouter l'option "root=" ?

  5. Erreur de clé Ssh invalide dans Juju lors de son utilisation avec Maas ?

Commande murale sous Linux avec exemples

Commande IP Linux avec exemples

Commande sysctl sous Linux

Comment configurer un pare-feu avec UFW sur Debian 11

Utilisation de la commande tr sous Linux pour jouer avec des personnages

Comment vérifier les paramètres du serveur VPS avec la commande Linux