uint32_t ble_cus_sensor_state_update(ble_cus_t * p_cus, int8_t * p_buttons_states, int length, uint16_t conn_handle)
{
ble_gatts_hvx_params_t params;
uint16_t len = length;
uint32_t err_code;
memset(¶ms, 0, sizeof(params));
params.type = BLE_GATT_HVX_NOTIFICATION;//BLE_GATT_HVX_NOTIFICATION;
params.handle = p_cus->leds_states_char_handles.value_handle;
params.p_data = p_buttons_states;
params.p_len = &len;
return sd_ble_gatts_hvx(conn_handle, ¶ms);
}
void ble_cus_send_sensor_data(uint8_t *data, uint16_t len)
{
ret_code_t err_code;
uint32_t timer = millis();
do{
err_code = ble_cus_sensor_state_update(&m_cus, data, len, m_conn_handle);
}while(err_code == BLE_ERROR_GATTS_SYS_ATTR_MISSING && millis() - timer < 3000 && (err_code == NRF_ERROR_RESOURCES));
if ( err_code != NRF_SUCCESS &&
err_code != BLE_ERROR_INVALID_CONN_HANDLE &&
err_code != NRF_ERROR_INVALID_STATE &&
/* (err_code != NRF_ERROR_RESOURCES) &&*/
err_code != BLE_ERROR_GATTS_SYS_ATTR_MISSING)
{
APP_ERROR_CHECK(err_code);
}
}
void send_current_data(void)
{
printf("Sending current data \n");
for(int i=0;i<500;i++)
{
memset(lv_data_header,0,sizeof(lv_data_header));
lv_data_header[0] =0xFF;
lv_data_header[0] =i;
ble_cus_send_sensor_data(lv_data_header, 2);
if( m_ble_cust_packet_sent == true)
{
printf("Sending current data packet %d \n",i);
ble_cus_send_sensor_data(lv_data_header, 2);
}
}
}
void cus_evt_handler(ble_cus_t * p_cus, ble_cus_evt_t * p_evt)
{
uint8_t u8_cmd_id = 0;
switch(p_evt->evt_type)
{
case BLE_LEDS_STATES_CHAR_EVT_COMMAND_RX:
{
if(p_evt->params_command.command_data.p_data[0] == 0XFD)
{
send_current_data();
}
}
}
Hi Nordic team
Currently I am trying to send a big chunk of data close to 100 KB from my nRF52832 to nRF connect for mobile app in Android phone. I am able to send few bytes in one shot. But when I kept a loop for sending more than 10 data packets, my code is getting stuck in while loop and sd_ble_gatts_hvx returns NRF_ERROR_RESOURCES error. After that my application is stuck until I restart the application. It is not accepting any new command and stops sending the data.
I already change hvn_tx_queue_size = 20 and NRF_SDH_BLE_GAP_EVENT_LENGTH to 20 even to larger number , but still it doesn't resolve the issue.
Also it is blocking BLE_GATTS_EVT_HVN_TX_COMPLETE event handler. So I am unable to understand if the queue buffer resource is empty or not.