How do I start the values as in the example C++ code?
struct Gains{ uint8_t totalGain = FORCE_FEEDBACK_MAXGAIN; uint8_t constantGain = FORCE_FEEDBACK_MAXGAIN; uint8_t rampGain = FORCE_FEEDBACK_MAXGAIN; uint8_t squareGain = FORCE_FEEDBACK_MAXGAIN; uint8_t sineGain = FORCE_FEEDBACK_MAXGAIN; uint8_t triangleGain = FORCE_FEEDBACK_MAXGAIN; uint8_t sawtoothdownGain = FORCE_FEEDBACK_MAXGAIN; uint8_t sawtoothupGain = FORCE_FEEDBACK_MAXGAIN; uint8_t springGain = FORCE_FEEDBACK_MAXGAIN; uint8_t damperGain = FORCE_FEEDBACK_MAXGAIN; uint8_t inertiaGain = FORCE_FEEDBACK_MAXGAIN; uint8_t frictionGain = FORCE_FEEDBACK_MAXGAIN; uint8_t customGain = FORCE_FEEDBACK_MAXGAIN; }; struct EffectParams{ int32_t springMaxPosition = 0; int32_t springPosition = 0; int32_t damperMaxVelocity = 0; int32_t damperVelocity = 0; int32_t inertiaMaxAcceleration = 0; int32_t inertiaAcceleration = 0; int32_t frictionMaxPositionChange = 0; int32_t frictionPositionChange = 0; }; //force feedback gain struct Gains* m_gains; //force feedback effect params struct EffectParams* m_effect_params;
If you're writing C++, just do it.
If you're not, you can't.
How do I start values in C?
> struct EffectParams* m_effect_params;
Note that that line declares a pointer, not the structure itself, so it doesn't initialize anything. malloc() won't either, but C++'s "new" might?
This comes close. sort of:
struct Gains{ uint8_t totalGain; uint8_t constantGain; uint8_t rampGain ; uint8_t squareGain; uint8_t sineGain ; uint8_t triangleGain; uint8_t sawtoothdownGain; uint8_t sawtoothupGain; uint8_t springGain; uint8_t damperGain; uint8_t inertiaGain; uint8_t frictionGain; uint8_t customGain;};#define Gains_inited(x) struct Gains x = { \ .totalGain = FORCE_FEEDBACK_MAXGAIN, \ .constantGain = FORCE_FEEDBACK_MAXGAIN, \ .rampGain = FORCE_FEEDBACK_MAXGAIN, \ .squareGain = FORCE_FEEDBACK_MAXGAIN, \ .sineGain = FORCE_FEEDBACK_MAXGAIN, \ .triangleGain = FORCE_FEEDBACK_MAXGAIN, \ .sawtoothdownGain = FORCE_FEEDBACK_MAXGAIN, \ .sawtoothupGain = FORCE_FEEDBACK_MAXGAIN, \ .springGain = FORCE_FEEDBACK_MAXGAIN, \ .damperGain = FORCE_FEEDBACK_MAXGAIN, \ .inertiaGain = FORCE_FEEDBACK_MAXGAIN, \ .frictionGain = FORCE_FEEDBACK_MAXGAIN, \ .customGain = FORCE_FEEDBACK_MAXGAIN, \ }Gains_inited(*m_gains);
struct Gains{
uint8_t totalGain;
uint8_t constantGain;
uint8_t rampGain ;
uint8_t squareGain;
uint8_t sineGain ;
uint8_t triangleGain;
uint8_t sawtoothdownGain;
uint8_t sawtoothupGain;
uint8_t springGain;
uint8_t damperGain;
uint8_t inertiaGain;
uint8_t frictionGain;
uint8_t customGain;
};
#define Gains_inited(x) struct Gains x = { \
.totalGain = FORCE_FEEDBACK_MAXGAIN, \
.constantGain = FORCE_FEEDBACK_MAXGAIN, \
.rampGain = FORCE_FEEDBACK_MAXGAIN, \
.squareGain = FORCE_FEEDBACK_MAXGAIN, \
.sineGain = FORCE_FEEDBACK_MAXGAIN, \
.triangleGain = FORCE_FEEDBACK_MAXGAIN, \
.sawtoothdownGain = FORCE_FEEDBACK_MAXGAIN, \
.sawtoothupGain = FORCE_FEEDBACK_MAXGAIN, \
.springGain = FORCE_FEEDBACK_MAXGAIN, \
.damperGain = FORCE_FEEDBACK_MAXGAIN, \
.inertiaGain = FORCE_FEEDBACK_MAXGAIN, \
.frictionGain = FORCE_FEEDBACK_MAXGAIN, \
.customGain = FORCE_FEEDBACK_MAXGAIN, \
}
Gains_inited(*m_gains);
vtrx said:How do I start values in C?
Like I said: you don't. If you strongly believe you need that feature, you will have to write your code in C++. It's ultimately as simple as that.
Nor is it ever called "start". The C++ feature you're trying to use is called a default value. It's used by the constructor, for those members of the struct the user didn't supply their own initializer values, for . C simply doesn't have that entire set of features.