Hi,
I am using nRF52840 DK and Bluetooth Observer example program. I am implementing filtering. I am having trouble add include scan.h which is located at C:\ncs\v2.4.2\nrf\include\bluetooth.
Here is my CMakeLists.txt
cmake_minimum_required(VERSION 3.20.0) find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) project(NONE) # NORDIC SDK APP START target_sources(app PRIVATE src/main.c) zephyr_include_directories(src) # NORDIC SDK APP END zephyr_library_include_directories(.)
My main.c
#include <zephyr/sys/printk.h> #include <zephyr/bluetooth/bluetooth.h> #include <zephyr/bluetooth/hci.h> #include <zephyr/bluetooth/conn.h> #include <zephyr/bluetooth/gatt.h> #include <zephyr/bluetooth/uuid.h> #include <bluetooth/services/throughput.h> #include <bluetooth/scan.h> #define NAME_LEN 30 #if defined(CONFIG_BT_EXT_ADV) static bool data_cb(struct bt_data *data, void *user_data) { char *name = user_data; uint8_t len; switch (data->type) { case BT_DATA_NAME_SHORTENED: case BT_DATA_NAME_COMPLETE: len = MIN(data->data_len, NAME_LEN - 1); (void)memcpy(name, data->data, len); name[len] = '\0'; return false; case BT_DATA_MANUFACTURER_DATA: printk("Manufacturer data: "); for (uint16_t i=0; i<data->data_len; i++) { printk("%02x:", data->data[i]); } printk("\n"); return false; default: return true; } } static void scan_recv(const struct bt_le_scan_recv_info *info, struct net_buf_simple *buf) { char le_addr[BT_ADDR_LE_STR_LEN]; char name[NAME_LEN]; (void)memset(name, 0, sizeof(name)); bt_data_parse(buf, data_cb, name); bt_addr_le_to_str(info->addr, le_addr, sizeof(le_addr)); printk("scan_recv: %s\n", name); } static struct bt_le_scan_cb scan_callbacks = { .recv = scan_recv, }; #endif /* CONFIG_BT_EXT_ADV */ int observer_start(void) { int err; char device_name[12] = "Score Board"; char *device = device_name; printk("thingy: %s\n", device); #if defined(CONFIG_BT_EXT_ADV) bt_le_scan_cb_register(&scan_callbacks); printk("Registered scan callbacks\n"); #endif /* CONFIG_BT_EXT_ADV */ err = bt_scan_filter_add(BT_SCAN_NAME_FILTER, device); if (err) { printk("Scanning filters cannot be set\n"); return err; } err = bt_scan_filter_enable(BT_SCAN_NAME_FILTER, true); if (err) { printk("Filters cannot be turned on\n"); return err; } struct bt_le_scan_param scan_param = { .type = BT_LE_SCAN_TYPE_ACTIVE, .options = BT_LE_SCAN_OPT_FILTER_DUPLICATE, .interval = BT_GAP_SCAN_FAST_INTERVAL, .window = BT_GAP_SCAN_FAST_WINDOW, }; err = bt_le_scan_start(&scan_param, NULL); if (err) { printk("Start scanning failed (err %d)\n", err); return err; } printk("Started scanning...\n"); return 0; }