I am using a nrf52840 dongle with SEGGER. I am trying to find the security mode and level of the bluetooth initially and after getting paired to another device too. My moto is to check for the security negotiation in the bluetooth layer when it pairs with another device. I have a firmware code with me in which I have integrated the nrf5 17 version SDK(https://www.nordicsemi.com/Products/Development-software/nRF5-SDK)
Steps performed:
I am using Segger tool to build.
I create a new project first selected yellow highlighted option
Selected my target board as nrf52840_xxAA. Then did these,
1) Right click go to options--> preprocessor--> include directories and include all these,
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\modules
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\integration\nrfx
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\integration\nrfx\legacy
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\softdevice\s140\headers
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\softdevice\common
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\libraries\log
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\libraries\util
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\libraries\strerror
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\libraries\timer
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\libraries\uart
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\libraries\queue
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\libraries\fifo
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\libraries\delay
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\libraries\button
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\libraries\bsp
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\libraries\pwr_mgmt
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\libraries\experimental_section_vars
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\boards
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\drivers_nrf\hal
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\drivers_nrf\nrf_soc_nosd
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\drivers_nrf\clock
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\drivers_nrf\common
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\drivers_nrf\uart
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\drivers_nrf\ppi
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\drivers_nrf\rng
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\drivers_nrf\power
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\toolchain\cmsis\include
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\toolchain\gcc
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\external\segger_rtt
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\external\fprintf
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\external\nrf_cc310\include
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\external\nrf_cc310\include\crypto
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\external\nrf_cc310\include\mbedtls
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\external\nrf_cc310\include\mbedtls\alt
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\external\nrf_cc310\include\mbedtls\configs
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\external\nrf_cc310\include\mbedtls\platform
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\modules\nrfx\mdk
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\examples\ble_peripheral\ble_app_template\pca10056\s140\config
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\ble\nrf_ble_gatt
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\ble\nrf_ble_qwr
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\ble\common
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\ble\ble_advertising
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\libraries\atomic
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\modules\nrfx\hal
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\modules\nrfx
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\libraries\log\src
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\libraries\memobj
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\libraries\balloc
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\libraries\mutex
C:\Users\A487043\Desktop\nrf\sdk\DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\components\libraries\ringbuf
2) In preprocessor Definitions add this "NRF52840_XXAA"
"BOARD_PCA10056"
3)Open options--> add existing file and add these source files
For Error Handling and Logging
- components/libraries/util/app_error.c
- components/libraries/log/src/nrf_log_frontend.c
- components/libraries/log/src/nrf_log_backend_serial.c
- components/libraries/log/src/nrf_log_default_backends.c
For Timer
- components/libraries/timer/app_timer.c
For Power Management
- components/libraries/pwr_mgmt/nrf_pwr_mgmt.c
For BLE Advertising
- components/ble/ble_advertising/ble_advertising.c
For GATT
- components/ble/nrf_ble_gatt/nrf_ble_gatt.c
For Queued Write Module
- components/ble/nrf_ble_qwr/nrf_ble_qwr.c
For SoftDevice Handler
- components/softdevice/common/nrf_sdh.c
- components/softdevice/common/nrf_sdh_ble.c
but I am facing quite a few issues when I build I get the following issues,
error: undefined symbol __app_ram_start__ referenced by symbol nrf_sdh_ble_app_ram_start_get (section .text.nrf_sdh_ble_app_ram_start_get in file nrf_sdh_ble.o)
error: undefined symbol __start_log_const_data referenced by symbol nrf_sdh_ble_default_cfg_set (section .text.nrf_sdh_ble_default_cfg_set in file nrf_sdh_ble.o)
error: undefined symbol __start_log_dynamic_data referenced by symbol module_idx_get (section .text.module_idx_get in file nrf_log_frontend.o)
error: undefined symbol __start_sdh_req_observers referenced by symbol sdh_req_observers (section .rodata.sdh_req_observers in file nrf_sdh.o)
error: undefined symbol __start_sdh_stack_observers referenced by symbol sdh_stack_observers (section .rodata.sdh_stack_observers in file nrf_sdh.o)
error: undefined symbol __start_sdh_state_observers referenced by symbol sdh_state_observers (section .rodata.sdh_state_observers in file nrf_sdh.o)
error: undefined symbol __stop_log_const_data referenced by symbol nrf_log_init (section .text.nrf_log_init in file nrf_log_frontend.o)
error: undefined symbol __stop_sdh_req_observers referenced by symbol sdh_req_observers (section .rodata.sdh_req_observers in file nrf_sdh.o)
error: undefined symbol __stop_sdh_stack_observers referenced by symbol sdh_stack_observers (section .rodata.sdh_stack_observers in file nrf_sdh.o)
error: undefined symbol __stop_sdh_state_observers referenced by symbol sdh_state_observers (section .rodata.sdh_state_observers in file nrf_sdh.o)
error: undefined symbol app_error_handler referenced by symbol uart_init (section .text.uart_init in file nrf_log_backend_uart.o)
error: undefined symbol nrfx_uart_init referenced by symbol nrf_drv_uart_init (section .text.nrf_drv_uart_init in file nrf_drv_uart.o)
error: undefined symbol nrfx_uart_tx referenced by symbol nrf_drv_uart_tx (section .text.nrf_drv_uart_tx in file nrf_log_backend_uart.o)
error: undefined symbol nrfx_uart_uninit referenced by symbol nrf_drv_uart_uninit (section .text.nrf_drv_uart_uninit in file nrf_log_backend_uart.o)
error: undefined symbol nrfx_uarte_init referenced by symbol nrf_drv_uart_init (section .text.nrf_drv_uart_init in file nrf_drv_uart.o)
error: undefined symbol nrfx_uarte_tx referenced by symbol nrf_drv_uart_tx (section .text.nrf_drv_uart_tx in file nrf_log_backend_uart.o)
error: undefined symbol nrfx_uarte_uninit referenced by symbol nrf_drv_uart_uninit (section .text.nrf_drv_uart_uninit in file nrf_log_backend_uart.o)
Could you please let me know how to resolve these issues
Got the code online from chatgpt:#include <stdint.h>
#include <string.h>
#include "nordic_common.h"
#include "nrf.h"
#include "ble.h"
#include "ble_hci.h"
#include "ble_srv_common.h"
#include "ble_advdata.h"
#include "ble_advertising.h"
#include "ble_conn_params.h"
#include "nrf_sdh.h"
#include "nrf_sdh_ble.h"
#include "app_timer.h"
#include "bsp_btn_ble.h"
#include "nrf_ble_gatt.h"
#include "nrf_ble_qwr.h"
#include "app_util_platform.h"
#include "nrf_log.h"
#include "nrf_log_ctrl.h"
#include "nrf_log_default_backends.h"
#include "app_error.h"
#define APP_BLE_CONN_CFG_TAG 1
#define APP_BLE_OBSERVER_PRIO 3
NRF_BLE_GATT_DEF(m_gatt);
NRF_BLE_QWR_DEF(m_qwr);
static uint16_t m_conn_handle = BLE_CONN_HANDLE_INVALID;
void get_security_level(uint16_t conn_handle)
{
ret_code_t err_code;
ble_gap_conn_sec_t conn_sec;
err_code = sd_ble_gap_conn_sec_get(conn_handle, &conn_sec);
if (err_code == NRF_SUCCESS)
{
NRF_LOG_INFO("Security Mode: %d, Security Level: %d",
conn_sec.sec_mode.sm, conn_sec.sec_mode.lv);
}
else
{
NRF_LOG_ERROR("Failed to get security level, error code: %d", err_code);
}
}
static void on_ble_evt(ble_evt_t const * p_ble_evt, void * p_context)
{
switch (p_ble_evt->header.evt_id)
{
case BLE_GAP_EVT_CONNECTED:
NRF_LOG_INFO("Connected");
m_conn_handle = p_ble_evt->evt.gap_evt.conn_handle;
get_security_level(m_conn_handle);
break;
case BLE_GAP_EVT_DISCONNECTED:
NRF_LOG_INFO("Disconnected");
m_conn_handle = BLE_CONN_HANDLE_INVALID;
break;
default:
break;
}
}
static void ble_evt_handler(ble_evt_t const * p_ble_evt, void * p_context)
{
on_ble_evt(p_ble_evt, p_context);
}
static void ble_stack_init(void)
{
ret_code_t err_code;
err_code = nrf_sdh_enable_request();
APP_ERROR_CHECK(err_code);
uint32_t ram_start = 0;
err_code = nrf_sdh_ble_default_cfg_set(APP_BLE_CONN_CFG_TAG, &ram_start);
APP_ERROR_CHECK(err_code);
err_code = nrf_sdh_ble_enable(&ram_start);
APP_ERROR_CHECK(err_code);
NRF_SDH_BLE_OBSERVER(m_ble_observer, APP_BLE_OBSERVER_PRIO, ble_evt_handler, NULL);
}
int main(void)
{
ret_code_t err_code;
err_code = NRF_LOG_INIT(NULL);
APP_ERROR_CHECK(err_code);
NRF_LOG_DEFAULT_BACKENDS_INIT();
ble_stack_init();
while (true)
{
NRF_LOG_FLUSH();
__WFE();
}
}
Could you please let me know what is to be done to solve this issue