nRF Connect SDK 2.4.2 Adding include scan.h

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;
}

Parents Reply
  • Yes. Here is my .conf file. I am using Bluetooth Observer example program as base.

    CONFIG_BT=y
    CONFIG_BT_OBSERVER=y
    CONFIG_BT_EXT_ADV=y
    
    CONFIG_BT_DEVICE_NAME="Bluetooth Observer Scoreboard"
    
    CONFIG_BT_PER_ADV_SYNC=y
    
    #Bluetooth
    CONFIG_BT_GATT_DM=y
    CONFIG_HEAP_MEM_POOL_SIZE=2048
    
    #Custom central scanning
    CONFIG_BT_SCAN=y
    CONFIG_BT_SCAN_FILTER_ENABLE=y
    CONFIG_BT_SCAN_NAME_CNT=1
    CONFIG_BT_SCAN_MANUFACTURER_DATA_CNT=1
    CONFIG_BT_SCAN_UUID_CNT=1

Children
No Data
Related