Hi everyone,
I am using the nRF52840 and SDK 16. Following THIS tutorial was able to create my BLE custom service and see my service with the custom UUID.
The problem is when I am trying to advertise the UUID. When I add my service (BLE_UUID_OUR_SERVICE) into m_adv_uuids[] my device is not discoverable at all and the debug terminal returns a Fatal error
static ble_uuid_t m_adv_uuids[] = /**< Universally unique service identifiers. */ { {BLE_UUID_DEVICE_INFORMATION_SERVICE, BLE_UUID_TYPE_BLE}, {BLE_UUID_OUR_SERVICE, BLE_UUID_TYPE_VENDOR_BEGIN} };
This is the .h file
#ifndef IMU_SERVICE #define IMU_SERVICE #include <stdint.h> #include "ble.h" #include "ble_srv_common.h" #define BLE_UUID_OUR_BASE_UUID {0x3c, 0xad, 0x14, 0x15, 0x59, 0xa2, 0x40, 0xb2, 0xb6, 0x46, 0xe9, 0xdc, 0x19, 0x1c, 0xfe, 0x86} //128bit base UUID #define BLE_UUID_OUR_SERVICE 0xABCD typedef struct{ uint16_t service_handle; }ble_os_t; void our_service_init(ble_os_t *p_our_service); #endif
This is my .c file
#include "IMU_Service.h" #include "SEGGER_RTT.h" #include "app_error.h" #include "ble_srv_common.h" #include <stdint.h> #include <string.h> void our_service_init(ble_os_t *p_our_service) { uint32_t err_code; ble_uuid_t service_uuid; // Create a variable to hold our 16bit UUID ble_uuid128_t base_uuid = BLE_UUID_OUR_BASE_UUID; // Create a variable to hold our 128bit UUID and assign the variable service_uuid.uuid = BLE_UUID_OUR_SERVICE; // Assign our 16bit UUID to the variable err_code = sd_ble_uuid_vs_add(&base_uuid, &service_uuid.type); // Add your custom base UUID (vendor specific) to the BLE stack's table APP_ERROR_CHECK(err_code); //The sd_ble_gatts_service_add() function will create a table containing our services and the service_handle is simply an index pointing to our particular service in the table. err_code = sd_ble_gatts_service_add(BLE_GATTS_SRVC_TYPE_PRIMARY, // We specify the we want a primary service &service_uuid, // Pointer to our 16bit service UUID &p_our_service->service_handle); APP_ERROR_CHECK(err_code); SEGGER_RTT_WriteString(0, "Executing our_service_init().\n"); SEGGER_RTT_printf(0, "Service UUID: 0x%#04x\n", service_uuid.uuid); SEGGER_RTT_printf(0, "Service UUID type: 0x%#02x\n", service_uuid.type); SEGGER_RTT_printf(0, "Service handle: 0x%#04x\n", p_our_service->service_handle); }
Also, I configured the RAM size and start address for the new service. I have also set the NRF_SDH_BLE_VS_UUID_COUNT 1
Do I miss something?