uart: update C API
Signed-off-by: Thomas Ingleby <thomas.c.ingleby@intel.com>
This commit is contained in:
@@ -55,16 +55,67 @@ typedef struct _uart* mraa_uart_context;
|
|||||||
*/
|
*/
|
||||||
mraa_uart_context mraa_uart_init(int uart);
|
mraa_uart_context mraa_uart_init(int uart);
|
||||||
|
|
||||||
mraa_uart_context mraa_uart_init_raw(int uart);
|
/**
|
||||||
|
* Initialise a raw uart_context. No board setup.
|
||||||
|
*
|
||||||
|
* @param path for example "/dev/ttyS0"
|
||||||
|
* @return uart context or NULL
|
||||||
|
*/
|
||||||
|
mraa_uart_context mraa_uart_init_raw(char* path);
|
||||||
|
|
||||||
mraa_result_t mraa_uart_flush(mraa_uart_context);
|
/**
|
||||||
|
* Flush the outbound data.
|
||||||
|
* Blocks until complete.
|
||||||
|
*
|
||||||
|
* @param dev The UART context
|
||||||
|
* @return Result of operation
|
||||||
|
*/
|
||||||
|
mraa_result_t mraa_uart_flush(mraa_uart_context dev);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the baudrate.
|
||||||
|
* Takes an int and will attempt to decide what baudrate is
|
||||||
|
* to be used on the UART hardware.
|
||||||
|
*
|
||||||
|
* @param dev The UART context
|
||||||
|
* @param baud unsigned int of baudrate i.e. 9600
|
||||||
|
* @return Result of operation
|
||||||
|
*/
|
||||||
mraa_result_t mraa_uart_set_baudrate(mraa_uart_context dev, unsigned int baud);
|
mraa_result_t mraa_uart_set_baudrate(mraa_uart_context dev, unsigned int baud);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the transfer mode
|
||||||
|
* For example setting the mode to 8N1 would be
|
||||||
|
* "mraa_uart_set_mode(dev, 8,MRAA_UART_PARITY_NONE , 1)"
|
||||||
|
*
|
||||||
|
* @param dev The UART context
|
||||||
|
* @param bytesize data bits
|
||||||
|
* @param parity Parity bit setting
|
||||||
|
* @param stopbits stop bits
|
||||||
|
* @return Result of operation
|
||||||
|
*/
|
||||||
mraa_result_t mraa_uart_set_mode(mraa_uart_context dev, int bytesize, mraa_uart_parity_t parity, int stopbits);
|
mraa_result_t mraa_uart_set_mode(mraa_uart_context dev, int bytesize, mraa_uart_parity_t parity, int stopbits);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the flowcontrol
|
||||||
|
*
|
||||||
|
* @param dev The UART context
|
||||||
|
* @param xonxoff XON/XOFF Software flow control.
|
||||||
|
* @param rtscts RTS/CTS out of band hardware flow control
|
||||||
|
* @return Result of operation
|
||||||
|
*/
|
||||||
mraa_result_t mraa_uart_set_flowcontrol(mraa_uart_context dev, mraa_boolean_t xonxoff, mraa_boolean_t rtscts);
|
mraa_result_t mraa_uart_set_flowcontrol(mraa_uart_context dev, mraa_boolean_t xonxoff, mraa_boolean_t rtscts);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the timeout for read and write operations
|
||||||
|
* <= 0 will disable that timeout
|
||||||
|
*
|
||||||
|
* @param dev The UART context
|
||||||
|
* @param read read timeout
|
||||||
|
* @param write write timeout
|
||||||
|
* @param interchar inbetween char timeout
|
||||||
|
* @return Result of operation
|
||||||
|
*/
|
||||||
mraa_result_t mraa_uart_set_timeout(mraa_uart_context dev, int read, int write, int interchar);
|
mraa_result_t mraa_uart_set_timeout(mraa_uart_context dev, int read, int write, int interchar);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -89,20 +140,20 @@ mraa_result_t mraa_uart_stop(mraa_uart_context dev);
|
|||||||
*
|
*
|
||||||
* @param dev uart context
|
* @param dev uart context
|
||||||
* @param buf buffer pointer
|
* @param buf buffer pointer
|
||||||
* @param len maximum size of buffer
|
* @param length maximum size of buffer
|
||||||
* @return the number of bytes read, or -1 if an error occurred
|
* @return the number of bytes read, or -1 if an error occurred
|
||||||
*/
|
*/
|
||||||
int mraa_uart_read(mraa_uart_context dev, char* buf, size_t len);
|
int mraa_uart_read(mraa_uart_context dev, char* buf, size_t length);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write bytes in buffer to a device
|
* Write bytes in buffer to a device
|
||||||
*
|
*
|
||||||
* @param dev uart context
|
* @param dev uart context
|
||||||
* @param buf buffer pointer
|
* @param buf buffer pointer
|
||||||
* @param len maximum size of buffer
|
* @param length maximum size of buffer
|
||||||
* @return the number of bytes written, or -1 if an error occurred
|
* @return the number of bytes written, or -1 if an error occurred
|
||||||
*/
|
*/
|
||||||
int mraa_uart_write(mraa_uart_context dev, char* buf, size_t len);
|
int mraa_uart_write(mraa_uart_context dev, char* buf, size_t length);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check to see if data is available on the device for reading
|
* Check to see if data is available on the device for reading
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Author: Brendan Le Foll <brendan.le.foll@intel.com>
|
* Author: Brendan Le Foll <brendan.le.foll@intel.com>
|
||||||
* Contributions: Jon Trulson <jtrulson@ics.com>
|
* Contributions: Jon Trulson <jtrulson@ics.com>
|
||||||
|
* Contributions: Thomas Ingleby <thomas.c.ingleby@intel.com>
|
||||||
* Copyright (c) 2014 - 2015 Intel Corporation.
|
* Copyright (c) 2014 - 2015 Intel Corporation.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining
|
* Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@@ -27,6 +28,7 @@
|
|||||||
|
|
||||||
#include "uart.h"
|
#include "uart.h"
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
namespace mraa
|
namespace mraa
|
||||||
{
|
{
|
||||||
@@ -53,6 +55,24 @@ class Uart
|
|||||||
throw std::invalid_argument("Error initialising UART");
|
throw std::invalid_argument("Error initialising UART");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uart Constructor, takes a string to the path of the serial
|
||||||
|
* interface that is needed.
|
||||||
|
*
|
||||||
|
* @param uart the index of the uart set to use
|
||||||
|
*/
|
||||||
|
Uart(std::string path)
|
||||||
|
{
|
||||||
|
char *p = new char[path.length() + 1];
|
||||||
|
std::strcpy(p, path.c_str());
|
||||||
|
m_uart = mraa_uart_init_raw(p);
|
||||||
|
|
||||||
|
if (m_uart == NULL) {
|
||||||
|
throw std::invalid_argument("Error initialising UART");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Uart destructor
|
* Uart destructor
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -152,7 +152,11 @@ mraa_uart_init(int index)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mraa_uart_context dev = mraa_uart_init_raw(index);
|
mraa_uart_context dev = mraa_uart_init_raw((char*)plat->uart_dev[index].device_path);
|
||||||
|
if (dev == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
dev->index = index; //Set the board Index.
|
||||||
|
|
||||||
if (advance_func->uart_init_post != NULL) {
|
if (advance_func->uart_init_post != NULL) {
|
||||||
mraa_result_t ret = advance_func->uart_init_post(dev);
|
mraa_result_t ret = advance_func->uart_init_post(dev);
|
||||||
@@ -166,7 +170,7 @@ mraa_uart_init(int index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
mraa_uart_context
|
mraa_uart_context
|
||||||
mraa_uart_init_raw(int index)
|
mraa_uart_init_raw(char* path)
|
||||||
{
|
{
|
||||||
mraa_uart_context dev = (mraa_uart_context) malloc(sizeof(struct _uart));
|
mraa_uart_context dev = (mraa_uart_context) malloc(sizeof(struct _uart));
|
||||||
if (dev == NULL) {
|
if (dev == NULL) {
|
||||||
@@ -175,20 +179,18 @@ mraa_uart_init_raw(int index)
|
|||||||
}
|
}
|
||||||
memset(dev, 0, sizeof(struct _uart));
|
memset(dev, 0, sizeof(struct _uart));
|
||||||
|
|
||||||
dev->index = index;
|
dev->index = -1;
|
||||||
dev->fd = -1;
|
dev->fd = -1;
|
||||||
dev->path = (char*) plat->uart_dev[index].device_path;
|
dev->path = path;
|
||||||
|
|
||||||
char* devPath = mraa_uart_get_dev_path(dev);
|
if (!dev->path) {
|
||||||
|
|
||||||
if (!devPath) {
|
|
||||||
syslog(LOG_ERR, "uart: device path undefined, open failed");
|
syslog(LOG_ERR, "uart: device path undefined, open failed");
|
||||||
free(dev);
|
free(dev);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// now open the device
|
// now open the device
|
||||||
if ((dev->fd = open(devPath, O_RDWR)) == -1) {
|
if ((dev->fd = open(dev->path, O_RDWR)) == -1) {
|
||||||
syslog(LOG_ERR, "uart: open() failed");
|
syslog(LOG_ERR, "uart: open() failed");
|
||||||
free(dev);
|
free(dev);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|||||||
Reference in New Issue
Block a user