mirror of https://github.com/rusefi/rusefi.git
auto-sync
This commit is contained in:
parent
1fab4489ba
commit
ac5d6dc0ca
|
@ -18,6 +18,10 @@
|
||||||
#include "table_helper.h"
|
#include "table_helper.h"
|
||||||
#include "listener_array.h"
|
#include "listener_array.h"
|
||||||
|
|
||||||
|
#define OUTPUT_SIGNAL_MAX_SIZE 45
|
||||||
|
|
||||||
|
typedef ArrayList<OutputSignal, OUTPUT_SIGNAL_MAX_SIZE> OutputSignalList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class knows about when to inject fuel
|
* This class knows about when to inject fuel
|
||||||
*/
|
*/
|
||||||
|
@ -29,7 +33,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* this method schedules all fuel events for an engine cycle
|
* this method schedules all fuel events for an engine cycle
|
||||||
*/
|
*/
|
||||||
void addFuelEvents(injection_mode_e mode DECLARE_ENGINE_PARAMETER_S);
|
void addFuelEvents(OutputSignalList *sourceList, injection_mode_e mode DECLARE_ENGINE_PARAMETER_S);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is a performance optimization for https://sourceforge.net/p/rusefi/tickets/64/
|
* This is a performance optimization for https://sourceforge.net/p/rusefi/tickets/64/
|
||||||
|
@ -38,7 +42,7 @@ public:
|
||||||
uint8_t hasEvents[PWM_PHASE_MAX_COUNT];
|
uint8_t hasEvents[PWM_PHASE_MAX_COUNT];
|
||||||
private:
|
private:
|
||||||
void clear();
|
void clear();
|
||||||
void registerInjectionEvent(NamedOutputPin *output, float angle, bool_t isSimultanious DECLARE_ENGINE_PARAMETER_S);
|
void registerInjectionEvent(OutputSignalList *sourceList, NamedOutputPin *output, float angle, bool_t isSimultanious DECLARE_ENGINE_PARAMETER_S);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -92,7 +92,8 @@ void setSingleCoilDwell(engine_configuration_s *engineConfiguration) {
|
||||||
}
|
}
|
||||||
|
|
||||||
#if EFI_ENGINE_CONTROL || defined(__DOXYGEN__)
|
#if EFI_ENGINE_CONTROL || defined(__DOXYGEN__)
|
||||||
OutputSignalList injectonSignals CCM_OPTIONAL;
|
OutputSignalList runningInjectonSignals CCM_OPTIONAL;
|
||||||
|
OutputSignalList crankingInjectonSignals CCM_OPTIONAL;
|
||||||
|
|
||||||
void initializeIgnitionActions(angle_t advance, angle_t dwellAngle,
|
void initializeIgnitionActions(angle_t advance, angle_t dwellAngle,
|
||||||
IgnitionEventList *list DECLARE_ENGINE_PARAMETER_S) {
|
IgnitionEventList *list DECLARE_ENGINE_PARAMETER_S) {
|
||||||
|
@ -117,7 +118,7 @@ void initializeIgnitionActions(angle_t advance, angle_t dwellAngle,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FuelSchedule::registerInjectionEvent(NamedOutputPin *output, float angle,
|
void FuelSchedule::registerInjectionEvent(OutputSignalList *sourceList, NamedOutputPin *output, float angle,
|
||||||
bool_t isSimultanious DECLARE_ENGINE_PARAMETER_S) {
|
bool_t isSimultanious DECLARE_ENGINE_PARAMETER_S) {
|
||||||
if (!isSimultanious && !isPinAssigned(output)) {
|
if (!isSimultanious && !isPinAssigned(output)) {
|
||||||
// todo: extact method for this index math
|
// todo: extact method for this index math
|
||||||
|
@ -130,7 +131,7 @@ void FuelSchedule::registerInjectionEvent(NamedOutputPin *output, float angle,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
OutputSignal *actuator = injectonSignals.add();
|
OutputSignal *actuator = sourceList->add();
|
||||||
actuator->output = output;
|
actuator->output = output;
|
||||||
|
|
||||||
ev->isSimultanious = isSimultanious;
|
ev->isSimultanious = isSimultanious;
|
||||||
|
@ -151,7 +152,7 @@ void FuelSchedule::clear() {
|
||||||
memset(hasEvents, 0, sizeof(hasEvents));
|
memset(hasEvents, 0, sizeof(hasEvents));
|
||||||
}
|
}
|
||||||
|
|
||||||
void FuelSchedule::addFuelEvents(injection_mode_e mode DECLARE_ENGINE_PARAMETER_S) {
|
void FuelSchedule::addFuelEvents(OutputSignalList *sourceList, injection_mode_e mode DECLARE_ENGINE_PARAMETER_S) {
|
||||||
ActuatorEventList *list = &events;
|
ActuatorEventList *list = &events;
|
||||||
;
|
;
|
||||||
list->reset();
|
list->reset();
|
||||||
|
@ -164,7 +165,7 @@ void FuelSchedule::addFuelEvents(injection_mode_e mode DECLARE_ENGINE_PARAMETER_
|
||||||
int index = getCylinderId(engineConfiguration->specs.firingOrder, i) - 1;
|
int index = getCylinderId(engineConfiguration->specs.firingOrder, i) - 1;
|
||||||
float angle = baseAngle
|
float angle = baseAngle
|
||||||
+ (float) engineConfiguration->engineCycle * i / engineConfiguration->specs.cylindersCount;
|
+ (float) engineConfiguration->engineCycle * i / engineConfiguration->specs.cylindersCount;
|
||||||
registerInjectionEvent(&enginePins.injectors[index], angle, false PASS_ENGINE_PARAMETER);
|
registerInjectionEvent(sourceList, &enginePins.injectors[index], angle, false PASS_ENGINE_PARAMETER);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case IM_SIMULTANEOUS:
|
case IM_SIMULTANEOUS:
|
||||||
|
@ -176,7 +177,7 @@ void FuelSchedule::addFuelEvents(injection_mode_e mode DECLARE_ENGINE_PARAMETER_
|
||||||
* We do not need injector pin here because we will control all injectors
|
* We do not need injector pin here because we will control all injectors
|
||||||
* simultaniously
|
* simultaniously
|
||||||
*/
|
*/
|
||||||
registerInjectionEvent(NULL, angle, true PASS_ENGINE_PARAMETER);
|
registerInjectionEvent(sourceList, NULL, angle, true PASS_ENGINE_PARAMETER);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case IM_BATCH:
|
case IM_BATCH:
|
||||||
|
@ -184,7 +185,7 @@ void FuelSchedule::addFuelEvents(injection_mode_e mode DECLARE_ENGINE_PARAMETER_
|
||||||
int index = i % (engineConfiguration->specs.cylindersCount / 2);
|
int index = i % (engineConfiguration->specs.cylindersCount / 2);
|
||||||
float angle = baseAngle
|
float angle = baseAngle
|
||||||
+ i * (float) engineConfiguration->engineCycle / engineConfiguration->specs.cylindersCount;
|
+ i * (float) engineConfiguration->engineCycle / engineConfiguration->specs.cylindersCount;
|
||||||
registerInjectionEvent(&enginePins.injectors[index], angle, false PASS_ENGINE_PARAMETER);
|
registerInjectionEvent(sourceList, &enginePins.injectors[index], angle, false PASS_ENGINE_PARAMETER);
|
||||||
|
|
||||||
if (engineConfiguration->twoWireBatch) {
|
if (engineConfiguration->twoWireBatch) {
|
||||||
|
|
||||||
|
@ -192,7 +193,7 @@ void FuelSchedule::addFuelEvents(injection_mode_e mode DECLARE_ENGINE_PARAMETER_
|
||||||
* also fire the 2nd half of the injectors so that we can implement a batch mode on individual wires
|
* also fire the 2nd half of the injectors so that we can implement a batch mode on individual wires
|
||||||
*/
|
*/
|
||||||
index = index + (engineConfiguration->specs.cylindersCount / 2);
|
index = index + (engineConfiguration->specs.cylindersCount / 2);
|
||||||
registerInjectionEvent(&enginePins.injectors[index], angle, false PASS_ENGINE_PARAMETER);
|
registerInjectionEvent(sourceList, &enginePins.injectors[index], angle, false PASS_ENGINE_PARAMETER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -341,8 +342,10 @@ void prepareOutputSignals(DECLARE_ENGINE_PARAMETER_F) {
|
||||||
|
|
||||||
injectonSignals.reset();
|
injectonSignals.reset();
|
||||||
engineConfiguration2->crankingInjectionEvents.addFuelEvents(
|
engineConfiguration2->crankingInjectionEvents.addFuelEvents(
|
||||||
|
&crankingInjectonSignals,
|
||||||
engineConfiguration->crankingInjectionMode PASS_ENGINE_PARAMETER);
|
engineConfiguration->crankingInjectionMode PASS_ENGINE_PARAMETER);
|
||||||
engineConfiguration2->injectionEvents.addFuelEvents(engineConfiguration->injectionMode PASS_ENGINE_PARAMETER);
|
engineConfiguration2->injectionEvents.addFuelEvents(&runningInjectonSignals,
|
||||||
|
engineConfiguration->injectionMode PASS_ENGINE_PARAMETER);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -14,10 +14,6 @@
|
||||||
#include "table_helper.h"
|
#include "table_helper.h"
|
||||||
#include "engine.h"
|
#include "engine.h"
|
||||||
|
|
||||||
#define OUTPUT_SIGNAL_MAX_SIZE 90
|
|
||||||
|
|
||||||
typedef ArrayList<OutputSignal, OUTPUT_SIGNAL_MAX_SIZE> OutputSignalList;
|
|
||||||
|
|
||||||
void findTriggerPosition(
|
void findTriggerPosition(
|
||||||
event_trigger_position_s *position, angle_t angleOffset DECLARE_ENGINE_PARAMETER_S);
|
event_trigger_position_s *position, angle_t angleOffset DECLARE_ENGINE_PARAMETER_S);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue