AP_HAL: support ChibiOS

This commit is contained in:
Andrew Tridgell 2018-01-05 18:07:23 +11:00
parent 5d9fa7f85b
commit 391affc02d
5 changed files with 113 additions and 1 deletions

View File

@ -12,6 +12,7 @@
#define HAL_BOARD_LINUX 7
#define HAL_BOARD_VRBRAIN 8
#define HAL_BOARD_QURT 9
#define HAL_BOARD_CHIBIOS 10
#define HAL_BOARD_EMPTY 99
/* Default board subtype is -1 */
@ -57,6 +58,11 @@
#define HAL_BOARD_SUBTYPE_VRCORE_V10 4005
#define HAL_BOARD_SUBTYPE_VRBRAIN_V54 4006
/* HAL CHIBIOS sub-types, starting at 5000 */
#define HAL_BOARD_SUBTYPE_CHIBIOS_SKYVIPER_F412 5000
#define HAL_BOARD_SUBTYPE_CHIBIOS_FMUV3 5001
/* InertialSensor driver types */
#define HAL_INS_MPU60XX_SPI 2
#define HAL_INS_MPU60XX_I2C 3
@ -147,6 +153,8 @@
#include <AP_HAL/board/qurt.h>
#elif CONFIG_HAL_BOARD == HAL_BOARD_VRBRAIN
#include <AP_HAL/board/vrbrain.h>
#elif CONFIG_HAL_BOARD == HAL_BOARD_CHIBIOS
#include <AP_HAL/board/chibios.h>
#else
#error "Unknown CONFIG_HAL_BOARD type"
#endif
@ -185,3 +193,7 @@
#ifndef HAL_MINIMIZE_FEATURES
#define HAL_MINIMIZE_FEATURES 0
#endif
#ifndef HAL_OS_FATFS_IO
#define HAL_OS_FATFS_IO 0
#endif

View File

@ -11,6 +11,7 @@
#define HAL_GPIO_INTERRUPT_HIGH 1
#define HAL_GPIO_INTERRUPT_FALLING 2
#define HAL_GPIO_INTERRUPT_RISING 3
#define HAL_GPIO_INTERRUPT_BOTH 4
class AP_HAL::DigitalSource {
public:

View File

@ -59,4 +59,11 @@ public:
*/
void printf(const char *s, ...) FMT_PRINTF(2, 3);
void vprintf(const char *s, va_list ap);
/*
wait for at least n bytes of incoming data, with timeout in
milliseconds. Return true if n bytes are available, false if
timeout
*/
virtual bool wait_timeout(uint16_t n, uint32_t timeout_ms) { return false; }
};

View File

@ -1,9 +1,13 @@
#include "AP_HAL.h"
#include "Util.h"
#include "utility/print_vprintf.h"
#include <time.h>
#if defined(__APPLE__) && defined(__MACH__)
#include <sys/time.h>
#elif CONFIG_HAL_BOARD == HAL_BOARD_CHIBIOS
#include "ch.h"
#include "hal.h"
#else
#include <time.h>
#endif
/* Helper class implements AP_HAL::Print so we can use utility/vprintf */
@ -57,6 +61,8 @@ uint64_t AP_HAL::Util::get_system_clock_ms() const
struct timeval ts;
gettimeofday(&ts, nullptr);
return ((long long)((ts.tv_sec * 1000) + (ts.tv_usec / 1000)));
#elif CONFIG_HAL_BOARD == HAL_BOARD_CHIBIOS
return ST2MS(chVTGetSystemTime());
#else
struct timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);

View File

@ -0,0 +1,86 @@
#pragma once
#define HAL_BOARD_NAME "ChibiOS"
#define HAL_CPU_CLASS HAL_CPU_CLASS_150
#define HAL_GPIO_A_LED_PIN 0
#define HAL_GPIO_B_LED_PIN 0
#define HAL_GPIO_C_LED_PIN 0
#define HAL_GPIO_LED_ON LOW
#define HAL_GPIO_LED_OFF HIGH
#define HAL_HAVE_BOARD_VOLTAGE 0
#define HAL_HAVE_SAFETY_SWITCH 0
#if CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_CHIBIOS_SKYVIPER_F412
#define HAL_CHIBIOS_ARCH_F412 1
#define HAL_INS_DEFAULT HAL_INS_MPU60XX_I2C
#define HAL_INS_DEFAULT_ROTATION ROTATION_NONE
#define HAL_INS_MPU60x0_I2C_BUS 1
#define HAL_INS_MPU60x0_I2C_ADDR 0x68
#define HAL_GPIO_RADIO_RESET 1
#define HAL_GPIO_RADIO_IRQ 2
#define HAL_RCINPUT_WITH_AP_RADIO 1
#define STORAGE_FLASH_PAGE 1
#define HAL_STORAGE_SIZE 8192
#define HAL_USE_EKF3
#elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_CHIBIOS_FMUV3
#define HAL_CHIBIOS_ARCH_FMUV3 1
#define HAL_BARO_MS5611_NAME "ms5611"
#define HAL_BARO_MS5611_SPI_INT_NAME "ms5611_int"
#define HAL_BARO_MS5611_SPI_EXT_NAME "ms5611_ext"
#define HAL_INS_MPU60x0_NAME "mpu6000"
#define HAL_INS_MPU60x0_EXT_NAME "mpu6000_ext"
#define HAL_INS_LSM9DS0_G_NAME "lsm9ds0_g"
#define HAL_INS_LSM9DS0_A_NAME "lsm9ds0_am"
#define HAL_INS_LSM9DS0_EXT_G_NAME "lsm9ds0_ext_g"
#define HAL_INS_LSM9DS0_EXT_A_NAME "lsm9ds0_ext_am"
#define HAL_INS_MPU9250_NAME "mpu9250"
#define HAL_INS_MPU9250_EXT_NAME "mpu9250_ext"
#define HAL_INS_MPU6500_NAME "mpu6500"
#define HAL_INS_ICM20608_NAME "icm20608"
#define HAL_INS_ICM20608_AM_NAME "icm20608-am"
#define HAL_INS_ICM20608_EXT_NAME "icm20608_ext"
#define HAL_COMPASS_HMC5843_NAME "hmc5843"
#define HAL_COMPASS_LIS3MDL_NAME "lis3mdl"
#define HAL_BOARD_LOG_DIRECTORY "/APM/LOGS"
#define STORAGE_FLASH_PAGE 22
#define HAL_STORAGE_SIZE 16384
// enable access to IO microcontroller
#define HAL_WITH_IO_MCU 1
// enable RAMTROM parameter storage
#define HAL_WITH_RAMTRON 1
// pixhawk2 cube has an IMU header
#define HAL_HAVE_IMU_HEATER 1
// enable FAT filesystem
#define HAL_OS_FATFS_IO 1
#endif // CONFIG_HAL_BOARD_SUBTYPE
#define HAL_STORAGE_SIZE_AVAILABLE HAL_STORAGE_SIZE
#ifndef HAL_WITH_IO_MCU
#define HAL_WITH_IO_MCU 0
#endif
#ifndef HAL_WITH_RAMTRON
#define HAL_WITH_RAMTRON 0
#endif