Re: [PATCH] Bluetooth: Fix - During le_conn_timeout disable EXT_ADV

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Sathish,

>>>> Disabling LE_LEGACY_ADV when LE_EXT_ADV is enabled causes 'command
>>>> disallowed . This patch fixes that issue and disables EXT_ADV if
>>>> enabled.
>>>> 
>>>> Signed-off-by: Sathish Narsimman <sathish.narasimman@xxxxxxxxx>
>>>> ---
>>>> net/bluetooth/hci_conn.c | 16 +++++++++++++---
>>>> 1 file changed, 13 insertions(+), 3 deletions(-)
>>>> 
>>>> diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c
>>>> index a582c676e584..a8d8a876363c 100644
>>>> --- a/net/bluetooth/hci_conn.c
>>>> +++ b/net/bluetooth/hci_conn.c
>>>> @@ -481,9 +481,19 @@ static void le_conn_timeout(struct work_struct *work)
>>>>       * (which doesn't have a timeout of its own).
>>>>       */
>>>>      if (conn->role == HCI_ROLE_SLAVE) {
>>>> -             u8 enable = 0x00;
>>>> -             hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable),
>>>> -                          &enable);
>>>> +             if (ext_adv_capable(hdev)) {
>>>> +                     struct hci_cp_le_set_ext_adv_enable cp;
>>>> +
>>>> +                     cp.enable = 0x00;
>>>> +                     cp.num_of_sets = 0x00;
>>>> +
>>>> +                     hci_send_cmd(hdev, HCI_OP_LE_SET_EXT_ADV_ENABLE,
>>>> +                                  sizeof(cp), &cp);
>>>> +             } else {
>>>> +                     u8 enable = 0x00;
>>>> +                     hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE,
>>>> +                                  sizeof(enable), &enable);
>>>> +             }
>>> 
>>> hmmm, I wonder if it is better to create a helper function for this.
>>> 
>>> Regards
>>> 
>>> Marcel
>>> 
>> 
>> let me verify and submit patch with __hci_req_disable_advertising
>> 
>> Regards
>> Sathish N
> 
> calling __hci_req_disable_advertising is not working. the command is
> not getting executed
> I hope the below method is fine? where it works
> 
> +static void le_disable_advertising(struct hci_dev *hdev)
> +{
> +       if (ext_adv_capable(hdev)) {
> +               struct hci_cp_le_set_ext_adv_enable cp;
> +               cp.enable = 0x00;
> +               cp.num_of_sets = 0x00;
> +
> +               hci_send_cmd(hdev, HCI_OP_LE_SET_EXT_ADV_ENABLE, sizeof(cp),
> +                            &cp);
> +       } else {
> +               u8 enable = 0x00;
> +               hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE,
> +                            sizeof(enable), &enable);
> +       }
> +
> +}

at first glance this looks fine.

Regards

Marcel




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux