diff --git a/libraries/AP_HAL_Linux/GPIO.h b/libraries/AP_HAL_Linux/GPIO.h
index 0c8aa85d32..4138218d91 100644
--- a/libraries/AP_HAL_Linux/GPIO.h
+++ b/libraries/AP_HAL_Linux/GPIO.h
@@ -33,4 +33,6 @@ private:
#include "GPIO_Bebop.h"
#elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_DISCO
#include "GPIO_Disco.h"
+#elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_AERO
+#include "GPIO_Aero.h"
#endif
diff --git a/libraries/AP_HAL_Linux/GPIO_Aero.cpp b/libraries/AP_HAL_Linux/GPIO_Aero.cpp
new file mode 100644
index 0000000000..4be0185b00
--- /dev/null
+++ b/libraries/AP_HAL_Linux/GPIO_Aero.cpp
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2016 Intel Corporation. All rights reserved.
+ *
+ * This file is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see .
+ */
+#include
+
+#if CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_AERO
+
+#include
+
+#include "GPIO_Aero.h"
+
+const unsigned Linux::GPIO_Sysfs::pin_table[] = {
+ [AERO_GPIO_BMI160_INT1] = 411,
+};
+
+const uint8_t Linux::GPIO_Sysfs::n_pins = _AERO_GPIO_MAX;
+
+static_assert(ARRAY_SIZE(Linux::GPIO_Sysfs::pin_table) == _AERO_GPIO_MAX,
+ "GPIO pin_table must have the same size of entries in enum gpio_aero");
+
+#endif
diff --git a/libraries/AP_HAL_Linux/GPIO_Aero.h b/libraries/AP_HAL_Linux/GPIO_Aero.h
new file mode 100644
index 0000000000..2ab5ecc2f2
--- /dev/null
+++ b/libraries/AP_HAL_Linux/GPIO_Aero.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2016 Intel Corporation. All rights reserved.
+ *
+ * This file is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see .
+ */
+#pragma once
+
+#include "GPIO_Sysfs.h"
+
+enum gpio_aero {
+ AERO_GPIO_BMI160_INT1,
+ _AERO_GPIO_MAX
+};
diff --git a/libraries/AP_HAL_Linux/HAL_Linux_Class.cpp b/libraries/AP_HAL_Linux/HAL_Linux_Class.cpp
index da7b72af6d..a38ee34592 100644
--- a/libraries/AP_HAL_Linux/HAL_Linux_Class.cpp
+++ b/libraries/AP_HAL_Linux/HAL_Linux_Class.cpp
@@ -28,6 +28,7 @@
#include "RCInput_SBUS.h"
#include "RCInput_UART.h"
#include "RCInput_UDP.h"
+#include "RCOutput_AeroIO.h"
#include "RCOutput_AioPRU.h"
#include "RCOutput_Bebop.h"
#include "RCOutput_Disco.h"
@@ -116,7 +117,8 @@ static GPIO_BBB gpioDriver;
static GPIO_RPI gpioDriver;
#elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_MINLURE || \
CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_BEBOP || \
- CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_DISCO
+ CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_DISCO || \
+ CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_AERO
static GPIO_Sysfs gpioDriver;
#else
static Empty::GPIO gpioDriver;
@@ -144,7 +146,8 @@ static RCInput_UDP rcinDriver;
static RCInput_UART rcinDriver("/dev/ttyS2");
#elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_QFLIGHT
static RCInput_DSM rcinDriver;
-#elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_DISCO
+#elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_DISCO || \
+ CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_AERO
static RCInput_SBUS rcinDriver;
#elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_NAVIO2
static RCInput_Navio2 rcinDriver;
@@ -195,6 +198,8 @@ static RCOutput_QFLIGHT rcoutDriver;
static RCOutput_Disco rcoutDriver(i2c_mgr_instance.get_device(HAL_RCOUT_DISCO_BLDC_I2C_BUS, HAL_RCOUT_DISCO_BLDC_I2C_ADDR));
#elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_NAVIO2
static RCOutput_Sysfs rcoutDriver(0, 0, 14);
+#elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_AERO
+static RCOutput_AeroIO rcoutDriver;
#else
static Empty::RCOutput rcoutDriver;
#endif
diff --git a/libraries/AP_HAL_Linux/RCInput_SBUS.cpp b/libraries/AP_HAL_Linux/RCInput_SBUS.cpp
index 3eee3aac44..8351ca82a0 100644
--- a/libraries/AP_HAL_Linux/RCInput_SBUS.cpp
+++ b/libraries/AP_HAL_Linux/RCInput_SBUS.cpp
@@ -21,7 +21,8 @@
#include
-#if CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_DISCO
+#if CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_DISCO || \
+ CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_AERO
#include "RCInput_SBUS.h"
#include
#include
diff --git a/libraries/AP_HAL_Linux/RCInput_SBUS.h b/libraries/AP_HAL_Linux/RCInput_SBUS.h
index b8ab1e153f..a92e18b870 100644
--- a/libraries/AP_HAL_Linux/RCInput_SBUS.h
+++ b/libraries/AP_HAL_Linux/RCInput_SBUS.h
@@ -16,7 +16,8 @@
#pragma once
#include
-#if CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_DISCO
+#if CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_DISCO || \
+ CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_AERO
#include "RCInput.h"
#include "RCInput_SBUS.h"
@@ -31,7 +32,13 @@ public:
void set_device_path(const char *path);
private:
+#if CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_AERO
+ const char *device_path = "/dev/ttyS1";
+#elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_DISCO
const char *device_path = "/dev/uart-sbus";
+#else
+ const char *device_path = nullptr;
+#endif
int32_t fd = -1;
};
diff --git a/libraries/AP_HAL_Linux/SPIDevice.cpp b/libraries/AP_HAL_Linux/SPIDevice.cpp
index 64f6ca342d..9100582bc2 100644
--- a/libraries/AP_HAL_Linux/SPIDevice.cpp
+++ b/libraries/AP_HAL_Linux/SPIDevice.cpp
@@ -122,6 +122,11 @@ SPIDesc SPIDeviceManager::_device[] = {
SPIDesc SPIDeviceManager::_device[] = {
SPIDesc("bebop", 1, 0, SPI_MODE_0, 8, SPI_CS_KERNEL, 320*KHZ, 320*KHZ),
};
+#elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_AERO
+SPIDesc SPIDeviceManager::_device[] = {
+ SPIDesc("aeroio", 1, 1, SPI_MODE_0, 8, SPI_CS_KERNEL, 10*MHZ, 10*MHZ),
+ SPIDesc("bmi160", 3, 0, SPI_MODE_3, 8, SPI_CS_KERNEL, 1*MHZ, 10*MHZ),
+};
#else
// empty device table
SPIDesc SPIDeviceManager::_device[] = {