Private
Public Access
2
0

uart.c: add replace functions used by mock

Signed-off-by: Alex Tereschenko <alext.mkrs@gmail.com>
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
This commit is contained in:
Alex Tereschenko
2016-10-16 16:50:25 +02:00
committed by Brendan Le Foll
parent 1b3a9371a1
commit 8a9efd1bcc
2 changed files with 55 additions and 0 deletions

View File

@@ -217,6 +217,15 @@ mraa_uart_init_raw(const char* path)
}
dev->path = path;
if (IS_FUNC_DEFINED(dev, uart_init_raw_replace)) {
status = dev->advance_func->uart_init_raw_replace(dev, path);
if (status == MRAA_SUCCESS) {
return dev;
} else {
goto init_raw_cleanup;
}
}
// now open the device
if ((dev->fd = open(dev->path, O_RDWR)) == -1) {
syslog(LOG_ERR, "uart: open(%s) failed: %s", path, strerror(errno));
@@ -289,6 +298,10 @@ mraa_uart_flush(mraa_uart_context dev)
return MRAA_ERROR_INVALID_HANDLE;
}
if (IS_FUNC_DEFINED(dev, uart_flush_replace)) {
return dev->advance_func->uart_flush_replace(dev);
}
if (tcdrain(dev->fd) == -1) {
return MRAA_ERROR_FEATURE_NOT_SUPPORTED;
}
@@ -304,6 +317,10 @@ mraa_uart_set_baudrate(mraa_uart_context dev, unsigned int baud)
return MRAA_ERROR_INVALID_HANDLE;
}
if (IS_FUNC_DEFINED(dev, uart_set_baudrate_replace)) {
return dev->advance_func->uart_set_baudrate_replace(dev, baud);
}
struct termios termio;
if (tcgetattr(dev->fd, &termio)) {
syslog(LOG_ERR, "uart%i: set_baudrate: tcgetattr() failed: %s", dev->index, strerror(errno));
@@ -336,6 +353,10 @@ mraa_uart_set_mode(mraa_uart_context dev, int bytesize, mraa_uart_parity_t parit
return MRAA_ERROR_INVALID_HANDLE;
}
if (IS_FUNC_DEFINED(dev, uart_set_mode_replace)) {
return dev->advance_func->uart_set_mode_replace(dev, bytesize, parity, stopbits);
}
struct termios termio;
if (tcgetattr(dev->fd, &termio)) {
syslog(LOG_ERR, "uart%i: set_mode: tcgetattr() failed: %s", dev->index, strerror(errno));
@@ -408,6 +429,10 @@ mraa_uart_set_flowcontrol(mraa_uart_context dev, mraa_boolean_t xonxoff, mraa_bo
return MRAA_ERROR_INVALID_HANDLE;
}
if (IS_FUNC_DEFINED(dev, uart_set_flowcontrol_replace)) {
return dev->advance_func->uart_set_flowcontrol_replace(dev, xonxoff, rtscts);
}
// hardware flow control
int action = TCIOFF;
if (xonxoff) {
@@ -448,6 +473,10 @@ mraa_uart_set_timeout(mraa_uart_context dev, int read, int write, int interchar)
return MRAA_ERROR_INVALID_HANDLE;
}
if (IS_FUNC_DEFINED(dev, uart_set_timeout_replace)) {
return dev->advance_func->uart_set_timeout_replace(dev, read, write, interchar);
}
struct termios termio;
// get current modes
if (tcgetattr(dev->fd, &termio)) {
@@ -477,6 +506,10 @@ mraa_uart_set_non_blocking(mraa_uart_context dev, mraa_boolean_t nonblock)
return MRAA_ERROR_INVALID_HANDLE;
}
if (IS_FUNC_DEFINED(dev, uart_set_non_blocking_replace)) {
return dev->advance_func->uart_set_non_blocking_replace(dev, nonblock);
}
// get current flags
int flags = fcntl(dev->fd, F_GETFL);
@@ -517,6 +550,10 @@ mraa_uart_read(mraa_uart_context dev, char* buf, size_t len)
return MRAA_ERROR_INVALID_HANDLE;
}
if (IS_FUNC_DEFINED(dev, uart_read_replace)) {
return dev->advance_func->uart_read_replace(dev, buf, len);
}
if (dev->fd < 0) {
syslog(LOG_ERR, "uart%i: read: port is not open", dev->index);
return MRAA_ERROR_INVALID_RESOURCE;
@@ -533,6 +570,10 @@ mraa_uart_write(mraa_uart_context dev, const char* buf, size_t len)
return MRAA_ERROR_INVALID_HANDLE;
}
if (IS_FUNC_DEFINED(dev, uart_write_replace)) {
return dev->advance_func->uart_write_replace(dev, buf, len);
}
if (dev->fd < 0) {
syslog(LOG_ERR, "uart%i: write: port is not open", dev->index);
return MRAA_ERROR_INVALID_RESOURCE;
@@ -549,6 +590,10 @@ mraa_uart_data_available(mraa_uart_context dev, unsigned int millis)
return 0;
}
if (IS_FUNC_DEFINED(dev, uart_data_available_replace)) {
return dev->advance_func->uart_data_available_replace(dev, millis);
}
if (dev->fd < 0) {
syslog(LOG_ERR, "uart%i: data_available: port is not open", dev->index);
return 0;