Ajuda em adaptação C++ para C

Vou começar a tentar 'portar' umas rotinas usadas num sketch Arduino para C->Keil.
Comecei com uma rotina simples, para ver a dificuldade, e me deparei com minha limitação.
A rotina original é assim:
Não entendo a parte TEffectState& effect
Acima da rotina acrescentei a estrutura,conforme o original:
Mais um exemplo como é utilizada esta rotina:
Tentei no Keil assim:
Claro que apresenta erro ..\application\Src\main.c(77): error: #18: expected a ")" onde fica o & e ..\application\Src\main.c(78): error: #20: identifier "effect" is undefined
Qual a alteração preciso fazer?
Comecei com uma rotina simples, para ver a dificuldade, e me deparei com minha limitação.
A rotina original é assim:
- Código: Selecionar todos
int32_t Joystick_::ConstantForceCalculator(volatile TEffectState& effect)
{
float tempforce = (float)effect.magnitude * effect.gain / 255;
tempforce = map(tempforce, -10000, 10000, -255, 255);
return (int32_t) tempforce;
}
Não entendo a parte TEffectState& effect
Acima da rotina acrescentei a estrutura,conforme o original:
- Código: Selecionar todos
typedef struct {
volatile uint8_t state; // see constants <MEffectState_*>
uint8_t effectType; //
int16_t offset;
uint8_t gain;
int16_t attackLevel, fadeLevel;
int16_t magnitude;
uint8_t enableAxis; // bits: 0=X, 1=Y, 2=DirectionEnable
uint8_t directionX; // angle (0=0 .. 255=360deg)
uint8_t directionY; // angle (0=0 .. 255=360deg)
int16_t cpOffset; // -128..127
int16_t positiveCoefficient; // -128..127
int16_t negativeCoefficient; // -128..127
uint16_t positiveSaturation; // -128..127
uint16_t negativeSaturation; // -128..127
uint16_t deadBand; // 0..255
uint16_t phase; // 0..255 (=0..359, exp-2)
int16_t startMagnitude;
int16_t endMagnitude;
uint16_t period; // 0..32767 ms
uint16_t duration, fadeTime, attackTime, elapsedTime;
uint64_t startTime;
} TEffectState;
Mais um exemplo como é utilizada esta rotina:
- Código: Selecionar todos
int32_t Joystick_::ConstantForceCalculator(volatile TEffectState& effect)
{
return ApplyEnvelope(effect, (int32_t)effect.magnitude);
}
Tentei no Keil assim:
- Código: Selecionar todos
int32_t ConstantForceCalculator(volatile TEffectState& effect) {
float tempforce = (float)effect.magnitude * effect.gain / 255;
tempforce = map(tempforce, -10000, 10000, -255, 255);
return (int32_t) tempforce;
}
Claro que apresenta erro ..\application\Src\main.c(77): error: #18: expected a ")" onde fica o & e ..\application\Src\main.c(78): error: #20: identifier "effect" is undefined
Qual a alteração preciso fazer?