Hello
I'm using SDK 15, S132 PCA10040
I have followed this tut.
I've tried 2 scenarios which in both I get error value:
1. when advertising_init() is before services_init() then advertising_init()->ble_advertising_init()->ble_advdata_set->()ble_advdata_encode() returns NRF_ERROR_INVALID_PARAM (#7).
2. when services_init() is before advertising_init() then advertising_init()->ble_advertising_init()->ble_advdata_set->()sd_ble_gap_adv_data_set() returns NRF_ERROR_INVALID_ADDR (#16).
I've been looking in few FAQ's but couldn't find the answer.
Application's definitions and declaration:
#define BLE_UUID_OUR_BASE_UUID {0xD8,0xD0,0xAA,0x28,0x10,0x7E,0x58,0x73,0x30,0xF0,0x5E,0x9A,0xFB,0xCA,0x13,0x89} #define BLE_UUID_OUR_SERVICE 0x04AE static ble_uuid_t m_adv_uuids[] = /**< Universally unique service identifiers. */ { {BLE_UUID_OUR_SERVICE, BLE_UUID_TYPE_VENDOR_BEGIN} };
services_init() and our_service_init() functions
static void services_init(void) { ret_code_t err_code; nrf_ble_qwr_init_t qwr_init = {0}; // Initialize Queued Write Module. qwr_init.error_handler = nrf_qwr_error_handler; err_code = nrf_ble_qwr_init(&m_qwr, &qwr_init); APP_ERROR_CHECK(err_code); our_service_init(m_adv_uuids); } void our_service_init(ble_uuid_t * p_our_service) { uint32_t err_code;// Variable to hold return codes from library and softdevice functions // OUR_JOB: Declare 16-bit service and 128-bit base UUIDs and add them to the BLE stack ble_uuid_t service_uuid; ble_uuid128_t base_uuid = BLE_UUID_OUR_BASE_UUID; service_uuid.uuid = BLE_UUID_OUR_SERVICE; err_code = sd_ble_uuid_vs_add(&base_uuid, &service_uuid.type); APP_ERROR_CHECK(err_code); }
advertising_init() function:
static void advertising_init(void) { ret_code_t err_code; ble_advertising_init_t init; memset(&init, 0, sizeof(init)); init.advdata.name_type = BLE_ADVDATA_FULL_NAME; init.advdata.include_appearance = true; init.advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE; init.advdata.uuids_complete.uuid_cnt = sizeof(m_adv_uuids) / sizeof(m_adv_uuids[0]); init.advdata.uuids_complete.p_uuids = m_adv_uuids; init.srdata.uuids_complete.uuid_cnt = sizeof(m_adv_uuids) / sizeof(m_adv_uuids[0]); init.srdata.uuids_complete.p_uuids = m_adv_uuids; init.config.ble_adv_fast_enabled = true; init.config.ble_adv_fast_interval = APP_ADV_INTERVAL; init.config.ble_adv_fast_timeout = APP_ADV_DURATION; init.evt_handler = on_adv_evt; err_code = ble_advertising_init(&m_advertising, &init); APP_ERROR_CHECK(err_code); ble_advertising_conn_cfg_tag_set(&m_advertising, APP_BLE_CONN_CFG_TAG); }
Please help me understand what is wrong here.
Thanks in advance.