auto-sync

This commit is contained in:
rusEfi 2015-02-12 11:09:11 -06:00
parent 15d09b0c85
commit cee0d25516
5 changed files with 22 additions and 9 deletions

View File

@ -122,10 +122,14 @@ public:
/**
* pre-calculated offset for given sequence index within engine cycle
* not cylinder ID
* (not cylinder ID)
* todo: better name?
*/
float angleExtra[IGNITION_PIN_COUNT];
angle_t angleExtra[IGNITION_PIN_COUNT];
/**
* pre-calculated reference to which output pin should be used for
* given sequence index within engine cycle
*/
NamedOutputPin *ignitionPin[IGNITION_PIN_COUNT];
void onTriggerEvent(uint64_t nowNt);

View File

@ -102,7 +102,7 @@ void initializeIgnitionActions(angle_t advance, angle_t dwellAngle,
list->reset();
for (int i = 0; i < CONFIG(specs.cylindersCount); i++) {
float localAdvance = advance + ENGINE(angleExtra[i]);
angle_t localAdvance = advance + ENGINE(angleExtra[i]);
NamedOutputPin *output = ENGINE(ignitionPin[i]);
IgnitionEvent *event = list->add();
@ -145,7 +145,6 @@ void FuelSchedule::registerInjectionEvent(OutputSignalList *sourceList, NamedOut
}
FuelSchedule::FuelSchedule() {
clear();
}
void FuelSchedule::clear() {
@ -153,6 +152,7 @@ void FuelSchedule::clear() {
}
void FuelSchedule::addFuelEvents(OutputSignalList *sourceList, injection_mode_e mode DECLARE_ENGINE_PARAMETER_S) {
clear(); // this method is relatively heavy
sourceList->reset();
events.reset();

View File

@ -278,7 +278,7 @@ void showMainHistogram(void) {
#endif
}
static void doSomeCalc(int rpm DECLARE_ENGINE_PARAMETER_S) {
static void ignitionCalc(int rpm DECLARE_ENGINE_PARAMETER_S) {
/**
* Within one engine cycle all cylinders are fired with same timing advance.
* todo: one day we can control cylinders individually?
@ -340,7 +340,7 @@ void mainTriggerCallback(trigger_event_e ckpSignalType, uint32_t eventIndex DECL
if (eventIndex == engineConfiguration->ignMathCalculateAtIndex) {
engine->beforeIgnitionMath = GET_TIMESTAMP();
doSomeCalc(rpm PASS_ENGINE_PARAMETER);
ignitionCalc(rpm PASS_ENGINE_PARAMETER);
engine->ignitionMathTime = GET_TIMESTAMP() - engine->beforeIgnitionMath;
}

View File

@ -52,7 +52,7 @@ public:
* that's the angle distance from trigger event #0 and actual engine TDC
* see also globalTriggerAngleOffset
*/
float tdcPosition;
angle_t tdcPosition;
/**
* Should we use falls or rises for gap ratio detection?

View File

@ -49,6 +49,14 @@ public class TestingUtils {
}
static void assertWave(String msg, WaveChart chart, String key, double width, double... expectedAngles) {
assertWave(true, msg, chart, key, width, expectedAngles);
}
static void assertWaveFall(String msg, WaveChart chart, String key, double width, double... expectedAngles) {
assertWave(false, msg, chart, key, width, expectedAngles);
}
static void assertWave(boolean rise, String msg, WaveChart chart, String key, double width, double... expectedAngles) {
RevolutionLog revolutionLog = chart.getRevolutionsLog();
if (revolutionLog.keySet().isEmpty())
throw new IllegalStateException(msg + " Empty revolutions in " + chart);
@ -58,8 +66,9 @@ public class TestingUtils {
List<WaveReport.UpDown> wr = WaveReport.parse(events.toString());
assertTrue(msg + " waves for " + key, !wr.isEmpty());
for (WaveReport.UpDown ud : wr) {
double angleByTime = revolutionLog.getCrankAngleByTime(ud.upTime);
assertCloseEnough(msg + " angle for " + key + "@" + ud.upTime, angleByTime, expectedAngles);
int eventTime = rise ? ud.upTime : ud.downTime;
double angleByTime = revolutionLog.getCrankAngleByTime(eventTime);
assertCloseEnough(msg + " angle for " + key + "@" + eventTime, angleByTime, expectedAngles);
assertCloseEnough(msg + "width for " + key, ud.getDutyCycle(revolutionLog), width);
}