From dff430e136954771522392f4f9d15832a3ec7e63 Mon Sep 17 00:00:00 2001
From: Staroselskii Georgii <gosha371@gmail.com>
Date: Thu, 12 Feb 2015 13:00:52 +0300
Subject: [PATCH] AP_HAL_Linux: added UART port for second GPS

---
 libraries/AP_HAL_Linux/HAL_Linux_Class.cpp | 9 +++++++--
 libraries/AP_HAL_Linux/Scheduler.cpp       | 1 +
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/libraries/AP_HAL_Linux/HAL_Linux_Class.cpp b/libraries/AP_HAL_Linux/HAL_Linux_Class.cpp
index e93bede483..033ec6f89f 100644
--- a/libraries/AP_HAL_Linux/HAL_Linux_Class.cpp
+++ b/libraries/AP_HAL_Linux/HAL_Linux_Class.cpp
@@ -22,6 +22,7 @@ static LinuxSPIUARTDriver uartBDriver;
 static LinuxUARTDriver uartBDriver(false);
 #endif
 static LinuxUARTDriver uartCDriver(false);
+static LinuxUARTDriver uartEDriver(false);
 
 static LinuxSemaphore  i2cSemaphore;
 static LinuxI2CDriver  i2cDriver(&i2cSemaphore, "/dev/i2c-1");
@@ -97,7 +98,7 @@ HAL_Linux::HAL_Linux() :
         &uartBDriver,
         &uartCDriver,
         NULL,            /* no uartD */
-        NULL,            /* no uartE */
+        &uartEDriver,
         &i2cDriver,
         &spiDeviceManager,
         &analogIn,
@@ -126,7 +127,7 @@ void HAL_Linux::init(int argc,char* const argv[]) const
     /*
       parse command line options
      */
-    while ((opt = getopt(argc, argv, "A:B:C:h")) != -1) {
+    while ((opt = getopt(argc, argv, "A:B:C:E:h")) != -1) {
         switch (opt) {
         case 'A':
             uartADriver.set_device_path(optarg);
@@ -137,6 +138,9 @@ void HAL_Linux::init(int argc,char* const argv[]) const
         case 'C':
             uartCDriver.set_device_path(optarg);
             break;
+        case 'E':
+            uartEDriver.set_device_path(optarg);
+            break;
         case 'h':
             _usage();
             exit(0);
@@ -152,6 +156,7 @@ void HAL_Linux::init(int argc,char* const argv[]) const
     rcout->init(NULL);
     rcin->init(NULL);
     uartA->begin(115200);    
+    uartE->begin(115200);    
     spi->init(NULL);
     analogin->init(NULL);
     utilInstance.init(argc, argv);
diff --git a/libraries/AP_HAL_Linux/Scheduler.cpp b/libraries/AP_HAL_Linux/Scheduler.cpp
index 66ec166b74..c063a110d5 100644
--- a/libraries/AP_HAL_Linux/Scheduler.cpp
+++ b/libraries/AP_HAL_Linux/Scheduler.cpp
@@ -338,6 +338,7 @@ void *LinuxScheduler::_uart_thread(void* arg)
         ((LinuxUARTDriver *)hal.uartA)->_timer_tick();
         ((LinuxUARTDriver *)hal.uartB)->_timer_tick();
         ((LinuxUARTDriver *)hal.uartC)->_timer_tick();
+        ((LinuxUARTDriver *)hal.uartE)->_timer_tick();
     }
     return NULL;
 }