drivers/nble: Implement client scanning
Implement Bluetooth LE scan start/stop API for Nordic. Change-Id: I3dc153346d0135501091a4b952a3c60c081802db Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
This commit is contained in:
parent
c80cf24e03
commit
68fcd4e04b
1 changed files with 77 additions and 2 deletions
|
@ -33,6 +33,7 @@
|
||||||
#define NBLE_BTWAKE_PIN 5
|
#define NBLE_BTWAKE_PIN 5
|
||||||
|
|
||||||
static bt_ready_cb_t bt_ready_cb;
|
static bt_ready_cb_t bt_ready_cb;
|
||||||
|
static bt_le_scan_cb_t *scan_dev_found_cb;
|
||||||
|
|
||||||
/* Local Bluetooth LE Device Address */
|
/* Local Bluetooth LE Device Address */
|
||||||
bt_addr_le_t nble_bdaddr;
|
bt_addr_le_t nble_bdaddr;
|
||||||
|
@ -256,14 +257,88 @@ int bt_le_adv_stop(void)
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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->filter_dup != BT_HCI_LE_SCAN_FILTER_DUP_DISABLE &&
|
||||||
|
param->filter_dup != BT_HCI_LE_SCAN_FILTER_DUP_ENABLE) {
|
||||||
|
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 bt_le_scan_start(const struct bt_le_scan_param *param, bt_le_scan_cb_t cb)
|
||||||
{
|
{
|
||||||
return -ENOSYS;
|
struct nble_gap_scan_params nble_params;
|
||||||
|
|
||||||
|
BT_DBG("");
|
||||||
|
|
||||||
|
/* Check that the parameters have valid values */
|
||||||
|
if (!valid_le_scan_param(param)) {
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
nble_params.interval = param->interval;
|
||||||
|
nble_params.window = param->window;
|
||||||
|
nble_params.scan_type = param->type;
|
||||||
|
nble_params.use_whitelist = 0;
|
||||||
|
|
||||||
|
/* Check is scan already enabled */
|
||||||
|
|
||||||
|
scan_dev_found_cb = cb;
|
||||||
|
|
||||||
|
nble_gap_start_scan_req(&nble_params);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_nble_gap_adv_report_evt(const struct nble_gap_adv_report_evt *evt,
|
||||||
|
const uint8_t *buf, uint8_t len)
|
||||||
|
{
|
||||||
|
BT_DBG("");
|
||||||
|
|
||||||
|
if (scan_dev_found_cb) {
|
||||||
|
scan_dev_found_cb(&evt->addr, evt->rssi, evt->adv_type,
|
||||||
|
buf, len);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int bt_le_scan_stop(void)
|
int bt_le_scan_stop(void)
|
||||||
{
|
{
|
||||||
return -ENOSYS;
|
BT_DBG("");
|
||||||
|
|
||||||
|
scan_dev_found_cb = NULL;
|
||||||
|
|
||||||
|
nble_gap_stop_scan_req();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_nble_gap_scan_start_stop_rsp(const struct nble_response *rsp)
|
||||||
|
{
|
||||||
|
if (rsp->status) {
|
||||||
|
BT_ERR("Unable to stop scan, status %d", rsp->status);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
BT_DBG("");
|
||||||
}
|
}
|
||||||
|
|
||||||
void nble_log(const struct nble_log_s *param, char *format, uint8_t len)
|
void nble_log(const struct nble_log_s *param, char *format, uint8_t len)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue