Hi all, I'm developing nRF52840-DK to use it as an central device.
Base example is usbd_ble_uart: I'm going to communicate with peripheral device using BLE, and control central device by connect it to PC. (Also central device send data to PC)
Diagram: Peripheral <---> Central <---> PC
BLE USB
So I modified code, and check that my command from PC went through Central device and central sent data to peripheral device, successfully.
However, I have problem on opposite part: receiving data from central to PC.
When I turn on PUTTY, received data are shown like this. I don't know how to fix it.
Data format from peripheral device to central: uint8_t array, with size of 243: Peripheral is nrf52832, and it sends ADC data.
I checked that peripheral device works well (checked through nrf connect app)
And here's my code related to BLE receiving part (central device)
static void ble_nus_c_evt_handler(ble_nus_c_t * p_ble_nus_c, ble_nus_c_evt_t const * p_ble_nus_evt) //check { ret_code_t err_code; switch (p_ble_nus_evt->evt_type) { case BLE_NUS_C_EVT_DISCOVERY_COMPLETE: //NRF_LOG_INFO("Discovery complete."); err_code = ble_nus_c_handles_assign(p_ble_nus_c, p_ble_nus_evt->conn_handle, &p_ble_nus_evt->handles); APP_ERROR_CHECK(err_code); err_code = ble_nus_c_tx_notif_enable(p_ble_nus_c); APP_ERROR_CHECK(err_code); //NRF_LOG_INFO("Connected to device with Nordic UART Service."); NRF_LOG_RAW_INFO("Connected to device.\r\n"); break; case BLE_NUS_C_EVT_NUS_TX_EVT: //NRF_LOG_INFO("Received data\r\n"); nus_data_handler(p_ble_nus_evt->p_data, p_ble_nus_evt->data_len); break; case BLE_NUS_C_EVT_DISCONNECTED: //NRF_LOG_INFO("Disconnected.\r\n"); scan_start(); break; } } static void nus_data_handler(uint8_t * p_data, uint16_t data_len) //check { bsp_board_led_invert(LED_BLE_NUS_RX); NRF_LOG_RAW_INFO("Received data from BLE NUS. Writing data on CDC ACM.\r\n"); NRF_LOG_HEXDUMP_DEBUG(p_data, data_len); memcpy(m_nus_data_array, p_data, data_len); // Add endline characters uint16_t length = data_len; if (length + sizeof(ENDLINE_STRING) < BLE_NUS_MAX_DATA_LEN) { memcpy(m_nus_data_array + length, ENDLINE_STRING, sizeof(ENDLINE_STRING)); length += sizeof(ENDLINE_STRING); } // Send data through CDC ACM ret_code_t ret = app_usbd_cdc_acm_write(&m_app_cdc_acm, m_nus_data_array, length); if(ret != NRF_SUCCESS) { NRF_LOG_RAW_INFO("CDC ACM unavailable, data received: %s\r\n", m_nus_data_array); } }
I used codes of ble_app_uart example also, so function names are related to NUS haha.
Thanks for looking this.
I wish I can get nice advice.