Hi,
I am using the two units talking with each other for the BLE uart.
One is running with the example ble_app_uart_c_central. The other is running with the ble_app_uart_peripheral. Both example based on the SDK version nRF5_SDK_17.0.2_d674dde.
It was working fine, when I am using them in the orginal mode for the sensor data streaming.
But, when I did some changes to it, to make both of them into the long range mode with 8dbm and coded mode. The connection is fine, but when I sending more data will make the peripheral fails. When I debugging on it, I find was the data I send is too long or too much.
Here is some code and error added
In the peripheral side, when it call the intrruption function "void in_pin_handler(void)" been called for each 20 seconds, in each call it sending the bluetooth package to the centeral unit by the function "void niklas_ble_send_array_handler(void)". when the package is big, for example size is 70 as below the parameter set, then comes out memory issues.
ble_tx_buffer_acc_len=70;
ble_tx_buffer_ang_len=70;
code as below
void niklas_ble_send_array_handler(void) { uint32_t err_code; #ifdef DEBUG_BLE_SEND_DEBUG printf("G1 \r\n");nrf_delay_ms(1); #endif if(ble_tx_buffer_acc_len<BLE_NUS_MAX_DATA_LEN) { do { err_code = ble_nus_data_send(&m_nus, ble_tx_buffer_acc, &ble_tx_buffer_acc_len, m_conn_handle); if ((err_code != NRF_ERROR_INVALID_STATE) && (err_code != NRF_ERROR_RESOURCES) && (err_code != NRF_ERROR_NOT_FOUND)) { APP_ERROR_CHECK(err_code); } } while (err_code == NRF_ERROR_RESOURCES); } #ifdef DEBUG_BLE_SEND_DEBUG printf("G2 \r\n");nrf_delay_ms(1); #endif if(ble_tx_buffer_acc_len<BLE_NUS_MAX_DATA_LEN) { do { err_code = ble_nus_data_send(&m_nus, ble_tx_buffer_ang, &ble_tx_buffer_ang_len, m_conn_handle); if ((err_code != NRF_ERROR_INVALID_STATE) && (err_code != NRF_ERROR_RESOURCES) && (err_code != NRF_ERROR_NOT_FOUND)) { APP_ERROR_CHECK(err_code); } } while (err_code == NRF_ERROR_RESOURCES); } #ifdef DEBUG_BLE_SEND_DEBUG printf("G3 \r\n");nrf_delay_ms(1); #endif } void in_pin_handler(void) { //nrf_drv_gpiote_out_toggle(PIN_OUT); printf("INTC\n");nrf_delay_ms(1); uint8_t k=0; uint32_t err_code; uint8_t channel; k=read_out_FIFO_float(); bsp_board_led_invert(BSP_BOARD_LED_2); #ifdef DEBUG_FIFO_SIZE_INSIDE printf("P3:%d\n", k);nrf_delay_ms(1); printf("s_connected=%d\n",status_connected);nrf_delay_ms(1); #endif #ifdef DEBUG_BLE_SEND_DEBUG printf("ble_tx_buffer_acc_len=%d\n",ble_tx_buffer_acc_len);nrf_delay_ms(1); printf("ble_tx_buffer_ang_len=%d\n",ble_tx_buffer_ang_len);nrf_delay_ms(1); printf("BLE_NUS_MAX_DATA_LEN=%d\n",BLE_NUS_MAX_DATA_LEN);nrf_delay_ms(1); #endif //if((status_connected==1)&&(status==9)){niklas_ble_send_handler();} if((status_connected==1)&&(status==9)) { #ifdef LONG_RANGE_HIGH_SPEED_BLE_STREAMING_SLOW ble_tx_buffer_acc_len=70; ble_tx_buffer_ang_len=70; #endif niklas_ble_send_array_handler(); //reference https://www.jianshu.com/p/c81c576bbdf5 /* err_code =sd_ble_gap_rssi_get(m_conn_handle,&rssi_value,&channel); printf("RSSI=%d\n",rssi_value);nrf_delay_ms(1); APP_ERROR_CHECK(err_code); */ } }