I have modified the template's code so ble_advertising_init should setup manufacturer data, once I have this assignment:
advdata.p_manuf_specific_data = &manuf_data;
then a call to ble_advertising_init fails with error code 0x0000000C but the documentation for that function doesn't say anything about that error, how do I figure out what 0x0C means in this case? I suspect I will have a lot cases like this when the doc is silent about the error so would be good to have really reliable way to find the meaning for the errors.
Below is my function which will fail if the above line is present, if it is commented out then the function returns NRF_SUCCESS
static void advertising_init(void)
{
uint32_t err_code;
ble_advdata_t advdata;
ble_adv_modes_config_t options;
// Build advertising data struct to pass into @ref ble_advertising_init.
memset(&advdata, 0, sizeof(advdata));
// *** Manufacturer Data *******
ble_advdata_manuf_data_t manuf_data; // Variable to hold manufacturer specific data
memset(&manuf_data, 0, sizeof(manuf_data));
#define MyData "SomeData!" // Our data to adverise
manuf_data.company_identifier = 0x0059; // Nordics company ID
manuf_data.data.p_data = (uint8_t *)MyData;
manuf_data.data.size = strlen(MyData);
// *** Manufcaturer Data ***
advdata.name_type = BLE_ADVDATA_SHORT_NAME;
advdata.p_manuf_specific_data = &manuf_data;
advdata.short_name_len = 6;
advdata.include_appearance = true;
advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE;
advdata.uuids_complete.uuid_cnt = sizeof(m_adv_uuids) / sizeof(m_adv_uuids[0]);
advdata.uuids_complete.p_uuids = m_adv_uuids;
memset(&options, 0, sizeof(options));
options.ble_adv_fast_enabled = true;
options.ble_adv_fast_interval = APP_ADV_INTERVAL;
options.ble_adv_fast_timeout = APP_ADV_TIMEOUT_IN_SECONDS;
err_code = ble_advertising_init(&advdata, NULL, &options, on_adv_evt, NULL);
APP_ERROR_CHECK(err_code);
}
I looked into the Keil's debugger to observe what manuf_data.data contain in size and p_data and the values there seem correct to me: the size = 9 the pointers points to a string SomeData!