diff --git a/src/drivers/uavcan/sensors/sensor_bridge.cpp b/src/drivers/uavcan/sensors/sensor_bridge.cpp index 3f75077c49..6582195caa 100644 --- a/src/drivers/uavcan/sensors/sensor_bridge.cpp +++ b/src/drivers/uavcan/sensors/sensor_bridge.cpp @@ -56,28 +56,89 @@ */ void IUavcanSensorBridge::make_all(uavcan::INode &node, List &list) { - list.add(new UavcanBarometerBridge(node)); - list.add(new UavcanMagnetometerBridge(node)); - list.add(new UavcanGnssBridge(node)); - list.add(new UavcanFlowBridge(node)); + // airspeed + int32_t uavcan_sub_aspd = 1; + param_get(param_find("UAVCAN_SUB_ASPD"), &uavcan_sub_aspd); - int32_t bat_monitor; - param_t _param_bat_monitor = param_find("UAVCAN_BAT_MON"); - param_get(_param_bat_monitor, &bat_monitor); + if (uavcan_sub_aspd != 0) { + list.add(new UavcanAirspeedBridge(node)); + } - if (bat_monitor == 0) { + // baro + int32_t uavcan_sub_baro = 1; + param_get(param_find("UAVCAN_SUB_BARO"), &uavcan_sub_baro); + + if (uavcan_sub_baro != 0) { + list.add(new UavcanBarometerBridge(node)); + } + + // battery + int32_t uavcan_sub_bat = 1; + param_get(param_find("UAVCAN_SUB_BAT"), &uavcan_sub_bat); + + if (uavcan_sub_bat == 1) { list.add(new UavcanBatteryBridge(node)); - } else if (bat_monitor == 1) { + } else if (uavcan_sub_bat == 2) { list.add(new UavcanCBATBridge(node)); } - list.add(new UavcanAirspeedBridge(node)); - list.add(new UavcanDifferentialPressureBridge(node)); - list.add(new UavcanRangefinderBridge(node)); - list.add(new UavcanAccelBridge(node)); - list.add(new UavcanGyroBridge(node)); - list.add(new UavcanIceStatusBridge(node)); + // differential pressure + int32_t uavcan_sub_dpres = 1; + param_get(param_find("UAVCAN_SUB_DPRES"), &uavcan_sub_dpres); + + if (uavcan_sub_dpres != 0) { + list.add(new UavcanDifferentialPressureBridge(node)); + } + + // flow + int32_t uavcan_sub_flow = 1; + param_get(param_find("UAVCAN_SUB_FLOW"), &uavcan_sub_flow); + + if (uavcan_sub_flow != 0) { + list.add(new UavcanFlowBridge(node)); + } + + // GPS + int32_t uavcan_sub_gps = 1; + param_get(param_find("UAVCAN_SUB_GPS"), &uavcan_sub_gps); + + if (uavcan_sub_gps != 0) { + list.add(new UavcanGnssBridge(node)); + } + + // ice (internal combustion engine) + int32_t uavcan_sub_ice = 1; + param_get(param_find("UAVCAN_SUB_ICE"), &uavcan_sub_ice); + + if (uavcan_sub_ice != 0) { + list.add(new UavcanIceStatusBridge(node)); + } + + // IMU + int32_t uavcan_sub_imu = 1; + param_get(param_find("UAVCAN_SUB_IMU"), &uavcan_sub_imu); + + if (uavcan_sub_imu != 0) { + list.add(new UavcanAccelBridge(node)); + list.add(new UavcanGyroBridge(node)); + } + + // magnetometer + int32_t uavcan_sub_mag = 1; + param_get(param_find("UAVCAN_SUB_MAG"), &uavcan_sub_mag); + + if (uavcan_sub_mag != 0) { + list.add(new UavcanMagnetometerBridge(node)); + } + + // range finder + int32_t uavcan_sub_rng = 1; + param_get(param_find("UAVCAN_SUB_RNG"), &uavcan_sub_rng); + + if (uavcan_sub_rng != 0) { + list.add(new UavcanRangefinderBridge(node)); + } } /* diff --git a/src/drivers/uavcan/sensors/sensor_bridge.hpp b/src/drivers/uavcan/sensors/sensor_bridge.hpp index b71a9edcc5..4cc765f1be 100644 --- a/src/drivers/uavcan/sensors/sensor_bridge.hpp +++ b/src/drivers/uavcan/sensors/sensor_bridge.hpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2014, 2015 PX4 Development Team. All rights reserved. + * Copyright (c) 2014-2021 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/src/drivers/uavcan/uavcan_params.c b/src/drivers/uavcan/uavcan_params.c index 1d5c0edf0b..b8fe597c81 100644 --- a/src/drivers/uavcan/uavcan_params.c +++ b/src/drivers/uavcan/uavcan_params.c @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2014-2017 PX4 Development Team. All rights reserved. + * Copyright (c) 2014-2021 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -195,18 +195,131 @@ PARAM_DEFINE_INT32(UAVCAN_LGT_NAV, 3); PARAM_DEFINE_INT32(UAVCAN_LGT_LAND, 0); /** - * UAVCAN BATTERY_MONITOR battery monitor selection + * subscription airspeed * - * This parameter defines that the system will select the battery monitor under the following conditions + * Enable UAVCAN airspeed subscriptions. + * uavcan::equipment::air_data::IndicatedAirspeed + * uavcan::equipment::air_data::TrueAirspeed + * uavcan::equipment::air_data::StaticTemperature * - * 0 - default battery monitor - * 1 - CUAV battery monitor - * - * @min 0 - * @max 1 - * @value 0 default battery monitor - * @value 1 CUAV battery monitor + * @boolean * @reboot_required true * @group UAVCAN */ -PARAM_DEFINE_INT32(UAVCAN_BAT_MON, 0); +PARAM_DEFINE_INT32(UAVCAN_SUB_ASPD, 0); + +/** + * subscription barometer + * + * Enable UAVCAN barometer subscription. + * uavcan::equipment::air_data::StaticPressure + * uavcan::equipment::air_data::StaticTemperature + * + * @boolean + * @reboot_required true + * @group UAVCAN + */ +PARAM_DEFINE_INT32(UAVCAN_SUB_BARO, 0); + +/** + * subscription battery + * + * Enable UAVCAN battery subscription. + * 1) uavcan::equipment::power::BatteryInfo + * 2) cuav::equipment::power::CBAT + * + * @min 0 + * @max 2 + * @value 0 disabled + * @value 1 default + * @value 2 CUAV battery monitor + * @reboot_required true + * @group UAVCAN + */ +PARAM_DEFINE_INT32(UAVCAN_SUB_BAT, 0); + +/** + * subscription differential pressure + * + * Enable UAVCAN differential pressure subscription. + * uavcan::equipment::air_data::RawAirData + * + * @boolean + * @reboot_required true + * @group UAVCAN + */ +PARAM_DEFINE_INT32(UAVCAN_SUB_DPRES, 0); + +/** + * subscription flow + * + * Enable UAVCAN optical flow subscription. + * + * @boolean + * @reboot_required true + * @group UAVCAN + */ +PARAM_DEFINE_INT32(UAVCAN_SUB_FLOW, 0); + +/** + * subscription GPS + * + * Enable UAVCAN GPS subscriptions. + * uavcan::equipment::gnss::Fix + * uavcan::equipment::gnss::Fix2 + * uavcan::equipment::gnss::Auxiliary + * + * @boolean + * @reboot_required true + * @group UAVCAN + */ +PARAM_DEFINE_INT32(UAVCAN_SUB_GPS, 1); + +/** + * subscription ICE + * + * Enable UAVCAN internal combusion engine (ICE) subscription. + * uavcan::equipment::ice::reciprocating::Status + * + * @boolean + * @reboot_required true + * @group UAVCAN + */ +PARAM_DEFINE_INT32(UAVCAN_SUB_ICE, 0); + +/** + * subscription IMU + * + * Enable UAVCAN IMU subscription. + * uavcan::equipment::ahrs::RawIMU + * + * @boolean + * @reboot_required true + * @group UAVCAN + */ +PARAM_DEFINE_INT32(UAVCAN_SUB_IMU, 0); + +/** + * subscription magnetometer + * + * Enable UAVCAN GPS subscription. + * uavcan::equipment::ahrs::MagneticFieldStrength + * uavcan::equipment::ahrs::MagneticFieldStrength2 + * + * @boolean + * @reboot_required true + * @group UAVCAN + */ +PARAM_DEFINE_INT32(UAVCAN_SUB_MAG, 1); + +/** + * subscription range finder + * + * Enable UAVCAN GPS subscription. + * uavcan::equipment::range_sensor::Measurement + * + * @boolean + * @reboot_required true + * @group UAVCAN + */ +PARAM_DEFINE_INT32(UAVCAN_SUB_RNG, 0);