We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
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.