auto-sync

This commit is contained in:
rusEfi 2015-02-12 12:06:37 -06:00
parent cee0d25516
commit c17a80040b
5 changed files with 43 additions and 14 deletions

View File

@ -91,6 +91,17 @@ typedef struct {
#define MAF_DECODING_CACHE_MULT (MAF_DECODING_CACHE_SIZE / 5.0) #define MAF_DECODING_CACHE_MULT (MAF_DECODING_CACHE_SIZE / 5.0)
typedef struct {
uint32_t beforeIgnitionMath;
uint32_t ignitionMathTime;
uint32_t beforeIgnitionSch;
uint32_t ignitionSchTime;
uint32_t beforeInjectonSch;
uint32_t injectonSchTime;
} monitoring_timestamps_s;
class Engine { class Engine {
public: public:
Engine(); Engine();
@ -159,12 +170,6 @@ public:
*/ */
int engineCycleEventCount; int engineCycleEventCount;
uint32_t beforeIgnitionMath;
uint32_t ignitionMathTime;
uint32_t beforeIgnitionSch;
uint32_t ignitionSchTime;
/** /**
* fast spark dwell time interpolation helper * fast spark dwell time interpolation helper
* todo: finish the implementation and * todo: finish the implementation and
@ -184,6 +189,8 @@ public:
IntListenerArray configurationListeners; IntListenerArray configurationListeners;
monitoring_timestamps_s m;
private: private:
/** /**
* By the way: * By the way:

View File

@ -9,7 +9,10 @@
#include "engine_configuration.h" #include "engine_configuration.h"
#define PWM_PHASE_MAX_COUNT 250 /**
* this value should be dividable by four, see FuelSchedule.hasEvents
*/
#define PWM_PHASE_MAX_COUNT 252
#define PWM_PHASE_MAX_WAVE_PER_PWM 3 #define PWM_PHASE_MAX_WAVE_PER_PWM 3
/** /**

View File

@ -40,6 +40,7 @@ void initializeIgnitionActions(angle_t advance, angle_t dwellAngle,
/** /**
* @return float, time needed to rotate crankshaft by one degree, in microseconds. * @return float, time needed to rotate crankshaft by one degree, in microseconds.
* See also engine->rpmCalculator.oneDegreeUs
*/ */
#define getOneDegreeTimeUs(rpm) (1000000.0f * 60 / 360 / (rpm)) #define getOneDegreeTimeUs(rpm) (1000000.0f * 60 / 360 / (rpm))

View File

@ -158,7 +158,7 @@ static ALWAYS_INLINE void handleFuel(uint32_t eventIndex, int rpm DECLARE_ENGINE
*/ */
FuelSchedule *fs = FuelSchedule *fs =
isCrankingR(rpm) ? isCrankingR(rpm) ?
&engine->engineConfiguration2->crankingInjectionEvents : &engine->engineConfiguration2->injectionEvents; &ENGINE(engineConfiguration2)->crankingInjectionEvents : &engine->engineConfiguration2->injectionEvents;
ActuatorEventList *source = &fs->events; ActuatorEventList *source = &fs->events;
@ -295,6 +295,9 @@ static void ignitionCalc(int rpm DECLARE_ENGINE_PARAMETER_S) {
engine->dwellAngle = dwellMs / getOneDegreeTimeMs(rpm); engine->dwellAngle = dwellMs / getOneDegreeTimeMs(rpm);
} }
extern OutputSignalList runningInjectonSignals CCM_OPTIONAL;
extern OutputSignalList crankingInjectonSignals CCM_OPTIONAL;
/** /**
* This is the main trigger event handler. * This is the main trigger event handler.
* Both injection and ignition are controlled from this method. * Both injection and ignition are controlled from this method.
@ -339,14 +342,14 @@ void mainTriggerCallback(trigger_event_e ckpSignalType, uint32_t eventIndex DECL
} }
if (eventIndex == engineConfiguration->ignMathCalculateAtIndex) { if (eventIndex == engineConfiguration->ignMathCalculateAtIndex) {
engine->beforeIgnitionMath = GET_TIMESTAMP(); engine->m.beforeIgnitionMath = GET_TIMESTAMP();
ignitionCalc(rpm PASS_ENGINE_PARAMETER); ignitionCalc(rpm PASS_ENGINE_PARAMETER);
engine->ignitionMathTime = GET_TIMESTAMP() - engine->beforeIgnitionMath; engine->m.ignitionMathTime = GET_TIMESTAMP() - engine->m.beforeIgnitionMath;
} }
if (eventIndex == 0) { if (eventIndex == 0) {
engine->beforeIgnitionSch = GET_TIMESTAMP(); engine->m.beforeIgnitionSch = GET_TIMESTAMP();
/** /**
* TODO: warning. there is a bit of a hack here, todo: improve. * TODO: warning. there is a bit of a hack here, todo: improve.
* currently output signals/times signalTimerUp from the previous revolutions could be * currently output signals/times signalTimerUp from the previous revolutions could be
@ -372,7 +375,19 @@ void mainTriggerCallback(trigger_event_e ckpSignalType, uint32_t eventIndex DECL
} }
initializeIgnitionActions(engine->advance, engine->dwellAngle, initializeIgnitionActions(engine->advance, engine->dwellAngle,
&engine->engineConfiguration2->ignitionEvents[revolutionIndex] PASS_ENGINE_PARAMETER); &engine->engineConfiguration2->ignitionEvents[revolutionIndex] PASS_ENGINE_PARAMETER);
engine->ignitionSchTime = GET_TIMESTAMP() - engine->beforeIgnitionSch; engine->m.ignitionSchTime = GET_TIMESTAMP() - engine->m.beforeIgnitionSch;
engine->m.beforeInjectonSch = GET_TIMESTAMP();
if(isCrankingR(rpm)) {
ENGINE(engineConfiguration2)->crankingInjectionEvents.addFuelEvents(
&crankingInjectonSignals,
engineConfiguration->crankingInjectionMode PASS_ENGINE_PARAMETER);
} else {
ENGINE(engineConfiguration2)->injectionEvents.addFuelEvents(&runningInjectonSignals,
engineConfiguration->injectionMode PASS_ENGINE_PARAMETER);
}
engine->m.injectonSchTime = GET_TIMESTAMP() - engine->m.beforeInjectonSch;
} }
// triggerEventsQueue.executeAll(getCrankEventCounter()); // triggerEventsQueue.executeAll(getCrankEventCounter());

View File

@ -265,8 +265,11 @@ void triggerInfo(Engine *engine) {
#endif #endif
#if EFI_PROD_CODE #if EFI_PROD_CODE
scheduleMsg(logger, "sn=%s ignitionMathTime=%d schTime=%d triggerMaxDuration=%d", scheduleMsg(logger, "sn=%s ignitionMathTime=%d schTime=%d injectonSchTime=%d triggerMaxDuration=%d",
boolToString(ts->isSynchronizationNeeded), engine->ignitionMathTime, engine->ignitionSchTime, boolToString(ts->isSynchronizationNeeded),
engine->m.ignitionMathTime,
engine->m.ignitionSchTime,
engine->m.injectonSchTime,
triggerMaxDuration); triggerMaxDuration);
triggerMaxDuration = 0; triggerMaxDuration = 0;