There's an if statement in `ble_advertising_init` around setting the scan response data which never evaluates false:
uint32_t ble_advertising_init(ble_advertising_t * const p_advertising, ble_advertising_init_t const * const p_init) { ... if (&p_init->srdata != NULL) { p_advertising->adv_data.scan_rsp_data.p_data = p_advertising->enc_scan_rsp_data; p_advertising->adv_data.scan_rsp_data.len = BLE_GAP_ADV_SET_DATA_SIZE_MAX; ret = ble_advdata_encode(&p_init->srdata, p_advertising->adv_data.scan_rsp_data.p_data, &p_advertising->adv_data.scan_rsp_data.len); VERIFY_SUCCESS(ret); } else { p_advertising->adv_data.scan_rsp_data.p_data = NULL; p_advertising->adv_data.scan_rsp_data.len = 0; } ... }
The comparison of `&p_init->sr_data != NULL` will never evaluate false since sr_data is a concrete struct (not struct pointer!) within ble_advertising_init_t and the address of the struct member is part of the comparison. With this statement I'd expect sr_data to be of type `ble_advdata_t*` and the `&` removed from the comparison