Hello,
I am trying to modify the ble_app_uart code so that my peripheral can send data automatically to the central, which in turn can print it on a computer through UART. What I mean is that instead of the ble_nus_string_send() command being called when I press enter, I want the peripheral to send a number automatically from the main.
This is the code I'm using for sending the number in the peripheral, which prints the value of number correct starting at 1:
uint8_t number = 0; uint8_t data[20]; for (;;) { number = number + 1; sprintf((char *)data, "%d", number); ble_nus_string_send(&m_nus, data, sizeof(data)); }
This is the code in the central, in the case that BLE_NUS_C_EVT_NUS_TX_EVT happens it calls this function:
static void ble_nus_chars_received_uart_print(uint8_t * p_data, uint16_t data_len) { ret_code_t ret_val; NRF_LOG_DEBUG("Receiving data."); NRF_LOG_HEXDUMP_DEBUG(p_data, data_len); for (uint32_t i = 0; i < data_len; i++) { do { ret_val = app_uart_put(p_data[i]); if ((ret_val != NRF_SUCCESS) && (ret_val != NRF_ERROR_BUSY)) { NRF_LOG_ERROR("app_uart_put failed for index 0x%04x.", i); APP_ERROR_CHECK(ret_val); } } while (ret_val == NRF_ERROR_BUSY); } if (p_data[data_len-1] == '\r') { while (app_uart_put('\n') == NRF_ERROR_BUSY); } }
As far as I know, with the ble_nus_string_send the central should receive and print the number on the other PC. From what I know, the central enters ble_nus_c_evt_handler to establish connection but the NUS_TX_EVT is not being called.
How can I fix this? Or is there a better way to send a number from the peripheral and have the central simply print it to UART?
I'm using NRF52832 and S132.