I went through HAL UART APIs however am not able to understand how to receive 
UART data.

Is there any example out there which would tell me how to use the relevant 
functions (hal_uart_start_rx ? ) so that we can receive binary data over UART ?

Any help is much appreciated.

Thanks,
Aditya Xavier.


> On 21-Apr-2018, at 8:44 PM, Aditya Xavier <[email protected]> wrote:
> 
> Could you specifically point how to use the uart driver interface?
> 
> I’ll look at how to base64 encode as well..
> 
> Sent from my iPhone
> 
>> On 21-Apr-2018, at 8:17 PM, marko kiiskila <[email protected]> wrote:
>> 
>> Console is for printable characters only, not meant for binary data.
>> You should go straight to uart driver interface, or base64 encode your CBOR.
>> 
>>> On Apr 21, 2018, at 4:30 PM, Aditya Xavier <[email protected]> wrote:
>>> 
>>> Hi Mynewt Team,
>>> 
>>> It seems UART is not capable of handling non-asci characters and instead 
>>> enters new line on occurrence of one.
>>> 
>>> Thanks,
>>> Aditya Xavier.
>>> 
>>> 
>>>> On 21-Apr-2018, at 5:28 PM, Aditya Xavier <[email protected]> wrote:
>>>> 
>>>> Hi Mynewt Team,
>>>> 
>>>> Am facing issues with console_read API.
>>>> 
>>>> I have a MCU sending CBOR data to nRF over UART.
>>>> 
>>>> Console_read works perfect when receiving data from USB->Serial adapter 
>>>> (Computer) & RTT.
>>>> 
>>>> Console_read give multiple hits ( i.e. multiple times it would reach 
>>>> either /*Got Full line - break …*/ or /*Do some work…*/
>>>> 
>>>> How do I fix such a situation.
>>>> 
>>>> Thanks,
>>>> Aditya Xavier.
>>>> 
>>>> 
>>>> #define MAX_INPUT 128
>>>> 
>>>> static void
>>>> read_function(void *arg)
>>>> {
>>>> char buf[MAX_INPUT];
>>>> int rc; 
>>>> int full_line;
>>>> int off;
>>>> 
>>>> off = 0;
>>>> while (1) {
>>>>     rc = console_read(buf + off, MAX_INPUT - off, &full_line);
>>>>     if (rc <= 0 && !full_line) {
>>>>         continue;
>>>>     }
>>>>     off += rc;
>>>>     if (!full_line) {
>>>>         if (off == MAX_INPUT) {
>>>>             /*
>>>>              * Full line, no newline yet. Reset the input buffer.
>>>>              */
>>>>             off = 0;
>>>>         }
>>>>         continue;
>>>>     }
>>>>     /* Got full line - break out of the loop and process the input data */
>>>>     break;
>>>> }
>>>> 
>>>> /* Process the input line here */
>>>>  ....
>>>> 
>>>> return;
>>>> }    
>>>> static void myapp_process_input(struct os_event *ev);
>>>> 
>>>> static struct os_eventq avail_queue;
>>>> 
>>>> static struct console_input myapp_console_buf;
>>>> 
>>>> static struct os_event myapp_console_event = {
>>>> .ev_cb = myapp_process_input,
>>>> .ev_arg = &myapp_console_buf
>>>> };
>>>> 
>>>> /* Event callback to process a line of input from console. */
>>>> static void
>>>> myapp_process_input(struct os_event *ev)
>>>> {
>>>> char *line;
>>>> struct console_input *input;
>>>> 
>>>> input = ev->ev_arg;
>>>> assert (input != NULL);
>>>> 
>>>> line = input->line;
>>>> /* Do some work with line */
>>>>      ....
>>>> /* Done processing line. Add the event back to the avail_queue */
>>>> os_eventq_put(&avail_queue, ev);
>>>> return;
>>>> }
>>>> 
>>>> static void 
>>>> myapp_init(void)
>>>> {
>>>> os_eventq_init(&avail_queue);
>>>> os_eventq_put(&avail_queue, &myapp_console_event);
>>>> 
>>>> console_set_queues(&avail_queue, os_eventq_dflt_get());
>>>> }
>>>> 
>>> 
>> 

Reply via email to