This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

custom 128-bit UUID for advertise

Hi! I try to send data using advertise PDU and I need use custom 128 UUID. How to convert to right format service_128_uuid and replace 16-bit value to init.advdata.p_service_data_array->service_uuid?

static void advertising_init(void)
{
 uint32_t               err_code;
 ble_advertising_init_t init;
 uint8_t       service_data[6] = {1,2,3,1,2,3};
 uint8_t       service_data_size = sizeof(service_data)/sizeof(service_data[0]);
 ble_uuid128_t   service_128_uuid = {{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
                             0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99}};  

ble_advdata_service_data_t service_struct;

memset(&init, 0, sizeof(init));

init.advdata.name_type          = BLE_ADVDATA_FULL_NAME;
init.advdata.include_appearance = false;
init.advdata.flags              = BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE;

// 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.advdata.p_service_data_array = &service_struct;    
init.advdata.p_service_data_array->service_uuid = 0xFE86;
init.advdata.p_service_data_array->data.p_data = service_data;
init.advdata.p_service_data_array->data.size   = service_data_size;
init.advdata.service_data_count = 1;

init.config.ble_adv_fast_enabled  = true;
init.config.ble_adv_fast_interval = APP_ADV_INTERVAL;
init.config.ble_adv_fast_timeout  = APP_ADV_TIMEOUT_IN_SECONDS;

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);
}
Related