Private
Public Access
2
0

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:
Thomas Ingleby
2015-01-20 15:10:47 +00:00
parent ed4c68eba1
commit 9cfbc87924
11 changed files with 83 additions and 0 deletions

View File

@@ -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;

View File

@@ -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

View File

@@ -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;
};

View File

@@ -91,5 +91,6 @@ struct _aio {
struct _uart {
/*@{*/
int index; /**< the uart index, as known to the os. */
char* path; /**< the uart device path. */
/*@}*/
};

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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");

View File

@@ -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;

View File

@@ -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:

View File

@@ -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:

View File

@@ -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");