Hi all, I'm developing nRF52832.
My goal is to send ADC data to central device using BLE.
Below is part of my code.
#define SAMPLES_IN_BUFFER 123 #define NO_OF_SAADC_BUFFER 2 static uint8_t adc_ble_notify_size = SAMPLES_IN_BUFFER * sizeof(uint16_t); void saadc_callback(nrf_drv_saadc_evt_t const * p_event) { if (p_event->type == NRF_DRV_SAADC_EVT_DONE) { ret_code_t err_code; buffer_number ^= 0x02; //XOR saadc_event_callback = true; err_code = nrf_drv_saadc_buffer_convert(p_event->data.done.p_buffer, SAMPLES_IN_BUFFER); APP_ERROR_CHECK(err_code); } } uint32_t ble_fs_send_adc_data(uint16_t conn_handle, ble_fs_t * p_fs, uint8_t * p_data, uint16_t length) { ble_gatts_hvx_params_t params; uint16_t len = length; //p_fs->bytes_sent += len; memset(¶ms, 0, sizeof(params)); params.type = BLE_GATT_HVX_NOTIFICATION; params.handle = p_fs->adc_char_handles.value_handle; params.p_data = p_data; params.p_len = &len; return sd_ble_gatts_hvx(conn_handle, ¶ms); } Below is part of main function. for (;;) { if (saadc_event_callback) { ble_fs_send_adc_data(m_conn_handle, &m_ble_fs, &(adc_buffer.m_buffer_ble[buffer_number * adc_ble_notify_size]), adc_ble_notify_size); ble_fs_send_adc_data(m_conn_handle, &m_ble_fs, &(adc_buffer.m_buffer_ble[(buffer_number * adc_ble_notify_size) + (adc_ble_notify_size)]), adc_ble_notify_size); saadc_event_callback = false; } idle_state_handle(); }
Maximum MTU size is 251.
I sent data in 16-bit form, so when I receive in mobile, it looks like '(0x) 00-00-00-00-00....' for example.
That means, if I want to send 123 numbers in 16-bit form, I should get 123X2 8-bit numbers.
However, I got only 243 8-bit numbers.
Not only 123, but also for 'n' 16-bit numbers. I always get nX2-3 8-bit numbers.
So, I loss 1 complete 16-bit number and half of a 16-bit number.
Is there any recommendation for this problem? I cannot figure out how to fix it...
Best regards,