Console itself uses uart driver interface. Other examples you can use

mgmt/newtmgr/transport/nmgr_uart/src/nmgr_uart.c
https://github.com/runtimeco/mynewt_arduino_zero/blob/master/libs/espduino/src/espduino.c
boot/boot_serial/src/boot_uart.c

the air quality sensor tutorial:
http://mynewt.apache.org/latest/os/tutorials/air_quality_sensor/#air-quality-sensor-project
 
<http://mynewt.apache.org/latest/os/tutorials/air_quality_sensor/#air-quality-sensor-project>

> On Apr 21, 2018, at 9:06 PM, Aditya Xavier <[email protected]> wrote:
> 
> 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