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