diff --git a/libraries/AP_HAL/board/linux.h b/libraries/AP_HAL/board/linux.h index 9dcaae7181..1565be3725 100644 --- a/libraries/AP_HAL/board/linux.h +++ b/libraries/AP_HAL/board/linux.h @@ -1,5 +1,7 @@ #pragma once +#include + #define HAL_BOARD_NAME "Linux" #define HAL_CPU_CLASS HAL_CPU_CLASS_1000 #define HAL_MEM_CLASS HAL_MEM_CLASS_1000 @@ -22,15 +24,8 @@ #define PROBE_MAG_IMU_I2C(driver, imudev, bus, addr, args ...) ADD_BACKEND(DRIVER_ ##driver, AP_Compass_ ## driver::probe_ ## imudev(GET_I2C_DEVICE(bus,addr),##args)) #if CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_NONE - #define HAL_BOARD_LOG_DIRECTORY "logs" - #define HAL_BOARD_TERRAIN_DIRECTORY "terrain" - #define HAL_BOARD_STORAGE_DIRECTORY "." - #define HAL_INS_DEFAULT HAL_INS_NONE - #define HAL_BARO_DEFAULT HAL_BARO_NONE + // nothing to do here #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_PXF || CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_ERLEBOARD - #if CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_PXF - #define AP_NOTIFY_TONEALARM_ENABLED 1 - #endif #if CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_PXF #define HAL_INS_PROBE_LIST PROBE_IMU_SPI(Invensense, "mpu9250", ROTATION_ROLL_180_YAW_270) #else @@ -39,140 +34,41 @@ #define HAL_BARO_PROBE_LIST PROBE_BARO_SPI(MS56XX, "ms5611") #define HAL_MAG_PROBE_LIST PROBE_MAG_IMU(AK8963, mpu9250, 0, ROTATION_NONE) #define HAL_PROBE_EXTERNAL_I2C_COMPASSES - #define AP_NOTIFY_GPIO_LED_3_ENABLED 1 - #define HAL_GPIO_A_LED_PIN 61 - #define HAL_GPIO_B_LED_PIN 48 - #define HAL_GPIO_C_LED_PIN 117 #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_BEBOP - #define HAL_BOARD_LOG_DIRECTORY "/data/ftp/internal_000/ardupilot/logs" - #define HAL_BOARD_TERRAIN_DIRECTORY "/data/ftp/internal_000/ardupilot/terrain" - #define HAL_BOARD_STORAGE_DIRECTORY "/data/ftp/internal_000/ardupilot" #define HAL_INS_PROBE_LIST PROBE_IMU_I2C(Invensense, 2, 0x68, ROTATION_YAW_270) #define HAL_MAG_PROBE_LIST PROBE_MAG_I2C(AK8963, 1, 0x0d, ROTATION_NONE) #define HAL_BARO_PROBE_LIST PROBE_BARO_I2C(MS56XX, 1, 0x77, AP_Baro_MS56XX::BARO_MS5607) - #define HAL_HAVE_IMU_HEATER 1 - #define HAL_IMU_TEMP_DEFAULT 55 - #define HAL_UTILS_HEAT HAL_LINUX_HEAT_PWM - #define HAL_LINUX_HEAT_PWM_NUM 6 - #define HAL_LINUX_HEAT_KP 20000 - #define HAL_LINUX_HEAT_KI 6 - #define HAL_LINUX_HEAT_PERIOD_NS 125000 - #define HAL_LINUX_HEAT_TARGET_TEMP 50 - #define BEBOP_CAMV_PWM 9 - #define BEBOP_CAMV_PWM_FREQ 43333333 - #define OPTICAL_FLOW_TYPE_DEFAULT Type::BEBOP - #define HAL_OPTFLOW_ONBOARD_VDEV_PATH "/dev/video0" - #define HAL_OPTFLOW_ONBOARD_SUBDEV_PATH "/dev/v4l-subdev0" - #define HAL_OPTFLOW_ONBOARD_SENSOR_WIDTH 320 - #define HAL_OPTFLOW_ONBOARD_SENSOR_HEIGHT 240 - #define HAL_OPTFLOW_ONBOARD_OUTPUT_WIDTH 64 - #define HAL_OPTFLOW_ONBOARD_OUTPUT_HEIGHT 64 - #define HAL_OPTFLOW_ONBOARD_CROP_WIDTH 240 - #define HAL_OPTFLOW_ONBOARD_CROP_HEIGHT 240 - #define HAL_OPTFLOW_ONBOARD_NBUFS 8 - #define HAL_FLOW_PX4_MAX_FLOW_PIXEL 4 - #define HAL_FLOW_PX4_BOTTOM_FLOW_FEATURE_THRESHOLD 30 - #define HAL_FLOW_PX4_BOTTOM_FLOW_VALUE_THRESHOLD 5000 - #define HAL_PARAM_DEFAULTS_PATH "/data/ftp/internal_000/ardupilot/bebop.parm" - #define HAL_RCOUT_BEBOP_BLDC_I2C_BUS 1 - #define HAL_RCOUT_BEBOP_BLDC_I2C_ADDR 0x08 - /* focal length 2.21mm pixel size 3.6 um, 2x binning in each direction - * 240x240 crop rescaled to 64x64 */ - #define HAL_FLOW_PX4_FOCAL_LENGTH_MILLIPX (2.21 / (3.6 * 2.0 * 240 / 64)) - #define HAL_RANGEFINDER_LIGHTWARE_I2C_BUS 0 - #define HAL_BATT_MONITOR_DEFAULT AP_BattMonitor::Type::BEBOP #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_VNAV - // linux SBC with VectorNav AHRS - #define HAL_EXTERNAL_AHRS_DEFAULT 1 - #define DEFAULT_SERIAL3_PROTOCOL 36 - #define HAL_AIRSPEED_TYPE_DEFAULT 0 - #define HAL_GPS1_TYPE_DEFAULT 21 - #define HAL_AHRS_EKF_TYPE_DEFAULT 11 + // nothing to do here #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_DISCO - #define HAL_BOARD_LOG_DIRECTORY "/data/ftp/internal_000/ardupilot/logs" - #define HAL_BOARD_TERRAIN_DIRECTORY "/data/ftp/internal_000/ardupilot/terrain" - #define HAL_BOARD_STORAGE_DIRECTORY "/data/ftp/internal_000/ardupilot" #define HAL_INS_PROBE_LIST PROBE_IMU_I2C(Invensense, 2, 0x68, ROTATION_PITCH_180_YAW_90) #define HAL_MAG_PROBE_LIST PROBE_MAG_I2C(AK8963, 1, 0x0d, ROTATION_NONE) #define HAL_BARO_PROBE_LIST PROBE_BARO_I2C(MS56XX, 1, 0x77, AP_Baro_MS56XX::BARO_MS5607) - #define HAL_UTILS_HEAT HAL_LINUX_HEAT_PWM - #define HAL_LINUX_HEAT_PWM_NUM 10 - #define HAL_LINUX_HEAT_KP 20000 - #define HAL_LINUX_HEAT_KI 6 - #define HAL_LINUX_HEAT_PERIOD_NS 125000 - #define HAL_LINUX_HEAT_TARGET_TEMP 50 - #define BEBOP_CAMV_PWM 9 - #define BEBOP_CAMV_PWM_FREQ 43333333 - #define HAL_OPTFLOW_ONBOARD_VDEV_PATH "/dev/video0" - #define HAL_OPTFLOW_ONBOARD_SUBDEV_PATH "/dev/v4l-subdev0" - #define HAL_OPTFLOW_ONBOARD_SENSOR_WIDTH 320 - #define HAL_OPTFLOW_ONBOARD_SENSOR_HEIGHT 240 - #define HAL_OPTFLOW_ONBOARD_OUTPUT_WIDTH 64 - #define HAL_OPTFLOW_ONBOARD_OUTPUT_HEIGHT 64 - #define HAL_OPTFLOW_ONBOARD_CROP_WIDTH 240 - #define HAL_OPTFLOW_ONBOARD_CROP_HEIGHT 240 - #define HAL_OPTFLOW_ONBOARD_NBUFS 8 - #define HAL_FLOW_PX4_MAX_FLOW_PIXEL 4 - #define HAL_FLOW_PX4_BOTTOM_FLOW_FEATURE_THRESHOLD 30 - #define HAL_FLOW_PX4_BOTTOM_FLOW_VALUE_THRESHOLD 5000 - #define HAL_RCOUT_DISCO_BLDC_I2C_BUS 1 - #define HAL_RCOUT_DISCO_BLDC_I2C_ADDR 0x08 - #define HAL_PARAM_DEFAULTS_PATH "/data/ftp/internal_000/ardupilot/disco.parm" - /* focal length 2.21mm pixel size 3.6 um, 2x binning in each direction - * 240x240 crop rescaled to 64x64 */ - #define HAL_FLOW_PX4_FOCAL_LENGTH_MILLIPX (2.21 / (3.6 * 2.0 * 240 / 64)) - #define HAL_RANGEFINDER_LIGHTWARE_I2C_BUS 0 - // the disco has challenges with its magnetic setup - #define AP_COMPASS_OFFSETS_MAX_DEFAULT 2200 - #define HAL_BATT_MONITOR_DEFAULT AP_BattMonitor::Type::BEBOP - #define HAL_GPIO_SCRIPT "/data/ftp/internal_000/ardupilot/gpio.sh" - #define AP_NOTIFY_DISCO_LED_ENABLED 1 #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_NAVIO - #define AP_NOTIFY_GPIO_LED_3_ENABLED 1 - #define HAL_GPIO_A_LED_PIN 0 - #define HAL_GPIO_B_LED_PIN 1 - #define HAL_GPIO_C_LED_PIN 2 - #define HAL_GPIO_LED_ON 1 #define HAL_INS_PROBE_LIST PROBE_IMU_SPI(Invensense, "mpu9250", ROTATION_NONE) #define HAL_BARO_PROBE_LIST PROBE_BARO_I2C(MS56XX, 1, 0x77) #define HAL_MAG_PROBE_LIST PROBE_MAG_IMU(AK8963, mpu9250, 0, ROTATION_NONE) #define HAL_PROBE_EXTERNAL_I2C_COMPASSES #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_NAVIO2 - #define HAL_HAVE_SERVO_VOLTAGE 1 #define HAL_INS_PROBE_LIST PROBE_IMU_SPI(Invensense, "mpu9250", ROTATION_NONE) #define HAL_BARO_PROBE_LIST PROBE_BARO_I2C(MS56XX, 1, 0x77) #define HAL_MAG_PROBE1 PROBE_MAG_SPI(LSM9DS1, "lsm9ds1_m", ROTATION_ROLL_180) #define HAL_MAG_PROBE2 PROBE_MAG_IMU(AK8963, mpu9250, 0, ROTATION_NONE) #define HAL_MAG_PROBE_LIST HAL_MAG_PROBE1; HAL_MAG_PROBE2 #define HAL_PROBE_EXTERNAL_I2C_COMPASSES - #define AP_NOTIFY_SYSFS_LED_ENABLED 1 - #define AP_RCPROTOCOL_EMLID_RCIO_ENABLED 1 #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_ERLEBRAIN2 #define HAL_INS_PROBE_LIST PROBE_IMU_SPI(Invensense, "mpu9250", ROTATION_YAW_270) #define HAL_BARO_PROBE_LIST PROBE_BARO_SPI(MS56XX, "ms5611") #define HAL_MAG_PROBE_LIST PROBE_MAG_IMU(AK8963, mpu9250, 0, ROTATION_NONE) #define HAL_PROBE_EXTERNAL_I2C_COMPASSES - #define AP_NOTIFY_GPIO_LED_3_ENABLED 1 - #define HAL_GPIO_A_LED_PIN 24 - #define HAL_GPIO_B_LED_PIN 25 - #define HAL_GPIO_C_LED_PIN 16 #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_ZYNQ - // Stub the sensors out for now, at least we can build and run - #define HAL_INS_DEFAULT HAL_INS_NONE - #define HAL_BARO_DEFAULT HAL_BARO_NONE - // only external compasses - #define HAL_PROBE_EXTERNAL_I2C_COMPASSES + // nothing to do here #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_OCPOC_ZYNQ #define HAL_INS_PROBE_LIST PROBE_IMU_SPI(Invensense, "mpu9250", ROTATION_NONE) #define HAL_BARO_PROBE_LIST PROBE_BARO_SPI(MS56XX, "ms5611") #define HAL_MAG_PROBE_LIST PROBE_MAG_IMU(AK8963, mpu9250, 0, ROTATION_NONE) #define HAL_PROBE_EXTERNAL_I2C_COMPASSES #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_BBBMINI - #define AP_NOTIFY_GPIO_LED_3_ENABLED 1 - #define HAL_GPIO_A_LED_PIN 69 - #define HAL_GPIO_B_LED_PIN 68 - #define HAL_GPIO_C_LED_PIN 45 - #define HAL_BUZZER_PIN 11 #define HAL_INS_PROBE1 PROBE_IMU_SPI(Invensense, "mpu9250", ROTATION_NONE) #define HAL_INS_PROBE2 PROBE_IMU_SPI(Invensense, "mpu9250ext", ROTATION_NONE) #define HAL_INS_PROBE_LIST HAL_INS_PROBE1; HAL_INS_PROBE2 @@ -181,9 +77,6 @@ #define HAL_MAG_PROBE2 PROBE_MAG_IMU(AK8963, mpu9250, 1, ROTATION_NONE) #define HAL_MAG_PROBE_LIST HAL_MAG_PROBE1; HAL_MAG_PROBE2 #define HAL_PROBE_EXTERNAL_I2C_COMPASSES - #define HAL_OPTFLOW_PX4FLOW_I2C_BUS 2 - #define HAL_RANGEFINDER_LIGHTWARE_I2C_BUS 2 - #define HAL_NUM_CAN_IFACES 1 #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_NAVIGATOR #define HAL_INS_PROBE_LIST PROBE_IMU_SPI(Invensense, "icm20602", ROTATION_ROLL_180_YAW_270) #define HAL_MAG_PROBE1 PROBE_MAG_SPI(MMC5XX3, "mmc5983", false, ROTATION_YAW_180) @@ -192,37 +85,16 @@ #define HAL_BARO_PROBE_LIST PROBE_BARO_I2C(BMP280, 1, 0x76); PROBE_BARO_I2C(BMP388, 1, 0x76) #define HAL_BARO_EXTERNAL_BUS_DEFAULT 6 #define HAL_PROBE_EXTERNAL_I2C_COMPASSES - // I2C6 is the only i2c one exposed on a header - #define HAL_LINUX_I2C_EXTERNAL_BUS_MASK 1 << 6 - // We don't want any probing on the internal buses - #define HAL_LINUX_I2C_INTERNAL_BUS_MASK 0 - #define AP_NOTIFY_NAVIGATOR_LED_ENABLED 1 #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_BLUE - #define AP_NOTIFY_GPIO_LED_2_ENABLED 1 - #define HAL_GPIO_A_LED_PIN 66 - #define HAL_GPIO_B_LED_PIN 67 - #define HAL_GPIO_LED_ON 1 #define HAL_INS_PROBE_LIST PROBE_IMU_I2C(Invensense, 2, 0x68, ROTATION_NONE) #define HAL_BARO_PROBE_LIST PROBE_BARO_I2C(BMP280, 2, 0x76) #define HAL_MAG_PROBE_LIST PROBE_MAG_IMU_I2C(AK8963, mpu9250, 2, 0x0c, ROTATION_NONE) #define HAL_PROBE_EXTERNAL_I2C_COMPASSES - #define HAL_OPTFLOW_PX4FLOW_I2C_BUS 1 - #define HAL_RANGEFINDER_LIGHTWARE_I2C_BUS 1 - #define HAL_NUM_CAN_IFACES 1 #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_POCKET - #define AP_NOTIFY_GPIO_LED_3_ENABLED 1 - #define HAL_GPIO_A_LED_PIN 59 - #define HAL_GPIO_B_LED_PIN 58 - #define HAL_GPIO_C_LED_PIN 57 - #define HAL_GPIO_LED_ON 1 - #define HAL_BUZZER_PIN 28 #define HAL_INS_PROBE_LIST PROBE_IMU_SPI(Invensense, "mpu9250", ROTATION_NONE) #define HAL_BARO_PROBE_LIST PROBE_BARO_SPI(BMP280, "bmp280") #define HAL_MAG_PROBE_LIST PROBE_MAG_IMU(AK8963, mpu9250, 0, ROTATION_NONE) #define HAL_PROBE_EXTERNAL_I2C_COMPASSES - #define HAL_OPTFLOW_PX4FLOW_I2C_BUS 2 - #define HAL_RANGEFINDER_LIGHTWARE_I2C_BUS 2 - #define HAL_NUM_CAN_IFACES 1 #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_BH #define HAL_BARO_PROBE_LIST PROBE_BARO_I2C(MS56XX, 1, 0x77) #define HAL_INS_PROBE1 PROBE_IMU_I2C(Invensense, 1, 0x69, ROTATION_NONE) @@ -230,23 +102,11 @@ #define HAL_INS_PROBE_LIST HAL_INS_PROBE1; HAL_INS_PROBE2 #define HAL_MAG_PROBE_LIST PROBE_MAG_IMU(AK8963, mpu9250, 0, ROTATION_NONE) #define HAL_PROBE_EXTERNAL_I2C_COMPASSES - #define AP_NOTIFY_GPIO_LED_3_ENABLED 1 - #define HAL_GPIO_A_LED_PIN 17 - #define HAL_GPIO_B_LED_PIN 18 - #define HAL_GPIO_C_LED_PIN 22 - #define AP_NOTIFY_RCOUTPUTRGBLED_LED_ENABLED 1 - #define HAL_RCOUT_RGBLED_RED 13 - #define HAL_RCOUT_RGBLED_GREEN 14 - #define HAL_RCOUT_RGBLED_BLUE 15 #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_PXFMINI #define HAL_INS_PROBE_LIST PROBE_IMU_SPI(Invensense, "mpu9250", ROTATION_YAW_270) #define HAL_BARO_PROBE_LIST PROBE_BARO_SPI(MS56XX, "ms5611") #define HAL_MAG_PROBE_LIST PROBE_MAG_IMU(AK8963, mpu9250, 0, ROTATION_NONE) #define HAL_PROBE_EXTERNAL_I2C_COMPASSES - #define AP_NOTIFY_GPIO_LED_3_ENABLED 1 - #define HAL_GPIO_A_LED_PIN 24 - #define HAL_GPIO_B_LED_PIN 25 - #define HAL_GPIO_C_LED_PIN 16 #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_AERO #define HAL_INS_PROBE_LIST PROBE_IMU_SPI(BMI160, "bmi160") #define HAL_BARO_PROBE_LIST PROBE_BARO_I2C(MS56XX, 2, 0x76) @@ -254,95 +114,31 @@ #define HAL_MAG_PROBE2 PROBE_MAG_I2C(HMC5843, 4, 0x1e, true, ROTATION_NONE) #define HAL_MAG_PROBE3 PROBE_MAG_I2C(IST8310, 4, 0x0e, true, ROTATION_PITCH_180_YAW_90) #define HAL_MAG_PROBE_LIST HAL_MAG_PROBE1; HAL_MAG_PROBE2; HAL_MAG_PROBE3 - #define HAL_RCOUTPUT_TAP_DEVICE "/dev/ttyS1" - #define HAL_NUM_CAN_IFACES 1 #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_DARK #define HAL_INS_PROBE_LIST PROBE_IMU_SPI(Invensense, "mpu9250", ROTATION_NONE) #define HAL_MAG_PROBE_LIST PROBE_MAG_IMU(AK8963, mpu9250, 0, ROTATION_NONE) #define HAL_BARO_PROBE_LIST PROBE_BARO_I2C(MS56XX, 1, 0x77) - #define AP_NOTIFY_GPIO_LED_3_ENABLED 1 - #define HAL_GPIO_A_LED_PIN 24 - #define HAL_GPIO_B_LED_PIN 25 - #define HAL_GPIO_C_LED_PIN 16 #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_EDGE - #define HAL_BOARD_LOG_DIRECTORY "/edge/ardupilot/logs" - #define HAL_BOARD_TERRAIN_DIRECTORY "/edge/ardupilot/terrain" - #define HAL_BOARD_STORAGE_DIRECTORY "/edge/ardupilot" #define HAL_INS_PROBE1 PROBE_IMU_SPI(Invensense, "mpu60x0", ROTATION_YAW_90) #define HAL_INS_PROBE2 PROBE_IMU_SPI(Invensense, "mpu60x0ext", ROTATION_YAW_90) #define HAL_INS_PROBE_LIST HAL_INS_PROBE1; HAL_INS_PROBE2 #define HAL_BARO_PROBE_LIST PROBE_BARO_SPI(MS56XX, "ms5611") // only external compasses #define HAL_PROBE_EXTERNAL_I2C_COMPASSES - #define HAL_NUM_CAN_IFACES 1 - #define HAL_IMU_TEMP_DEFAULT 55 - #define HAL_HAVE_IMU_HEATER 1 - #define HAL_UTILS_HEAT HAL_LINUX_HEAT_PWM - #define HAL_LINUX_HEAT_PWM_NUM 15 - #define HAL_LINUX_HEAT_KP 20000 - #define HAL_LINUX_HEAT_KI 6 - #define HAL_LINUX_HEAT_PERIOD_NS 2040816 - #define HAL_GPS1_TYPE_DEFAULT 9 - #define HAL_CAN_DRIVER_DEFAULT 1 - #define AP_NOTIFY_RCOUTPUTRGBLEDINVERTED_LED_ENABLED 1 - #define AP_RCPROTOCOL_EMLID_RCIO_ENABLED 1 #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_RST_ZYNQ #define HAL_INS_PROBE_LIST PROBE_IMU_SPI2(Invensense, "rst_g", "rst_a", ROTATION_ROLL_180_YAW_90, ROTATION_ROLL_180_YAW_90) #define HAL_BARO_PROBE_LIST PROBE_BARO_SPI(MS56XX, "ms5611") #define HAL_MAG_PROBE_LIST PROBE_MAG_SPI(LIS3MDL, lis3mdl, false, ROTATION_ROLL_180_YAW_90) - #define HAL_OPTFLOW_PX4FLOW_I2C_BUS 0 #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_CANZERO #define HAL_INS_PROBE_LIST PROBE_IMU_SPI(Invensense, "mpu9250", ROTATION_NONE) #define HAL_BARO_PROBE_LIST PROBE_BARO_SPI(MS56XX, "ms5611") #define HAL_MAG_PROBE_LIST PROBE_MAG_IMU(AK8963, mpu9250, 0, ROTATION_NONE) - #define HAL_PROBE_EXTERNAL_I2C_COMPASSES - #define HAL_NUM_CAN_IFACES 1 - #define HAL_CAN_DRIVER_DEFAULT 1 - #define AP_NOTIFY_GPIO_LED_3_ENABLED 1 - #define HAL_GPIO_A_LED_PIN 22 - #define HAL_GPIO_B_LED_PIN 27 - #define HAL_GPIO_C_LED_PIN 6 - #define HAL_BOARD_LOG_DIRECTORY "/home/pi/ardupilot/logs" - #define HAL_BOARD_TERRAIN_DIRECTORY "/home/pi/ardupilot/terrain" - #define HAL_BOARD_STORAGE_DIRECTORY "/home/pi/ardupilot" - #define HAL_DEFAULT_INS_FAST_SAMPLE 0 #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_OBAL_V1 - - //#define HAL_BARO_ALLOW_INIT_NO_BARO - - // Activate SUB Model Configuratopm - #define HAL_BOARD_SUBTYPE_LINUX_OBAL_V1_MPU_9250_SPI - - // Define Notify - #define OBAL_NOTIFY_LED - - - // GY-91 SPI Connection - #ifdef HAL_BOARD_SUBTYPE_LINUX_OBAL_V1_MPU_9250_SPI - #define HAL_BOARD_LOG_DIRECTORY "/home/pi/ardupilot/logs" - #define HAL_BOARD_TERRAIN_DIRECTORY "/home/pi/ardupilot/terrain" - #define HAL_BOARD_STORAGE_DIRECTORY "/home/pi/ardupilot" - #define HAL_PARAM_DEFAULTS_PATH "/home/pi/ardupilot.parm" - #define HAL_INS_PROBE_LIST PROBE_IMU_SPI(Invensense, "mpu9250", ROTATION_NONE) #define HAL_MAG_PROBE_LIST PROBE_MAG_IMU(AK8963, mpu9250, 0, ROTATION_NONE) #define HAL_BARO_PROBE_LIST PROBE_BARO_I2C(BMP085, 1, 0x77) - //#define HAL_MAG_PROBE_LIST PROBE_MAG_I2C(QMC5883L, 1, 0x0d,true , ROTATION_NONE) - #define HAL_PROBE_EXTERNAL_I2C_COMPASSES - #endif - - - #ifdef OBAL_NOTIFY_LED - #define AP_NOTIFY_GPIO_LED_3_ENABLED 1 - #define HAL_GPIO_A_LED_PIN 27 // You can choose between 27,22,4,12 - #define HAL_GPIO_C_LED_PIN 22 // You can choose between 27,22,4,12 - #define HAL_GPIO_B_LED_PIN 4 // You can choose between 27,22,4,12 - #define HAL_GPIO_LED_ON 1 - #endif - #define HAL_BUZZER_PIN 12 // You can choose between 27,22,4,12 - #define OBAL_ALLOW_ADC 1 - + //#define HAL_MAG_PROBE_LIST PROBE_MAG_I2C(QMC5883L, 1, 0x0d,true , ROTATION_NONE) #else #error "no Linux board subtype set" #endif diff --git a/libraries/AP_HAL/hwdef/scripts/hwdef.py b/libraries/AP_HAL/hwdef/scripts/hwdef.py new file mode 100644 index 0000000000..eb06227efc --- /dev/null +++ b/libraries/AP_HAL/hwdef/scripts/hwdef.py @@ -0,0 +1,223 @@ +''' +base class for hwdef processing + +AP_FLAKE8_CLEAN +''' + +import filecmp +import os +import re +import shlex +import sys + + +class IncludeNotFoundException(Exception): + def __init__(self, hwdef, includer): + self.hwdef = hwdef + self.includer = includer + + +class HWDef: + def __init__(self, quiet=False, outdir=None, hwdef=[]): + self.outdir = outdir + self.hwdef = hwdef + self.quiet = quiet + + # dictionary of all config lines, indexed by first word + self.config = {} + + # all config lines in order + self.alllines = [] + + # allow for extra env vars + self.env_vars = {} + + # output lines: + self.all_lines = [] + + # integer defines + self.intdefines = {} + + # boolean indicating whether we have read and processed self.hwdef + self.processed_hwdefs = False + + def is_int(self, str): + '''check if a string is an integer''' + try: + int(str) + except Exception: + return False + return True + + def error(self, str): + '''show an error and exit''' + print("Error: " + str) + sys.exit(1) + + def load_file_with_include(self, fname): + '''load a file as an array of lines, processing any include lines''' + lines = open(fname, 'r').readlines() + ret = [] + for line in lines: + if line.startswith("include"): + a = shlex.split(line) + if len(a) > 1 and a[0] == "include": + fname2 = os.path.relpath(os.path.join(os.path.dirname(fname), a[1])) + ret.extend(self.load_file_with_include(fname2)) + continue + ret.append(line) + return ret + + def get_numeric_board_id(self): + '''return a numeric board ID, which may require mapping a string to a + number via board_list.txt''' + some_id = self.get_config('APJ_BOARD_ID') + if some_id.isnumeric(): + return some_id + + board_types_filename = "board_types.txt" + topdir = os.path.join(os.path.dirname(os.path.realpath(__file__)), '../../../..') + board_types_dirpath = os.path.join(topdir, "Tools", "AP_Bootloader") + board_types_filepath = os.path.join(board_types_dirpath, board_types_filename) + for line in open(board_types_filepath, 'r'): + m = re.match(r"(?P[-\w]+)\s+(?P\d+)", line) + if m is None: + continue + if m.group('name') == some_id: + return m.group('board_id') + + raise ValueError("Unable to map (%s) to a board ID using %s" % + (some_id, board_types_filepath)) + + def write_all_lines(self, hwdat): + f = open(hwdat, 'w') + f.write('\n'.join(self.all_lines)) + f.close() + + def write_defaulting_define(self, f, name, value): + f.write(f"#ifndef {name}\n") + f.write(f"#define {name} {value}\n") + f.write("#endif\n") + + def write_define(self, f, name, value): + f.write(f"#define {name} {value}\n") + + def write_hwdef_header(self, outfilename): + '''write hwdef header file''' + self.progress("Writing hwdef setup in %s" % outfilename) + tmpfile = outfilename + ".tmp" + f = open(tmpfile, 'w') + + f.write('''/* + generated hardware definitions from hwdef.dat - DO NOT EDIT +*/ + +#pragma once + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +''') + + self.write_hwdef_header_content(f) + + f.close() + # see if we ended up with the same file, on an unnecessary reconfigure + try: + if filecmp.cmp(outfilename, tmpfile): + self.progress("No change in hwdef.h") + os.unlink(tmpfile) + return + except Exception: + pass + try: + os.unlink(outfilename) + except Exception: + pass + os.rename(tmpfile, outfilename) + + def progress(self, message): + if self.quiet: + return + print(message) + + def process_file(self, filename, depth=0): + '''process a hwdef.dat file''' + try: + f = open(filename, "r") + except Exception: + self.error("Unable to open file %s" % filename) + for line in f.readlines(): + line = line.split('#')[0] # ensure we discard the comments + line = line.strip() + if len(line) == 0 or line[0] == '#': + continue + a = shlex.split(line) + if a[0] == "include" and len(a) > 1: + include_file = a[1] + if include_file[0] != '/': + dir = os.path.dirname(filename) + include_file = os.path.normpath( + os.path.join(dir, include_file)) + self.progress("Including %s" % include_file) + self.process_file(include_file, depth+1) + else: + self.process_line(line, depth) + + def process_hwdefs(self): + for fname in self.hwdef: + self.process_file(fname) + self.processed_hwdefs = True + + def run(self): + # process input file + self.process_hwdefs() + + # write out hwdef.h + self.write_hwdef_header(os.path.join(self.outdir, "hwdef.h")) + + def process_line(self, line, depth): + '''process one line of pin definition file''' + self.all_lines.append(line) + a = shlex.split(line, posix=False) + # keep all config lines for later use + self.alllines.append(line) + + if a[0] == 'undef': + for u in a[1:]: + self.progress("Removing %s" % u) + self.config.pop(u, '') + self.intdefines.pop(u, '') + # also remove all occurences of defines in previous lines if any + for line in self.alllines[:]: + if line.startswith('define') and u == line.split()[1] or line.startswith('STM32_') and u == line.split()[0]: # noqa + self.alllines.remove(line) + return + + if a[0] == 'env': + self.progress("Adding environment %s" % ' '.join(a[1:])) + if len(a[1:]) < 2: + self.error("Bad env line for %s" % a[0]) + name = a[1] + value = ' '.join(a[2:]) + self.env_vars[name] = value + + return + + if a[0] == 'define': + # extract numerical defines for processing by other parts of the script + result = re.match(r'define\s*([A-Z_0-9]+)\s+([0-9]+)', line) + if result: + (name, intvalue) = (result.group(1), int(result.group(2))) + if name in self.intdefines and self.intdefines[name] == intvalue: + msg = f"{name} already in defines with same value" + if depth == 0: + print(msg) + # raise ValueError(msg) + + self.intdefines[name] = intvalue