Skip to content

Commit

Permalink
refactoring - hopefully making API safer
Browse files Browse the repository at this point in the history
  • Loading branch information
rusefillc committed Nov 22, 2018
1 parent 20c7090 commit f98f35c
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 24 deletions.
2 changes: 1 addition & 1 deletion firmware/controllers/trigger/trigger_central.cpp
Expand Up @@ -376,7 +376,7 @@ void TriggerCentral::handleShaftSignal(trigger_event_e signal DECLARE_ENGINE_PAR

int crankInternalIndex = triggerState.getTotalRevolutionCounter() % crankDivider;

triggerIndexForListeners = triggerState.getCurrentIndex() + (crankInternalIndex * TRIGGER_SHAPE(size));
triggerIndexForListeners = triggerState.getCurrentIndex() + (crankInternalIndex * getTriggerSize());
}
if (triggerIndexForListeners == 0) {
timeAtVirtualZeroNt = nowNt;
Expand Down
12 changes: 6 additions & 6 deletions firmware/controllers/trigger/trigger_decoder.cpp
Expand Up @@ -82,7 +82,7 @@ bool isTriggerDecoderError(void) {
}

bool TriggerState::isValidIndex(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
return currentCycle.current_index < TRIGGER_SHAPE(size);
return currentCycle.current_index < getTriggerSize();
}

static trigger_wheel_e eventIndex[6] = { T_PRIMARY, T_PRIMARY, T_SECONDARY, T_SECONDARY, T_CHANNEL_3, T_CHANNEL_3 };
Expand Down Expand Up @@ -324,10 +324,10 @@ void TriggerState::decodeTriggerEvent(trigger_event_e const signal, efitime_t no
printf("sync=%d index=%d size=%d\r\n",
shaft_is_synchronized,
currentCycle.current_index,
TRIGGER_SHAPE(size));
getTriggerSize());
}
#endif /* EFI_UNIT_TEST */
int endOfCycleIndex = TRIGGER_SHAPE(size) - (CONFIG(useOnlyRisingEdgeForTrigger) ? 2 : 1);
int endOfCycleIndex = getTriggerSize() - (CONFIG(useOnlyRisingEdgeForTrigger) ? 2 : 1);


isSynchronizationPoint = !shaft_is_synchronized || (currentCycle.current_index >= endOfCycleIndex);
Expand All @@ -337,7 +337,7 @@ void TriggerState::decodeTriggerEvent(trigger_event_e const signal, efitime_t no
printf("isSynchronizationPoint=%d index=%d size=%d\r\n",
isSynchronizationPoint,
currentCycle.current_index,
TRIGGER_SHAPE(size));
getTriggerSize());
}
#endif /* EFI_UNIT_TEST */

