Hello.
It is developed using nrf52832 (S132 v7.0.1, SDK v17.0.0) as a peripheral device.
I'm trying to characteristically add BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME and BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE.
However, characteristic_add (sd_ble_gatts_characteristic_add) gives an NRF_ERROR_FORBIDDEN error. How can it be solved?
static uint16_t m_service_handle; /**< Handle of local service (as provided by the BLE stack).*/
static ble_gatts_char_handles_t m_char_handles[2]; /**< Handles of local characteristic (as provided by the BLE stack).*/
#define BLE_UUID_SERVICE_BASE {0xHH, 0xHH, 0xGG, 0xGG, 0xFF, 0xFF, 0xEE, 0xEE, 0xDD, 0xDD, 0xCC, 0xCC, 0xBB, 0xBB, 0xAA, 0xAA}
#define BLE_ADV_UUID_SERVICE 0xABCD
#define BLE_UUID_CHAR 0xEFGH
/**
* @brief DEVICE NAME CHARACTERISTIC
*
*/
static ble_add_char_params_t char_device_name =
{
.uuid = BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME,
.uuid_type = 0x00,
.max_len = 248,
.init_len = 248,
.p_init_value = NULL,
.is_var_len = false,
.char_props.read = 1,
.read_access = SEC_OPEN,
};
/**
* @brief APPEARANCE CHARACTERISTIC
*
*/
static ble_add_char_params_t char_appearance =
{
.uuid = BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE,
.uuid_type = 0x00,
.max_len = 2,
.init_len = 2,
.is_var_len = false,
.char_props.read = 1,
.read_access = SEC_OPEN,
};
static void services_init(void)
{
ble_uuid128_t base_uuid = {BLE_UUID_SERVICE_BASE};
ble_uuid_t service_uuid;
ret_code_t err_code;
service_uuid.uuid = BLE_ADV_UUID_SERVICE;
err_code = sd_ble_uuid_vs_add(&base_uuid, &service_uuid.type);
APP_ERROR_CHECK(err_code);
err_code = sd_ble_gatts_service_add(BLE_GATTS_SRVC_TYPE_PRIMARY, &service_uuid, &m_service_handle);
APP_ERROR_CHECK(err_code);
characteristic_init();
return;
}
static void characteristic_init(void)
{
ble_uuid_t char_uuid;
ret_code_t err_code;
err_code = characteristic_add(m_service_handle, &char_device_name, &m_char_handles[0]);
APP_ERROR_CHECK(err_code);
err_code = characteristic_add(m_service_handle, &char_appearance, &m_char_handles[1]);
APP_ERROR_CHECK(err_code);
return;
}
Best regards.