Bluetooth: Add LE scan interval & window to bt_le_scan_param

Change-Id: If2ae26625b98485c3495f4f4f48e49600a1ffd14
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
This commit is contained in:
Johan Hedberg 2015-12-03 22:39:11 +02:00 committed by Anas Nashif
commit 3226780a3c
2 changed files with 43 additions and 3 deletions

View file

@ -104,11 +104,23 @@ typedef void bt_le_scan_cb_t(const bt_addr_le_t *addr, int8_t rssi,
(&(struct bt_le_scan_param) { \
.type = BT_HCI_LE_SCAN_ACTIVE, \
.filter_dup = 0x01, \
.interval = 0x0030, \
.window = 0x0030, \
})
/** LE scan parameters */
struct bt_le_scan_param {
uint8_t type;
uint8_t filter_dup;
/** Type of scanning (active/passive) */
uint8_t type;
/** Enable duplicate filtering */
uint8_t filter_dup;
/** Scan interval */
uint16_t interval;
/** Scan window */
uint16_t window;
};
/** @brief Start (LE) scanning

View file

@ -2072,10 +2072,37 @@ int bt_le_adv_stop(void)
return 0;
}
static bool valid_le_scan_param(const struct bt_le_scan_param *param)
{
if (param->type != BT_HCI_LE_SCAN_PASSIVE &&
param->type != BT_HCI_LE_SCAN_ACTIVE) {
return false;
}
if (param->interval < 0x0004 || param->interval > 0x4000) {
return false;
}
if (param->window < 0x0004 || param->window > 0x4000) {
return false;
}
if (param->window > param->interval) {
return false;
}
return true;
}
int bt_le_scan_start(const struct bt_le_scan_param *param, bt_le_scan_cb_t cb)
{
int err;
/* Check that the parameters have valid values */
if (!valid_le_scan_param(param)) {
return -EINVAL;
}
/* Return if active scan is already enabled */
if (atomic_test_and_set_bit(bt_dev.flags, BT_DEV_EXPLICIT_SCAN)) {
return -EALREADY;
@ -2089,7 +2116,8 @@ int bt_le_scan_start(const struct bt_le_scan_param *param, bt_le_scan_cb_t cb)
}
}
err = start_le_scan(param->type, 0x0010, 0x0010, param->filter_dup);
err = start_le_scan(param->type, param->interval, param->window,
param->filter_dup);
if (err) {
atomic_clear_bit(bt_dev.flags, BT_DEV_EXPLICIT_SCAN);
return err;