Hello,
i have built my own custom service.
I have 13 characteristics ....
But in NRF Connect on an iphone, i can see 13 characteristics , but only in the first there data.
Any hints, Idea's
regards Andreas
StrDesc[i] , StrData[i are String Arrays
-> Handles ble_gatts_char_handles_t custom_value_handlex[13];
uint32_t ble_cus_init(ble_cus_t * p_cus, const ble_cus_init_t * p_cus_init)
{
if (p_cus == NULL || p_cus_init == NULL)
{
return NRF_ERROR_NULL;
}
int i ;
uint32_t err_code;
ble_uuid_t ble_uuid;
// Initialize service structure
p_cus->evt_handler = p_cus_init->evt_handler;
p_cus->conn_handle = BLE_CONN_HANDLE_INVALID;
// Add Custom Service UUID
ble_uuid128_t base_uuid = {CUSTOM_SERVICE_UUID_BASE};
err_code = sd_ble_uuid_vs_add(&base_uuid, &p_cus->uuid_type);
ble_uuid.type = p_cus->uuid_type;
ble_uuid.uuid = CUSTOM_SERVICE_UUID;
// Add the Custom Service
err_code = sd_ble_gatts_service_add(BLE_GATTS_SRVC_TYPE_PRIMARY, &ble_uuid, &p_cus->service_handle);
if (err_code != NRF_SUCCESS)
{
return err_code;
}
for ( i = 0 ; i < 13 ; i++ )
custom_value_char_add2(p_cus, p_cus_init , StrDesc[i] , StrData[i] , i );
return NRF_SUCCESS ;
}
static uint32_t custom_value_char_add2(ble_cus_t * p_cus, const ble_cus_init_t * p_cus_init , char *Str , char *Str2, uint8_t p)
{
uint32_t err_code;
ble_gatts_char_md_t char_md;
ble_gatts_attr_md_t cccd_md;
ble_gatts_attr_t attr_char_value;
ble_uuid_t ble_uuid;
ble_gatts_attr_md_t attr_md;
// Add Custom Value characteristic
memset(&cccd_md, 0, sizeof(cccd_md));
// Read operation on cccd should be possible without authentication.
BLE_GAP_CONN_SEC_MODE_SET_OPEN(&cccd_md.read_perm);
BLE_GAP_CONN_SEC_MODE_SET_OPEN(&cccd_md.write_perm);
cccd_md.write_perm = p_cus_init->custom_value_char_attr_md.cccd_write_perm;
cccd_md.vloc = BLE_GATTS_VLOC_STACK;
memset(&char_md, 0, sizeof(char_md));
char_md.char_props.read = 1;
char_md.char_props.write = 0;
char_md.char_props.notify = 0;
char_md.p_char_user_desc = Str;
char_md.char_user_desc_size = strlen(Str) ;
char_md.char_user_desc_max_size = strlen(Str) ;
char_md.p_char_pf = NULL;
char_md.p_user_desc_md = NULL;
char_md.p_cccd_md = &cccd_md;
char_md.p_sccd_md = NULL;
ble_uuid.type = p_cus->uuid_type;
ble_uuid.uuid = CUSTOM_VALUE_CHAR_UUID;
memset(&attr_md, 0, sizeof(attr_md));
attr_md.read_perm = p_cus_init->custom_value_char_attr_md.read_perm;
attr_md.write_perm = p_cus_init->custom_value_char_attr_md.write_perm;
attr_md.vloc = BLE_GATTS_VLOC_STACK;
attr_md.rd_auth = 0;
attr_md.wr_auth = 0;
attr_md.vlen = 0;
memset(&attr_char_value, 0, sizeof(attr_char_value));
attr_char_value.p_uuid = &ble_uuid;
attr_char_value.p_attr_md = &attr_md;
attr_char_value.init_len = strlen(Str2);
attr_char_value.init_offs = 0;
attr_char_value.max_len = strlen(Str2);
attr_char_value.p_value = Str2 ;
err_code = sd_ble_gatts_characteristic_add(p_cus->service_handle, &char_md,
&attr_char_value,
&custom_value_handlex[p]);
if (err_code != NRF_SUCCESS)
{
return err_code;
}
return NRF_SUCCESS;
}