refctoring trigger sync layer
This commit is contained in:
parent
0c2d83b21c
commit
c2be975f62
|
@ -733,5 +733,5 @@ int getRusEfiVersion(void) {
|
||||||
if (initBootloader() != 0)
|
if (initBootloader() != 0)
|
||||||
return 123;
|
return 123;
|
||||||
#endif /* EFI_BOOTLOADER_INCLUDE_CODE */
|
#endif /* EFI_BOOTLOADER_INCLUDE_CODE */
|
||||||
return 20180924;
|
return 20181021;
|
||||||
}
|
}
|
||||||
|
|
|
@ -263,11 +263,11 @@ void TriggerState::decodeTriggerEvent(trigger_event_e const signal, efitime_t no
|
||||||
bool primaryGap = currentDuration > toothed_previous_duration * TRIGGER_SHAPE(syncRatioFrom)
|
bool primaryGap = currentDuration > toothed_previous_duration * TRIGGER_SHAPE(syncRatioFrom)
|
||||||
&& currentDuration < toothed_previous_duration * TRIGGER_SHAPE(syncRatioTo);
|
&& currentDuration < toothed_previous_duration * TRIGGER_SHAPE(syncRatioTo);
|
||||||
|
|
||||||
bool secondaryGap = cisnan(TRIGGER_SHAPE(secondSyncRatioFrom)) || (toothed_previous_duration > durationBeforePrevious * TRIGGER_SHAPE(secondSyncRatioFrom)
|
bool secondaryGap = cisnan(TRIGGER_SHAPE(syncronizationRatioFrom[1])) || (toothed_previous_duration > durationBeforePrevious * TRIGGER_SHAPE(syncronizationRatioFrom[1])
|
||||||
&& toothed_previous_duration < durationBeforePrevious * TRIGGER_SHAPE(secondSyncRatioTo));
|
&& toothed_previous_duration < durationBeforePrevious * TRIGGER_SHAPE(syncronizationRatioTo[1]));
|
||||||
|
|
||||||
bool thirdGap = cisnan(TRIGGER_SHAPE(thirdSyncRatioFrom)) || (durationBeforePrevious > thirdPreviousDuration * TRIGGER_SHAPE(thirdSyncRatioFrom)
|
bool thirdGap = cisnan(TRIGGER_SHAPE(syncronizationRatioFrom[2])) || (durationBeforePrevious > thirdPreviousDuration * TRIGGER_SHAPE(syncronizationRatioFrom[2])
|
||||||
&& durationBeforePrevious < thirdPreviousDuration * TRIGGER_SHAPE(thirdSyncRatioTo));
|
&& durationBeforePrevious < thirdPreviousDuration * TRIGGER_SHAPE(syncronizationRatioTo[2]));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Here I prefer to have two multiplications instead of one division, that's a micro-optimization
|
* Here I prefer to have two multiplications instead of one division, that's a micro-optimization
|
||||||
|
@ -290,8 +290,8 @@ void TriggerState::decodeTriggerEvent(trigger_event_e const signal, efitime_t no
|
||||||
gap, prevGap, gap3,
|
gap, prevGap, gap3,
|
||||||
currentCycle.current_index,
|
currentCycle.current_index,
|
||||||
TRIGGER_SHAPE(syncRatioFrom), TRIGGER_SHAPE(syncRatioTo),
|
TRIGGER_SHAPE(syncRatioFrom), TRIGGER_SHAPE(syncRatioTo),
|
||||||
TRIGGER_SHAPE(secondSyncRatioFrom), TRIGGER_SHAPE(secondSyncRatioTo),
|
TRIGGER_SHAPE(syncronizationRatioFrom[1]), TRIGGER_SHAPE(syncronizationRatioTo[1]),
|
||||||
TRIGGER_SHAPE(thirdSyncRatioFrom), TRIGGER_SHAPE(thirdSyncRatioTo),
|
TRIGGER_SHAPE(syncronizationRatioFrom[2]), TRIGGER_SHAPE(syncronizationRatioTo[2]),
|
||||||
someSortOfTriggerError);
|
someSortOfTriggerError);
|
||||||
#else
|
#else
|
||||||
actualSynchGap = gap;
|
actualSynchGap = gap;
|
||||||
|
|
|
@ -105,10 +105,10 @@ void TriggerShape::initialize(operation_mode_e operationMode, bool needSecondTri
|
||||||
// memset(triggerIndexByAngle, 0, sizeof(triggerIndexByAngle));
|
// memset(triggerIndexByAngle, 0, sizeof(triggerIndexByAngle));
|
||||||
setTriggerSynchronizationGap(2);
|
setTriggerSynchronizationGap(2);
|
||||||
|
|
||||||
secondSyncRatioFrom = NAN; // NaN means do not use this ratio
|
syncronizationRatioFrom[1] = NAN; // NaN means do not use this ratio
|
||||||
secondSyncRatioTo = 100000;
|
syncronizationRatioTo[1] = 100000;
|
||||||
thirdSyncRatioFrom = NAN; // NaN means do not use this ratio
|
syncronizationRatioFrom[2] = NAN; // NaN means do not use this ratio
|
||||||
thirdSyncRatioTo = 100000;
|
syncronizationRatioTo[2] = 100000;
|
||||||
|
|
||||||
|
|
||||||
tdcPosition = 0;
|
tdcPosition = 0;
|
||||||
|
@ -457,8 +457,8 @@ void TriggerShape::setTriggerSynchronizationGap(float syncRatio) {
|
||||||
|
|
||||||
void TriggerShape::setSecondTriggerSynchronizationGap2(float syncRatioFrom, float syncRatioTo) {
|
void TriggerShape::setSecondTriggerSynchronizationGap2(float syncRatioFrom, float syncRatioTo) {
|
||||||
isSynchronizationNeeded = true;
|
isSynchronizationNeeded = true;
|
||||||
this->secondSyncRatioFrom = syncRatioFrom;
|
this->syncronizationRatioFrom[1] = syncRatioFrom;
|
||||||
this->secondSyncRatioTo = syncRatioTo;
|
this->syncronizationRatioTo[1] = syncRatioTo;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerShape::setThirdTriggerSynchronizationGap(float syncRatio) {
|
void TriggerShape::setThirdTriggerSynchronizationGap(float syncRatio) {
|
||||||
|
@ -467,8 +467,8 @@ void TriggerShape::setThirdTriggerSynchronizationGap(float syncRatio) {
|
||||||
|
|
||||||
void TriggerShape::setThirdTriggerSynchronizationGap2(float syncRatioFrom, float syncRatioTo) {
|
void TriggerShape::setThirdTriggerSynchronizationGap2(float syncRatioFrom, float syncRatioTo) {
|
||||||
isSynchronizationNeeded = true;
|
isSynchronizationNeeded = true;
|
||||||
this->thirdSyncRatioFrom = syncRatioFrom;
|
this->syncronizationRatioFrom[2] = syncRatioFrom;
|
||||||
this->thirdSyncRatioTo = syncRatioTo;
|
this->syncronizationRatioTo[2] = syncRatioTo;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerShape::setSecondTriggerSynchronizationGap(float syncRatio) {
|
void TriggerShape::setSecondTriggerSynchronizationGap(float syncRatio) {
|
||||||
|
|
|
@ -45,6 +45,8 @@ private:
|
||||||
class Engine;
|
class Engine;
|
||||||
class TriggerState;
|
class TriggerState;
|
||||||
|
|
||||||
|
#define GAP_TRACKING_LENGHT 3
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Trigger shape has all the fields needed to describe and decode trigger signal.
|
* @brief Trigger shape has all the fields needed to describe and decode trigger signal.
|
||||||
* @see TriggerState for trigger decoder state which works based on this trigger shape model
|
* @see TriggerState for trigger decoder state which works based on this trigger shape model
|
||||||
|
@ -89,6 +91,17 @@ public:
|
||||||
*/
|
*/
|
||||||
int triggerIndexByAngle[720];
|
int triggerIndexByAngle[720];
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Depending on trigger shape, we use betweeb one and three previous gap ranges to detect synchronizaiton.
|
||||||
|
*
|
||||||
|
* Usually second or third gap is not needed, but some crazy triggers like 36-2-2-2 require two consecutive
|
||||||
|
* gaps ratios to sync
|
||||||
|
*/
|
||||||
|
|
||||||
|
float syncronizationRatioFrom[GAP_TRACKING_LENGHT];
|
||||||
|
float syncronizationRatioTo[GAP_TRACKING_LENGHT];
|
||||||
|
|
||||||
float syncRatioFrom;
|
float syncRatioFrom;
|
||||||
float syncRatioTo;
|
float syncRatioTo;
|
||||||
/**
|
/**
|
||||||
|
@ -96,15 +109,6 @@ public:
|
||||||
*/
|
*/
|
||||||
int syncRatioAvg;
|
int syncRatioAvg;
|
||||||
|
|
||||||
/**
|
|
||||||
* Usually this is not needed, but some crazy triggers like 36-2-2-2 require two consecutive
|
|
||||||
* gaps ratios to sync
|
|
||||||
*/
|
|
||||||
float secondSyncRatioFrom;
|
|
||||||
float secondSyncRatioTo;
|
|
||||||
|
|
||||||
float thirdSyncRatioFrom;
|
|
||||||
float thirdSyncRatioTo;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Trigger indexes within trigger cycle are counted from synchronization point, and all
|
* Trigger indexes within trigger cycle are counted from synchronization point, and all
|
||||||
|
|
Loading…
Reference in New Issue