Good evening,
I am trying to implement queued write (long write) into ble_app_uart example. I am using s110_v7.1, nrf51822(pca10028), can not find version of sdk it is one of the older ones, probably sdk6.
This is how BLE events ar handled:
case BLE_EVT_USER_MEM_REQUEST:
mem_block.len = QUEUED_WRITE_BUFFER_SIZE;
mem_block.p_mem = &queued_write_buffer[0];
err_code = sd_ble_user_mem_reply(m_conn_handle, &mem_block);
//simple_uart_putstring("User mem request \r\n");
if (err_code != NRF_SUCCESS)
{
sprintf((char*)debug_string11,"ERROR USER_MEM_REQ\r\n");
simple_uart_putstring(debug_string11);
}
else
{
sprintf((char*)debug_string11,"USER_MEM_REQUEST OK\r\n");
simple_uart_putstring(debug_string11);
}
break;
case BLE_EVT_USER_MEM_RELEASE:
if ((p_ble_evt->evt.common_evt.params.user_mem_release.mem_block.p_mem == mem_block.p_mem)&&(p_ble_evt->evt.common_evt.params.user_mem_release.mem_block.len == mem_block.len))
{
//memory released do nothing.
//simple_uart_putstring("User mem released \r\n");
sprintf((char*)debug_string13,"USER_MEM_REQUEST OK\r\n");
simple_uart_putstring(debug_string13);
}
break;
case BLE_GATTS_EVT_WRITE:
//simple_uart_putstring("Evt Write \r\n");
sprintf((char*)debug_string10,"BLE_GATTS_EVT_WRITE\r\n");
simple_uart_putstring(debug_string10);
break;
These are passed to the events:
#define QUEUED_WRITE_BUFFER_SIZE 350
static uint8_t queued_write_buffer[QUEUED_WRITE_BUFFER_SIZE];
static ble_user_mem_block_t mem_block;
This is what I receive in nrf sniffer:
This is from nrf connect app in my tablet:
Could not find what is the problem of error in dev zone, nor in the net. If there is lack of information let me know. Thank you.
-------------------------------------------------------UPDATE-----------------------------------------
Have found that I havent changed where I am puttin characteristics in tx_char_add and rx_char_add. I have them changed to:
//MODIFIED************************************************************************
attr_md.vloc = BLE_GATTS_VLOC_USER;//BLE_GATTS_VLOC_STACK;
//********************************************************************************
//MODIFIED************************************************************************
attr_char_value.max_len = QUEUED_WRITE_BUFFER_SIZE;//BLE_NUS_MAX_RX_CHAR_LEN
//********************************************************************************
Now I see that characteristics <20 and >20 size of bytes are sent without error. Unfortunately, if I receive something from pca10028 tablet do not recognise symbols. In addition to this, in nus service I have made that every received characteristic will be replied with somekind of response. Right now I do not receive any response from pca10028 if received characteristic exceeds 20 bytes. here are screenshot of tablet:
this is my logg in UART:
sniff of long write: was it successful???
what are your oppinions why I do I receive those "? ? ? ?" instead of my reply? why I do not receive response in table exceeding 20 bytes?