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[] = {