Home | History | Annotate | Download | only in mraa
      1 /*
      2  * Author: Thomas Ingleby <thomas.c.ingleby (at) intel.com>
      3  * Contributions: Jon Trulson <jtrulson (at) ics.com>
      4  *                Brendan Le Foll <brendan.le.foll (at) intel.com>
      5  * Copyright (c) 2014 - 2015 Intel Corporation
      6  *
      7  * Permission is hereby granted, free of charge, to any person obtaining
      8  * a copy of this software and associated documentation files (the
      9  * "Software"), to deal in the Software without restriction, including
     10  * without limitation the rights to use, copy, modify, merge, publish,
     11  * distribute, sublicense, and/or sell copies of the Software, and to
     12  * permit persons to whom the Software is furnished to do so, subject to
     13  * the following conditions:
     14  *
     15  * The above copyright notice and this permission notice shall be
     16  * included in all copies or substantial portions of the Software.
     17  *
     18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     19  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     20  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
     21  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
     22  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
     23  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
     24  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     25  */
     26 
     27 #pragma once
     28 
     29 /**
     30  * @file
     31  * @brief UART module
     32  *
     33  * UART is the Universal asynchronous receiver/transmitter interface to
     34  * libmraa. It allows the exposure of UART pins on supported boards.
     35  * With functionality to expand at a later date.
     36  *
     37  * @snippet uart.c Interesting
     38  */
     39 
     40 #ifdef __cplusplus
     41 extern "C" {
     42 #endif
     43 
     44 #include <stdio.h>
     45 
     46 #include "common.h"
     47 
     48 typedef struct _uart* mraa_uart_context;
     49 
     50 /**
     51  * Initialise uart_context, uses board mapping
     52  *
     53  * @param uart the index of the uart set to use
     54  * @return uart context or NULL
     55  */
     56 mraa_uart_context mraa_uart_init(int uart);
     57 
     58 /**
     59  * Initialise a raw uart_context. No board setup.
     60  *
     61  * @param path for example "/dev/ttyS0"
     62  * @return uart context or NULL
     63  */
     64 mraa_uart_context mraa_uart_init_raw(const char* path);
     65 
     66 /**
     67  * Flush the outbound data.
     68  * Blocks until complete.
     69  *
     70  * @param dev The UART context
     71  * @return Result of operation
     72  */
     73 mraa_result_t mraa_uart_flush(mraa_uart_context dev);
     74 
     75 /**
     76  * Set the baudrate.
     77  * Takes an int and will attempt to decide what baudrate  is
     78  * to be used on the UART hardware.
     79  *
     80  * @param dev The UART context
     81  * @param baud unsigned int of baudrate i.e. 9600
     82  * @return Result of operation
     83  */
     84 mraa_result_t mraa_uart_set_baudrate(mraa_uart_context dev, unsigned int baud);
     85 
     86 /**
     87  * Set the transfer mode
     88  * For example setting the mode to 8N1 would be
     89  * "mraa_uart_set_mode(dev, 8,MRAA_UART_PARITY_NONE , 1)"
     90  *
     91  * @param dev The UART context
     92  * @param bytesize data bits
     93  * @param parity Parity bit setting
     94  * @param stopbits stop bits
     95  * @return Result of operation
     96  */
     97 mraa_result_t mraa_uart_set_mode(mraa_uart_context dev, int bytesize, mraa_uart_parity_t parity, int stopbits);
     98 
     99 /**
    100  * Set the flowcontrol
    101  *
    102  * @param dev The UART context
    103  * @param xonxoff XON/XOFF Software flow control.
    104  * @param rtscts RTS/CTS out of band hardware flow control
    105  * @return Result of operation
    106  */
    107 mraa_result_t mraa_uart_set_flowcontrol(mraa_uart_context dev, mraa_boolean_t xonxoff, mraa_boolean_t rtscts);
    108 
    109 /**
    110  * Set the timeout for read and write operations
    111  * <= 0 will disable that timeout
    112  *
    113  * @param dev The UART context
    114  * @param read read timeout
    115  * @param write write timeout
    116  * @param interchar inbetween char timeout
    117  * @return Result of operation
    118  */
    119 mraa_result_t mraa_uart_set_timeout(mraa_uart_context dev, int read, int write, int interchar);
    120 
    121 /**
    122  * Get Char pointer with tty device path within Linux
    123  * For example. Could point to "/dev/ttyS0"
    124  *
    125  * @param dev uart context
    126  * @return char pointer of device path
    127  */
    128 const char* mraa_uart_get_dev_path(mraa_uart_context dev);
    129 
    130 /**
    131  * Destroy a mraa_uart_context
    132  *
    133  * @param dev uart context
    134  * @return mraa_result_t
    135  */
    136 mraa_result_t mraa_uart_stop(mraa_uart_context dev);
    137 
    138 /**
    139  * Read bytes from the device into a buffer
    140  *
    141  * @param dev uart context
    142  * @param buf buffer pointer
    143  * @param length maximum size of buffer
    144  * @return the number of bytes read, or -1 if an error occurred
    145  */
    146 int mraa_uart_read(mraa_uart_context dev, char* buf, size_t length);
    147 
    148 /**
    149  * Write bytes in buffer to a device
    150  *
    151  * @param dev uart context
    152  * @param buf buffer pointer
    153  * @param length maximum size of buffer
    154  * @return the number of bytes written, or -1 if an error occurred
    155  */
    156 int mraa_uart_write(mraa_uart_context dev, const char* buf, size_t length);
    157 
    158 /**
    159  * Check to see if data is available on the device for reading
    160  *
    161  * @param dev uart context
    162  * @param millis number of milliseconds to wait, or 0 to return immediately
    163  * @return 1 if there is data available to read, 0 otherwise
    164  */
    165 mraa_boolean_t mraa_uart_data_available(mraa_uart_context dev, unsigned int millis);
    166 
    167 #ifdef __cplusplus
    168 }
    169 #endif
    170