mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-24 00:35:39 +03:00
This is a large commit, from the commit it is clear that the mixer has many dependencies, this is expected since it is central to the application. To achieve the decoupling many master config and profile members had to be moved into structures. Relocated throttle/pitch curves into rc_curves.c/h since it has nothing to with rx code, this fixed the dependencies inside the rx provider files.
35 lines
1.3 KiB
C
35 lines
1.3 KiB
C
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
|
|
#include "rc_controls.h"
|
|
#include "escservo.h"
|
|
|
|
#include "rc_curves.h"
|
|
|
|
int16_t lookupPitchRollRC[PITCH_LOOKUP_LENGTH]; // lookup table for expo & RC rate PITCH+ROLL
|
|
int16_t lookupThrottleRC[THROTTLE_LOOKUP_LENGTH]; // lookup table for expo & mid THROTTLE
|
|
|
|
|
|
void generatePitchCurve(controlRateConfig_t *controlRateConfig)
|
|
{
|
|
uint8_t i;
|
|
|
|
for (i = 0; i < PITCH_LOOKUP_LENGTH; i++)
|
|
lookupPitchRollRC[i] = (2500 + controlRateConfig->rcExpo8 * (i * i - 25)) * i * (int32_t) controlRateConfig->rcRate8 / 2500;
|
|
}
|
|
|
|
void generateThrottleCurve(controlRateConfig_t *controlRateConfig, escAndServoConfig_t *escAndServoConfig)
|
|
{
|
|
uint8_t i;
|
|
|
|
for (i = 0; i < THROTTLE_LOOKUP_LENGTH; i++) {
|
|
int16_t tmp = 10 * i - controlRateConfig->thrMid8;
|
|
uint8_t y = 1;
|
|
if (tmp > 0)
|
|
y = 100 - controlRateConfig->thrMid8;
|
|
if (tmp < 0)
|
|
y = controlRateConfig->thrMid8;
|
|
lookupThrottleRC[i] = 10 * controlRateConfig->thrMid8 + tmp * (100 - controlRateConfig->thrExpo8 + (int32_t) controlRateConfig->thrExpo8 * (tmp * tmp) / (y * y)) / 10;
|
|
lookupThrottleRC[i] = escAndServoConfig->minthrottle + (int32_t) (escAndServoConfig->maxthrottle - escAndServoConfig->minthrottle) * lookupThrottleRC[i] / 1000; // [MINTHROTTLE;MAXTHROTTLE]
|
|
}
|
|
}
|