Hello,
I successfully merge example libuarte and ble_app_beacon and built .
My problem started after it receive 48 bytes of data from sensor via uart ,This is my area of doubt .
In nrf connect android app I am able to see data but it is not changing .
For verification I try to debug and in debug terminal also I found it is advertising once.
for reference ,I am adding debug terminal snapshot below.
In debug terminal one can clearly see that it is running but not going to update function.
I am attaching my uart read and advertise update function below.
void uart_event_handler(void * context, nrf_libuarte_async_evt_t * p_evt)
{
nrf_libuarte_async_t * p_libuarte = (nrf_libuarte_async_t *)context;
ret_code_t ret;
switch (p_evt->type)
{
case NRF_LIBUARTE_ASYNC_EVT_ERROR:
bsp_board_led_invert(0);
break;
case NRF_LIBUARTE_ASYNC_EVT_RX_DATA:
strcat(rx_buffer,p_evt->data.rxtx.p_data);
nrf_libuarte_async_rx_free(p_libuarte, p_evt->data.rxtx.p_data, p_evt->data.rxtx.length);
break;
default:
break;
}
}
static void adv_update_timeout_handler(void * p_context)
{
UNUSED_PARAMETER(p_context);
uint32_t err_code;
static uint32_t major_value;
static uint32_t minor_value;
static uint32_t raw_value;
static uint8_t raw_1,raw_2,raw_3,raw_4,raw_5;
static uint8_t val,val1,val2,val3,val4,val5,val6,val7;
uint8_t index = MAJ_VAL_OFFSET_IN_BEACON_INFO;
m_adv_data.adv_data.len = BLE_GAP_ADV_SET_DATA_SIZE_MAX;
/* Increment the Beacon's Major value as a test to demonstrate that we can update payload
while advertising */
raw_1=rx_buffer[2]-48;
raw_2=rx_buffer[3]-48;
raw_3=rx_buffer[4]-48;
raw_4=rx_buffer[5]-48;
raw_5=rx_buffer[6]-48;
raw_value = ((raw_1*10000)+(raw_2*1000)+(raw_3*100)+(raw_4*10)+raw_5);
raw_value = raw_value/8;
val=rx_buffer[22]-48;
val1=rx_buffer[23]-48;
val2=rx_buffer[24]-48;
val3=rx_buffer[25]-48;
major_value = ((val*1000)+(val1*100)+(val2*10)+val3);
//major_value = (major_value/16);
val4=rx_buffer[10]-48;
val5=rx_buffer[11]-48;
val6=rx_buffer[12]-48;
val7=rx_buffer[13]-48;
minor_value = ((val4*1000)+(val5*100)+(val6*10)+val7);
//minor_value = minor_value/128;
m_beacon_info[index++] = MSB_16(raw_value);
m_beacon_info[index++] = LSB_16(raw_value);
m_beacon_info[index++] = MSB_16(major_value);
m_beacon_info[index++] = LSB_16(major_value);
m_beacon_info[index++] = MSB_16(minor_value);
m_beacon_info[index++] = LSB_16(minor_value);
/* Swap adv data buffer - from API doc: "In order to update advertising
data while advertising,new advertising buffers must be provided" */
m_adv_data.adv_data.p_data =
(m_adv_data.adv_data.p_data == m_enc_advdata[0]) ? m_enc_advdata[1] : m_enc_advdata[0];
err_code = ble_advdata_encode(&m_adv_data_params, m_adv_data.adv_data.p_data, &m_adv_data.adv_data.len);
APP_ERROR_CHECK(err_code);
err_code = sd_ble_gap_adv_set_configure(&m_adv_handle, &m_adv_data, NULL);
APP_ERROR_CHECK(err_code);
//memset(rx_buffer,0,sizeof(rx_buffer));
NRF_LOG_INFO("Advertising payload updated. New Major value is 0x%x", major_value);
}
Thanks in advance for your time and efforts.
Ram