8#ifndef EFFECTSCALCULATOR_H_
9#define EFFECTSCALCULATOR_H_
18#define EFFECT_THREAD_MEM 128
19#define EFFECT_THREAD_PRIO 20
21#define INTERNAL_SCALER_DAMPER 40
22#define INTERNAL_SCALER_FRICTION 45
23#define INTERNAL_SCALER_INERTIA 4
25#define CUSTOM_PROFILE_ID 1
54 std::array<int16_t,MAX_AXIS>
max={0};
95 virtual std::string
getHelpstring() {
return "Controls internal FFB effects"; }
98 std::array<FFB_Effect,max_effects>
effects;
EffectsCalculator_commands
@ frictionPctSpeedToRampup
void logEffectState(uint8_t type, uint8_t state)
const ClassIdentifier getInfo()
Command handlers always have class infos. Works well with ChoosableClass.
std::string listEffectsUsed(bool details=false, uint8_t axis=0)
void updateFilterSettingsForEffects(uint8_t type_effect)
int32_t calcComponentForce(FFB_Effect *effect, int32_t forceVector, std::vector< std::unique_ptr< Axis > > &axes, uint8_t axis)
int32_t find_free_effect(uint8_t type)
virtual std::string getHelpstring()
void setActive(bool active)
int32_t getEnvelopeMagnitude(FFB_Effect *effect)
void checkFilterCoeff(biquad_constant_t *filter, uint32_t freq, uint8_t q)
void calculateEffects(std::vector< std::unique_ptr< Axis > > &axes)
const uint32_t calcfrequency
int32_t calcConditionEffectForce(FFB_Effect *effect, float metric, uint8_t gain, uint8_t idx, float scale, float angle_ratio)
uint8_t frictionPctSpeedToRampup
const ClassType getClassType() override
void setGain(uint8_t gain)
CommandStatus command(const ParsedCommand &cmd, std::vector< CommandReply > &replies)
std::array< effect_stat_t, 12 > effects_stats
virtual ~EffectsCalculator()
static const uint32_t max_effects
effect_biquad_t filter[2]
std::array< effect_stat_t, 12 > effects_statslast
static ClassIdentifier info
int32_t calcNonConditionEffectForce(FFB_Effect *effect)
std::array< FFB_Effect, max_effects > effects
virtual void setFilters(FFB_Effect *effect)
void logEffectType(uint8_t type, bool remove=false)
void resetLoggedActiveEffects(bool reinit)
void calcStatsEffectType(uint8_t type, int16_t force, uint8_t axis)
void free_effect(uint16_t idx)
virtual uint32_t getConstantForceRate()
virtual void fxUpdateEvent()
virtual void cfUpdateEvent()
virtual void set_FFB(bool state)=0
FastMovingAverage< float > fxPeriodAvg
virtual void reset_ffb()=0
FastMovingAverage< float > cfUpdatePeriodAvg
virtual uint32_t getRate()
virtual bool getFfbActive()=0
virtual void set_gain(uint8_t gain)=0
biquad_constant_t constant
biquad_constant_t friction
biquad_constant_t inertia
std::array< int16_t, MAX_AXIS > max
std::array< int16_t, MAX_AXIS > current