1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-23 16:25:31 +03:00

Support pan and tilt on fixed wing. Fixes #1006

The general idea is that nothing calls pwmWriteServo except for
writeServos() and that writeServos() knows which servos it has used.
This commit is contained in:
Dominic Clifton 2015-06-10 14:30:45 +01:00
parent 9a8a31676b
commit 889b14df5f
2 changed files with 44 additions and 44 deletions

View file

@ -46,7 +46,7 @@ extern "C" {
#include "io/rc_controls.h"
extern uint8_t servoCount;
void forwardAuxChannelsToServos(void);
void forwardAuxChannelsToServos(uint8_t firstServoIndex);
void mixerInit(mixerMode_e mixerMode, motorMixer_t *initialCustomMixers);
void mixerUsePWMOutputConfiguration(pwmOutputConfiguration_t *pwmOutputConfiguration);
@ -90,7 +90,7 @@ TEST(FlightMixerTest, TestForwardAuxChannelsToServosWithNoServos)
rcData[AUX4] = TEST_RC_MID;
// when
forwardAuxChannelsToServos();
forwardAuxChannelsToServos(MAX_SUPPORTED_SERVOS);
// then
for (uint8_t i = 0; i < MAX_SUPPORTED_SERVOS; i++) {
@ -110,26 +110,20 @@ TEST(FlightMixerTest, TestForwardAuxChannelsToServosWithMaxServos)
rcData[AUX4] = 2000;
// when
forwardAuxChannelsToServos();
forwardAuxChannelsToServos(MAX_SUPPORTED_SERVOS);
// then
uint8_t i;
for (i = 0; i < MAX_SUPPORTED_SERVOS - 4; i++) {
EXPECT_EQ(servos[i].value, 0);
for (i = 0; i < MAX_SUPPORTED_SERVOS; i++) {
EXPECT_EQ(0, servos[i].value);
}
// -1 for zero based offset
EXPECT_EQ(1000, servos[MAX_SUPPORTED_SERVOS - 3 - 1].value);
EXPECT_EQ(1250, servos[MAX_SUPPORTED_SERVOS - 2 - 1].value);
EXPECT_EQ(1750, servos[MAX_SUPPORTED_SERVOS - 1 - 1].value);
EXPECT_EQ(2000, servos[MAX_SUPPORTED_SERVOS - 0 - 1].value);
}
TEST(FlightMixerTest, TestForwardAuxChannelsToServosWithLessServosThanAuxChannelsToForward)
TEST(FlightMixerTest, TestForwardAuxChannelsToServosWithLessRemainingServosThanAuxChannelsToForward)
{
// given
memset(&servos, 0, sizeof(servos));
servoCount = 2;
servoCount = MAX_SUPPORTED_SERVOS - 2;
rcData[AUX1] = 1000;
rcData[AUX2] = 1250;
@ -137,17 +131,17 @@ TEST(FlightMixerTest, TestForwardAuxChannelsToServosWithLessServosThanAuxChannel
rcData[AUX4] = 2000;
// when
forwardAuxChannelsToServos();
forwardAuxChannelsToServos(MAX_SUPPORTED_SERVOS - 2);
// then
uint8_t i;
for (i = 2; i < MAX_SUPPORTED_SERVOS; i++) {
EXPECT_EQ(servos[i].value, 0);
for (i = 0; i < MAX_SUPPORTED_SERVOS - 2; i++) {
EXPECT_EQ(0, servos[i].value);
}
// -1 for zero based offset
EXPECT_EQ(1000, servos[0].value);
EXPECT_EQ(1250, servos[1].value);
EXPECT_EQ(1000, servos[MAX_SUPPORTED_SERVOS - 1 - 1].value);
EXPECT_EQ(1250, servos[MAX_SUPPORTED_SERVOS - 0 - 1].value);
}
TEST(FlightMixerTest, TestTricopterServo)
@ -317,7 +311,13 @@ void pwmCompleteOneshotMotorUpdate(uint8_t motorCount) {
}
void pwmWriteServo(uint8_t index, uint16_t value) {
servos[index].value = value;
// FIXME logic in test, mimic's production code.
// Perhaps the solution is to remove the logic from the production code version and assume that
// anything calling calling pwmWriteServo always uses a valid index?
// See MAX_SERVOS in pwm_output (driver) and MAX_SUPPORTED_SERVOS (flight)
if (index < MAX_SERVOS) {
servos[index].value = value;
}
}
bool failsafeIsActive(void) {