<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>NRF52832 BLE Scan</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/43747/nrf52832-ble-scan</link><description>Hi 
 Can I get some idea on which functions to make changes to in order to scan and report(for example on uart) the number of ble devices present in NRF52832 kit range. 
 I know ble central uart example does the scan, but I don&amp;#39;t seem to forward with</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Wed, 24 Apr 2024 09:20:12 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/43747/nrf52832-ble-scan" /><item><title>RE: NRF52832 BLE Scan</title><link>https://devzone.nordicsemi.com/thread/480392?ContentTypeID=1</link><pubDate>Wed, 24 Apr 2024 09:20:12 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:7c2e4fec-1d38-456f-b73a-f11c38b89df8</guid><dc:creator>Jared</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;Can you create a new ticket for this problem?&lt;/p&gt;
&lt;p&gt;regards&lt;/p&gt;
&lt;p&gt;Jared&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: NRF52832 BLE Scan</title><link>https://devzone.nordicsemi.com/thread/480326?ContentTypeID=1</link><pubDate>Wed, 24 Apr 2024 05:52:24 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:57d03a3f-7a51-46ec-8360-82f0451b419d</guid><dc:creator>shambhu</dc:creator><description>&lt;p&gt;output&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://devzone.nordicsemi.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/4/pastedimage1713937871900v1.jpeg" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;[#BASIC PROBLEM -2] I want to remove UNKNOWN NAME AND I WANT TO PUT CUSTOM NAME...HOW TO DO THAT ?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: NRF52832 BLE Scan</title><link>https://devzone.nordicsemi.com/thread/480324?ContentTypeID=1</link><pubDate>Wed, 24 Apr 2024 05:43:57 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:427bd515-e964-4f48-8731-c5bb733a12c1</guid><dc:creator>shambhu</dc:creator><description>&lt;p&gt;[#basic problem 2]&amp;nbsp; how to add device name in advertizing data can you modify the code as mentioned above or guide me Nrf52832 pc10040 v3.0.0 provide some video link to understand clear.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: NRF52832 BLE Scan</title><link>https://devzone.nordicsemi.com/thread/480323?ContentTypeID=1</link><pubDate>Wed, 24 Apr 2024 05:39:40 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:60c3aec1-2852-4d0b-9c19-d8b1bf32370f</guid><dc:creator>shambhu</dc:creator><description>&lt;p&gt;ble_app_pheferal // how to advatize uuid and custom device name&lt;/p&gt;
&lt;p&gt;how to modify existing main.c code for tag /ibeacon [#basic problem 2]&lt;/p&gt;
&lt;p&gt;/* RFID PROJECT 20/04/2024 - V1.0.0 ACTIVE TAG&lt;br /&gt; * Copyright (c) 2014 - 2019, Nordic Semiconductor ASA&lt;br /&gt; * All rights reserved.&lt;br /&gt; */&lt;br /&gt;/** @file&lt;br /&gt; * @defgroup ble_sdk_app_beacon_main main.c&lt;br /&gt; * @ingroup ble_sdk_app_beacon&lt;br /&gt; * @brief Beacon Transmitter Sample Application main file.&lt;br /&gt; * This file contains the source code for an Beacon transmitter sample application.&lt;br /&gt; */&lt;/p&gt;
&lt;p&gt;#include &amp;lt;stdbool.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;#include &amp;quot;nordic_common.h&amp;quot;&lt;br /&gt;#include &amp;quot;bsp.h&amp;quot;&lt;br /&gt;#include &amp;quot;nrf_soc.h&amp;quot;&lt;br /&gt;#include &amp;quot;nrf_sdh.h&amp;quot;&lt;br /&gt;#include &amp;quot;nrf_sdh_ble.h&amp;quot;&lt;br /&gt;#include &amp;quot;ble_advdata.h&amp;quot;&lt;br /&gt;#include &amp;quot;app_timer.h&amp;quot;&lt;br /&gt;#include &amp;quot;nrf_pwr_mgmt.h&amp;quot;&lt;/p&gt;
&lt;p&gt;#include &amp;quot;nrf_log.h&amp;quot;&lt;br /&gt;#include &amp;quot;nrf_log_ctrl.h&amp;quot;&lt;br /&gt;#include &amp;quot;nrf_log_default_backends.h&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;#define APP_BLE_CONN_CFG_TAG 1 /**&amp;lt; A tag identifying the SoftDevice BLE configuration. */&lt;/p&gt;
&lt;p&gt;#define DEVICE_NAME &amp;quot;SIT-BEACON_1&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;#define NON_CONNECTABLE_ADV_INTERVAL MSEC_TO_UNITS(100, UNIT_0_625_MS) /**&amp;lt; The advertising interval for non-connectable advertisement (100 ms). This value can vary between 100ms to 10.24s). */&lt;/p&gt;
&lt;p&gt;#define APP_BEACON_INFO_LENGTH 0x17 /**&amp;lt; Total length of information advertised by the Beacon. */&lt;br /&gt;#define APP_ADV_DATA_LENGTH 0x15 /**&amp;lt; Length of manufacturer specific data in the advertisement. */&lt;br /&gt;#define APP_DEVICE_TYPE 0x02 /**&amp;lt; 0x02 refers to Beacon. */&lt;br /&gt;#define APP_MEASURED_RSSI 0xC3 /**&amp;lt; The Beacon&amp;#39;s measured RSSI at 1 meter distance in dBm. */&lt;br /&gt;#define APP_COMPANY_IDENTIFIER 0x0059 /**&amp;lt; Company identifier for Nordic Semiconductor ASA. as per www.bluetooth.org. */&lt;br /&gt;#define APP_MAJOR_VALUE 0x01, 0x02 /**&amp;lt; Major value used to identify Beacons. */&lt;br /&gt;#define APP_MINOR_VALUE 0x03, 0x04 /**&amp;lt; Minor value used to identify Beacons. */&lt;/p&gt;
&lt;p&gt;//USER DEFINE &amp;gt;&amp;gt; UUID ONLINE GENERATOR&amp;gt;&amp;gt; 90edf9ce-5c1b-4b0c-8e15-872ea3ebcac7&lt;/p&gt;
&lt;p&gt;#define APP_BEACON_UUID 0x90, 0xed, 0xf9, 0xce, \&lt;br /&gt; 0x5c, 0x1b, 0x4b, 0x0c, \&lt;br /&gt; 0x8e, 0x15, 0x87, 0x2e, \&lt;br /&gt; 0xa3, 0xeb, 0xca, 0xc7 /**&amp;lt; Proprietary UUID for Beacon. */&lt;/p&gt;
&lt;p&gt;#define DEAD_BEEF 0xDEADBEEF /**&amp;lt; Value used as error code on stack dump, can be used to identify stack location on stack unwind. */&lt;/p&gt;
&lt;p&gt;#if defined(USE_UICR_FOR_MAJ_MIN_VALUES)&lt;br /&gt;#define MAJ_VAL_OFFSET_IN_BEACON_INFO 18 /**&amp;lt; Position of the MSB of the Major Value in m_beacon_info array. */&lt;br /&gt;#define UICR_ADDRESS 0x10001080 /**&amp;lt; Address of the UICR register used by this example. The major and minor versions to be encoded into the advertising data will be picked up from this location. */&lt;br /&gt;#endif&lt;/p&gt;
&lt;p&gt;static ble_gap_adv_params_t m_adv_params; /**&amp;lt; Parameters to be passed to the stack when starting advertising. */&lt;br /&gt;static uint8_t m_adv_handle = BLE_GAP_ADV_SET_HANDLE_NOT_SET; /**&amp;lt; Advertising handle used to identify an advertising set. */&lt;br /&gt;static uint8_t m_enc_advdata[BLE_GAP_ADV_SET_DATA_SIZE_MAX]; /**&amp;lt; Buffer for storing an encoded advertising set. */&lt;/p&gt;
&lt;p&gt;/**@brief Struct that contains pointers to the encoded advertising data. */&lt;br /&gt;static ble_gap_adv_data_t m_adv_data =&lt;br /&gt;{&lt;br /&gt; .adv_data =&lt;br /&gt; {&lt;br /&gt; .p_data = m_enc_advdata,&lt;br /&gt; .len = BLE_GAP_ADV_SET_DATA_SIZE_MAX&lt;br /&gt; },&lt;br /&gt; .scan_rsp_data =&lt;br /&gt; {&lt;br /&gt; .p_data = NULL,&lt;br /&gt; .len = 0&lt;/p&gt;
&lt;p&gt;}&lt;br /&gt;};&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;static uint8_t m_beacon_info[APP_BEACON_INFO_LENGTH] = /**&amp;lt; Information advertised by the Beacon. */&lt;br /&gt;{&lt;br /&gt; APP_DEVICE_TYPE, // Manufacturer specific information. Specifies the device type in this&lt;br /&gt; // implementation.&lt;br /&gt; APP_ADV_DATA_LENGTH, // Manufacturer specific information. Specifies the length of the&lt;br /&gt; // manufacturer specific data in this implementation.&lt;br /&gt; APP_BEACON_UUID, // 128 bit UUID value.&lt;br /&gt; APP_MAJOR_VALUE, // Major arbitrary value that can be used to distinguish between Beacons.&lt;br /&gt; APP_MINOR_VALUE, // Minor arbitrary value that can be used to distinguish between Beacons.&lt;br /&gt; APP_MEASURED_RSSI, // Manufacturer specific information. The Beacon&amp;#39;s measured TX power in&lt;br /&gt; // this implementation.&lt;br /&gt;};&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/**@brief Callback function for asserts in the SoftDevice.&lt;br /&gt; *&lt;br /&gt; * @details This function will be called in case of an assert in the SoftDevice.&lt;br /&gt; *&lt;br /&gt; * @warning This handler is an example only and does not fit a final product. You need to analyze&lt;br /&gt; * how your product is supposed to react in case of Assert.&lt;br /&gt; * @warning On assert from the SoftDevice, the system can only recover on reset.&lt;br /&gt; *&lt;br /&gt; * @param[in] line_num Line number of the failing ASSERT call.&lt;br /&gt; * @param[in] file_name File name of the failing ASSERT call.&lt;br /&gt; */&lt;br /&gt;void assert_nrf_callback(uint16_t line_num, const uint8_t * p_file_name)&lt;br /&gt;{&lt;br /&gt; app_error_handler(DEAD_BEEF, line_num, p_file_name);&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;/**@brief Function for initializing the Advertising functionality.&lt;br /&gt; *&lt;br /&gt; * @details Encodes the required advertising data and passes it to the stack.&lt;br /&gt; * Also builds a structure to be passed to the stack when starting advertising.&lt;br /&gt; */&lt;br /&gt;static void advertising_init(void)&lt;br /&gt;{&lt;br /&gt; uint32_t err_code;&lt;br /&gt; ble_advdata_t advdata;&lt;br /&gt; uint8_t flags = BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED;&lt;/p&gt;
&lt;p&gt;ble_advdata_manuf_data_t manuf_specific_data;&lt;br /&gt; &lt;br /&gt; manuf_specific_data.company_identifier = APP_COMPANY_IDENTIFIER;&lt;/p&gt;
&lt;p&gt;#if defined(USE_UICR_FOR_MAJ_MIN_VALUES)&lt;br /&gt; // If USE_UICR_FOR_MAJ_MIN_VALUES is defined, the major and minor values will be read from the&lt;br /&gt; // UICR instead of using the default values. The major and minor values obtained from the UICR&lt;br /&gt; // are encoded into advertising data in big endian order (MSB First).&lt;br /&gt; // To set the UICR used by this example to a desired value, write to the address 0x10001080&lt;br /&gt; // using the nrfjprog tool. The command to be used is as follows.&lt;br /&gt; // nrfjprog --snr &amp;lt;Segger-chip-Serial-Number&amp;gt; --memwr 0x10001080 --val &amp;lt;your major/minor value&amp;gt;&lt;br /&gt; // For example, for a major value and minor value of 0xabcd and 0x0102 respectively, the&lt;br /&gt; // the following command should be used.&lt;br /&gt; // nrfjprog --snr &amp;lt;Segger-chip-Serial-Number&amp;gt; --memwr 0x10001080 --val 0xabcd0102&lt;br /&gt; uint16_t major_value = ((*(uint32_t *)UICR_ADDRESS) &amp;amp; 0xFFFF0000) &amp;gt;&amp;gt; 16;&lt;br /&gt; uint16_t minor_value = ((*(uint32_t *)UICR_ADDRESS) &amp;amp; 0x0000FFFF);&lt;/p&gt;
&lt;p&gt;uint8_t index = MAJ_VAL_OFFSET_IN_BEACON_INFO;&lt;/p&gt;
&lt;p&gt;m_beacon_info[index++] = MSB_16(major_value);&lt;br /&gt; m_beacon_info[index++] = LSB_16(major_value);&lt;/p&gt;
&lt;p&gt;m_beacon_info[index++] = MSB_16(minor_value);&lt;br /&gt; m_beacon_info[index++] = LSB_16(minor_value);&lt;br /&gt;#endif&lt;/p&gt;
&lt;p&gt;manuf_specific_data.data.p_data = (uint8_t *) m_beacon_info;&lt;br /&gt; manuf_specific_data.data.size = APP_BEACON_INFO_LENGTH;&lt;/p&gt;
&lt;p&gt;// Build and set advertising data.&lt;br /&gt; memset(&amp;amp;advdata, 0, sizeof(advdata));&lt;/p&gt;
&lt;p&gt;&lt;br /&gt; advdata.name_type = BLE_ADVDATA_NO_NAME;&lt;br /&gt; advdata.flags = flags;&lt;br /&gt; advdata.p_manuf_specific_data = &amp;amp;manuf_specific_data;&lt;/p&gt;
&lt;p&gt;// Initialize advertising parameters (used when starting advertising).&lt;br /&gt; memset(&amp;amp;m_adv_params, 0, sizeof(m_adv_params));&lt;/p&gt;
&lt;p&gt;m_adv_params.properties.type = BLE_GAP_ADV_TYPE_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED;&lt;br /&gt; m_adv_params.p_peer_addr = NULL; // Undirected advertisement.&lt;br /&gt; m_adv_params.filter_policy = BLE_GAP_ADV_FP_ANY;&lt;br /&gt; m_adv_params.interval = NON_CONNECTABLE_ADV_INTERVAL;&lt;br /&gt; m_adv_params.duration = 0; // Never time out.&lt;/p&gt;
&lt;p&gt;err_code = ble_advdata_encode(&amp;amp;advdata, m_adv_data.adv_data.p_data, &amp;amp;m_adv_data.adv_data.len);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;err_code = sd_ble_gap_adv_set_configure(&amp;amp;m_adv_handle, &amp;amp;m_adv_data, &amp;amp;m_adv_params);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/**@brief Function for starting advertising. */&lt;br /&gt;static void advertising_start(void)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code;&lt;/p&gt;
&lt;p&gt;err_code = sd_ble_gap_adv_start(m_adv_handle, APP_BLE_CONN_CFG_TAG);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;err_code = bsp_indication_set(BSP_INDICATE_ADVERTISING);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/**@brief Function for initializing the BLE stack.&lt;br /&gt; *&lt;br /&gt; * @details Initializes the SoftDevice and the BLE event interrupt.&lt;br /&gt; */&lt;br /&gt;static void ble_stack_init(void)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code;&lt;/p&gt;
&lt;p&gt;err_code = nrf_sdh_enable_request();&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;// Configure the BLE stack using the default settings.&lt;br /&gt; // Fetch the start address of the application RAM.&lt;br /&gt; uint32_t ram_start = 0;&lt;br /&gt; err_code = nrf_sdh_ble_default_cfg_set(APP_BLE_CONN_CFG_TAG, &amp;amp;ram_start);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;// Enable BLE stack.&lt;br /&gt; err_code = nrf_sdh_ble_enable(&amp;amp;ram_start);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/**@brief Function for initializing logging. */&lt;br /&gt;static void log_init(void)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code = NRF_LOG_INIT(NULL);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;NRF_LOG_DEFAULT_BACKENDS_INIT();&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;/**@brief Function for initializing LEDs. */&lt;br /&gt;static void leds_init(void)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code = bsp_init(BSP_INIT_LEDS, NULL);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/**@brief Function for initializing timers. */&lt;br /&gt;static void timers_init(void)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code = app_timer_init();&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/**@brief Function for initializing power management. */&lt;br /&gt;static void power_management_init(void)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code;&lt;br /&gt; err_code = nrf_pwr_mgmt_init();&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;static void idle_state_handle(void)&lt;br /&gt;{&lt;br /&gt; if (NRF_LOG_PROCESS() == false)&lt;br /&gt; {&lt;br /&gt; nrf_pwr_mgmt_run();&lt;br /&gt; }&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;int main(void)&lt;br /&gt;{&lt;br /&gt; // Initialize.&lt;br /&gt; log_init();&lt;br /&gt; timers_init();&lt;br /&gt; leds_init();&lt;br /&gt; power_management_init();&lt;br /&gt; ble_stack_init();&lt;br /&gt; advertising_init();&lt;/p&gt;
&lt;p&gt;// Start execution.&lt;br /&gt; NRF_LOG_INFO(&amp;quot;Beacon/Tag started.&amp;quot;);&lt;br /&gt; advertising_start();&lt;/p&gt;
&lt;p&gt;// Enter main loop.&lt;br /&gt; for (;; )&lt;br /&gt; {&lt;br /&gt; idle_state_handle();&lt;br /&gt; }&lt;br /&gt;}&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: NRF52832 BLE Scan</title><link>https://devzone.nordicsemi.com/thread/480198?ContentTypeID=1</link><pubDate>Tue, 23 Apr 2024 12:08:31 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:6e9006b6-7edf-44b8-af68-7baa76931e70</guid><dc:creator>shambhu</dc:creator><description>&lt;p&gt;[#BASIC PROBLEM 1]: GUIDE&amp;nbsp; I NEED TO PRINT SAME OUTPUT IN PUTTY PLEASE REPLY //NORDIC NRF52832 DK BOARD SDK15.3.0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PCA10040V 3.0.0&amp;nbsp;&lt;/p&gt;
&lt;p&gt;C:\nRF5_SDK_15.3.0_59ac345\examples\New folder\ble_app_blinky_c_SCANNER\pca10040\s132\ses&lt;/p&gt;
&lt;p&gt;DOING PROGRAMMING IN SEGGER EMBEDDED STUDIO PLATFORM&amp;nbsp;&lt;/p&gt;
&lt;p&gt;REPLY TO SOVE MY #BASIC PROBLEM&lt;/p&gt;
&lt;p&gt;THANKS IN ADV..&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: NRF52832 BLE Scan</title><link>https://devzone.nordicsemi.com/thread/480196?ContentTypeID=1</link><pubDate>Tue, 23 Apr 2024 12:04:30 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c6fededb-5806-4cf9-99e1-ffafcc884536</guid><dc:creator>shambhu</dc:creator><description>&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://devzone.nordicsemi.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/4/pastedimage1713873729441v1.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;output&amp;nbsp;&lt;/p&gt;
&lt;p&gt;code&lt;/p&gt;
&lt;p&gt;main.c&lt;/p&gt;
&lt;p&gt;ble_app_blinky_c&lt;/p&gt;
&lt;p&gt;////////////////////////////////// RFID READER V1.0.0 2024 //////////////////////////&lt;br /&gt;/* */&lt;br /&gt;/* R&amp;amp;D EMBEDDED TEAM */&lt;br /&gt;/* RFID PROJECT */&lt;br /&gt;/* ACTIVE RFID &amp;amp; ACTIVE TAG */&lt;br /&gt;/* CENTRAL */&lt;br /&gt;/* EMPLOYEE ID 013 */&lt;br /&gt;#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;#include &amp;quot;nrf_sdh.h&amp;quot;&lt;br /&gt;#include &amp;quot;nrf_sdh_ble.h&amp;quot;&lt;br /&gt;#include &amp;quot;nrf_sdh_soc.h&amp;quot;&lt;br /&gt;#include &amp;quot;nrf_pwr_mgmt.h&amp;quot;&lt;br /&gt;#include &amp;quot;app_timer.h&amp;quot;&lt;br /&gt;#include &amp;quot;boards.h&amp;quot;&lt;br /&gt;#include &amp;quot;bsp.h&amp;quot;&lt;br /&gt;#include &amp;quot;bsp_btn_ble.h&amp;quot;&lt;br /&gt;#include &amp;quot;ble.h&amp;quot;&lt;br /&gt;#include &amp;quot;ble_hci.h&amp;quot;&lt;br /&gt;#include &amp;quot;ble_advertising.h&amp;quot;&lt;br /&gt;#include &amp;quot;ble_conn_params.h&amp;quot;&lt;br /&gt;#include &amp;quot;ble_db_discovery.h&amp;quot;&lt;br /&gt;#include &amp;quot;ble_lbs_c.h&amp;quot;&lt;br /&gt;#include &amp;quot;nrf_ble_gatt.h&amp;quot;&lt;br /&gt;#include &amp;quot;nrf_ble_scan.h&amp;quot;&lt;/p&gt;
&lt;p&gt;#include &amp;quot;nrf_log.h&amp;quot;&lt;br /&gt;#include &amp;quot;nrf_log_ctrl.h&amp;quot;&lt;br /&gt;#include &amp;quot;nrf_log_default_backends.h&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;#define CENTRAL_SCANNING_LED BSP_BOARD_LED_0 /**&amp;lt; Scanning LED will be on when the device is scanning. */&lt;br /&gt;#define CENTRAL_CONNECTED_LED BSP_BOARD_LED_1 /**&amp;lt; Connected LED will be on when the device is connected. */&lt;br /&gt;#define LEDBUTTON_LED BSP_BOARD_LED_2 /**&amp;lt; LED to indicate a change of state of the the Button characteristic on the peer. */&lt;/p&gt;
&lt;p&gt;#define SCAN_INTERVAL 0x00A0 /**&amp;lt; Determines scan interval in units of 0.625 millisecond. */&lt;br /&gt;#define SCAN_WINDOW 0x0050 /**&amp;lt; Determines scan window in units of 0.625 millisecond. */&lt;br /&gt;#define SCAN_DURATION 0x0000 /**&amp;lt; Timout when scanning. 0x0000 disables timeout. */&lt;/p&gt;
&lt;p&gt;#define MIN_CONNECTION_INTERVAL MSEC_TO_UNITS(7.5, UNIT_1_25_MS) /**&amp;lt; Determines minimum connection interval in milliseconds. */&lt;br /&gt;#define MAX_CONNECTION_INTERVAL MSEC_TO_UNITS(30, UNIT_1_25_MS) /**&amp;lt; Determines maximum connection interval in milliseconds. */&lt;br /&gt;#define SLAVE_LATENCY 0 /**&amp;lt; Determines slave latency in terms of connection events. */&lt;br /&gt;#define SUPERVISION_TIMEOUT MSEC_TO_UNITS(4000, UNIT_10_MS) /**&amp;lt; Determines supervision time-out in units of 10 milliseconds. */&lt;/p&gt;
&lt;p&gt;#define LEDBUTTON_BUTTON_PIN BSP_BUTTON_0 /**&amp;lt; Button that will write to the LED characteristic of the peer */&lt;br /&gt;#define BUTTON_DETECTION_DELAY APP_TIMER_TICKS(50) /**&amp;lt; Delay from a GPIOTE event until a button is reported as pushed (in number of timer ticks). */&lt;/p&gt;
&lt;p&gt;#define APP_BLE_CONN_CFG_TAG 1 /**&amp;lt; A tag identifying the SoftDevice BLE configuration. */&lt;br /&gt;#define APP_BLE_OBSERVER_PRIO 3 /**&amp;lt; Application&amp;#39;s BLE observer priority. You shouldn&amp;#39;t need to modify this value. */&lt;/p&gt;
&lt;p&gt;NRF_BLE_SCAN_DEF(m_scan); /**&amp;lt; Scanning module instance. */&lt;br /&gt;BLE_LBS_C_DEF(m_ble_lbs_c); /**&amp;lt; Main structure used by the LBS client module. */&lt;br /&gt;NRF_BLE_GATT_DEF(m_gatt); /**&amp;lt; GATT module instance. */&lt;br /&gt;BLE_DB_DISCOVERY_DEF(m_db_disc); /**&amp;lt; DB discovery module instance. */&lt;/p&gt;
&lt;p&gt;static char const m_target_periph_name[] = &amp;quot;(NORDIC)&amp;quot;; /**&amp;lt; Name of the device we try to connect to. This name is searched in the scan report data*/&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;#define SCAN_LIST_REFRESH_INTERVAL 10000 // 100 sec&lt;/p&gt;
&lt;p&gt;static uint32_t device_number;&lt;/p&gt;
&lt;p&gt;#define FOUND_DEVICE_REFRESH_TIME APP_TIMER_TICKS(SCAN_LIST_REFRESH_INTERVAL) /**&amp;lt; Time after which the device list is clean and refreshed. */&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;#define DEVICE_NAME_MAX_SIZE 20&lt;br /&gt;#define DEVICE_TO_FIND_MAX 50&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;typedef struct&lt;br /&gt;{&lt;br /&gt; bool is_not_empty; /**&amp;lt; Indicates that the structure is not empty. */&lt;br /&gt; uint16_t size; /**&amp;lt; Size of manuf data. */&lt;br /&gt; uint8_t addr[BLE_GAP_ADDR_LEN]; /**&amp;lt; Device address. */&lt;br /&gt; char dev_name[DEVICE_NAME_MAX_SIZE]; /**&amp;lt; Device name. */&lt;br /&gt; uint8_t data_buffer[BLE_GAP_ADV_SET_DATA_SIZE_MAX]; /**&amp;lt; Buffer for storing an manuf data. */&lt;br /&gt; uint8_t rssi ;&lt;br /&gt;} scanned_device_t;&lt;/p&gt;
&lt;p&gt;void device_list_print(scanned_device_t * p_device);&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;scanned_device_t m_device[DEVICE_TO_FIND_MAX]; /**&amp;lt; Stores device info from scan data. */&lt;/p&gt;
&lt;p&gt;void scan_device_info_clear(void)&lt;br /&gt;{&lt;br /&gt; memset(m_device, 0, sizeof(m_device));&lt;br /&gt; device_number = 0;&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;/**@brief Function for printing the devices.&lt;br /&gt; *&lt;br /&gt; *@details Function print list of devices.&lt;br /&gt; * &lt;br /&gt; *&lt;br /&gt; * @param[in] device Pointer to the struct storing the scanned devices.&lt;br /&gt; */&lt;br /&gt;void device_list_print(scanned_device_t * p_device)&lt;br /&gt;{&lt;br /&gt; // We could now clear the list:&lt;br /&gt; scan_device_info_clear();&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;scanned_device_t * scan_device_info_get(void)&lt;br /&gt;{&lt;br /&gt; return m_device;&lt;br /&gt; &lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;typedef struct&lt;br /&gt;{&lt;br /&gt; uint8_t * p_data; /**&amp;lt; Pointer to data. */&lt;br /&gt; uint16_t data_len; /**&amp;lt; Length of data. */&lt;br /&gt;} data_t;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;static void device_to_list_add(ble_gap_evt_adv_report_t const * p_adv_report)&lt;br /&gt;{&lt;br /&gt; uint8_t idx = 0;&lt;br /&gt; uint16_t dev_name_offset = 0;&lt;br /&gt; uint16_t field_len;&lt;br /&gt; int i = 0;&lt;br /&gt; data_t adv_data;&lt;/p&gt;
&lt;p&gt;// Initialize advertisement report for parsing&lt;br /&gt; adv_data.p_data = (uint8_t *)p_adv_report-&amp;gt;data.p_data;&lt;br /&gt; adv_data.data_len = p_adv_report-&amp;gt;data.len;&lt;/p&gt;
&lt;p&gt;for ( idx = 0; idx &amp;lt; DEVICE_TO_FIND_MAX; idx++)&lt;br /&gt; {&lt;br /&gt; // If address is duplicated, then return.&lt;br /&gt; if (memcmp(p_adv_report-&amp;gt;peer_addr.addr,&lt;br /&gt; m_device[idx].addr,&lt;br /&gt; sizeof(p_adv_report-&amp;gt;peer_addr.addr)) == 0)&lt;br /&gt; {&lt;br /&gt; return;&lt;br /&gt; }&lt;br /&gt; }&lt;/p&gt;
&lt;p&gt;// Device is not in the list.&lt;br /&gt; for (idx = 0; idx &amp;lt; DEVICE_TO_FIND_MAX; idx++)&lt;br /&gt; {&lt;br /&gt; if (!m_device[idx].is_not_empty) // We find an empty entry&lt;br /&gt; {&lt;br /&gt; device_number = device_number +1;&lt;br /&gt; &lt;br /&gt; m_device[idx].is_not_empty = true; //validating the list record&lt;/p&gt;
&lt;p&gt;memset(m_device[idx].addr,&lt;br /&gt; 0,&lt;br /&gt; sizeof(p_adv_report-&amp;gt;peer_addr.addr));&lt;/p&gt;
&lt;p&gt;memcpy(m_device[idx].addr,&lt;br /&gt; p_adv_report-&amp;gt;peer_addr.addr,&lt;br /&gt; sizeof(p_adv_report-&amp;gt;peer_addr.addr));&lt;/p&gt;
&lt;p&gt;&lt;br /&gt; &lt;br /&gt;//###=========================================ADVERTIZED DATA SCAN SUCCESSFUL =######=========================================================###// &lt;br /&gt; &lt;br /&gt;/*88888888888888888888888888888888888888888888888 NAME OF DEVICE IN LITERAL 888888888888888888888888888888888888888888888888888*/&lt;br /&gt; &lt;br /&gt;//////////////////////////////////////////////////// TOTAL NO OF DEVICE //////////////////////////////////////////////////////////////&lt;br /&gt; NRF_LOG_INFO(&amp;quot;[TOTAL NUM].DEVS:%d Count\r\n&amp;quot;,device_number);&lt;br /&gt; printf(&amp;quot;[TOTAL NUM].DEVS:%d Count\r\n&amp;quot;,device_number);&lt;br /&gt; &lt;br /&gt; m_device[idx].rssi = p_adv_report-&amp;gt;rssi;&lt;br /&gt; printf(&amp;quot;[SIGNAL ].RSSI:%d dBm\r\n&amp;quot;,m_device[idx].rssi);&lt;br /&gt; &lt;br /&gt;///////////////////////////////////////////// SIGNAL STRENGTH INDEX ////////////////////////////////////////////////////////////////////////&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/////////////////////////// APPLICATION RFID(CENTRAL) DETECTION DATA&amp;gt;&amp;gt; TAG(PHERIFERIAL) //////////////////////////////////////////////////////////////&lt;/p&gt;
&lt;p&gt;//uint8_t * full_name_data = ble_advdata_parse(m_device[idx].data_buffer, m_device[idx].size,BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME);&lt;/p&gt;
&lt;p&gt;uint16_t len_full_name = ble_advdata_search(m_device[idx].data_buffer,m_device[idx].size, &amp;amp;dev_name_offset,BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME);&lt;br /&gt;memset(m_device[idx].dev_name,&lt;br /&gt;0,&lt;br /&gt;len_full_name);&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;memcpy(m_device[idx].dev_name,&lt;br /&gt;&amp;amp;m_device[idx].data_buffer[dev_name_offset],&lt;br /&gt;len_full_name);&lt;/p&gt;
&lt;p&gt;printf(&amp;quot;[SIGNATURE].NAME:&amp;quot;);&lt;br /&gt; for(i=0; i&amp;lt;len_full_name;i++)&lt;br /&gt; {&lt;br /&gt; &lt;br /&gt; printf(&amp;quot;%c&amp;quot;,m_device[idx].data_buffer[dev_name_offset+i]);&lt;br /&gt; }&lt;br /&gt; printf(&amp;quot;\r\n&amp;quot;);&lt;/p&gt;
&lt;p&gt;/*88888888888888888888888888888888888888888888888 NAME OF DEVICE IN HEX 88888888888888888888888888888888888888888888888*/ &lt;br /&gt; printf(&amp;quot;[HEX ID ].ADDR:&amp;quot;);&lt;br /&gt; for(i=0; i&amp;lt; (uint16_t)(sizeof(p_adv_report-&amp;gt;peer_addr.addr));i++)&lt;br /&gt; {&lt;br /&gt; if(i==0)&lt;br /&gt; {&lt;br /&gt; printf(&amp;quot;%02X&amp;quot;,m_device[idx].addr[i]);&lt;br /&gt; }&lt;br /&gt; else&lt;br /&gt; {&lt;br /&gt; printf(&amp;quot;:%02X&amp;quot;,m_device[idx].addr[i]); //add colon in order to give format to address&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt; printf(&amp;quot;\r\n&amp;quot;);&lt;/p&gt;
&lt;p&gt;// ##### if you do not want to print adv data then comment #####////&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;m_device[idx].size = p_adv_report-&amp;gt;data.len;&lt;/p&gt;
&lt;p&gt;memset(m_device[idx].data_buffer,&lt;br /&gt;0,&lt;br /&gt;p_adv_report-&amp;gt;data.len);&lt;br /&gt;memcpy(m_device[idx].data_buffer,&lt;br /&gt;p_adv_report-&amp;gt;data.p_data,&lt;br /&gt;p_adv_report-&amp;gt;data.len);&lt;/p&gt;
&lt;p&gt;&lt;br /&gt; &lt;br /&gt; printf(&amp;quot;[ADV DATA ].DATA:&amp;quot;);&lt;br /&gt; for(i=0; i&amp;lt; p_adv_report-&amp;gt;data.len;i++)&lt;br /&gt; {&lt;br /&gt; printf(&amp;quot;%x&amp;quot;,m_device[idx].data_buffer[i]);&lt;br /&gt; }&lt;br /&gt; printf(&amp;quot;\r\n&amp;quot;);&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt; /* DATA */&lt;br /&gt; &lt;br /&gt; uint8_t * aux = p_adv_report-&amp;gt;data.p_data;&lt;br /&gt;uint16_t aux_len = p_adv_report-&amp;gt;data.len;&lt;/p&gt;
&lt;p&gt;uint8_t aux_array[100] = {};&lt;br /&gt;memcpy(aux_array,aux,aux_len);&lt;br /&gt; printf(&amp;quot;[ADV DATA ].DATA:%x\r\n&amp;quot;,aux_array);&lt;/p&gt;
&lt;p&gt;&lt;br /&gt; return;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;void assert_nrf_callback(uint16_t line_num, const uint8_t * p_file_name)&lt;br /&gt;{&lt;br /&gt; app_error_handler(0xDEADBEEF, line_num, p_file_name);&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/**@brief Function for the LEDs initialization.&lt;br /&gt; *&lt;br /&gt; * @details Initializes all LEDs used by the application.&lt;br /&gt; */&lt;br /&gt;static void leds_init(void)&lt;br /&gt;{&lt;br /&gt; bsp_board_init(BSP_INIT_LEDS);&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/**@brief Function to start scanning.&lt;br /&gt; */&lt;br /&gt;static void scan_start(void)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code;&lt;/p&gt;
&lt;p&gt;err_code = nrf_ble_scan_start(&amp;amp;m_scan);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;bsp_board_led_off(CENTRAL_CONNECTED_LED);&lt;br /&gt; bsp_board_led_on(CENTRAL_SCANNING_LED);&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/**@brief Function for handling BLE events.&lt;br /&gt; *&lt;br /&gt; * @param[in] p_ble_evt Bluetooth stack event.&lt;br /&gt; * @param[in] p_context Unused.&lt;br /&gt; */&lt;br /&gt;static void ble_evt_handler(ble_evt_t const * p_ble_evt, void * p_context)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code;&lt;/p&gt;
&lt;p&gt;// For readability.&lt;br /&gt; ble_gap_evt_t const * p_gap_evt = &amp;amp;p_ble_evt-&amp;gt;evt.gap_evt;&lt;/p&gt;
&lt;p&gt;switch (p_ble_evt-&amp;gt;header.evt_id)&lt;br /&gt; {&lt;br /&gt; // Upon connection, check which peripheral has connected (HR or RSC), initiate DB&lt;br /&gt; // discovery, update LEDs status and resume scanning if necessary. */&lt;br /&gt; case BLE_GAP_EVT_CONNECTED:&lt;br /&gt; {&lt;br /&gt; NRF_LOG_INFO(&amp;quot;Connected.&amp;quot;);&lt;br /&gt;// err_code = ble_lbs_c_handles_assign(&amp;amp;m_ble_lbs_c, p_gap_evt-&amp;gt;conn_handle, NULL);&lt;br /&gt;// APP_ERROR_CHECK(err_code);&lt;br /&gt;//&lt;br /&gt;// err_code = ble_db_discovery_start(&amp;amp;m_db_disc, p_gap_evt-&amp;gt;conn_handle);&lt;br /&gt;// APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;// Update LEDs status, and check if we should be looking for more&lt;br /&gt; // peripherals to connect to.&lt;br /&gt; bsp_board_led_on(CENTRAL_CONNECTED_LED);&lt;br /&gt; bsp_board_led_off(CENTRAL_SCANNING_LED);&lt;br /&gt; } break;&lt;/p&gt;
&lt;p&gt;// Upon disconnection, reset the connection handle of the peer which disconnected, update&lt;br /&gt; // the LEDs status and start scanning again.&lt;br /&gt; case BLE_GAP_EVT_DISCONNECTED:&lt;br /&gt; {&lt;br /&gt; NRF_LOG_INFO(&amp;quot;Disconnected.&amp;quot;);&lt;br /&gt; scan_start();&lt;br /&gt; } break;&lt;/p&gt;
&lt;p&gt;case BLE_GAP_EVT_TIMEOUT:&lt;br /&gt; {&lt;br /&gt; // We have not specified a timeout for scanning, so only connection attemps can timeout.&lt;br /&gt; if (p_gap_evt-&amp;gt;params.timeout.src == BLE_GAP_TIMEOUT_SRC_CONN)&lt;br /&gt; {&lt;br /&gt; NRF_LOG_DEBUG(&amp;quot;Connection request timed out.&amp;quot;);&lt;br /&gt; }&lt;br /&gt; } break;&lt;/p&gt;
&lt;p&gt;case BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST:&lt;br /&gt; {&lt;br /&gt; // Accept parameters requested by peer.&lt;br /&gt; err_code = sd_ble_gap_conn_param_update(p_gap_evt-&amp;gt;conn_handle,&lt;br /&gt; &amp;amp;p_gap_evt-&amp;gt;params.conn_param_update_request.conn_params);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;br /&gt; } break;&lt;/p&gt;
&lt;p&gt;case BLE_GAP_EVT_PHY_UPDATE_REQUEST:&lt;br /&gt; {&lt;br /&gt; NRF_LOG_DEBUG(&amp;quot;PHY update request.&amp;quot;);&lt;br /&gt; ble_gap_phys_t const phys =&lt;br /&gt; {&lt;br /&gt; .rx_phys = BLE_GAP_PHY_AUTO,&lt;br /&gt; .tx_phys = BLE_GAP_PHY_AUTO,&lt;br /&gt; };&lt;br /&gt; err_code = sd_ble_gap_phy_update(p_ble_evt-&amp;gt;evt.gap_evt.conn_handle, &amp;amp;phys);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;br /&gt; } break;&lt;/p&gt;
&lt;p&gt;case BLE_GATTC_EVT_TIMEOUT:&lt;br /&gt; {&lt;br /&gt; // Disconnect on GATT Client timeout event.&lt;br /&gt; NRF_LOG_DEBUG(&amp;quot;GATT Client Timeout.&amp;quot;);&lt;br /&gt; err_code = sd_ble_gap_disconnect(p_ble_evt-&amp;gt;evt.gattc_evt.conn_handle,&lt;br /&gt; BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;br /&gt; } break;&lt;/p&gt;
&lt;p&gt;case BLE_GATTS_EVT_TIMEOUT:&lt;br /&gt; {&lt;br /&gt; // Disconnect on GATT Server timeout event.&lt;br /&gt; NRF_LOG_DEBUG(&amp;quot;GATT Server Timeout.&amp;quot;);&lt;br /&gt; err_code = sd_ble_gap_disconnect(p_ble_evt-&amp;gt;evt.gatts_evt.conn_handle,&lt;br /&gt; BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;br /&gt; } break;&lt;/p&gt;
&lt;p&gt;default:&lt;br /&gt; // No implementation needed.&lt;br /&gt; break;&lt;br /&gt; }&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;/**@brief Function for initializing the BLE stack.&lt;br /&gt; *&lt;br /&gt; * @details Initializes the SoftDevice and the BLE event interrupts.&lt;br /&gt; */&lt;br /&gt;static void ble_stack_init(void)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code;&lt;/p&gt;
&lt;p&gt;err_code = nrf_sdh_enable_request();&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;// Configure the BLE stack using the default settings.&lt;br /&gt; // Fetch the start address of the application RAM.&lt;br /&gt; uint32_t ram_start = 0;&lt;br /&gt; err_code = nrf_sdh_ble_default_cfg_set(APP_BLE_CONN_CFG_TAG, &amp;amp;ram_start);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;// Enable BLE stack.&lt;br /&gt; err_code = nrf_sdh_ble_enable(&amp;amp;ram_start);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;// Register a handler for BLE events.&lt;br /&gt; NRF_SDH_BLE_OBSERVER(m_ble_observer, APP_BLE_OBSERVER_PRIO, ble_evt_handler, NULL);&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/**@brief Function for handling events from the button handler module.&lt;br /&gt; *&lt;br /&gt; * @param[in] pin_no The pin that the event applies to.&lt;br /&gt; * @param[in] button_action The button action (press/release).&lt;br /&gt; */&lt;br /&gt;static void button_event_handler(uint8_t pin_no, uint8_t button_action)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code;&lt;/p&gt;
&lt;p&gt;switch (pin_no)&lt;br /&gt; {&lt;br /&gt; case LEDBUTTON_BUTTON_PIN:&lt;br /&gt; break;&lt;/p&gt;
&lt;p&gt;default:&lt;br /&gt; //APP_ERROR_HANDLER(pin_no);&lt;br /&gt; break;&lt;br /&gt; }&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/**@brief Function for handling Scaning events.&lt;br /&gt; *&lt;br /&gt; * @param[in] p_scan_evt Scanning event.&lt;br /&gt; */&lt;br /&gt;static void scan_evt_handler(scan_evt_t const * p_scan_evt)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code;&lt;/p&gt;
&lt;p&gt;switch(p_scan_evt-&amp;gt;scan_evt_id)&lt;br /&gt; {&lt;br /&gt; case NRF_BLE_SCAN_EVT_CONNECTING_ERROR:&lt;br /&gt; err_code = p_scan_evt-&amp;gt;params.connecting_err.err_code;&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;br /&gt; break;&lt;/p&gt;
&lt;p&gt;case NRF_BLE_SCAN_EVT_NOT_FOUND:&lt;br /&gt; device_to_list_add(p_scan_evt-&amp;gt;params.p_not_found);&lt;br /&gt; break;&lt;br /&gt; default:&lt;br /&gt; break;&lt;br /&gt; }&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;/**@brief Function for initializing the button handler module.&lt;br /&gt; */&lt;br /&gt;static void buttons_init(void)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code;&lt;/p&gt;
&lt;p&gt;//The array must be static because a pointer to it will be saved in the button handler module.&lt;br /&gt; static app_button_cfg_t buttons[] =&lt;br /&gt; {&lt;br /&gt; {LEDBUTTON_BUTTON_PIN, false, BUTTON_PULL, button_event_handler}&lt;br /&gt; };&lt;/p&gt;
&lt;p&gt;err_code = app_button_init(buttons, ARRAY_SIZE(buttons),&lt;br /&gt; BUTTON_DETECTION_DELAY);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/**@brief Function for initializing the log.&lt;br /&gt; */&lt;br /&gt;static void log_init(void)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code = NRF_LOG_INIT(NULL);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;NRF_LOG_DEFAULT_BACKENDS_INIT();&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;/**@brief Function for handling the list_timer event,&lt;br /&gt; */&lt;br /&gt;static void adv_list_timer_handle(void * p_context)&lt;br /&gt;{&lt;br /&gt; &lt;br /&gt; // Print devices&lt;br /&gt; scanned_device_t * p_device_list = scan_device_info_get();&lt;br /&gt; device_list_print(p_device_list);&lt;/p&gt;
&lt;p&gt;//scan_device_info_clear();&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/**@brief Function for initializing the timer.&lt;br /&gt; */&lt;br /&gt;static void timer_init(void)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code = app_timer_init();&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;// Timer for refreshing scanned devices data.&lt;br /&gt; APP_TIMER_DEF(adv_list_timer);&lt;br /&gt; err_code = app_timer_create(&amp;amp;adv_list_timer, APP_TIMER_MODE_REPEATED, adv_list_timer_handle);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;err_code = app_timer_start(adv_list_timer, FOUND_DEVICE_REFRESH_TIME, NULL);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/**@brief Function for initializing the Power manager. */&lt;br /&gt;static void power_management_init(void)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code;&lt;br /&gt; err_code = nrf_pwr_mgmt_init();&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;static void scan_init(void)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code;&lt;br /&gt; nrf_ble_scan_init_t init_scan;&lt;/p&gt;
&lt;p&gt;memset(&amp;amp;init_scan, 0, sizeof(init_scan));&lt;/p&gt;
&lt;p&gt;init_scan.connect_if_match = false;&lt;br /&gt; init_scan.conn_cfg_tag = APP_BLE_CONN_CFG_TAG;&lt;/p&gt;
&lt;p&gt;err_code = nrf_ble_scan_init(&amp;amp;m_scan, &amp;amp;init_scan, scan_evt_handler);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;// // Setting filters for scanning.&lt;br /&gt;// err_code = nrf_ble_scan_filters_enable(&amp;amp;m_scan, NRF_BLE_SCAN_NAME_FILTER, false);&lt;br /&gt;// APP_ERROR_CHECK(err_code);&lt;br /&gt;//&lt;br /&gt; err_code = nrf_ble_scan_filter_set(&amp;amp;m_scan, SCAN_NAME_FILTER, m_target_periph_name);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/**@brief Function for initializing the GATT module.&lt;br /&gt; */&lt;br /&gt;static void gatt_init(void)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code = nrf_ble_gatt_init(&amp;amp;m_gatt, NULL);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/**@brief Function for handling the idle state (main loop).&lt;br /&gt; *&lt;br /&gt; * @details Handle any pending log operation(s), then sleep until the next event occurs.&lt;br /&gt; */&lt;br /&gt;static void idle_state_handle(void)&lt;br /&gt;{&lt;br /&gt; NRF_LOG_FLUSH();&lt;br /&gt; nrf_pwr_mgmt_run();&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;int main(void)&lt;br /&gt;{&lt;br /&gt; // Initialize.&lt;br /&gt; log_init();&lt;br /&gt; timer_init();&lt;br /&gt; leds_init();&lt;br /&gt; buttons_init();&lt;br /&gt; power_management_init();&lt;br /&gt; ble_stack_init();&lt;br /&gt; scan_init();&lt;br /&gt; gatt_init();&lt;/p&gt;
&lt;p&gt;&lt;br /&gt; // Start execution.&lt;br /&gt; NRF_LOG_INFO(&amp;quot;[[BLE [RFID V1.0.0] Scanner Started]] Total: %d seconds&amp;quot;,SCAN_LIST_REFRESH_INTERVAL/1000);&lt;br /&gt; scan_start();&lt;/p&gt;
&lt;p&gt;// Turn on the LED to signal scanning.&lt;br /&gt; bsp_board_led_on(CENTRAL_SCANNING_LED);&lt;/p&gt;
&lt;p&gt;// Enter main loop.&lt;br /&gt; for (;;)&lt;br /&gt; {&lt;br /&gt; idle_state_handle();&lt;br /&gt; }&lt;br /&gt;}&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: NRF52832 BLE Scan</title><link>https://devzone.nordicsemi.com/thread/480193?ContentTypeID=1</link><pubDate>Tue, 23 Apr 2024 12:00:14 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:09598e52-9c63-47d5-8b67-263cf50980b6</guid><dc:creator>shambhu</dc:creator><description>&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://devzone.nordicsemi.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/4/pastedimage1713873358288v1.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;this data i want to print seprately in putty via serial bus/uart p0.06,p0.08 uart bus or finally i want data extention via modbus .. Also guide how to add header file as app_uart.h in ble_central_c or any guide related to uart. please specifiy my pin. aslso for code ,reply as soon as possible. Above mentioned my code...???????&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: NRF52832 BLE Scan</title><link>https://devzone.nordicsemi.com/thread/480190?ContentTypeID=1</link><pubDate>Tue, 23 Apr 2024 11:52:01 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:0982e205-6bdf-4272-a2fb-844424120fa3</guid><dc:creator>shambhu</dc:creator><description>&lt;p&gt;ble_central_c actuall main.c reply base don this code.&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: NRF52832 BLE Scan</title><link>https://devzone.nordicsemi.com/thread/480188?ContentTypeID=1</link><pubDate>Tue, 23 Apr 2024 11:50:57 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:83fee5ba-441b-4758-8592-5875f9aa2ca6</guid><dc:creator>shambhu</dc:creator><description>&lt;p&gt;i need help in above code to add putty/mobaxterm for mode of UART COMMUNICATION , CAN PRINT ALL DATA AT SAME TIME OF SCAN IN SERIAL. WHAT BI NEED TO MODIFY&lt;/p&gt;
&lt;p&gt;REGARD SHAMBHU&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: NRF52832 BLE Scan</title><link>https://devzone.nordicsemi.com/thread/480185?ContentTypeID=1</link><pubDate>Tue, 23 Apr 2024 11:49:12 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:cba422ae-ad33-4d41-9a46-7ee6e2dad74b</guid><dc:creator>shambhu</dc:creator><description>&lt;p&gt;////////////////////////////////// RFID READER V1.0.0 2024 //////////////////////////&lt;br /&gt;/* 2024 */&lt;br /&gt;/* R&amp;amp;D EMBEDDED TEAM */&lt;br /&gt;/* RFID PROJECT */&lt;br /&gt;/* ACTIVE RFID &amp;amp; ACTIVE TAG */&lt;br /&gt;/* CENTRAL */&lt;br /&gt;/* EMPLOYEE ID 013 */&lt;br /&gt;#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;#include &amp;quot;nrf_sdh.h&amp;quot;&lt;br /&gt;#include &amp;quot;nrf_sdh_ble.h&amp;quot;&lt;br /&gt;#include &amp;quot;nrf_sdh_soc.h&amp;quot;&lt;br /&gt;#include &amp;quot;nrf_pwr_mgmt.h&amp;quot;&lt;br /&gt;#include &amp;quot;app_timer.h&amp;quot;&lt;br /&gt;#include &amp;quot;boards.h&amp;quot;&lt;br /&gt;#include &amp;quot;bsp.h&amp;quot;&lt;br /&gt;#include &amp;quot;bsp_btn_ble.h&amp;quot;&lt;br /&gt;#include &amp;quot;ble.h&amp;quot;&lt;br /&gt;#include &amp;quot;ble_hci.h&amp;quot;&lt;br /&gt;#include &amp;quot;ble_advertising.h&amp;quot;&lt;br /&gt;#include &amp;quot;ble_conn_params.h&amp;quot;&lt;br /&gt;#include &amp;quot;ble_db_discovery.h&amp;quot;&lt;br /&gt;#include &amp;quot;ble_lbs_c.h&amp;quot;&lt;br /&gt;#include &amp;quot;nrf_ble_gatt.h&amp;quot;&lt;br /&gt;#include &amp;quot;nrf_ble_scan.h&amp;quot;&lt;/p&gt;
&lt;p&gt;#include &amp;quot;nrf_log.h&amp;quot;&lt;br /&gt;#include &amp;quot;nrf_log_ctrl.h&amp;quot;&lt;br /&gt;#include &amp;quot;nrf_log_default_backends.h&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;#define CENTRAL_SCANNING_LED BSP_BOARD_LED_0 /**&amp;lt; Scanning LED will be on when the device is scanning. */&lt;br /&gt;#define CENTRAL_CONNECTED_LED BSP_BOARD_LED_1 /**&amp;lt; Connected LED will be on when the device is connected. */&lt;br /&gt;#define LEDBUTTON_LED BSP_BOARD_LED_2 /**&amp;lt; LED to indicate a change of state of the the Button characteristic on the peer. */&lt;/p&gt;
&lt;p&gt;#define SCAN_INTERVAL 0x00A0 /**&amp;lt; Determines scan interval in units of 0.625 millisecond. */&lt;br /&gt;#define SCAN_WINDOW 0x0050 /**&amp;lt; Determines scan window in units of 0.625 millisecond. */&lt;br /&gt;#define SCAN_DURATION 0x0000 /**&amp;lt; Timout when scanning. 0x0000 disables timeout. */&lt;/p&gt;
&lt;p&gt;#define MIN_CONNECTION_INTERVAL MSEC_TO_UNITS(7.5, UNIT_1_25_MS) /**&amp;lt; Determines minimum connection interval in milliseconds. */&lt;br /&gt;#define MAX_CONNECTION_INTERVAL MSEC_TO_UNITS(30, UNIT_1_25_MS) /**&amp;lt; Determines maximum connection interval in milliseconds. */&lt;br /&gt;#define SLAVE_LATENCY 0 /**&amp;lt; Determines slave latency in terms of connection events. */&lt;br /&gt;#define SUPERVISION_TIMEOUT MSEC_TO_UNITS(4000, UNIT_10_MS) /**&amp;lt; Determines supervision time-out in units of 10 milliseconds. */&lt;/p&gt;
&lt;p&gt;#define LEDBUTTON_BUTTON_PIN BSP_BUTTON_0 /**&amp;lt; Button that will write to the LED characteristic of the peer */&lt;br /&gt;#define BUTTON_DETECTION_DELAY APP_TIMER_TICKS(50) /**&amp;lt; Delay from a GPIOTE event until a button is reported as pushed (in number of timer ticks). */&lt;/p&gt;
&lt;p&gt;#define APP_BLE_CONN_CFG_TAG 1 /**&amp;lt; A tag identifying the SoftDevice BLE configuration. */&lt;br /&gt;#define APP_BLE_OBSERVER_PRIO 3 /**&amp;lt; Application&amp;#39;s BLE observer priority. You shouldn&amp;#39;t need to modify this value. */&lt;/p&gt;
&lt;p&gt;NRF_BLE_SCAN_DEF(m_scan); /**&amp;lt; Scanning module instance. */&lt;br /&gt;BLE_LBS_C_DEF(m_ble_lbs_c); /**&amp;lt; Main structure used by the LBS client module. */&lt;br /&gt;NRF_BLE_GATT_DEF(m_gatt); /**&amp;lt; GATT module instance. */&lt;br /&gt;BLE_DB_DISCOVERY_DEF(m_db_disc); /**&amp;lt; DB discovery module instance. */&lt;/p&gt;
&lt;p&gt;static char const m_target_periph_name[] = &amp;quot;(NORDIC)&amp;quot;; /**&amp;lt; Name of the device we try to connect to. This name is searched in the scan report data*/&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;#define SCAN_LIST_REFRESH_INTERVAL 10000 // 100 sec&lt;/p&gt;
&lt;p&gt;static uint32_t device_number;&lt;/p&gt;
&lt;p&gt;#define FOUND_DEVICE_REFRESH_TIME APP_TIMER_TICKS(SCAN_LIST_REFRESH_INTERVAL) /**&amp;lt; Time after which the device list is clean and refreshed. */&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;#define DEVICE_NAME_MAX_SIZE 20&lt;br /&gt;#define DEVICE_TO_FIND_MAX 50&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;typedef struct&lt;br /&gt;{&lt;br /&gt; bool is_not_empty; /**&amp;lt; Indicates that the structure is not empty. */&lt;br /&gt; uint16_t size; /**&amp;lt; Size of manuf data. */&lt;br /&gt; uint8_t addr[BLE_GAP_ADDR_LEN]; /**&amp;lt; Device address. */&lt;br /&gt; char dev_name[DEVICE_NAME_MAX_SIZE]; /**&amp;lt; Device name. */&lt;br /&gt; uint8_t data_buffer[BLE_GAP_ADV_SET_DATA_SIZE_MAX]; /**&amp;lt; Buffer for storing an manuf data. */&lt;br /&gt; uint8_t rssi ;&lt;br /&gt;} scanned_device_t;&lt;/p&gt;
&lt;p&gt;void device_list_print(scanned_device_t * p_device);&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;scanned_device_t m_device[DEVICE_TO_FIND_MAX]; /**&amp;lt; Stores device info from scan data. */&lt;/p&gt;
&lt;p&gt;void scan_device_info_clear(void)&lt;br /&gt;{&lt;br /&gt; memset(m_device, 0, sizeof(m_device));&lt;br /&gt; device_number = 0;&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;/**@brief Function for printing the devices.&lt;br /&gt; *&lt;br /&gt; *@details Function print list of devices.&lt;br /&gt; * &lt;br /&gt; *&lt;br /&gt; * @param[in] device Pointer to the struct storing the scanned devices.&lt;br /&gt; */&lt;br /&gt;void device_list_print(scanned_device_t * p_device)&lt;br /&gt;{&lt;br /&gt; // We could now clear the list:&lt;br /&gt; scan_device_info_clear();&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;scanned_device_t * scan_device_info_get(void)&lt;br /&gt;{&lt;br /&gt; return m_device;&lt;br /&gt; &lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;typedef struct&lt;br /&gt;{&lt;br /&gt; uint8_t * p_data; /**&amp;lt; Pointer to data. */&lt;br /&gt; uint16_t data_len; /**&amp;lt; Length of data. */&lt;br /&gt;} data_t;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;static void device_to_list_add(ble_gap_evt_adv_report_t const * p_adv_report)&lt;br /&gt;{&lt;br /&gt; uint8_t idx = 0;&lt;br /&gt; uint16_t dev_name_offset = 0;&lt;br /&gt; uint16_t field_len;&lt;br /&gt; int i = 0;&lt;br /&gt; data_t adv_data;&lt;/p&gt;
&lt;p&gt;// Initialize advertisement report for parsing&lt;br /&gt; adv_data.p_data = (uint8_t *)p_adv_report-&amp;gt;data.p_data;&lt;br /&gt; adv_data.data_len = p_adv_report-&amp;gt;data.len;&lt;/p&gt;
&lt;p&gt;for ( idx = 0; idx &amp;lt; DEVICE_TO_FIND_MAX; idx++)&lt;br /&gt; {&lt;br /&gt; // If address is duplicated, then return.&lt;br /&gt; if (memcmp(p_adv_report-&amp;gt;peer_addr.addr,&lt;br /&gt; m_device[idx].addr,&lt;br /&gt; sizeof(p_adv_report-&amp;gt;peer_addr.addr)) == 0)&lt;br /&gt; {&lt;br /&gt; return;&lt;br /&gt; }&lt;br /&gt; }&lt;/p&gt;
&lt;p&gt;// Device is not in the list.&lt;br /&gt; for (idx = 0; idx &amp;lt; DEVICE_TO_FIND_MAX; idx++)&lt;br /&gt; {&lt;br /&gt; if (!m_device[idx].is_not_empty) // We find an empty entry&lt;br /&gt; {&lt;br /&gt; device_number = device_number +1;&lt;br /&gt; &lt;br /&gt; m_device[idx].is_not_empty = true; //validating the list record&lt;/p&gt;
&lt;p&gt;memset(m_device[idx].addr,&lt;br /&gt; 0,&lt;br /&gt; sizeof(p_adv_report-&amp;gt;peer_addr.addr));&lt;/p&gt;
&lt;p&gt;memcpy(m_device[idx].addr,&lt;br /&gt; p_adv_report-&amp;gt;peer_addr.addr,&lt;br /&gt; sizeof(p_adv_report-&amp;gt;peer_addr.addr));&lt;/p&gt;
&lt;p&gt;&lt;br /&gt; &lt;br /&gt;//###=========================================ADVERTIZED DATA SCAN SUCCESSFUL =######=========================================================###// &lt;br /&gt; &lt;br /&gt;/*88888888888888888888888888888888888888888888888 NAME OF DEVICE IN LITERAL 888888888888888888888888888888888888888888888888888*/&lt;br /&gt; &lt;br /&gt;//////////////////////////////////////////////////// TOTAL NO OF DEVICE //////////////////////////////////////////////////////////////&lt;br /&gt; NRF_LOG_INFO(&amp;quot;[TOTAL NUM].DEVS:%d Count\r\n&amp;quot;,device_number);&lt;br /&gt; printf(&amp;quot;[TOTAL NUM].DEVS:%d Count\r\n&amp;quot;,device_number);&lt;br /&gt; &lt;br /&gt; m_device[idx].rssi = p_adv_report-&amp;gt;rssi;&lt;br /&gt; printf(&amp;quot;[SIGNAL ].RSSI:%d dBm\r\n&amp;quot;,m_device[idx].rssi);&lt;br /&gt; &lt;br /&gt;///////////////////////////////////////////// SIGNAL STRENGTH INDEX ////////////////////////////////////////////////////////////////////////&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/////////////////////////// APPLICATION RFID(CENTRAL) DETECTION DATA&amp;gt;&amp;gt; TAG(PHERIFERIAL) //////////////////////////////////////////////////////////////&lt;/p&gt;
&lt;p&gt;//uint8_t * full_name_data = ble_advdata_parse(m_device[idx].data_buffer, m_device[idx].size,BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME);&lt;/p&gt;
&lt;p&gt;uint16_t len_full_name = ble_advdata_search(m_device[idx].data_buffer,m_device[idx].size, &amp;amp;dev_name_offset,BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME);&lt;br /&gt;memset(m_device[idx].dev_name,&lt;br /&gt;0,&lt;br /&gt;len_full_name);&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;memcpy(m_device[idx].dev_name,&lt;br /&gt;&amp;amp;m_device[idx].data_buffer[dev_name_offset],&lt;br /&gt;len_full_name);&lt;/p&gt;
&lt;p&gt;printf(&amp;quot;[SIGNATURE].NAME:&amp;quot;);&lt;br /&gt; for(i=0; i&amp;lt;len_full_name;i++)&lt;br /&gt; {&lt;br /&gt; &lt;br /&gt; printf(&amp;quot;%c&amp;quot;,m_device[idx].data_buffer[dev_name_offset+i]);&lt;br /&gt; }&lt;br /&gt; printf(&amp;quot;\r\n&amp;quot;);&lt;/p&gt;
&lt;p&gt;/*88888888888888888888888888888888888888888888888 NAME OF DEVICE IN HEX 88888888888888888888888888888888888888888888888*/ &lt;br /&gt; printf(&amp;quot;[HEX ID ].ADDR:&amp;quot;);&lt;br /&gt; for(i=0; i&amp;lt; (uint16_t)(sizeof(p_adv_report-&amp;gt;peer_addr.addr));i++)&lt;br /&gt; {&lt;br /&gt; if(i==0)&lt;br /&gt; {&lt;br /&gt; printf(&amp;quot;%02X&amp;quot;,m_device[idx].addr[i]);&lt;br /&gt; }&lt;br /&gt; else&lt;br /&gt; {&lt;br /&gt; printf(&amp;quot;:%02X&amp;quot;,m_device[idx].addr[i]); //add colon in order to give format to address&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt; printf(&amp;quot;\r\n&amp;quot;);&lt;/p&gt;
&lt;p&gt;// ##### if you do not want to print adv data then comment #####////&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;m_device[idx].size = p_adv_report-&amp;gt;data.len;&lt;/p&gt;
&lt;p&gt;memset(m_device[idx].data_buffer,&lt;br /&gt;0,&lt;br /&gt;p_adv_report-&amp;gt;data.len);&lt;br /&gt;memcpy(m_device[idx].data_buffer,&lt;br /&gt;p_adv_report-&amp;gt;data.p_data,&lt;br /&gt;p_adv_report-&amp;gt;data.len);&lt;/p&gt;
&lt;p&gt;&lt;br /&gt; &lt;br /&gt; printf(&amp;quot;[ADV DATA ].DATA:&amp;quot;);&lt;br /&gt; for(i=0; i&amp;lt; p_adv_report-&amp;gt;data.len;i++)&lt;br /&gt; {&lt;br /&gt; printf(&amp;quot;%x&amp;quot;,m_device[idx].data_buffer[i]);&lt;br /&gt; }&lt;br /&gt; printf(&amp;quot;\r\n&amp;quot;);&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt; /* DATA */&lt;br /&gt; &lt;br /&gt; uint8_t * aux = p_adv_report-&amp;gt;data.p_data;&lt;br /&gt;uint16_t aux_len = p_adv_report-&amp;gt;data.len;&lt;/p&gt;
&lt;p&gt;uint8_t aux_array[100] = {};&lt;br /&gt;memcpy(aux_array,aux,aux_len);&lt;br /&gt; printf(&amp;quot;[ADV DATA ].DATA:%x\r\n&amp;quot;,aux_array);&lt;/p&gt;
&lt;p&gt;&lt;br /&gt; return;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;void assert_nrf_callback(uint16_t line_num, const uint8_t * p_file_name)&lt;br /&gt;{&lt;br /&gt; app_error_handler(0xDEADBEEF, line_num, p_file_name);&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/**@brief Function for the LEDs initialization.&lt;br /&gt; *&lt;br /&gt; * @details Initializes all LEDs used by the application.&lt;br /&gt; */&lt;br /&gt;static void leds_init(void)&lt;br /&gt;{&lt;br /&gt; bsp_board_init(BSP_INIT_LEDS);&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/**@brief Function to start scanning.&lt;br /&gt; */&lt;br /&gt;static void scan_start(void)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code;&lt;/p&gt;
&lt;p&gt;err_code = nrf_ble_scan_start(&amp;amp;m_scan);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;bsp_board_led_off(CENTRAL_CONNECTED_LED);&lt;br /&gt; bsp_board_led_on(CENTRAL_SCANNING_LED);&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/**@brief Function for handling BLE events.&lt;br /&gt; *&lt;br /&gt; * @param[in] p_ble_evt Bluetooth stack event.&lt;br /&gt; * @param[in] p_context Unused.&lt;br /&gt; */&lt;br /&gt;static void ble_evt_handler(ble_evt_t const * p_ble_evt, void * p_context)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code;&lt;/p&gt;
&lt;p&gt;// For readability.&lt;br /&gt; ble_gap_evt_t const * p_gap_evt = &amp;amp;p_ble_evt-&amp;gt;evt.gap_evt;&lt;/p&gt;
&lt;p&gt;switch (p_ble_evt-&amp;gt;header.evt_id)&lt;br /&gt; {&lt;br /&gt; // Upon connection, check which peripheral has connected (HR or RSC), initiate DB&lt;br /&gt; // discovery, update LEDs status and resume scanning if necessary. */&lt;br /&gt; case BLE_GAP_EVT_CONNECTED:&lt;br /&gt; {&lt;br /&gt; NRF_LOG_INFO(&amp;quot;Connected.&amp;quot;);&lt;br /&gt;// err_code = ble_lbs_c_handles_assign(&amp;amp;m_ble_lbs_c, p_gap_evt-&amp;gt;conn_handle, NULL);&lt;br /&gt;// APP_ERROR_CHECK(err_code);&lt;br /&gt;//&lt;br /&gt;// err_code = ble_db_discovery_start(&amp;amp;m_db_disc, p_gap_evt-&amp;gt;conn_handle);&lt;br /&gt;// APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;// Update LEDs status, and check if we should be looking for more&lt;br /&gt; // peripherals to connect to.&lt;br /&gt; bsp_board_led_on(CENTRAL_CONNECTED_LED);&lt;br /&gt; bsp_board_led_off(CENTRAL_SCANNING_LED);&lt;br /&gt; } break;&lt;/p&gt;
&lt;p&gt;// Upon disconnection, reset the connection handle of the peer which disconnected, update&lt;br /&gt; // the LEDs status and start scanning again.&lt;br /&gt; case BLE_GAP_EVT_DISCONNECTED:&lt;br /&gt; {&lt;br /&gt; NRF_LOG_INFO(&amp;quot;Disconnected.&amp;quot;);&lt;br /&gt; scan_start();&lt;br /&gt; } break;&lt;/p&gt;
&lt;p&gt;case BLE_GAP_EVT_TIMEOUT:&lt;br /&gt; {&lt;br /&gt; // We have not specified a timeout for scanning, so only connection attemps can timeout.&lt;br /&gt; if (p_gap_evt-&amp;gt;params.timeout.src == BLE_GAP_TIMEOUT_SRC_CONN)&lt;br /&gt; {&lt;br /&gt; NRF_LOG_DEBUG(&amp;quot;Connection request timed out.&amp;quot;);&lt;br /&gt; }&lt;br /&gt; } break;&lt;/p&gt;
&lt;p&gt;case BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST:&lt;br /&gt; {&lt;br /&gt; // Accept parameters requested by peer.&lt;br /&gt; err_code = sd_ble_gap_conn_param_update(p_gap_evt-&amp;gt;conn_handle,&lt;br /&gt; &amp;amp;p_gap_evt-&amp;gt;params.conn_param_update_request.conn_params);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;br /&gt; } break;&lt;/p&gt;
&lt;p&gt;case BLE_GAP_EVT_PHY_UPDATE_REQUEST:&lt;br /&gt; {&lt;br /&gt; NRF_LOG_DEBUG(&amp;quot;PHY update request.&amp;quot;);&lt;br /&gt; ble_gap_phys_t const phys =&lt;br /&gt; {&lt;br /&gt; .rx_phys = BLE_GAP_PHY_AUTO,&lt;br /&gt; .tx_phys = BLE_GAP_PHY_AUTO,&lt;br /&gt; };&lt;br /&gt; err_code = sd_ble_gap_phy_update(p_ble_evt-&amp;gt;evt.gap_evt.conn_handle, &amp;amp;phys);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;br /&gt; } break;&lt;/p&gt;
&lt;p&gt;case BLE_GATTC_EVT_TIMEOUT:&lt;br /&gt; {&lt;br /&gt; // Disconnect on GATT Client timeout event.&lt;br /&gt; NRF_LOG_DEBUG(&amp;quot;GATT Client Timeout.&amp;quot;);&lt;br /&gt; err_code = sd_ble_gap_disconnect(p_ble_evt-&amp;gt;evt.gattc_evt.conn_handle,&lt;br /&gt; BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;br /&gt; } break;&lt;/p&gt;
&lt;p&gt;case BLE_GATTS_EVT_TIMEOUT:&lt;br /&gt; {&lt;br /&gt; // Disconnect on GATT Server timeout event.&lt;br /&gt; NRF_LOG_DEBUG(&amp;quot;GATT Server Timeout.&amp;quot;);&lt;br /&gt; err_code = sd_ble_gap_disconnect(p_ble_evt-&amp;gt;evt.gatts_evt.conn_handle,&lt;br /&gt; BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;br /&gt; } break;&lt;/p&gt;
&lt;p&gt;default:&lt;br /&gt; // No implementation needed.&lt;br /&gt; break;&lt;br /&gt; }&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;/**@brief Function for initializing the BLE stack.&lt;br /&gt; *&lt;br /&gt; * @details Initializes the SoftDevice and the BLE event interrupts.&lt;br /&gt; */&lt;br /&gt;static void ble_stack_init(void)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code;&lt;/p&gt;
&lt;p&gt;err_code = nrf_sdh_enable_request();&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;// Configure the BLE stack using the default settings.&lt;br /&gt; // Fetch the start address of the application RAM.&lt;br /&gt; uint32_t ram_start = 0;&lt;br /&gt; err_code = nrf_sdh_ble_default_cfg_set(APP_BLE_CONN_CFG_TAG, &amp;amp;ram_start);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;// Enable BLE stack.&lt;br /&gt; err_code = nrf_sdh_ble_enable(&amp;amp;ram_start);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;// Register a handler for BLE events.&lt;br /&gt; NRF_SDH_BLE_OBSERVER(m_ble_observer, APP_BLE_OBSERVER_PRIO, ble_evt_handler, NULL);&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/**@brief Function for handling events from the button handler module.&lt;br /&gt; *&lt;br /&gt; * @param[in] pin_no The pin that the event applies to.&lt;br /&gt; * @param[in] button_action The button action (press/release).&lt;br /&gt; */&lt;br /&gt;static void button_event_handler(uint8_t pin_no, uint8_t button_action)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code;&lt;/p&gt;
&lt;p&gt;switch (pin_no)&lt;br /&gt; {&lt;br /&gt; case LEDBUTTON_BUTTON_PIN:&lt;br /&gt; break;&lt;/p&gt;
&lt;p&gt;default:&lt;br /&gt; //APP_ERROR_HANDLER(pin_no);&lt;br /&gt; break;&lt;br /&gt; }&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/**@brief Function for handling Scaning events.&lt;br /&gt; *&lt;br /&gt; * @param[in] p_scan_evt Scanning event.&lt;br /&gt; */&lt;br /&gt;static void scan_evt_handler(scan_evt_t const * p_scan_evt)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code;&lt;/p&gt;
&lt;p&gt;switch(p_scan_evt-&amp;gt;scan_evt_id)&lt;br /&gt; {&lt;br /&gt; case NRF_BLE_SCAN_EVT_CONNECTING_ERROR:&lt;br /&gt; err_code = p_scan_evt-&amp;gt;params.connecting_err.err_code;&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;br /&gt; break;&lt;/p&gt;
&lt;p&gt;case NRF_BLE_SCAN_EVT_NOT_FOUND:&lt;br /&gt; device_to_list_add(p_scan_evt-&amp;gt;params.p_not_found);&lt;br /&gt; break;&lt;br /&gt; default:&lt;br /&gt; break;&lt;br /&gt; }&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;/**@brief Function for initializing the button handler module.&lt;br /&gt; */&lt;br /&gt;static void buttons_init(void)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code;&lt;/p&gt;
&lt;p&gt;//The array must be static because a pointer to it will be saved in the button handler module.&lt;br /&gt; static app_button_cfg_t buttons[] =&lt;br /&gt; {&lt;br /&gt; {LEDBUTTON_BUTTON_PIN, false, BUTTON_PULL, button_event_handler}&lt;br /&gt; };&lt;/p&gt;
&lt;p&gt;err_code = app_button_init(buttons, ARRAY_SIZE(buttons),&lt;br /&gt; BUTTON_DETECTION_DELAY);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/**@brief Function for initializing the log.&lt;br /&gt; */&lt;br /&gt;static void log_init(void)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code = NRF_LOG_INIT(NULL);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;NRF_LOG_DEFAULT_BACKENDS_INIT();&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;/**@brief Function for handling the list_timer event,&lt;br /&gt; */&lt;br /&gt;static void adv_list_timer_handle(void * p_context)&lt;br /&gt;{&lt;br /&gt; &lt;br /&gt; // Print devices&lt;br /&gt; scanned_device_t * p_device_list = scan_device_info_get();&lt;br /&gt; device_list_print(p_device_list);&lt;/p&gt;
&lt;p&gt;//scan_device_info_clear();&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/**@brief Function for initializing the timer.&lt;br /&gt; */&lt;br /&gt;static void timer_init(void)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code = app_timer_init();&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;// Timer for refreshing scanned devices data.&lt;br /&gt; APP_TIMER_DEF(adv_list_timer);&lt;br /&gt; err_code = app_timer_create(&amp;amp;adv_list_timer, APP_TIMER_MODE_REPEATED, adv_list_timer_handle);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;err_code = app_timer_start(adv_list_timer, FOUND_DEVICE_REFRESH_TIME, NULL);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/**@brief Function for initializing the Power manager. */&lt;br /&gt;static void power_management_init(void)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code;&lt;br /&gt; err_code = nrf_pwr_mgmt_init();&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;static void scan_init(void)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code;&lt;br /&gt; nrf_ble_scan_init_t init_scan;&lt;/p&gt;
&lt;p&gt;memset(&amp;amp;init_scan, 0, sizeof(init_scan));&lt;/p&gt;
&lt;p&gt;init_scan.connect_if_match = false;&lt;br /&gt; init_scan.conn_cfg_tag = APP_BLE_CONN_CFG_TAG;&lt;/p&gt;
&lt;p&gt;err_code = nrf_ble_scan_init(&amp;amp;m_scan, &amp;amp;init_scan, scan_evt_handler);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;// // Setting filters for scanning.&lt;br /&gt;// err_code = nrf_ble_scan_filters_enable(&amp;amp;m_scan, NRF_BLE_SCAN_NAME_FILTER, false);&lt;br /&gt;// APP_ERROR_CHECK(err_code);&lt;br /&gt;//&lt;br /&gt; err_code = nrf_ble_scan_filter_set(&amp;amp;m_scan, SCAN_NAME_FILTER, m_target_periph_name);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/**@brief Function for initializing the GATT module.&lt;br /&gt; */&lt;br /&gt;static void gatt_init(void)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code = nrf_ble_gatt_init(&amp;amp;m_gatt, NULL);&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;/**@brief Function for handling the idle state (main loop).&lt;br /&gt; *&lt;br /&gt; * @details Handle any pending log operation(s), then sleep until the next event occurs.&lt;br /&gt; */&lt;br /&gt;static void idle_state_handle(void)&lt;br /&gt;{&lt;br /&gt; NRF_LOG_FLUSH();&lt;br /&gt; nrf_pwr_mgmt_run();&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;int main(void)&lt;br /&gt;{&lt;br /&gt; // Initialize.&lt;br /&gt; log_init();&lt;br /&gt; timer_init();&lt;br /&gt; leds_init();&lt;br /&gt; buttons_init();&lt;br /&gt; power_management_init();&lt;br /&gt; ble_stack_init();&lt;br /&gt; scan_init();&lt;br /&gt; gatt_init();&lt;/p&gt;
&lt;p&gt;&lt;br /&gt; // Start execution.&lt;br /&gt; NRF_LOG_INFO(&amp;quot;[[BLE [RFID V1.0.0] Scanner Started]] Total: %d seconds&amp;quot;,SCAN_LIST_REFRESH_INTERVAL/1000);&lt;br /&gt; scan_start();&lt;/p&gt;
&lt;p&gt;// Turn on the LED to signal scanning.&lt;br /&gt; bsp_board_led_on(CENTRAL_SCANNING_LED);&lt;/p&gt;
&lt;p&gt;// Enter main loop.&lt;br /&gt; for (;;)&lt;br /&gt; {&lt;br /&gt; idle_state_handle();&lt;br /&gt; }&lt;br /&gt;}&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: NRF52832 BLE Scan</title><link>https://devzone.nordicsemi.com/thread/230445?ContentTypeID=1</link><pubDate>Wed, 22 Jan 2020 21:08:38 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:2ba0f855-6b21-4966-8dc1-9b77810589bb</guid><dc:creator>MatiasJHZ</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;thanks a lot for this answer, it helped me a lot because I was looking for the same thing. I have one question though:&lt;/p&gt;
&lt;p&gt;Where the device name is located? is it supposed to be sent within an adv packet? According to the &amp;quot;ble_gap_evt_adv_report_t&amp;quot; struct, its field &amp;quot;data&amp;quot; of type &amp;quot;ble_data_t&amp;quot; is the received adv or scan response data (ble_gap.h file). The struct &amp;quot;ble_data_t&amp;quot; contains a uint8_t pointer and a uint16_t length. Is the device name located in there? I&amp;#39;m doing this inside the function &amp;quot;device_to_list_add()&amp;quot;, when a device is not in the list:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;uint8_t * aux = p_adv_report-&amp;gt;data.p_data;
uint16_t aux_len = p_adv_report-&amp;gt;data.len;

uint8_t aux_array[100] = {};
memcpy(aux_array,aux,aux_len);
printf(&amp;quot;Adv Data %x\r\n&amp;quot;,aux_array);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Thanks a lot for your help&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: NRF52832 BLE Scan</title><link>https://devzone.nordicsemi.com/thread/171398?ContentTypeID=1</link><pubDate>Fri, 15 Feb 2019 13:28:21 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:eb969b1d-badd-417f-abff-fce2f4783459</guid><dc:creator>Jared</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;The central discovers devices after scan_start() has been called. The callback function scan_evt_handler is called with&amp;nbsp;ble_gap_evt_adv_report_t when a device is discovered during scanning. You can then append the discovered device in a list with its UUID. A device can be discovered multiple times, you should therefore only append it, if it&amp;#39;s not already in the list. &lt;a href="https://www.nordicsemi.com/DocLib/Content/SoftDevice_API_Doc/S132/v6-1-0/group_ble_gap_scan_msc_legacy"&gt;See this sequence diagram.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;/**
 * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice, this
 *    list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form, except as embedded into a Nordic
 *    Semiconductor ASA integrated circuit in a product or a software update for
 *    such product, must reproduce the above copyright notice, this list of
 *    conditions and the following disclaimer in the documentation and/or other
 *    materials provided with the distribution.
 *
 * 3. Neither the name of Nordic Semiconductor ASA nor the names of its
 *    contributors may be used to endorse or promote products derived from this
 *    software without specific prior written permission.
 *
 * 4. This software, with or without modification, must only be used with a
 *    Nordic Semiconductor ASA integrated circuit.
 *
 * 5. Any software provided in binary form under this license must not be reverse
 *    engineered, decompiled, modified and/or disassembled.
 *
 * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA &amp;quot;AS IS&amp;quot; AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 */
/**
 * @brief BLE LED Button Service central and client application main file.
 *
 * This file contains the source code for a sample client application using the LED Button service.
 */

#include &amp;lt;stdint.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;string.h&amp;gt;
#include &amp;quot;nrf_sdh.h&amp;quot;
#include &amp;quot;nrf_sdh_ble.h&amp;quot;
#include &amp;quot;nrf_sdh_soc.h&amp;quot;
#include &amp;quot;nrf_pwr_mgmt.h&amp;quot;
#include &amp;quot;app_timer.h&amp;quot;
#include &amp;quot;boards.h&amp;quot;
#include &amp;quot;bsp.h&amp;quot;
#include &amp;quot;bsp_btn_ble.h&amp;quot;
#include &amp;quot;ble.h&amp;quot;
#include &amp;quot;ble_hci.h&amp;quot;
#include &amp;quot;ble_advertising.h&amp;quot;
#include &amp;quot;ble_conn_params.h&amp;quot;
#include &amp;quot;ble_db_discovery.h&amp;quot;
#include &amp;quot;ble_lbs_c.h&amp;quot;
#include &amp;quot;nrf_ble_gatt.h&amp;quot;
#include &amp;quot;nrf_ble_scan.h&amp;quot;

#include &amp;quot;nrf_log.h&amp;quot;
#include &amp;quot;nrf_log_ctrl.h&amp;quot;
#include &amp;quot;nrf_log_default_backends.h&amp;quot;


#define CENTRAL_SCANNING_LED            BSP_BOARD_LED_0                     /**&amp;lt; Scanning LED will be on when the device is scanning. */
#define CENTRAL_CONNECTED_LED           BSP_BOARD_LED_1                     /**&amp;lt; Connected LED will be on when the device is connected. */
#define LEDBUTTON_LED                   BSP_BOARD_LED_2                     /**&amp;lt; LED to indicate a change of state of the the Button characteristic on the peer. */

#define SCAN_INTERVAL                   0x00A0                              /**&amp;lt; Determines scan interval in units of 0.625 millisecond. */
#define SCAN_WINDOW                     0x0050                              /**&amp;lt; Determines scan window in units of 0.625 millisecond. */
#define SCAN_DURATION                   0x0000                              /**&amp;lt; Timout when scanning. 0x0000 disables timeout. */

#define MIN_CONNECTION_INTERVAL         MSEC_TO_UNITS(7.5, UNIT_1_25_MS)    /**&amp;lt; Determines minimum connection interval in milliseconds. */
#define MAX_CONNECTION_INTERVAL         MSEC_TO_UNITS(30, UNIT_1_25_MS)     /**&amp;lt; Determines maximum connection interval in milliseconds. */
#define SLAVE_LATENCY                   0                                   /**&amp;lt; Determines slave latency in terms of connection events. */
#define SUPERVISION_TIMEOUT             MSEC_TO_UNITS(4000, UNIT_10_MS)     /**&amp;lt; Determines supervision time-out in units of 10 milliseconds. */

#define LEDBUTTON_BUTTON_PIN            BSP_BUTTON_0                        /**&amp;lt; Button that will write to the LED characteristic of the peer */
#define BUTTON_DETECTION_DELAY          APP_TIMER_TICKS(50)                 /**&amp;lt; Delay from a GPIOTE event until a button is reported as pushed (in number of timer ticks). */

#define APP_BLE_CONN_CFG_TAG            1                                   /**&amp;lt; A tag identifying the SoftDevice BLE configuration. */
#define APP_BLE_OBSERVER_PRIO           3                                   /**&amp;lt; Application&amp;#39;s BLE observer priority. You shouldn&amp;#39;t need to modify this value. */

NRF_BLE_SCAN_DEF(m_scan);                                       /**&amp;lt; Scanning module instance. */
BLE_LBS_C_DEF(m_ble_lbs_c);                                     /**&amp;lt; Main structure used by the LBS client module. */
NRF_BLE_GATT_DEF(m_gatt);                                       /**&amp;lt; GATT module instance. */
BLE_DB_DISCOVERY_DEF(m_db_disc);                                /**&amp;lt; DB discovery module instance. */

//static char const m_target_periph_name[] = &amp;quot;Nordic_Blinky&amp;quot;;     /**&amp;lt; Name of the device we try to connect to. This name is searched in the scan report data*/


#define SCAN_LIST_REFRESH_INTERVAL 10000  // 10 sec

static uint32_t device_number;

#define FOUND_DEVICE_REFRESH_TIME APP_TIMER_TICKS(SCAN_LIST_REFRESH_INTERVAL) /**&amp;lt; Time after which the device list is clean and refreshed. */


#define DEVICE_NAME_MAX_SIZE 20
#define DEVICE_TO_FIND_MAX 50


typedef struct
{
    bool      is_not_empty;                                   /**&amp;lt; Indicates that the structure is not empty. */
    uint16_t  size;                                           /**&amp;lt; Size of manuf data. */
    uint8_t   addr[BLE_GAP_ADDR_LEN];                         /**&amp;lt; Device address. */
    char      dev_name[DEVICE_NAME_MAX_SIZE];                 /**&amp;lt; Device name. */
    uint8_t   manuf_buffer[BLE_GAP_ADV_SET_DATA_SIZE_MAX];    /**&amp;lt; Buffer for storing an  manuf data. */

} scanned_device_t;

void device_list_print(scanned_device_t * p_device);


scanned_device_t   m_device[DEVICE_TO_FIND_MAX];                 /**&amp;lt; Stores device info from scan data. */

void scan_device_info_clear(void)
{
    memset(m_device, 0, sizeof(m_device));
    device_number = 0;
}

/**@brief Function for printing the devices.
 *
 *@details Function print list of devices.
 *      
 *
 * @param[in] device      Pointer to the struct storing the scanned devices.
 */
void device_list_print(scanned_device_t * p_device)
{
    NRF_LOG_INFO(&amp;quot;Devices found %d&amp;quot;, device_number);

    // We could now clear the list:
    scan_device_info_clear();
    

}



scanned_device_t * scan_device_info_get(void)
{
    return m_device;
}

typedef struct
{
    uint8_t * p_data;   /**&amp;lt; Pointer to data. */
    uint16_t  data_len; /**&amp;lt; Length of data. */
} data_t;


static void device_to_list_add(ble_gap_evt_adv_report_t const * p_adv_report)
{
    uint8_t  idx             = 0;
    uint16_t dev_name_offset = 0;
    uint16_t field_len;
    data_t   adv_data;


    // Initialize advertisement report for parsing
    adv_data.p_data   = (uint8_t *)p_adv_report-&amp;gt;data.p_data;
    adv_data.data_len = p_adv_report-&amp;gt;data.len;

    for ( idx = 0; idx &amp;lt; DEVICE_TO_FIND_MAX; idx++)
    {
        // If address is duplicated, then return.
        if (memcmp(p_adv_report-&amp;gt;peer_addr.addr,
                   m_device[idx].addr,
                   sizeof(p_adv_report-&amp;gt;peer_addr.addr)) == 0)
        {
            return;
        }
    }

    // Device is not in the list.
    for (idx = 0; idx &amp;lt; DEVICE_TO_FIND_MAX; idx++)
    {
        if (!m_device[idx].is_not_empty) // We find an empty entry
        {
               device_number = device_number +1;

               
                m_device[idx].is_not_empty = true; //validating the list record

                memset(m_device[idx].addr,
                0,
                sizeof(p_adv_report-&amp;gt;peer_addr.addr));

                memcpy(m_device[idx].addr,
                p_adv_report-&amp;gt;peer_addr.addr,
                sizeof(p_adv_report-&amp;gt;peer_addr.addr));
                return;
            
        }
    }
}

/**@brief Function to handle asserts in the SoftDevice.
 *
 * @details This function will be called in case of an assert in the SoftDevice.
 *
 * @warning This handler is an example only and does not fit a final product. You need to analyze
 *          how your product is supposed to react in case of Assert.
 * @warning On assert from the SoftDevice, the system can only recover on reset.
 *
 * @param[in] line_num     Line number of the failing ASSERT call.
 * @param[in] p_file_name  File name of the failing ASSERT call.
 */
void assert_nrf_callback(uint16_t line_num, const uint8_t * p_file_name)
{
    app_error_handler(0xDEADBEEF, line_num, p_file_name);
}


/**@brief Function for the LEDs initialization.
 *
 * @details Initializes all LEDs used by the application.
 */
static void leds_init(void)
{
    bsp_board_init(BSP_INIT_LEDS);
}


/**@brief Function to start scanning.
 */
static void scan_start(void)
{
    ret_code_t err_code;

    err_code = nrf_ble_scan_start(&amp;amp;m_scan);
    APP_ERROR_CHECK(err_code);

    bsp_board_led_off(CENTRAL_CONNECTED_LED);
    bsp_board_led_on(CENTRAL_SCANNING_LED);
}


/**@brief Function for handling BLE events.
 *
 * @param[in]   p_ble_evt   Bluetooth stack event.
 * @param[in]   p_context   Unused.
 */
static void ble_evt_handler(ble_evt_t const * p_ble_evt, void * p_context)
{
    ret_code_t err_code;

    // For readability.
    ble_gap_evt_t const * p_gap_evt = &amp;amp;p_ble_evt-&amp;gt;evt.gap_evt;

    switch (p_ble_evt-&amp;gt;header.evt_id)
    {
        // Upon connection, check which peripheral has connected (HR or RSC), initiate DB
        // discovery, update LEDs status and resume scanning if necessary. */
        case BLE_GAP_EVT_CONNECTED:
        {
            NRF_LOG_INFO(&amp;quot;Connected.&amp;quot;);
//            err_code = ble_lbs_c_handles_assign(&amp;amp;m_ble_lbs_c, p_gap_evt-&amp;gt;conn_handle, NULL);
//            APP_ERROR_CHECK(err_code);
//
//            err_code = ble_db_discovery_start(&amp;amp;m_db_disc, p_gap_evt-&amp;gt;conn_handle);
//            APP_ERROR_CHECK(err_code);

            // Update LEDs status, and check if we should be looking for more
            // peripherals to connect to.
            bsp_board_led_on(CENTRAL_CONNECTED_LED);
            bsp_board_led_off(CENTRAL_SCANNING_LED);
        } break;

        // Upon disconnection, reset the connection handle of the peer which disconnected, update
        // the LEDs status and start scanning again.
        case BLE_GAP_EVT_DISCONNECTED:
        {
            NRF_LOG_INFO(&amp;quot;Disconnected.&amp;quot;);
            scan_start();
        } break;

        case BLE_GAP_EVT_TIMEOUT:
        {
            // We have not specified a timeout for scanning, so only connection attemps can timeout.
            if (p_gap_evt-&amp;gt;params.timeout.src == BLE_GAP_TIMEOUT_SRC_CONN)
            {
                NRF_LOG_DEBUG(&amp;quot;Connection request timed out.&amp;quot;);
            }
        } break;

        case BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST:
        {
            // Accept parameters requested by peer.
            err_code = sd_ble_gap_conn_param_update(p_gap_evt-&amp;gt;conn_handle,
                                        &amp;amp;p_gap_evt-&amp;gt;params.conn_param_update_request.conn_params);
            APP_ERROR_CHECK(err_code);
        } break;

        case BLE_GAP_EVT_PHY_UPDATE_REQUEST:
        {
            NRF_LOG_DEBUG(&amp;quot;PHY update request.&amp;quot;);
            ble_gap_phys_t const phys =
            {
                .rx_phys = BLE_GAP_PHY_AUTO,
                .tx_phys = BLE_GAP_PHY_AUTO,
            };
            err_code = sd_ble_gap_phy_update(p_ble_evt-&amp;gt;evt.gap_evt.conn_handle, &amp;amp;phys);
            APP_ERROR_CHECK(err_code);
        } break;

        case BLE_GATTC_EVT_TIMEOUT:
        {
            // Disconnect on GATT Client timeout event.
            NRF_LOG_DEBUG(&amp;quot;GATT Client Timeout.&amp;quot;);
            err_code = sd_ble_gap_disconnect(p_ble_evt-&amp;gt;evt.gattc_evt.conn_handle,
                                             BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);
            APP_ERROR_CHECK(err_code);
        } break;

        case BLE_GATTS_EVT_TIMEOUT:
        {
            // Disconnect on GATT Server timeout event.
            NRF_LOG_DEBUG(&amp;quot;GATT Server Timeout.&amp;quot;);
            err_code = sd_ble_gap_disconnect(p_ble_evt-&amp;gt;evt.gatts_evt.conn_handle,
                                             BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);
            APP_ERROR_CHECK(err_code);
        } break;

        default:
            // No implementation needed.
            break;
    }
}

/**@brief Function for initializing the BLE stack.
 *
 * @details Initializes the SoftDevice and the BLE event interrupts.
 */
static void ble_stack_init(void)
{
    ret_code_t err_code;

    err_code = nrf_sdh_enable_request();
    APP_ERROR_CHECK(err_code);

    // Configure the BLE stack using the default settings.
    // Fetch the start address of the application RAM.
    uint32_t ram_start = 0;
    err_code = nrf_sdh_ble_default_cfg_set(APP_BLE_CONN_CFG_TAG, &amp;amp;ram_start);
    APP_ERROR_CHECK(err_code);

    // Enable BLE stack.
    err_code = nrf_sdh_ble_enable(&amp;amp;ram_start);
    APP_ERROR_CHECK(err_code);

    // Register a handler for BLE events.
    NRF_SDH_BLE_OBSERVER(m_ble_observer, APP_BLE_OBSERVER_PRIO, ble_evt_handler, NULL);
}


/**@brief Function for handling events from the button handler module.
 *
 * @param[in] pin_no        The pin that the event applies to.
 * @param[in] button_action The button action (press/release).
 */
static void button_event_handler(uint8_t pin_no, uint8_t button_action)
{
    ret_code_t err_code;

    switch (pin_no)
    {
        case LEDBUTTON_BUTTON_PIN:
        break;

        default:
            //APP_ERROR_HANDLER(pin_no);
            break;
    }
}


/**@brief Function for handling Scaning events.
 *
 * @param[in]   p_scan_evt   Scanning event.
 */
static void scan_evt_handler(scan_evt_t const * p_scan_evt)
{
    ret_code_t err_code;

    switch(p_scan_evt-&amp;gt;scan_evt_id)
    {
        case NRF_BLE_SCAN_EVT_CONNECTING_ERROR:
            err_code = p_scan_evt-&amp;gt;params.connecting_err.err_code;
            APP_ERROR_CHECK(err_code);
            break;

         case NRF_BLE_SCAN_EVT_NOT_FOUND:
             device_to_list_add(p_scan_evt-&amp;gt;params.p_not_found);
             break;
        default:
          break;
    }
}



/**@brief Function for initializing the button handler module.
 */
static void buttons_init(void)
{
    ret_code_t err_code;

    //The array must be static because a pointer to it will be saved in the button handler module.
    static app_button_cfg_t buttons[] =
    {
        {LEDBUTTON_BUTTON_PIN, false, BUTTON_PULL, button_event_handler}
    };

    err_code = app_button_init(buttons, ARRAY_SIZE(buttons),
                               BUTTON_DETECTION_DELAY);
    APP_ERROR_CHECK(err_code);
}


/**@brief Function for initializing the log.
 */
static void log_init(void)
{
    ret_code_t err_code = NRF_LOG_INIT(NULL);
    APP_ERROR_CHECK(err_code);

    NRF_LOG_DEFAULT_BACKENDS_INIT();
}

/**@brief Function for handling the list_timer event,
 */
static void adv_list_timer_handle(void * p_context)
{
        
    // Print devices
    scanned_device_t * p_device_list = scan_device_info_get();
    device_list_print(p_device_list);

    //scan_device_info_clear();
}


/**@brief Function for initializing the timer.
 */
static void timer_init(void)
{
    ret_code_t err_code = app_timer_init();
    APP_ERROR_CHECK(err_code);

    // Timer for refreshing scanned devices data.
    APP_TIMER_DEF(adv_list_timer);
    err_code = app_timer_create(&amp;amp;adv_list_timer, APP_TIMER_MODE_REPEATED, adv_list_timer_handle);
    APP_ERROR_CHECK(err_code);

    err_code = app_timer_start(adv_list_timer, FOUND_DEVICE_REFRESH_TIME, NULL);
    APP_ERROR_CHECK(err_code);


}


/**@brief Function for initializing the Power manager. */
static void power_management_init(void)
{
    ret_code_t err_code;
    err_code = nrf_pwr_mgmt_init();
    APP_ERROR_CHECK(err_code);
}


static void scan_init(void)
{
    ret_code_t          err_code;
    nrf_ble_scan_init_t init_scan;

    memset(&amp;amp;init_scan, 0, sizeof(init_scan));

    init_scan.connect_if_match = false;
    init_scan.conn_cfg_tag     = APP_BLE_CONN_CFG_TAG;

    err_code = nrf_ble_scan_init(&amp;amp;m_scan, &amp;amp;init_scan, scan_evt_handler);
    APP_ERROR_CHECK(err_code);

//    // Setting filters for scanning.
//    err_code = nrf_ble_scan_filters_enable(&amp;amp;m_scan, NRF_BLE_SCAN_NAME_FILTER, false);
//    APP_ERROR_CHECK(err_code);
//
//    err_code = nrf_ble_scan_filter_set(&amp;amp;m_scan, SCAN_NAME_FILTER, m_target_periph_name);
//    APP_ERROR_CHECK(err_code);

}


/**@brief Function for initializing the GATT module.
 */
static void gatt_init(void)
{
    ret_code_t err_code = nrf_ble_gatt_init(&amp;amp;m_gatt, NULL);
    APP_ERROR_CHECK(err_code);
}


/**@brief Function for handling the idle state (main loop).
 *
 * @details Handle any pending log operation(s), then sleep until the next event occurs.
 */
static void idle_state_handle(void)
{
    NRF_LOG_FLUSH();
    nrf_pwr_mgmt_run();
}


int main(void)
{
    // Initialize.
    log_init();
    timer_init();
    leds_init();
    buttons_init();
    power_management_init();
    ble_stack_init();
    scan_init();
    gatt_init();


    // Start execution.
    NRF_LOG_INFO(&amp;quot;BLE scanner example started, will print the number of devices found after %d seconds&amp;quot;,SCAN_LIST_REFRESH_INTERVAL/1000);
    scan_start();

    // Turn on the LED to signal scanning.
    bsp_board_led_on(CENTRAL_SCANNING_LED);

    // Enter main loop.
    for (;;)
    {
        idle_state_handle();
    }
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Best regards&lt;/p&gt;
&lt;p&gt;Jared.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: NRF52832 BLE Scan</title><link>https://devzone.nordicsemi.com/thread/171379?ContentTypeID=1</link><pubDate>Fri, 15 Feb 2019 12:35:03 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:57c6ff30-bc2e-486a-9f69-a6364baab005</guid><dc:creator>awneil</dc:creator><description>&lt;p&gt;Look at the Advertising Report Handler -&amp;nbsp;&lt;strong&gt;on_adv_report()&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>