Re: [PATCH v3 5/6] Bluetooth: MGMT start discovery LE-Only support

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

 



Hi Marcel,

On Mon, Jan 30, 2012 at 6:44 PM, Marcel Holtmann <marcel@xxxxxxxxxxxx> wrote:
> Hi Andre,
>
>> This patch adds LE-Only discovery procedure support to MGMT Start
>> Discovery command.
>>
>> Signed-off-by: Andre Guedes <andre.guedes@xxxxxxxxxxxxx>
>> ---
>>  net/bluetooth/hci_event.c |   13 ++++++++++++-
>>  net/bluetooth/mgmt.c      |   20 +++++++++++++++++++-
>>  2 files changed, 31 insertions(+), 2 deletions(-)
>>
>> diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
>> index 856ab35..fb2497b 100644
>> --- a/net/bluetooth/hci_event.c
>> +++ b/net/bluetooth/hci_event.c
>> @@ -1033,6 +1033,13 @@ static void hci_cc_le_set_scan_param(struct hci_dev *hdev, struct sk_buff *skb)
>>
>>       hdev->le_scan_result = -bt_to_errno(status);
>>       wake_up(&hdev->le_scan_wait_q);
>> +
>> +     if (status) {
>> +             hci_dev_lock(hdev);
>> +             mgmt_start_discovery_failed(hdev, status);
>> +             hci_dev_unlock(hdev);
>> +             return;
>> +     }
>>  }
>>
>>  static void hci_cc_le_set_scan_enable(struct hci_dev *hdev,
>> @@ -1052,8 +1059,12 @@ static void hci_cc_le_set_scan_enable(struct hci_dev *hdev,
>>               hdev->le_scan_result = -bt_to_errno(status);
>>               wake_up(&hdev->le_scan_wait_q);
>>
>> -             if (status)
>> +             if (status) {
>> +                     hci_dev_lock(hdev);
>> +                     mgmt_start_discovery_failed(hdev, status);
>> +                     hci_dev_unlock(hdev);
>>                       return;
>> +             }
>
> are these two related to the other changes or just actual bug fixes?

These two are related to MGMT Start Discovery command itself. If LE
scan HCI commands fail we have to send mgmt_start_discovery_failed
event.

>>
>>               set_bit(HCI_LE_SCAN, &hdev->dev_flags);
>>
>> diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
>> index 8970799..0a1fa4c 100644
>> --- a/net/bluetooth/mgmt.c
>> +++ b/net/bluetooth/mgmt.c
>> @@ -35,6 +35,15 @@
>>  #define MGMT_VERSION 0
>>  #define MGMT_REVISION        1
>>
>> +/*
>> + * These LE scan and inquiry parameters were chosen according to LE General
>> + * Discovery Procedure specification.
>> + */
>> +#define LE_SCAN_TYPE                 0x01
>> +#define LE_SCAN_WIN                  0x12
>> +#define LE_SCAN_INT                  0x12
>> +#define LE_SCAN_TIMEOUT_LE_ONLY              10240   /* TGAP(gen_disc_scan_min) */
>> +
>>  #define INQUIRY_LEN_BREDR 0x08 /* TGAP(100) */
>>
>>  #define SERVICE_CACHE_TIMEOUT (5 * 1000)
>> @@ -1897,6 +1906,7 @@ static int start_discovery(struct sock *sk, u16 index,
>>                                               unsigned char *data, u16 len)
>>  {
>>       struct mgmt_cp_start_discovery *cp = (void *) data;
>> +     unsigned long discov_type = cp->type;
>>       struct pending_cmd *cmd;
>>       struct hci_dev *hdev;
>>       int err;
>> @@ -1932,7 +1942,15 @@ static int start_discovery(struct sock *sk, u16 index,
>>               goto failed;
>>       }
>>
>> -     err = hci_do_inquiry(hdev, INQUIRY_LEN_BREDR);
>> +     if (test_bit(MGMT_ADDR_BREDR, &discov_type))
>> +             err = hci_do_inquiry(hdev, INQUIRY_LEN_BREDR);
>> +     else if (test_bit(MGMT_ADDR_LE_PUBLIC, &discov_type) &&
>> +                             test_bit(MGMT_ADDR_LE_RANDOM, &discov_type))
>
> so test_bit can not check for two bits at the same time?

AFAIK, no. If anyone knows a helper like that, please let me
know.

BR,

Andre
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[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