uart: add function mraa_uart_get_dev_path
Used for getting the path to the character device under linux for uart device. i.e. "/dev/ttyS0" Adds paths to existing platforms. Closes #84 Signed-off-by: Thomas Ingleby <thomas.c.ingleby@intel.com>
This commit is contained in:
@@ -149,6 +149,7 @@ typedef struct {
|
||||
unsigned int index; /**< ID as exposed in the system */
|
||||
int rx; /**< uart rx */
|
||||
int tx; /**< uart tx */
|
||||
char* device_path; /**< To store "/dev/ttyS1" for example */
|
||||
/*@}*/
|
||||
} mraa_uart_dev_t;
|
||||
|
||||
|
||||
@@ -54,6 +54,15 @@ typedef struct _uart* mraa_uart_context;
|
||||
*/
|
||||
mraa_uart_context mraa_uart_init(int uart);
|
||||
|
||||
/**
|
||||
* Get Char pointer with tty device path within Linux
|
||||
* For example. Could point to "/dev/ttyS0"
|
||||
*
|
||||
* @param dev uart context
|
||||
* @return char pointer of device path
|
||||
*/
|
||||
char* mraa_uart_get_dev_path(mraa_uart_context dev);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -55,6 +55,17 @@ class Uart {
|
||||
~Uart() {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get string with tty device path within Linux
|
||||
* For example. Could point to "/dev/ttyS0"
|
||||
*
|
||||
* @return char pointer of device path
|
||||
*/
|
||||
std::string getDevicePath() {
|
||||
std::string ret_val(mraa_uart_get_dev_path(m_uart));
|
||||
return ret_val;
|
||||
}
|
||||
private:
|
||||
mraa_uart_context m_uart;
|
||||
};
|
||||
|
||||
@@ -91,5 +91,6 @@ struct _aio {
|
||||
struct _uart {
|
||||
/*@{*/
|
||||
int index; /**< the uart index, as known to the os. */
|
||||
char* path; /**< the uart device path. */
|
||||
/*@}*/
|
||||
};
|
||||
|
||||
@@ -28,6 +28,8 @@
|
||||
#include "common.h"
|
||||
#include "arm/raspberry_pi_b.h"
|
||||
|
||||
#define UART_DEV_PATH "/dev/ttyAMA0"
|
||||
|
||||
mraa_board_t*
|
||||
mraa_raspberry_pi_b()
|
||||
{
|
||||
@@ -178,6 +180,17 @@ mraa_raspberry_pi_b()
|
||||
b->def_uart_dev = 0;
|
||||
b->uart_dev[0].rx = 10;
|
||||
b->uart_dev[0].tx = 8;
|
||||
int uart_path_length = strlen(UART_DEV_PATH) + 1;
|
||||
b->uart_dev[0].device_path = (char*) malloc(sizeof(char) * uart_path_length);
|
||||
if (b->uart_dev[0].device_path == NULL) {
|
||||
goto error;
|
||||
}
|
||||
strncpy(b->uart_dev[0].device_path, UART_DEV_PATH, uart_path_length);
|
||||
|
||||
return b;
|
||||
|
||||
error:
|
||||
syslog(LOG_CRIT, "raspberry pi: board failed to initialise");
|
||||
free(b);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -83,6 +83,7 @@ mraa_uart_init(int index)
|
||||
memset(dev, 0, sizeof(struct _uart));
|
||||
|
||||
dev->index = index;
|
||||
dev->path = plat->uart_dev[index].device_path;
|
||||
if (advance_func->uart_init_post != NULL) {
|
||||
mraa_result_t ret = advance_func->uart_init_post(dev);
|
||||
if (ret != MRAA_SUCCESS) {
|
||||
@@ -93,3 +94,17 @@ mraa_uart_init(int index)
|
||||
|
||||
return dev;
|
||||
}
|
||||
|
||||
char*
|
||||
mraa_uart_get_dev_path(mraa_uart_context dev)
|
||||
{
|
||||
if (dev == NULL) {
|
||||
syslog(LOG_ERR, "uart: get_device_path failed, context is NULL");
|
||||
return "ERROR:CONTEXT_IS_NULL";
|
||||
}
|
||||
if (dev->path == NULL) {
|
||||
syslog(LOG_ERR, "uart: device path undefined");
|
||||
return "ERROR:PATH_NOT_SET";
|
||||
}
|
||||
return dev->path;
|
||||
}
|
||||
|
||||
@@ -140,6 +140,8 @@ mraa_intel_de3815()
|
||||
b->spi_bus[0].miso = 12;
|
||||
b->spi_bus[0].sclk = 13;
|
||||
|
||||
b->uart_dev_count = 0;
|
||||
|
||||
return b;
|
||||
error:
|
||||
syslog(LOG_CRIT, "de3815: Platform failed to initialise");
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
// Might not always be correct. First thing to check if mmap stops
|
||||
// working. Check the device for 0x1199 and Intel Vendor (0x8086)
|
||||
#define MMAP_PATH "/sys/devices/pci0000:00/0000:00:0c.0/resource0"
|
||||
#define UART_DEV_PATH "/dev/ttyMFD1"
|
||||
|
||||
typedef struct {
|
||||
int sysfs;
|
||||
@@ -1365,6 +1366,13 @@ mraa_intel_edison_fab_c()
|
||||
b->uart_dev[0].rx = 0;
|
||||
b->uart_dev[0].tx = 1;
|
||||
|
||||
int uart_path_length = strlen(UART_DEV_PATH) + 1;
|
||||
b->uart_dev[0].device_path = (char*) malloc(sizeof(char) * uart_path_length);
|
||||
if (b->uart_dev[0].device_path == NULL) {
|
||||
goto error;
|
||||
}
|
||||
strncpy(b->uart_dev[0].device_path, UART_DEV_PATH, uart_path_length);
|
||||
|
||||
int il;
|
||||
for (il =0; il < MRAA_INTEL_EDISON_PINCOUNT; il++) {
|
||||
pinmodes[il].gpio.sysfs = -1;
|
||||
|
||||
@@ -405,11 +405,25 @@ mraa_intel_galileo_rev_d()
|
||||
b->spi_bus[0].miso = 12;
|
||||
b->spi_bus[0].sclk = 13;
|
||||
|
||||
int uart_path_length = strlen("/dev/ttyS0") + 1;
|
||||
|
||||
b->uart_dev_count = 2;
|
||||
b->def_uart_dev = 0;
|
||||
b->uart_dev[0].rx = 0;
|
||||
b->uart_dev[0].tx = 1;
|
||||
b->uart_dev[0].device_path = (char*) malloc(sizeof(char) * uart_path_length);
|
||||
if (b->uart_dev[0].device_path == NULL) {
|
||||
goto error;
|
||||
}
|
||||
strncpy(b->uart_dev[0].device_path, "/dev/ttyS0", uart_path_length);
|
||||
|
||||
b->uart_dev[1].rx = -1;
|
||||
b->uart_dev[1].tx = -1;
|
||||
b->uart_dev[1].device_path = (char*) malloc(sizeof(char) * uart_path_length);
|
||||
if (b->uart_dev[1].device_path == NULL) {
|
||||
goto error;
|
||||
}
|
||||
strncpy(b->uart_dev[1].device_path, "/dev/ttyS1", uart_path_length);
|
||||
|
||||
return b;
|
||||
error:
|
||||
|
||||
@@ -746,10 +746,17 @@ mraa_intel_galileo_gen2()
|
||||
b->spi_bus[0].miso = 12;
|
||||
b->spi_bus[0].sclk = 13;
|
||||
|
||||
int uart_path_length = strlen("/dev/ttyS0") + 1;
|
||||
|
||||
b->uart_dev_count = 1;
|
||||
b->def_uart_dev = 0;
|
||||
b->uart_dev[0].rx = 0;
|
||||
b->uart_dev[0].tx = 1;
|
||||
b->uart_dev[0].device_path = (char*) malloc(sizeof(char) * uart_path_length);
|
||||
if (b->uart_dev[0].device_path == NULL) {
|
||||
goto error;
|
||||
}
|
||||
strncpy(b->uart_dev[0].device_path, "/dev/ttyS0", uart_path_length);
|
||||
|
||||
return b;
|
||||
error:
|
||||
|
||||
@@ -181,6 +181,8 @@ mraa_intel_minnow_max()
|
||||
b->spi_bus[0].miso = 7;
|
||||
b->spi_bus[0].sclk = 11;
|
||||
|
||||
b->uart_dev_count = 0;
|
||||
|
||||
return b;
|
||||
error:
|
||||
syslog(LOG_CRIT, "minnowmax: Platform failed to initialise");
|
||||
|
||||
Reference in New Issue
Block a user