edison: fix uart missing information
authorThomas Ingleby <thomas.c.ingleby@intel.com>
Mon, 20 Oct 2014 18:13:43 +0000 (19:13 +0100)
committerThomas Ingleby <thomas.c.ingleby@intel.com>
Mon, 20 Oct 2014 18:14:41 +0000 (19:14 +0100)
This should fix #19

Signed-off-by: Thomas Ingleby <thomas.c.ingleby@intel.com>
src/intel_edison_fab_c.c

index 2fe2125..84d734c 100644 (file)
@@ -452,8 +452,28 @@ mraa_intel_edsion_mb_gpio_mode(mraa_gpio_context dev, gpio_mode_t mode)
 }
 
 mraa_result_t
-mraa_intel_edison_uart_init_post(mraa_uart_context uart)
+mraa_intel_edison_uart_init_pre(int index)
 {
+    if (miniboard == 0) {
+        mraa_gpio_write(tristate, 0);
+        mraa_gpio_context io0_output = mraa_gpio_init_raw(248);
+        mraa_gpio_context io0_pullup = mraa_gpio_init_raw(216);
+        mraa_gpio_context io1_output = mraa_gpio_init_raw(249);
+        mraa_gpio_context io1_pullup = mraa_gpio_init_raw(217);
+        mraa_gpio_dir(io0_output, MRAA_GPIO_OUT);
+        mraa_gpio_dir(io0_pullup, MRAA_GPIO_OUT);
+        mraa_gpio_dir(io1_output, MRAA_GPIO_OUT);
+        mraa_gpio_dir(io1_pullup, MRAA_GPIO_IN);
+
+        mraa_gpio_write(io0_output, 0);
+        mraa_gpio_write(io0_pullup, 0);
+        mraa_gpio_write(io1_output, 1);
+
+        mraa_gpio_close(io0_output);
+        mraa_gpio_close(io0_pullup);
+        mraa_gpio_close(io1_output);
+        mraa_gpio_close(io1_pullup);
+    }
     mraa_result_t ret;
     ret = mraa_intel_edison_pinmode_change(130,1); //IO0 RX
     ret = mraa_intel_edison_pinmode_change(131,1); //IO1 TX
@@ -461,6 +481,12 @@ mraa_intel_edison_uart_init_post(mraa_uart_context uart)
 }
 
 mraa_result_t
+mraa_intel_edison_uart_init_post(mraa_uart_context uart)
+{
+    return mraa_gpio_write(tristate, 1);
+}
+
+mraa_result_t
 mraa_intel_edsion_miniboard(mraa_board_t* b)
 {
     miniboard = 1;
@@ -639,9 +665,13 @@ mraa_intel_edsion_miniboard(mraa_board_t* b)
     b->pins[pos].gpio.mux_total = 0;
     pos++;
     strncpy(b->pins[pos].name, "J18-13", 8);
-    b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+    b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,1};
     b->pins[pos].gpio.pinmap = 130;
     b->pins[pos].gpio.mux_total = 0;
+    b->pins[pos].uart.pinmap = 0;
+    b->pins[pos].uart.parent_id = 0;
+    b->pins[pos].uart.mux_total = 0;
+
     pos++;
     strncpy(b->pins[pos].name, "J18-14", 8);
     b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,0,0,0,0,0,0,0};
@@ -678,9 +708,12 @@ mraa_intel_edsion_miniboard(mraa_board_t* b)
     pos++;
 
     strncpy(b->pins[pos].name, "J19-8", 8);
-    b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,0};
+    b->pins[pos].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0,1};
     b->pins[pos].gpio.pinmap = 131;
     b->pins[pos].gpio.mux_total = 0;
+    b->pins[pos].uart.pinmap = 0;
+    b->pins[pos].uart.parent_id = 0;
+    b->pins[pos].uart.mux_total = 0;
     pos++;
 
     strncpy(b->pins[pos].name, "J19-9", 8);
@@ -804,6 +837,11 @@ mraa_intel_edsion_miniboard(mraa_board_t* b)
     b->spi_bus[0].miso = 24;
     b->spi_bus[0].sclk = 10;
 
+    b->uart_dev_count = 1;
+    b->def_uart_dev = 0;
+    b->uart_dev[0].rx = 26;
+    b->uart_dev[0].tx = 35;
+
     return MRAA_SUCCESS;
 }
 
@@ -842,17 +880,11 @@ mraa_intel_edison_fab_c()
     advance_func->spi_init_pre = &mraa_intel_edison_spi_init_pre;
     advance_func->spi_init_post = &mraa_intel_edison_spi_init_post;
     advance_func->gpio_mode_replace = &mraa_intel_edison_gpio_mode_replace;
+    advance_func->uart_init_pre = &mraa_intel_edison_uart_init_pre;
     advance_func->uart_init_post = &mraa_intel_edison_uart_init_post;
 
     b->pins = (mraa_pininfo_t*) malloc(sizeof(mraa_pininfo_t)*MRAA_INTEL_EDISON_PINCOUNT);
 
-    tristate = mraa_gpio_init_raw(214);
-    if (tristate == NULL) {
-        syslog(LOG_CRIT, "Intel Edison Failed to initialise Arduino board TriState,\
-                check i2c devices! FATAL\n");
-        free(b);
-        return NULL;
-    }
     mraa_gpio_dir(tristate, MRAA_GPIO_OUT);
     mraa_intel_edison_misc_spi();
 
@@ -875,7 +907,7 @@ mraa_intel_edison_fab_c()
     b->pins[1].gpio.mux_total = 0;
     b->pins[1].uart.pinmap = 0;
     b->pins[1].uart.parent_id = 0;
-    b->pins[1].uart.mux_total = 1;
+    b->pins[1].uart.mux_total = 0;
 
     strncpy(b->pins[2].name, "IO2", 8);
     b->pins[2].capabilites = (mraa_pincapabilities_t) {1,1,0,0,0,0,0};