SRV_Channel: reduce dependencies for AP_Periph builds

This commit is contained in:
Tom Pittenger 2020-12-01 03:30:12 -08:00 committed by Tom Pittenger
parent 5b58163c35
commit c01726b07d
3 changed files with 55 additions and 1 deletions

View File

@ -21,7 +21,11 @@
#include <AP_SBusOut/AP_SBusOut.h>
#include <AP_BLHeli/AP_BLHeli.h>
#define NUM_SERVO_CHANNELS 16
#if !defined(NUM_SERVO_CHANNELS) && defined(HAL_BUILD_AP_PERIPH) && defined(HAL_PWM_COUNT) && (HAL_PWM_COUNT >= 1)
#define NUM_SERVO_CHANNELS HAL_PWM_COUNT
#else
#define NUM_SERVO_CHANNELS 16
#endif
class SRV_Channels;
@ -525,6 +529,7 @@ private:
static SRV_Channel *channels;
static SRV_Channels *_singleton;
#ifndef HAL_BUILD_AP_PERIPH
// support for Volz protocol
AP_Volz_Protocol volz;
static AP_Volz_Protocol *volz_ptr;
@ -542,6 +547,8 @@ private:
AP_BLHeli blheli;
static AP_BLHeli *blheli_ptr;
#endif
#endif // HAL_BUILD_AP_PERIPH
static uint16_t disabled_mask;
// mask of outputs which use a digital output protocol, not

View File

@ -26,6 +26,7 @@ extern const AP_HAL::HAL& hal;
/// map a function to a servo channel and output it
void SRV_Channel::output_ch(void)
{
#ifndef HAL_BUILD_AP_PERIPH
int8_t passthrough_from = -1;
// take care of special function cases
@ -59,6 +60,8 @@ void SRV_Channel::output_ch(void)
}
}
}
#endif // HAL_BUILD_AP_PERIPH
if (!(SRV_Channels::disabled_mask & (1U<<ch_num))) {
hal.rcout->write(ch_num, output_pwm);
}

View File

