Beware that this post is related to an SDK in maintenance mode
More Info: Consider nRF Connect SDK for new designs
This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Ble_nus characters not sent to emStudio Terminal using ble_app_uart_c

I am using SDK v15.3 and modifying the ble_app_uart_c example to setup ble_nus connection between nRF DK board and a custom peripheral.  I can use nRF Connect to send and receive various length hex strings to/from the peripheral device.  When using ble_app_uart_c and nRF DK I can see the uart transmit buffer created in main.c has the correct information in it but the peripheral device doesn't respond to the data.  How do I find out if the buffer is actually being sent?  I traced through the ble_nus_c_string_send() function in main.c and it seems to be working.

Also, I do not get any hex characters displayed on the terminal emulator from the peripheral device. The peripheral device sends a hex string every 3 seconds. 

Parents
  • It turns out that the "hex" values are actually converted to "ASCII" values.  Now the question is... How do I send hex values through SES's emTerminal?   

  • You can use the NRF_LOG_HEXDUMP_INFO(p_data, len) macro for printing the hex values. But they are converted to ASCII to make it readable in the terminal. Is that not what you want?  

  • No. I am entering a hex string into the emStudio Terminal to be sent to the peripheral device.  emStudio is entering the characters that I enter into the transmit buffer as ASCII characters.  The peripheral device requires hex data to be sent, not ASCII.  I am trying to send a string like "fdfc038300651c" I've tried preceding these characters with a "0x" but the transmit  buffer is filled with the ASCII equivalent characters of "66 64 66 63 30 33 38 33 30 30 36 35 31 63".  I wrote a routine to try to convert the ASCII characters in the FIFO buffer to hex values but it causes some odd behavior with the application.  If you can tell me how to send raw hex values over the BLE NUS connection from the terminal session, that would help.  

  • Are you referring to the debug terminal in SES that displays debug messages from Segger RTT, and are you using RTT instead of UART to transfer the data? Anyway, I think it would be better to try a more advanced serial client like RealTerm which allow you to specify arbitrary values.  

  • I am using the Segger emTerminal to enter information that I want sent over the BLE NUS service to the peripheral device.  I am using the Segger RTT debug messaging to do a HexDump of the UART transmit buffer.  This buffer contains the ASCII character representation of the hex characters that I am trying to send to the peripheral device as hex.  I will try RealTerm to see if it transmits raw hex values.  However, I would like to find a function in your source that does convert ASCII characters to hex.  When I try to do this, the uart_event_handle() routine in main.c of the ble_app_uart_c example, to my surprise, it causes the routine to be called with every character I type as opposed to actually waiting for the buffer to be filled before calling the routine. I added my code under the first case statement: case APP_UART_DATA_READY: UNUSED_VARIABLE(app_uart_get(&data_array[index])); and the case statement is triggered with every character entered in the emTerminal.  I need the buffer to be full in order to convert the characters from the ASCII representation to raw hex.  

    If you can direct me as to how and where I can intercept the ASCII characters so I can convert them to hex in the transmit buffer, I would appreciate it.

Reply
  • I am using the Segger emTerminal to enter information that I want sent over the BLE NUS service to the peripheral device.  I am using the Segger RTT debug messaging to do a HexDump of the UART transmit buffer.  This buffer contains the ASCII character representation of the hex characters that I am trying to send to the peripheral device as hex.  I will try RealTerm to see if it transmits raw hex values.  However, I would like to find a function in your source that does convert ASCII characters to hex.  When I try to do this, the uart_event_handle() routine in main.c of the ble_app_uart_c example, to my surprise, it causes the routine to be called with every character I type as opposed to actually waiting for the buffer to be filled before calling the routine. I added my code under the first case statement: case APP_UART_DATA_READY: UNUSED_VARIABLE(app_uart_get(&data_array[index])); and the case statement is triggered with every character entered in the emTerminal.  I need the buffer to be full in order to convert the characters from the ASCII representation to raw hex.  

    If you can direct me as to how and where I can intercept the ASCII characters so I can convert them to hex in the transmit buffer, I would appreciate it.

Children
No Data
Related