Expand Down Expand Up @@ -415,7 +415,7 @@ void TriggerState::decodeTriggerEvent(trigger_event_e const signal, efitime_t no
resetCurrentCycleState();
incrementTotalEventCounter();
runningRevolutionCounter++;
totalEventCountBase += TRIGGER_SHAPE(size);
totalEventCountBase += getTriggerSize();


#if EFI_UNIT_TEST || defined(__DOXYGEN__)
Expand All @@ -439,7 +439,7 @@ void TriggerState::decodeTriggerEvent(trigger_event_e const signal, efitime_t no
if (!isValidIndex(PASS_ENGINE_PARAMETER_SIGNATURE) && !isInitializingTrigger) {
// let's not show a warning if we are just starting to spin
if (GET_RPM() != 0) {
warning(CUSTOM_SYNC_ERROR, "sync error: index #%d above total size %d", currentCycle.current_index, TRIGGER_SHAPE(size));
warning(CUSTOM_SYNC_ERROR, "sync error: index #%d above total size %d", currentCycle.current_index, getTriggerSize());
lastDecodingErrorTime = getTimeNowNt();
someSortOfTriggerError = true;
}
Expand Down
30 changes: 15 additions & 15 deletions firmware/controllers/trigger/trigger_structure.cpp
Expand Up @@ -78,7 +78,7 @@ void TriggerShape::calculateTriggerSynchPoint(TriggerState *state DECLARE_ENGINE
assertAngleRange(triggerShapeSynchPointIndex, "triggerShapeSynchPointIndex", CUSTOM_ERR_6552);
int triggerDefinitionCoordinate = (triggerShapeSynchPointIndex + eventIndex) % engine->engineCycleEventCount;
efiAssertVoid(CUSTOM_ERR_6595, engine->engineCycleEventCount != 0, "zero engineCycleEventCount");
int triggerDefinitionIndex = triggerDefinitionCoordinate >= size ? triggerDefinitionCoordinate - size : triggerDefinitionCoordinate;
int triggerDefinitionIndex = triggerDefinitionCoordinate >= privateTriggerDefinitionSize ? triggerDefinitionCoordinate - privateTriggerDefinitionSize : triggerDefinitionCoordinate;
float angle = getAngle(triggerDefinitionCoordinate) - firstAngle;
efiAssertVoid(CUSTOM_ERR_6596, !cisnan(angle), "trgSyncNaN");
fixAngle(angle, "trgSync", CUSTOM_ERR_6559);
Expand Down Expand Up @@ -118,7 +118,7 @@ void TriggerShape::initialize(operation_mode_e operationMode, bool needSecondTri
invertOnAdd = false;

this->operationMode = operationMode;
size = 0;
privateTriggerDefinitionSize = 0;
triggerShapeSynchPointIndex = 0;
memset(initialState, 0, sizeof(initialState));
memset(switchTimesBuffer, 0, sizeof(switchTimesBuffer));
Expand All @@ -133,7 +133,7 @@ void TriggerShape::initialize(operation_mode_e operationMode, bool needSecondTri
}

int TriggerShape::getSize() const {
return size;
return privateTriggerDefinitionSize;
}

int TriggerShape::getTriggerShapeSynchPointIndex() {
Expand Down Expand Up @@ -299,9 +299,9 @@ angle_t TriggerShape::getAngle(int index) const {
* See also trigger_central.cpp
* See also getEngineCycleEventCount()
*/
efiAssert(CUSTOM_ERR_ASSERT, size != 0, "shapeSize=0", NAN);
int crankCycle = index / size;
int remainder = index % size;
efiAssert(CUSTOM_ERR_ASSERT, privateTriggerDefinitionSize != 0, "shapeSize=0", NAN);
int crankCycle = index / privateTriggerDefinitionSize;
int remainder = index % privateTriggerDefinitionSize;

return getCycleDuration() * crankCycle + getSwitchAngle(remainder);
}
Expand Down Expand Up @@ -339,7 +339,7 @@ void TriggerShape::addEvent2(angle_t angle, trigger_wheel_e const waveIndex, tri

#if EFI_UNIT_TEST || defined(__DOXYGEN__)
int signal = waveIndex * 1000 + stateParam;
triggerSignals[size] = signal;
triggerSignals[privateTriggerDefinitionSize] = signal;
#endif

float engineCycle = getEngineCycle(operationMode);
Expand All @@ -355,16 +355,16 @@ void TriggerShape::addEvent2(angle_t angle, trigger_wheel_e const waveIndex, tri
}

efiAssertVoid(CUSTOM_ERR_6599, angle > 0, "angle should be positive");
if (size > 0) {
if (privateTriggerDefinitionSize > 0) {
if (angle <= previousAngle) {
warning(CUSTOM_ERR_TRG_ANGLE_ORDER, "invalid angle order: new=%.2f and prev=%.2f, size=%d", angle, previousAngle, size);
warning(CUSTOM_ERR_TRG_ANGLE_ORDER, "invalid angle order: new=%.2f and prev=%.2f, size=%d", angle, previousAngle, privateTriggerDefinitionSize);
shapeDefinitionError = true;
return;
}
}
previousAngle = angle;
if (size == 0) {
size = 1;
if (privateTriggerDefinitionSize == 0) {
privateTriggerDefinitionSize = 1;
for (int i = 0; i < PWM_PHASE_MAX_WAVE_PER_PWM; i++) {
single_wave_s *wave = &this->wave.waves[i];

Expand All @@ -382,14 +382,14 @@ void TriggerShape::addEvent2(angle_t angle, trigger_wheel_e const waveIndex, tri
return;
}

int exactMatch = wave.findAngleMatch(angle, size);
int exactMatch = wave.findAngleMatch(angle, privateTriggerDefinitionSize);
if (exactMatch != EFI_ERROR_CODE) {
warning(CUSTOM_ERR_SAME_ANGLE, "same angle: not supported");
shapeDefinitionError = true;
return;
}

int index = wave.findInsertionAngle(angle, size);
int index = wave.findInsertionAngle(angle, privateTriggerDefinitionSize);

/**
* todo: it would be nice to be able to provide trigger angles without sorting them externally
Expand All @@ -406,11 +406,11 @@ void TriggerShape::addEvent2(angle_t angle, trigger_wheel_e const waveIndex, tri
*/
isFrontEvent[index] = TV_RISE == stateParam;

if (index != size) {
if (index != privateTriggerDefinitionSize) {
firmwareError(ERROR_TRIGGER_DRAMA, "are we ever here?");
}

size++;
privateTriggerDefinitionSize++;

for (int i = 0; i < PWM_PHASE_MAX_WAVE_PER_PWM; i++) {
wave.waves[i].pinStates[index] = wave.getChannelState(i, index - 1);
Expand Down
8 changes: 6 additions & 2 deletions firmware/controllers/trigger/trigger_structure.h
Expand Up @@ -167,9 +167,11 @@ class TriggerShape {
/**
* Total count of shaft events per CAM or CRANK shaft revolution.
* TODO this should be migrated to CRANKshaft revolution, this would go together
* TODO: rename to triggerDefinitionSize ?
* this variable is public for performance reasons (I want to avoid costs of method if it's not inlined)
* but name is supposed to hint at the fact that decoders should not be assigning to it
* Please use "getTriggerSize()" macro or "getSize()" method to read this value
*/
int size;
int privateTriggerDefinitionSize;

void addEvent2(angle_t angle, trigger_wheel_e const waveIndex, trigger_value_e const state DECLARE_ENGINE_PARAMETER_SUFFIX);

Expand Down Expand Up @@ -235,4 +237,6 @@ void setToothedWheelConfiguration(TriggerShape *s, int total, int skipped, opera

#define TRIGGER_SHAPE(x) ENGINE(triggerCentral.triggerShape.x)

#define getTriggerSize() TRIGGER_SHAPE(privateTriggerDefinitionSize)

#endif /* TRIGGER_STRUCTURE_H_ */

0 comments on commit f98f35c

Please sign in to comment.