@ -38,9 +38,13 @@ extern const AP_HAL::HAL& hal;
SRV_Channel *SRV_Channels::channels;
SRV_Channels *SRV_Channels::_singleton;
#ifndef HAL_BUILD_AP_PERIPH
AP_Volz_Protocol *SRV_Channels::volz_ptr;
AP_SBusOut *SRV_Channels::sbus_ptr;
AP_RobotisServo *SRV_Channels::robotis_ptr;
#endif // HAL_BUILD_AP_PERIPH
uint16_t SRV_Channels::override_counter[NUM_SERVO_CHANNELS];
#if HAL_SUPPORT_RCOUT_SERIAL
@ -58,76 +62,110 @@ Bitmask<SRV_Channel::k_nr_aux_servo_functions> SRV_Channels::function_mask;
SRV_Channels::srv_function SRV_Channels::functions[SRV_Channel::k_nr_aux_servo_functions];
const AP_Param::GroupInfo SRV_Channels::var_info[] = {
#if (NUM_SERVO_CHANNELS >= 1)
// @Group: 1_
// @Path: SRV_Channel.cpp
AP_SUBGROUPINFO(obj_channels[0], "1_", 1, SRV_Channels, SRV_Channel),
#endif
#if (NUM_SERVO_CHANNELS >= 2)
// @Group: 2_
// @Path: SRV_Channel.cpp
AP_SUBGROUPINFO(obj_channels[1], "2_", 2, SRV_Channels, SRV_Channel),
#endif
#if (NUM_SERVO_CHANNELS >= 3)
// @Group: 3_
// @Path: SRV_Channel.cpp
AP_SUBGROUPINFO(obj_channels[2], "3_", 3, SRV_Channels, SRV_Channel),
#endif
#if (NUM_SERVO_CHANNELS >= 4)
// @Group: 4_
// @Path: SRV_Channel.cpp
AP_SUBGROUPINFO(obj_channels[3], "4_", 4, SRV_Channels, SRV_Channel),
#endif
#if (NUM_SERVO_CHANNELS >= 5)
// @Group: 5_
// @Path: SRV_Channel.cpp
AP_SUBGROUPINFO(obj_channels[4], "5_", 5, SRV_Channels, SRV_Channel),
#endif
#if (NUM_SERVO_CHANNELS >= 6)
// @Group: 6_
// @Path: SRV_Channel.cpp
AP_SUBGROUPINFO(obj_channels[5], "6_", 6, SRV_Channels, SRV_Channel),
#endif
#if (NUM_SERVO_CHANNELS >= 7)
// @Group: 7_
// @Path: SRV_Channel.cpp
AP_SUBGROUPINFO(obj_channels[6], "7_", 7, SRV_Channels, SRV_Channel),
#endif
#if (NUM_SERVO_CHANNELS >= 8)
// @Group: 8_
// @Path: SRV_Channel.cpp
AP_SUBGROUPINFO(obj_channels[7], "8_", 8, SRV_Channels, SRV_Channel),
#endif
#if (NUM_SERVO_CHANNELS >= 9)
// @Group: 9_
// @Path: SRV_Channel.cpp
AP_SUBGROUPINFO(obj_channels[8], "9_", 9, SRV_Channels, SRV_Channel),
#endif
#if (NUM_SERVO_CHANNELS >= 10)
// @Group: 10_
// @Path: SRV_Channel.cpp
AP_SUBGROUPINFO(obj_channels[9], "10_", 10, SRV_Channels, SRV_Channel),
#endif
#if (NUM_SERVO_CHANNELS >= 11)
// @Group: 11_
// @Path: SRV_Channel.cpp
AP_SUBGROUPINFO(obj_channels[10], "11_", 11, SRV_Channels, SRV_Channel),
#endif
#if (NUM_SERVO_CHANNELS >= 12)
// @Group: 12_
// @Path: SRV_Channel.cpp
AP_SUBGROUPINFO(obj_channels[11], "12_", 12, SRV_Channels, SRV_Channel),
#endif
#if (NUM_SERVO_CHANNELS >= 13)
// @Group: 13_
// @Path: SRV_Channel.cpp
AP_SUBGROUPINFO(obj_channels[12], "13_", 13, SRV_Channels, SRV_Channel),
#endif
#if (NUM_SERVO_CHANNELS >= 14)
// @Group: 14_
// @Path: SRV_Channel.cpp
AP_SUBGROUPINFO(obj_channels[13], "14_", 14, SRV_Channels, SRV_Channel),
#endif
#if (NUM_SERVO_CHANNELS >= 15)
// @Group: 15_
// @Path: SRV_Channel.cpp
AP_SUBGROUPINFO(obj_channels[14], "15_", 15, SRV_Channels, SRV_Channel),
#endif
#if (NUM_SERVO_CHANNELS >= 16)
// @Group: 16_
// @Path: SRV_Channel.cpp
AP_SUBGROUPINFO(obj_channels[15], "16_", 16, SRV_Channels, SRV_Channel),
#endif
#ifndef HAL_BUILD_AP_PERIPH
// @Param{Plane}: _AUTO_TRIM
// @DisplayName: Automatic servo trim
// @Description: This enables automatic servo trim in flight. Servos will be trimed in stabilized flight modes when the aircraft is close to level. Changes to servo trim will be saved every 10 seconds and will persist between flights. The automatic trim won't go more than 20% away from a centered trim.
// @Values: 0:Disable,1:Enable
// @User: Advanced
AP_GROUPINFO_FRAME("_AUTO_TRIM", 17, SRV_Channels, auto_trim, 0, AP_PARAM_FRAME_PLANE),
#endif
// @Param: _RATE
// @DisplayName: Servo default output rate
@ -137,6 +175,7 @@ const AP_Param::GroupInfo SRV_Channels::var_info[] = {
// @Units: Hz
AP_GROUPINFO("_RATE", 18, SRV_Channels, default_rate, 50),
#ifndef HAL_BUILD_AP_PERIPH
// @Group: _VOLZ_
// @Path: ../AP_Volz_Protocol/AP_Volz_Protocol.cpp
AP_SUBGROUPINFO(volz, "_VOLZ_", 19, SRV_Channels, AP_Volz_Protocol),
@ -154,6 +193,7 @@ const AP_Param::GroupInfo SRV_Channels::var_info[] = {
// @Group: _ROB_
// @Path: ../AP_RobotisServo/AP_RobotisServo.cpp
AP_SUBGROUPINFO(robotis, "_ROB_", 22, SRV_Channels, AP_RobotisServo),
#endif // HAL_BUILD_AP_PERIPH
AP_GROUPEND
};
@ -174,12 +214,14 @@ SRV_Channels::SRV_Channels(void)
channels[i].ch_num = i;
}
#ifndef HAL_BUILD_AP_PERIPH
volz_ptr = &volz;
sbus_ptr = &sbus;
robotis_ptr = &robotis;
#if HAL_SUPPORT_RCOUT_SERIAL
blheli_ptr = &blheli;
#endif
#endif // HAL_BUILD_AP_PERIPH
}
/*
@ -264,6 +306,7 @@ void SRV_Channels::push()
{
hal.rcout->push();
#ifndef HAL_BUILD_AP_PERIPH
// give volz library a chance to update
volz_ptr->update();
@ -277,6 +320,7 @@ void SRV_Channels::push()
// give blheli telemetry a chance to update
blheli_ptr->update_telemetry();
#endif
#endif // HAL_BUILD_AP_PERIPH
#if HAL_MAX_CAN_PROTOCOL_DRIVERS
// push outputs to CAN